diff options
Diffstat (limited to 'drivers/leds/led-class.c')
-rw-r--r-- | drivers/leds/led-class.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c index 242122f49333..508d6477d0b8 100644 --- a/drivers/leds/led-class.c +++ b/drivers/leds/led-class.c | |||
@@ -254,17 +254,31 @@ int led_classdev_register_ext(struct device *parent, | |||
254 | struct led_classdev *led_cdev, | 254 | struct led_classdev *led_cdev, |
255 | struct led_init_data *init_data) | 255 | struct led_init_data *init_data) |
256 | { | 256 | { |
257 | char name[LED_MAX_NAME_SIZE]; | 257 | char composed_name[LED_MAX_NAME_SIZE]; |
258 | char final_name[LED_MAX_NAME_SIZE]; | ||
259 | const char *proposed_name = composed_name; | ||
258 | int ret; | 260 | int ret; |
259 | 261 | ||
260 | ret = led_classdev_next_name(led_cdev->name, name, sizeof(name)); | 262 | if (init_data) { |
263 | if (init_data->devname_mandatory && !init_data->devicename) { | ||
264 | dev_err(parent, "Mandatory device name is missing"); | ||
265 | return -EINVAL; | ||
266 | } | ||
267 | ret = led_compose_name(parent, init_data, composed_name); | ||
268 | if (ret < 0) | ||
269 | return ret; | ||
270 | } else { | ||
271 | proposed_name = led_cdev->name; | ||
272 | } | ||
273 | |||
274 | ret = led_classdev_next_name(proposed_name, final_name, sizeof(final_name)); | ||
261 | if (ret < 0) | 275 | if (ret < 0) |
262 | return ret; | 276 | return ret; |
263 | 277 | ||
264 | mutex_init(&led_cdev->led_access); | 278 | mutex_init(&led_cdev->led_access); |
265 | mutex_lock(&led_cdev->led_access); | 279 | mutex_lock(&led_cdev->led_access); |
266 | led_cdev->dev = device_create_with_groups(leds_class, parent, 0, | 280 | led_cdev->dev = device_create_with_groups(leds_class, parent, 0, |
267 | led_cdev, led_cdev->groups, "%s", name); | 281 | led_cdev, led_cdev->groups, "%s", final_name); |
268 | if (IS_ERR(led_cdev->dev)) { | 282 | if (IS_ERR(led_cdev->dev)) { |
269 | mutex_unlock(&led_cdev->led_access); | 283 | mutex_unlock(&led_cdev->led_access); |
270 | return PTR_ERR(led_cdev->dev); | 284 | return PTR_ERR(led_cdev->dev); |