On Fri, Jan 25, 2019 at 06:50:43PM +0100, Paweł Chmiel wrote: > From: Jonathan Bakker <xc-racer2@xxxxxxx> > > The gp2a driver previously only supported the proximity part of the > sensor while the hardware supports both. > > Signed-off-by: Jonathan Bakker <xc-racer2@xxxxxxx> > Signed-off-by: Paweł Chmiel <pawel.mikolaj.chmiel@xxxxxxxxx> > --- > drivers/input/misc/Kconfig | 2 + > drivers/input/misc/gp2ap002a00f.c | 71 +++++++++++++++++++++++++++++- > include/linux/input/gp2ap002a00f.h | 4 ++ > 3 files changed, 76 insertions(+), 1 deletion(-) > > diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig > index ca59a2be9bc5..a532efb4e6d8 100644 > --- a/drivers/input/misc/Kconfig > +++ b/drivers/input/misc/Kconfig > @@ -252,6 +252,8 @@ config INPUT_GP2A > tristate "Sharp GP2AP002A00F I2C Proximity/Opto sensor driver" > depends on I2C > depends on GPIOLIB || COMPILE_TEST > + depends on IIO > + select INPUT_POLLDEV > help > Say Y here if you have a Sharp GP2AP002A00F proximity/als combo-chip > hooked to an I2C bus. > diff --git a/drivers/input/misc/gp2ap002a00f.c b/drivers/input/misc/gp2ap002a00f.c > index 79c8c4c56d1a..090c8c313295 100644 > --- a/drivers/input/misc/gp2ap002a00f.c > +++ b/drivers/input/misc/gp2ap002a00f.c > @@ -10,9 +10,12 @@ > */ > > #include <linux/i2c.h> > +#include <linux/iio/consumer.h> > +#include <linux/iio/iio.h> > #include <linux/irq.h> > #include <linux/slab.h> > #include <linux/input.h> > +#include <linux/input-polldev.h> > #include <linux/module.h> > #include <linux/interrupt.h> > #include <linux/gpio.h> > @@ -20,7 +23,9 @@ > #include <linux/input/gp2ap002a00f.h> > > struct gp2a_data { > + struct iio_channel *channel; > struct input_dev *input; > + struct input_polled_dev *poll_dev; > const struct gp2a_platform_data *pdata; > struct i2c_client *i2c_client; > }; > @@ -58,6 +63,19 @@ static irqreturn_t gp2a_irq(int irq, void *handle) > return IRQ_HANDLED; > } > > +static void gp2a_poll(struct input_polled_dev *dev) > +{ > + struct gp2a_data *dt = dev->private; > + int ret, value; > + > + ret = iio_read_channel_processed(dt->channel, &value); > + if (ret < 0) > + dev_err(&dt->i2c_client->dev, "failed to read value!"); > + > + input_report_abs(dev->input, ABS_MISC, value); > + input_sync(dev->input); No, light sensor is not an input device, keep it in IIO please. -- Dmitry