]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
leds: leds-lp55xx: Generalize firmware_loaded function
authorChristian Marangi <ansuelsmth@gmail.com>
Wed, 26 Jun 2024 16:00:14 +0000 (18:00 +0200)
committerLee Jones <lee@kernel.org>
Wed, 26 Jun 2024 16:08:31 +0000 (17:08 +0100)
Generalize firmware_loaded function as lp55xx based LED driver all share
the same logic.

Suggested-by: Lee Jones <lee@kernel.org>
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Link: https://lore.kernel.org/r/20240626160027.19703-10-ansuelsmth@gmail.com
Signed-off-by: Lee Jones <lee@kernel.org>
drivers/leds/leds-lp5521.c
drivers/leds/leds-lp5523.c
drivers/leds/leds-lp5562.c
drivers/leds/leds-lp55xx-common.c
drivers/leds/leds-lp55xx-common.h
drivers/leds/leds-lp8501.c

index 7ea3e5715f597ab1ffd7d19f900d94564b280bf1..722b5cd9236ee76cee99dd114b24d5aa75b55aee 100644 (file)
@@ -146,26 +146,6 @@ static void lp5521_run_engine(struct lp55xx_chip *chip, bool start)
                lp5521_wait_enable_done();
 }
 
-static void lp5521_firmware_loaded(struct lp55xx_chip *chip)
-{
-       const struct firmware *fw = chip->fw;
-
-       if (fw->size > LP5521_PROGRAM_LENGTH) {
-               dev_err(&chip->cl->dev, "firmware data size overflow: %zu\n",
-                       fw->size);
-               return;
-       }
-
-       /*
-        * Program memory sequence
-        *  1) set engine mode to "LOAD"
-        *  2) write firmware data into program memory
-        */
-
-       lp55xx_load_engine(chip);
-       lp55xx_update_program_memory(chip, fw->data, fw->size);
-}
-
 static int lp5521_post_init_device(struct lp55xx_chip *chip)
 {
        int ret;
@@ -413,7 +393,7 @@ static struct lp55xx_device_config lp5521_cfg = {
        .brightness_fn      = lp5521_led_brightness,
        .multicolor_brightness_fn = lp5521_multicolor_brightness,
        .set_led_current    = lp5521_set_led_current,
-       .firmware_cb        = lp5521_firmware_loaded,
+       .firmware_cb        = lp55xx_firmware_loaded_cb,
        .run_engine         = lp5521_run_engine,
        .dev_attr_group     = &lp5521_group,
 };
index 395c57330484097b80f46bac88ba81fe1c4a47c9..5525d60c342c8d5cdd51a027110ff2484067f13a 100644 (file)
@@ -254,26 +254,6 @@ out:
        return ret;
 }
 
-static void lp5523_firmware_loaded(struct lp55xx_chip *chip)
-{
-       const struct firmware *fw = chip->fw;
-
-       if (fw->size > LP5523_PROGRAM_LENGTH) {
-               dev_err(&chip->cl->dev, "firmware data size overflow: %zu\n",
-                       fw->size);
-               return;
-       }
-
-       /*
-        * Program memory sequence
-        *  1) set engine mode to "LOAD"
-        *  2) write firmware data into program memory
-        */
-
-       lp55xx_load_engine(chip);
-       lp55xx_update_program_memory(chip, fw->data, fw->size);
-}
-
 static ssize_t show_engine_mode(struct device *dev,
                                struct device_attribute *attr,
                                char *buf, int nr)
@@ -785,7 +765,7 @@ static struct lp55xx_device_config lp5523_cfg = {
        .brightness_fn      = lp5523_led_brightness,
        .multicolor_brightness_fn = lp5523_multicolor_brightness,
        .set_led_current    = lp5523_set_led_current,
-       .firmware_cb        = lp5523_firmware_loaded,
+       .firmware_cb        = lp55xx_firmware_loaded_cb,
        .run_engine         = lp5523_run_engine,
        .dev_attr_group     = &lp5523_group,
 };
index 7f3733fc446eacc68ffb32ddd32f3956d12f55a3..e50b68c9ccf347882bdd8dc29d66e2715c2edccc 100644 (file)
@@ -144,30 +144,6 @@ static void lp5562_run_engine(struct lp55xx_chip *chip, bool start)
                lp5562_wait_enable_done();
 }
 
-static void lp5562_firmware_loaded(struct lp55xx_chip *chip)
-{
-       const struct firmware *fw = chip->fw;
-
-       /*
-        * the firmware is encoded in ascii hex character, with 2 chars
-        * per byte
-        */
-       if (fw->size > (LP5562_PROGRAM_LENGTH * 2)) {
-               dev_err(&chip->cl->dev, "firmware data size overflow: %zu\n",
-                       fw->size);
-               return;
-       }
-
-       /*
-        * Program memory sequence
-        *  1) set engine mode to "LOAD"
-        *  2) write firmware data into program memory
-        */
-
-       lp55xx_load_engine(chip);
-       lp55xx_update_program_memory(chip, fw->data, fw->size);
-}
-
 static int lp5562_post_init_device(struct lp55xx_chip *chip)
 {
        int ret;
@@ -404,7 +380,7 @@ static struct lp55xx_device_config lp5562_cfg = {
        .set_led_current    = lp5562_set_led_current,
        .brightness_fn      = lp5562_led_brightness,
        .run_engine         = lp5562_run_engine,
-       .firmware_cb        = lp5562_firmware_loaded,
+       .firmware_cb        = lp55xx_firmware_loaded_cb,
        .dev_attr_group     = &lp5562_group,
 };
 
index 8c20d7b4bc82c1bd97be36dd243db413cff54b0c..1c9348ed3edc176da5bb7e0c198d9698bce95734 100644 (file)
@@ -217,6 +217,31 @@ err:
 }
 EXPORT_SYMBOL_GPL(lp55xx_update_program_memory);
 
+void lp55xx_firmware_loaded_cb(struct lp55xx_chip *chip)
+{
+       const struct firmware *fw = chip->fw;
+
+       /*
+        * the firmware is encoded in ascii hex character, with 2 chars
+        * per byte
+        */
+       if (fw->size > LP55xx_PROGRAM_LENGTH * 2) {
+               dev_err(&chip->cl->dev, "firmware data size overflow: %zu\n",
+                       fw->size);
+               return;
+       }
+
+       /*
+        * Program memory sequence
+        *  1) set engine mode to "LOAD"
+        *  2) write firmware data into program memory
+        */
+
+       lp55xx_load_engine(chip);
+       lp55xx_update_program_memory(chip, fw->data, fw->size);
+}
+EXPORT_SYMBOL_GPL(lp55xx_firmware_loaded_cb);
+
 static void lp55xx_reset_device(struct lp55xx_chip *chip)
 {
        const struct lp55xx_device_config *cfg = chip->cfg;
index f0bbd41fdab3b90ea15155bb17c755b9def492d2..cbc122c568282ee0a348e82ec1c9a08578a256ad 100644 (file)
@@ -212,6 +212,7 @@ extern void lp55xx_load_engine(struct lp55xx_chip *chip);
 extern int lp55xx_run_engine_common(struct lp55xx_chip *chip);
 extern int lp55xx_update_program_memory(struct lp55xx_chip *chip,
                                        const u8 *data, size_t size);
+extern void lp55xx_firmware_loaded_cb(struct lp55xx_chip *chip);
 
 /* common probe/remove function */
 extern int lp55xx_probe(struct i2c_client *client);
index d4094d20bdc16800a516c19e2e63870b8168c65a..1ea7bb73cd224590fc59e10711b90809c0ddf453 100644 (file)
@@ -137,26 +137,6 @@ static void lp8501_run_engine(struct lp55xx_chip *chip, bool start)
        lp55xx_run_engine_common(chip);
 }
 
-static void lp8501_firmware_loaded(struct lp55xx_chip *chip)
-{
-       const struct firmware *fw = chip->fw;
-
-       if (fw->size > LP8501_PROGRAM_LENGTH) {
-               dev_err(&chip->cl->dev, "firmware data size overflow: %zu\n",
-                       fw->size);
-               return;
-       }
-
-       /*
-        * Program memory sequence
-        *  1) set engine mode to "LOAD"
-        *  2) write firmware data into program memory
-        */
-
-       lp55xx_load_engine(chip);
-       lp55xx_update_program_memory(chip, fw->data, fw->size);
-}
-
 static int lp8501_led_brightness(struct lp55xx_led *led)
 {
        struct lp55xx_chip *chip = led->chip;
@@ -198,7 +178,7 @@ static struct lp55xx_device_config lp8501_cfg = {
        .post_init_device   = lp8501_post_init_device,
        .brightness_fn      = lp8501_led_brightness,
        .set_led_current    = lp8501_set_led_current,
-       .firmware_cb        = lp8501_firmware_loaded,
+       .firmware_cb        = lp55xx_firmware_loaded_cb,
        .run_engine         = lp8501_run_engine,
 };