Skip to content

Commit b873f73

Browse files
committed
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/[email protected] Signed-off-by: Dmitry Torokhov <[email protected]>
1 parent 493a6eb commit b873f73

File tree

2 files changed

+44
-112
lines changed

2 files changed

+44
-112
lines changed

drivers/input/misc/Kconfig

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,6 @@ config INPUT_ATMEL_CAPTOUCH
100100
config INPUT_BMA150
101101
tristate "BMA150/SMB380 acceleration sensor support"
102102
depends on I2C
103-
select INPUT_POLLDEV
104103
help
105104
Say Y here if you have Bosch Sensortec's BMA150 or SMB380
106105
acceleration sensor hooked to an I2C bus.

drivers/input/misc/bma150.c

Lines changed: 44 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
#include <linux/module.h>
1515
#include <linux/i2c.h>
1616
#include <linux/input.h>
17-
#include <linux/input-polldev.h>
1817
#include <linux/interrupt.h>
1918
#include <linux/delay.h>
2019
#include <linux/slab.h>
@@ -123,7 +122,6 @@
123122

124123
struct bma150_data {
125124
struct i2c_client *client;
126-
struct input_polled_dev *input_polled;
127125
struct input_dev *input;
128126
u8 mode;
129127
};
@@ -336,13 +334,16 @@ static irqreturn_t bma150_irq_thread(int irq, void *dev)
336334
return IRQ_HANDLED;
337335
}
338336

339-
static void bma150_poll(struct input_polled_dev *dev)
337+
static void bma150_poll(struct input_dev *input)
340338
{
341-
bma150_report_xyz(dev->private);
339+
struct bma150_data *bma150 = input_get_drvdata(input);
340+
341+
bma150_report_xyz(bma150);
342342
}
343343

344-
static int bma150_open(struct bma150_data *bma150)
344+
static int bma150_open(struct input_dev *input)
345345
{
346+
struct bma150_data *bma150 = input_get_drvdata(input);
346347
int error;
347348

348349
error = pm_runtime_get_sync(&bma150->client->dev);
@@ -362,44 +363,18 @@ static int bma150_open(struct bma150_data *bma150)
362363
return 0;
363364
}
364365

365-
static void bma150_close(struct bma150_data *bma150)
366+
static void bma150_close(struct input_dev *input)
366367
{
368+
struct bma150_data *bma150 = input_get_drvdata(input);
369+
367370
pm_runtime_put_sync(&bma150->client->dev);
368371

369372
if (bma150->mode != BMA150_MODE_SLEEP)
370373
bma150_set_mode(bma150, BMA150_MODE_SLEEP);
371374
}
372375

373-
static int bma150_irq_open(struct input_dev *input)
374-
{
375-
struct bma150_data *bma150 = input_get_drvdata(input);
376-
377-
return bma150_open(bma150);
378-
}
379-
380-
static void bma150_irq_close(struct input_dev *input)
381-
{
382-
struct bma150_data *bma150 = input_get_drvdata(input);
383-
384-
bma150_close(bma150);
385-
}
386-
387-
static void bma150_poll_open(struct input_polled_dev *ipoll_dev)
388-
{
389-
struct bma150_data *bma150 = ipoll_dev->private;
390-
391-
bma150_open(bma150);
392-
}
393-
394-
static void bma150_poll_close(struct input_polled_dev *ipoll_dev)
395-
{
396-
struct bma150_data *bma150 = ipoll_dev->private;
397-
398-
bma150_close(bma150);
399-
}
400-
401376
static int bma150_initialize(struct bma150_data *bma150,
402-
const struct bma150_cfg *cfg)
377+
const struct bma150_cfg *cfg)
403378
{
404379
int error;
405380

@@ -439,78 +414,14 @@ static int bma150_initialize(struct bma150_data *bma150,
439414
return bma150_set_mode(bma150, BMA150_MODE_SLEEP);
440415
}
441416

442-
static void bma150_init_input_device(struct input_dev *idev)
443-
{
444-
idev->name = BMA150_DRIVER;
445-
idev->phys = BMA150_DRIVER "/input0";
446-
idev->id.bustype = BUS_I2C;
447-
448-
idev->evbit[0] = BIT_MASK(EV_ABS);
449-
input_set_abs_params(idev, ABS_X, ABSMIN_ACC_VAL, ABSMAX_ACC_VAL, 0, 0);
450-
input_set_abs_params(idev, ABS_Y, ABSMIN_ACC_VAL, ABSMAX_ACC_VAL, 0, 0);
451-
input_set_abs_params(idev, ABS_Z, ABSMIN_ACC_VAL, ABSMAX_ACC_VAL, 0, 0);
452-
}
453-
454-
static int bma150_register_input_device(struct bma150_data *bma150)
455-
{
456-
struct input_dev *idev;
457-
int error;
458-
459-
idev = devm_input_allocate_device(&bma150->client->dev);
460-
if (!idev)
461-
return -ENOMEM;
462-
463-
bma150_init_input_device(idev);
464-
465-
idev->open = bma150_irq_open;
466-
idev->close = bma150_irq_close;
467-
input_set_drvdata(idev, bma150);
468-
469-
bma150->input = idev;
470-
471-
error = input_register_device(idev);
472-
if (error)
473-
return error;
474-
475-
return 0;
476-
}
477-
478-
static int bma150_register_polled_device(struct bma150_data *bma150)
479-
{
480-
struct input_polled_dev *ipoll_dev;
481-
int error;
482-
483-
ipoll_dev = devm_input_allocate_polled_device(&bma150->client->dev);
484-
if (!ipoll_dev)
485-
return -ENOMEM;
486-
487-
ipoll_dev->private = bma150;
488-
ipoll_dev->open = bma150_poll_open;
489-
ipoll_dev->close = bma150_poll_close;
490-
ipoll_dev->poll = bma150_poll;
491-
ipoll_dev->poll_interval = BMA150_POLL_INTERVAL;
492-
ipoll_dev->poll_interval_min = BMA150_POLL_MIN;
493-
ipoll_dev->poll_interval_max = BMA150_POLL_MAX;
494-
495-
bma150_init_input_device(ipoll_dev->input);
496-
497-
bma150->input_polled = ipoll_dev;
498-
bma150->input = ipoll_dev->input;
499-
500-
error = input_register_polled_device(ipoll_dev);
501-
if (error)
502-
return error;
503-
504-
return 0;
505-
}
506-
507417
static int bma150_probe(struct i2c_client *client,
508-
const struct i2c_device_id *id)
418+
const struct i2c_device_id *id)
509419
{
510420
const struct bma150_platform_data *pdata =
511421
dev_get_platdata(&client->dev);
512422
const struct bma150_cfg *cfg;
513423
struct bma150_data *bma150;
424+
struct input_dev *idev;
514425
int chip_id;
515426
int error;
516427

@@ -550,11 +461,39 @@ static int bma150_probe(struct i2c_client *client,
550461
if (error)
551462
return error;
552463

553-
if (client->irq > 0) {
554-
error = bma150_register_input_device(bma150);
464+
idev = devm_input_allocate_device(&bma150->client->dev);
465+
if (!idev)
466+
return -ENOMEM;
467+
468+
input_set_drvdata(idev, bma150);
469+
bma150->input = idev;
470+
471+
idev->name = BMA150_DRIVER;
472+
idev->phys = BMA150_DRIVER "/input0";
473+
idev->id.bustype = BUS_I2C;
474+
475+
idev->open = bma150_open;
476+
idev->close = bma150_close;
477+
478+
input_set_abs_params(idev, ABS_X, ABSMIN_ACC_VAL, ABSMAX_ACC_VAL, 0, 0);
479+
input_set_abs_params(idev, ABS_Y, ABSMIN_ACC_VAL, ABSMAX_ACC_VAL, 0, 0);
480+
input_set_abs_params(idev, ABS_Z, ABSMIN_ACC_VAL, ABSMAX_ACC_VAL, 0, 0);
481+
482+
if (client->irq <= 0) {
483+
error = input_setup_polling(idev, bma150_poll);
555484
if (error)
556485
return error;
557486

487+
input_set_poll_interval(idev, BMA150_POLL_INTERVAL);
488+
input_set_min_poll_interval(idev, BMA150_POLL_MIN);
489+
input_set_max_poll_interval(idev, BMA150_POLL_MAX);
490+
}
491+
492+
error = input_register_device(idev);
493+
if (error)
494+
return error;
495+
496+
if (client->irq > 0) {
558497
error = devm_request_threaded_irq(&client->dev, client->irq,
559498
NULL, bma150_irq_thread,
560499
IRQF_TRIGGER_RISING | IRQF_ONESHOT,
@@ -565,10 +504,6 @@ static int bma150_probe(struct i2c_client *client,
565504
client->irq, error);
566505
return error;
567506
}
568-
} else {
569-
error = bma150_register_polled_device(bma150);
570-
if (error)
571-
return error;
572507
}
573508

574509
i2c_set_clientdata(client, bma150);
@@ -585,23 +520,21 @@ static int bma150_remove(struct i2c_client *client)
585520
return 0;
586521
}
587522

588-
#ifdef CONFIG_PM
589-
static int bma150_suspend(struct device *dev)
523+
static int __maybe_unused bma150_suspend(struct device *dev)
590524
{
591525
struct i2c_client *client = to_i2c_client(dev);
592526
struct bma150_data *bma150 = i2c_get_clientdata(client);
593527

594528
return bma150_set_mode(bma150, BMA150_MODE_SLEEP);
595529
}
596530

597-
static int bma150_resume(struct device *dev)
531+
static int __maybe_unused bma150_resume(struct device *dev)
598532
{
599533
struct i2c_client *client = to_i2c_client(dev);
600534
struct bma150_data *bma150 = i2c_get_clientdata(client);
601535

602536
return bma150_set_mode(bma150, BMA150_MODE_NORMAL);
603537
}
604-
#endif
605538

606539
static UNIVERSAL_DEV_PM_OPS(bma150_pm, bma150_suspend, bma150_resume, NULL);
607540

0 commit comments

Comments
 (0)