|
@@ -187,12 +187,26 @@ static void lp5523_load_engine_and_select_page(struct lp55xx_chip *chip)
|
|
|
lp55xx_write(chip, LP5523_REG_PROG_PAGE_SEL, page_sel[idx]);
|
|
|
}
|
|
|
|
|
|
-static void lp5523_stop_engine(struct lp55xx_chip *chip)
|
|
|
+static void lp5523_stop_all_engines(struct lp55xx_chip *chip)
|
|
|
{
|
|
|
lp55xx_write(chip, LP5523_REG_OP_MODE, 0);
|
|
|
lp5523_wait_opmode_done();
|
|
|
}
|
|
|
|
|
|
+static void lp5523_stop_engine(struct lp55xx_chip *chip)
|
|
|
+{
|
|
|
+ enum lp55xx_engine_index idx = chip->engine_idx;
|
|
|
+ u8 mask[] = {
|
|
|
+ [LP55XX_ENGINE_1] = LP5523_MODE_ENG1_M,
|
|
|
+ [LP55XX_ENGINE_2] = LP5523_MODE_ENG2_M,
|
|
|
+ [LP55XX_ENGINE_3] = LP5523_MODE_ENG3_M,
|
|
|
+ };
|
|
|
+
|
|
|
+ lp55xx_update_bits(chip, LP5523_REG_OP_MODE, mask[idx], 0);
|
|
|
+
|
|
|
+ lp5523_wait_opmode_done();
|
|
|
+}
|
|
|
+
|
|
|
static void lp5523_turn_off_channels(struct lp55xx_chip *chip)
|
|
|
{
|
|
|
int i;
|
|
@@ -303,7 +317,7 @@ static int lp5523_init_program_engine(struct lp55xx_chip *chip)
|
|
|
}
|
|
|
|
|
|
out:
|
|
|
- lp5523_stop_engine(chip);
|
|
|
+ lp5523_stop_all_engines(chip);
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
@@ -778,7 +792,7 @@ static int lp5523_remove(struct i2c_client *client)
|
|
|
struct lp55xx_led *led = i2c_get_clientdata(client);
|
|
|
struct lp55xx_chip *chip = led->chip;
|
|
|
|
|
|
- lp5523_stop_engine(chip);
|
|
|
+ lp5523_stop_all_engines(chip);
|
|
|
lp55xx_unregister_sysfs(chip);
|
|
|
lp55xx_unregister_leds(led, chip);
|
|
|
lp55xx_deinit_device(chip);
|