Re: [PATCH 2/4] input: misc: gp2a: Add support for light sensor
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date: 2019-01-26 01:18:06
Also in:
linux-devicetree, lkml
On Fri, Jan 25, 2019 at 06:50:43PM +0100, Paweł Chmiel wrote:
quoted hunk ↗ jump to hunk
From: Jonathan Bakker <redacted> The gp2a driver previously only supported the proximity part of the sensor while the hardware supports both. Signed-off-by: Jonathan Bakker <redacted> Signed-off-by: Paweł Chmiel <redacted> --- 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