Skip to content

Commit 310d265

Browse files
geo-starklag-linaro
authored andcommitted
leds: nic78bx: Use devm API to cleanup module's resources
In this driver LEDs are registered using devm_led_classdev_register() so they are automatically unregistered after module's remove() is done. led_classdev_unregister() calls module's led_set_brightness() to turn off the LEDs and that callback uses resources which were destroyed already in module's remove() so use devm API instead of remove(). Signed-off-by: George Stark <[email protected]> Reviewed-by: Andy Shevchenko <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Lee Jones <[email protected]>
1 parent c230c03 commit 310d265

File tree

1 file changed

+13
-10
lines changed

1 file changed

+13
-10
lines changed

drivers/leds/leds-nic78bx.c

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,15 @@ static struct nic78bx_led nic78bx_leds[] = {
118118
}
119119
};
120120

121+
static void lock_led_reg_action(void *data)
122+
{
123+
struct nic78bx_led_data *led_data = data;
124+
125+
/* Lock LED register */
126+
outb(NIC78BX_LOCK_VALUE,
127+
led_data->io_base + NIC78BX_LOCK_REG_OFFSET);
128+
}
129+
121130
static int nic78bx_probe(struct platform_device *pdev)
122131
{
123132
struct device *dev = &pdev->dev;
@@ -152,6 +161,10 @@ static int nic78bx_probe(struct platform_device *pdev)
152161
led_data->io_base = io_rc->start;
153162
spin_lock_init(&led_data->lock);
154163

164+
ret = devm_add_action(dev, lock_led_reg_action, led_data);
165+
if (ret)
166+
return ret;
167+
155168
for (i = 0; i < ARRAY_SIZE(nic78bx_leds); i++) {
156169
nic78bx_leds[i].data = led_data;
157170

@@ -167,15 +180,6 @@ static int nic78bx_probe(struct platform_device *pdev)
167180
return ret;
168181
}
169182

170-
static void nic78bx_remove(struct platform_device *pdev)
171-
{
172-
struct nic78bx_led_data *led_data = platform_get_drvdata(pdev);
173-
174-
/* Lock LED register */
175-
outb(NIC78BX_LOCK_VALUE,
176-
led_data->io_base + NIC78BX_LOCK_REG_OFFSET);
177-
}
178-
179183
static const struct acpi_device_id led_device_ids[] = {
180184
{"NIC78B3", 0},
181185
{"", 0},
@@ -184,7 +188,6 @@ MODULE_DEVICE_TABLE(acpi, led_device_ids);
184188

185189
static struct platform_driver led_driver = {
186190
.probe = nic78bx_probe,
187-
.remove_new = nic78bx_remove,
188191
.driver = {
189192
.name = KBUILD_MODNAME,
190193
.acpi_match_table = ACPI_PTR(led_device_ids),

0 commit comments

Comments
 (0)