Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

leds: leds-pca9532 cleanups

- Remove unneeded input_free_device() after input_unregister_device().

- Add pca9532_destroy_devices() function for destroy devices.

Signed-off-by: Axel Lin <axel.lin@gmail.com>
Acked-by: Dmitry Torokhov <dtor@mail.ru>
Cc: Richard Purdie <rpurdie@rpsys.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Axel Lin and committed by
Linus Torvalds
125c7135 2260209c

+28 -38
+28 -38
drivers/leds/leds-pca9532.c
··· 200 200 pca9532_setled(led); 201 201 } 202 202 203 + static void pca9532_destroy_devices(struct pca9532_data *data, int n_devs) 204 + { 205 + int i = n_devs; 206 + 207 + if (!data) 208 + return; 209 + 210 + while (--i >= 0) { 211 + switch (data->leds[i].type) { 212 + case PCA9532_TYPE_NONE: 213 + break; 214 + case PCA9532_TYPE_LED: 215 + led_classdev_unregister(&data->leds[i].ldev); 216 + cancel_work_sync(&data->leds[i].work); 217 + break; 218 + case PCA9532_TYPE_N2100_BEEP: 219 + if (data->idev != NULL) { 220 + input_unregister_device(data->idev); 221 + cancel_work_sync(&data->work); 222 + data->idev = NULL; 223 + } 224 + break; 225 + } 226 + } 227 + } 228 + 203 229 static int pca9532_configure(struct i2c_client *client, 204 230 struct pca9532_data *data, struct pca9532_platform_data *pdata) 205 231 { ··· 300 274 return 0; 301 275 302 276 exit: 303 - if (i > 0) 304 - for (i = i - 1; i >= 0; i--) 305 - switch (data->leds[i].type) { 306 - case PCA9532_TYPE_NONE: 307 - break; 308 - case PCA9532_TYPE_LED: 309 - led_classdev_unregister(&data->leds[i].ldev); 310 - cancel_work_sync(&data->leds[i].work); 311 - break; 312 - case PCA9532_TYPE_N2100_BEEP: 313 - if (data->idev != NULL) { 314 - input_unregister_device(data->idev); 315 - input_free_device(data->idev); 316 - cancel_work_sync(&data->work); 317 - data->idev = NULL; 318 - } 319 - break; 320 - } 321 - 277 + pca9532_destroy_devices(data, i); 322 278 return err; 323 279 } 324 280 ··· 337 329 static int pca9532_remove(struct i2c_client *client) 338 330 { 339 331 struct pca9532_data *data = i2c_get_clientdata(client); 340 - int i; 341 - for (i = 0; i < 16; i++) 342 - switch (data->leds[i].type) { 343 - case PCA9532_TYPE_NONE: 344 - break; 345 - case PCA9532_TYPE_LED: 346 - led_classdev_unregister(&data->leds[i].ldev); 347 - cancel_work_sync(&data->leds[i].work); 348 - break; 349 - case PCA9532_TYPE_N2100_BEEP: 350 - if (data->idev != NULL) { 351 - input_unregister_device(data->idev); 352 - input_free_device(data->idev); 353 - cancel_work_sync(&data->work); 354 - data->idev = NULL; 355 - } 356 - break; 357 - } 358 - 332 + pca9532_destroy_devices(data, 16); 359 333 kfree(data); 360 334 return 0; 361 335 }