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

Input: qt2160 - convert to use devm_* api

Use devm_* api to simplify code, this makes it unnecessary to explicitly
release resources.

Signed-off-by: Yangtao Li <frank.li@vivo.com>
Link: https://lore.kernel.org/r/20230714080611.81302-7-frank.li@vivo.com
Link: https://lore.kernel.org/r/20230724051345.335219-4-dmitry.torokhov@gmail.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

authored by

Yangtao Li and committed by
Dmitry Torokhov
3e4bb047 d675c9b5

+20 -57
+20 -57
drivers/input/keyboard/qt2160.c
··· 239 239 static int qt2160_register_leds(struct qt2160_data *qt2160) 240 240 { 241 241 struct i2c_client *client = qt2160->client; 242 - int ret; 242 + int error; 243 243 int i; 244 244 245 245 for (i = 0; i < QT2160_NUM_LEDS_X; i++) { ··· 252 252 led->id = i; 253 253 led->qt2160 = qt2160; 254 254 255 - ret = led_classdev_register(&client->dev, &led->cdev); 256 - if (ret < 0) 257 - return ret; 255 + error = devm_led_classdev_register(&client->dev, &led->cdev); 256 + if (error) 257 + return error; 258 258 } 259 259 260 260 /* Tur off LEDs */ ··· 265 265 return 0; 266 266 } 267 267 268 - static void qt2160_unregister_leds(struct qt2160_data *qt2160) 269 - { 270 - int i; 271 - 272 - for (i = 0; i < QT2160_NUM_LEDS_X; i++) 273 - led_classdev_unregister(&qt2160->leds[i].cdev); 274 - } 275 - 276 268 #else 277 269 278 270 static inline int qt2160_register_leds(struct qt2160_data *qt2160) 279 271 { 280 272 return 0; 281 - } 282 - 283 - static inline void qt2160_unregister_leds(struct qt2160_data *qt2160) 284 - { 285 273 } 286 274 287 275 #endif ··· 322 334 return -ENODEV; 323 335 324 336 /* Chip is valid and active. Allocate structure */ 325 - qt2160 = kzalloc(sizeof(struct qt2160_data), GFP_KERNEL); 326 - input = input_allocate_device(); 327 - if (!qt2160 || !input) { 328 - dev_err(&client->dev, "insufficient memory\n"); 329 - error = -ENOMEM; 330 - goto err_free_mem; 331 - } 337 + qt2160 = devm_kzalloc(&client->dev, sizeof(*qt2160), GFP_KERNEL); 338 + if (!qt2160) 339 + return -ENOMEM; 340 + 341 + input = devm_input_allocate_device(&client->dev); 342 + if (!input) 343 + return -ENOMEM; 332 344 333 345 qt2160->client = client; 334 346 qt2160->input = input; ··· 354 366 error = qt2160_write(client, QT2160_CMD_CALIBRATE, 1); 355 367 if (error) { 356 368 dev_err(&client->dev, "failed to calibrate device\n"); 357 - goto err_free_mem; 369 + return error; 358 370 } 359 371 360 372 if (client->irq) { 361 - error = request_threaded_irq(client->irq, NULL, qt2160_irq, 362 - IRQF_ONESHOT, "qt2160", input); 373 + error = devm_request_threaded_irq(&client->dev, client->irq, 374 + NULL, qt2160_irq, 375 + IRQF_ONESHOT, 376 + "qt2160", input); 363 377 if (error) { 364 378 dev_err(&client->dev, 365 379 "failed to allocate irq %d\n", client->irq); 366 - goto err_free_mem; 380 + return error; 367 381 } 368 382 } else { 369 383 error = input_setup_polling(input, qt2160_get_key_matrix); 370 384 if (error) { 371 385 dev_err(&client->dev, "Failed to setup polling\n"); 372 - goto err_free_mem; 386 + return error; 373 387 } 374 388 input_set_poll_interval(input, QT2160_CYCLE_INTERVAL); 375 389 } ··· 379 389 error = qt2160_register_leds(qt2160); 380 390 if (error) { 381 391 dev_err(&client->dev, "Failed to register leds\n"); 382 - goto err_free_irq; 392 + return error; 383 393 } 384 394 385 395 error = input_register_device(qt2160->input); 386 396 if (error) { 387 397 dev_err(&client->dev, 388 398 "Failed to register input device\n"); 389 - goto err_unregister_leds; 399 + return error; 390 400 } 391 401 392 - i2c_set_clientdata(client, qt2160); 393 - 394 402 return 0; 395 - 396 - err_unregister_leds: 397 - qt2160_unregister_leds(qt2160); 398 - err_free_irq: 399 - if (client->irq) 400 - free_irq(client->irq, qt2160); 401 - err_free_mem: 402 - input_free_device(input); 403 - kfree(qt2160); 404 - return error; 405 - } 406 - 407 - static void qt2160_remove(struct i2c_client *client) 408 - { 409 - struct qt2160_data *qt2160 = i2c_get_clientdata(client); 410 - 411 - qt2160_unregister_leds(qt2160); 412 - 413 - /* Release IRQ so no queue will be scheduled */ 414 - if (client->irq) 415 - free_irq(client->irq, qt2160); 416 - 417 - input_unregister_device(qt2160->input); 418 - kfree(qt2160); 419 403 } 420 404 421 405 static const struct i2c_device_id qt2160_idtable[] = { ··· 406 442 407 443 .id_table = qt2160_idtable, 408 444 .probe = qt2160_probe, 409 - .remove = qt2160_remove, 410 445 }; 411 446 412 447 module_i2c_driver(qt2160_driver);