diff options
Diffstat (limited to 'target/linux/generic/backport-5.10/843-v5.15-leds-pca955x-let-the-core-process-the-fwnode.patch')
-rw-r--r-- | target/linux/generic/backport-5.10/843-v5.15-leds-pca955x-let-the-core-process-the-fwnode.patch | 136 |
1 files changed, 0 insertions, 136 deletions
diff --git a/target/linux/generic/backport-5.10/843-v5.15-leds-pca955x-let-the-core-process-the-fwnode.patch b/target/linux/generic/backport-5.10/843-v5.15-leds-pca955x-let-the-core-process-the-fwnode.patch deleted file mode 100644 index 11311b8b2b..0000000000 --- a/target/linux/generic/backport-5.10/843-v5.15-leds-pca955x-let-the-core-process-the-fwnode.patch +++ /dev/null @@ -1,136 +0,0 @@ -From 7c4815929276b2e223eb6f2e49afe5071d4294a5 Mon Sep 17 00:00:00 2001 -From: Eddie James <eajames@linux.ibm.com> -Date: Fri, 16 Jul 2021 17:03:30 -0500 -Subject: [PATCH] leds: pca955x: Let the core process the fwnode - -Much of the fwnode processing in the PCA955x driver is now in the -LEDs core driver, so pass the fwnode in the init data when -registering the LED device. In order to preserve the existing naming -scheme, check for an empty name and set it to the LED number. - -Signed-off-by: Eddie James <eajames@linux.ibm.com> -Signed-off-by: Pavel Machek <pavel@ucw.cz> ---- - drivers/leds/leds-pca955x.c | 58 +++++++++++++++++++------------------ - 1 file changed, 30 insertions(+), 28 deletions(-) - ---- a/drivers/leds/leds-pca955x.c -+++ b/drivers/leds/leds-pca955x.c -@@ -127,10 +127,9 @@ struct pca955x_led { - struct pca955x *pca955x; - struct led_classdev led_cdev; - int led_num; /* 0 .. 15 potentially */ -- char name[32]; - u32 type; - int default_state; -- const char *default_trigger; -+ struct fwnode_handle *fwnode; - }; - - struct pca955x_platform_data { -@@ -439,7 +438,6 @@ pca955x_get_pdata(struct i2c_client *cli - return ERR_PTR(-ENOMEM); - - device_for_each_child_node(&client->dev, child) { -- const char *name; - const char *state; - u32 reg; - int res; -@@ -448,17 +446,10 @@ pca955x_get_pdata(struct i2c_client *cli - if ((res != 0) || (reg >= chip->bits)) - continue; - -- res = fwnode_property_read_string(child, "label", &name); -- if ((res != 0) && is_of_node(child)) -- name = to_of_node(child)->name; -- - led = &pdata->leds[reg]; -- snprintf(led->name, sizeof(led->name), "%s", name); -- - led->type = PCA955X_TYPE_LED; -+ led->fwnode = child; - fwnode_property_read_u32(child, "type", &led->type); -- fwnode_property_read_string(child, "linux,default-trigger", -- &led->default_trigger); - - if (!fwnode_property_read_string(child, "default-state", - &state)) { -@@ -495,11 +486,14 @@ static int pca955x_probe(struct i2c_clie - struct pca955x_led *pca955x_led; - struct pca955x_chipdef *chip; - struct led_classdev *led; -+ struct led_init_data init_data; - struct i2c_adapter *adapter; - int i, err; - struct pca955x_platform_data *pdata; - int ngpios = 0; -+ bool set_default_label = false; - bool keep_pwm = false; -+ char default_label[8]; - - chip = &pca955x_chipdefs[id->driver_data]; - adapter = client->adapter; -@@ -547,6 +541,9 @@ static int pca955x_probe(struct i2c_clie - pca955x->client = client; - pca955x->chipdef = chip; - -+ init_data.devname_mandatory = false; -+ init_data.devicename = "pca955x"; -+ - for (i = 0; i < chip->bits; i++) { - pca955x_led = &pca955x->leds[i]; - pca955x_led->led_num = i; -@@ -560,23 +557,7 @@ static int pca955x_probe(struct i2c_clie - ngpios++; - break; - case PCA955X_TYPE_LED: -- /* -- * Platform data can specify LED names and -- * default triggers -- */ -- if (pdata->leds[i].name[0] == '\0') -- snprintf(pdata->leds[i].name, -- sizeof(pdata->leds[i].name), "%d", i); -- -- snprintf(pca955x_led->name, sizeof(pca955x_led->name), -- "pca955x:%s", pdata->leds[i].name); -- - led = &pca955x_led->led_cdev; -- if (pdata->leds[i].default_trigger) -- led->default_trigger = -- pdata->leds[i].default_trigger; -- -- led->name = pca955x_led->name; - led->brightness_set_blocking = pca955x_led_set; - led->brightness_get = pca955x_led_get; - -@@ -592,7 +573,28 @@ static int pca955x_probe(struct i2c_clie - return err; - } - -- err = devm_led_classdev_register(&client->dev, led); -+ init_data.fwnode = pdata->leds[i].fwnode; -+ -+ if (is_of_node(init_data.fwnode)) { -+ if (to_of_node(init_data.fwnode)->name[0] == -+ '\0') -+ set_default_label = true; -+ else -+ set_default_label = false; -+ } else { -+ set_default_label = true; -+ } -+ -+ if (set_default_label) { -+ snprintf(default_label, sizeof(default_label), -+ "%d", i); -+ init_data.default_label = default_label; -+ } else { -+ init_data.default_label = NULL; -+ } -+ -+ err = devm_led_classdev_register_ext(&client->dev, led, -+ &init_data); - if (err) - return err; - |