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

Input: bma150 - switch to using polled mode of input devices

We have added polled mode to the normal input devices with the intent of
retiring input_polled_dev. This converts bma150 driver to use the polling
mode of standard input devices and removes dependency on INPUT_POLLDEV.

Link: https://lore.kernel.org/r/20191017204217.106453-21-dmitry.torokhov@gmail.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

+44 -112
-1
drivers/input/misc/Kconfig
··· 100 100 config INPUT_BMA150 101 101 tristate "BMA150/SMB380 acceleration sensor support" 102 102 depends on I2C 103 - select INPUT_POLLDEV 104 103 help 105 104 Say Y here if you have Bosch Sensortec's BMA150 or SMB380 106 105 acceleration sensor hooked to an I2C bus.
+44 -111
drivers/input/misc/bma150.c
··· 14 14 #include <linux/module.h> 15 15 #include <linux/i2c.h> 16 16 #include <linux/input.h> 17 - #include <linux/input-polldev.h> 18 17 #include <linux/interrupt.h> 19 18 #include <linux/delay.h> 20 19 #include <linux/slab.h> ··· 122 123 123 124 struct bma150_data { 124 125 struct i2c_client *client; 125 - struct input_polled_dev *input_polled; 126 126 struct input_dev *input; 127 127 u8 mode; 128 128 }; ··· 334 336 return IRQ_HANDLED; 335 337 } 336 338 337 - static void bma150_poll(struct input_polled_dev *dev) 339 + static void bma150_poll(struct input_dev *input) 338 340 { 339 - bma150_report_xyz(dev->private); 341 + struct bma150_data *bma150 = input_get_drvdata(input); 342 + 343 + bma150_report_xyz(bma150); 340 344 } 341 345 342 - static int bma150_open(struct bma150_data *bma150) 346 + static int bma150_open(struct input_dev *input) 343 347 { 348 + struct bma150_data *bma150 = input_get_drvdata(input); 344 349 int error; 345 350 346 351 error = pm_runtime_get_sync(&bma150->client->dev); ··· 363 362 return 0; 364 363 } 365 364 366 - static void bma150_close(struct bma150_data *bma150) 365 + static void bma150_close(struct input_dev *input) 367 366 { 367 + struct bma150_data *bma150 = input_get_drvdata(input); 368 + 368 369 pm_runtime_put_sync(&bma150->client->dev); 369 370 370 371 if (bma150->mode != BMA150_MODE_SLEEP) 371 372 bma150_set_mode(bma150, BMA150_MODE_SLEEP); 372 373 } 373 374 374 - static int bma150_irq_open(struct input_dev *input) 375 - { 376 - struct bma150_data *bma150 = input_get_drvdata(input); 377 - 378 - return bma150_open(bma150); 379 - } 380 - 381 - static void bma150_irq_close(struct input_dev *input) 382 - { 383 - struct bma150_data *bma150 = input_get_drvdata(input); 384 - 385 - bma150_close(bma150); 386 - } 387 - 388 - static void bma150_poll_open(struct input_polled_dev *ipoll_dev) 389 - { 390 - struct bma150_data *bma150 = ipoll_dev->private; 391 - 392 - bma150_open(bma150); 393 - } 394 - 395 - static void bma150_poll_close(struct input_polled_dev *ipoll_dev) 396 - { 397 - struct bma150_data *bma150 = ipoll_dev->private; 398 - 399 - bma150_close(bma150); 400 - } 401 - 402 375 static int bma150_initialize(struct bma150_data *bma150, 403 - const struct bma150_cfg *cfg) 376 + const struct bma150_cfg *cfg) 404 377 { 405 378 int error; 406 379 ··· 414 439 return bma150_set_mode(bma150, BMA150_MODE_SLEEP); 415 440 } 416 441 417 - static void bma150_init_input_device(struct input_dev *idev) 418 - { 419 - idev->name = BMA150_DRIVER; 420 - idev->phys = BMA150_DRIVER "/input0"; 421 - idev->id.bustype = BUS_I2C; 422 - 423 - idev->evbit[0] = BIT_MASK(EV_ABS); 424 - input_set_abs_params(idev, ABS_X, ABSMIN_ACC_VAL, ABSMAX_ACC_VAL, 0, 0); 425 - input_set_abs_params(idev, ABS_Y, ABSMIN_ACC_VAL, ABSMAX_ACC_VAL, 0, 0); 426 - input_set_abs_params(idev, ABS_Z, ABSMIN_ACC_VAL, ABSMAX_ACC_VAL, 0, 0); 427 - } 428 - 429 - static int bma150_register_input_device(struct bma150_data *bma150) 430 - { 431 - struct input_dev *idev; 432 - int error; 433 - 434 - idev = devm_input_allocate_device(&bma150->client->dev); 435 - if (!idev) 436 - return -ENOMEM; 437 - 438 - bma150_init_input_device(idev); 439 - 440 - idev->open = bma150_irq_open; 441 - idev->close = bma150_irq_close; 442 - input_set_drvdata(idev, bma150); 443 - 444 - bma150->input = idev; 445 - 446 - error = input_register_device(idev); 447 - if (error) 448 - return error; 449 - 450 - return 0; 451 - } 452 - 453 - static int bma150_register_polled_device(struct bma150_data *bma150) 454 - { 455 - struct input_polled_dev *ipoll_dev; 456 - int error; 457 - 458 - ipoll_dev = devm_input_allocate_polled_device(&bma150->client->dev); 459 - if (!ipoll_dev) 460 - return -ENOMEM; 461 - 462 - ipoll_dev->private = bma150; 463 - ipoll_dev->open = bma150_poll_open; 464 - ipoll_dev->close = bma150_poll_close; 465 - ipoll_dev->poll = bma150_poll; 466 - ipoll_dev->poll_interval = BMA150_POLL_INTERVAL; 467 - ipoll_dev->poll_interval_min = BMA150_POLL_MIN; 468 - ipoll_dev->poll_interval_max = BMA150_POLL_MAX; 469 - 470 - bma150_init_input_device(ipoll_dev->input); 471 - 472 - bma150->input_polled = ipoll_dev; 473 - bma150->input = ipoll_dev->input; 474 - 475 - error = input_register_polled_device(ipoll_dev); 476 - if (error) 477 - return error; 478 - 479 - return 0; 480 - } 481 - 482 442 static int bma150_probe(struct i2c_client *client, 483 - const struct i2c_device_id *id) 443 + const struct i2c_device_id *id) 484 444 { 485 445 const struct bma150_platform_data *pdata = 486 446 dev_get_platdata(&client->dev); 487 447 const struct bma150_cfg *cfg; 488 448 struct bma150_data *bma150; 449 + struct input_dev *idev; 489 450 int chip_id; 490 451 int error; 491 452 ··· 461 550 if (error) 462 551 return error; 463 552 464 - if (client->irq > 0) { 465 - error = bma150_register_input_device(bma150); 553 + idev = devm_input_allocate_device(&bma150->client->dev); 554 + if (!idev) 555 + return -ENOMEM; 556 + 557 + input_set_drvdata(idev, bma150); 558 + bma150->input = idev; 559 + 560 + idev->name = BMA150_DRIVER; 561 + idev->phys = BMA150_DRIVER "/input0"; 562 + idev->id.bustype = BUS_I2C; 563 + 564 + idev->open = bma150_open; 565 + idev->close = bma150_close; 566 + 567 + input_set_abs_params(idev, ABS_X, ABSMIN_ACC_VAL, ABSMAX_ACC_VAL, 0, 0); 568 + input_set_abs_params(idev, ABS_Y, ABSMIN_ACC_VAL, ABSMAX_ACC_VAL, 0, 0); 569 + input_set_abs_params(idev, ABS_Z, ABSMIN_ACC_VAL, ABSMAX_ACC_VAL, 0, 0); 570 + 571 + if (client->irq <= 0) { 572 + error = input_setup_polling(idev, bma150_poll); 466 573 if (error) 467 574 return error; 468 575 576 + input_set_poll_interval(idev, BMA150_POLL_INTERVAL); 577 + input_set_min_poll_interval(idev, BMA150_POLL_MIN); 578 + input_set_max_poll_interval(idev, BMA150_POLL_MAX); 579 + } 580 + 581 + error = input_register_device(idev); 582 + if (error) 583 + return error; 584 + 585 + if (client->irq > 0) { 469 586 error = devm_request_threaded_irq(&client->dev, client->irq, 470 587 NULL, bma150_irq_thread, 471 588 IRQF_TRIGGER_RISING | IRQF_ONESHOT, ··· 504 565 client->irq, error); 505 566 return error; 506 567 } 507 - } else { 508 - error = bma150_register_polled_device(bma150); 509 - if (error) 510 - return error; 511 568 } 512 569 513 570 i2c_set_clientdata(client, bma150); ··· 520 585 return 0; 521 586 } 522 587 523 - #ifdef CONFIG_PM 524 - static int bma150_suspend(struct device *dev) 588 + static int __maybe_unused bma150_suspend(struct device *dev) 525 589 { 526 590 struct i2c_client *client = to_i2c_client(dev); 527 591 struct bma150_data *bma150 = i2c_get_clientdata(client); ··· 528 594 return bma150_set_mode(bma150, BMA150_MODE_SLEEP); 529 595 } 530 596 531 - static int bma150_resume(struct device *dev) 597 + static int __maybe_unused bma150_resume(struct device *dev) 532 598 { 533 599 struct i2c_client *client = to_i2c_client(dev); 534 600 struct bma150_data *bma150 = i2c_get_clientdata(client); 535 601 536 602 return bma150_set_mode(bma150, BMA150_MODE_NORMAL); 537 603 } 538 - #endif 539 604 540 605 static UNIVERSAL_DEV_PM_OPS(bma150_pm, bma150_suspend, bma150_resume, NULL); 541 606