Thread (9 messages) 9 messages, 2 authors, 2012-10-18

Re: [PATCH 2/2] input: qt2160: Add support for LEDs.

From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date: 2012-10-16 15:53:26

Hi Javier,

On Tuesday, October 16, 2012 05:19:31 PM Javier Martin wrote:
quoted hunk ↗ jump to hunk
Outputs x8..x0 of the qt2160 can have leds attached to it.
This patch handles those outputs using EV_LED events.

Signed-off-by: Javier Martin <redacted>
---
 drivers/input/keyboard/qt2160.c |   38
++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+)
diff --git a/drivers/input/keyboard/qt2160.c
b/drivers/input/keyboard/qt2160.c index 73ea4b0..7070372 100644
--- a/drivers/input/keyboard/qt2160.c
+++ b/drivers/input/keyboard/qt2160.c
@@ -39,6 +39,7 @@
 #define QT2160_CMD_GPIOS      6
 #define QT2160_CMD_SUBVER     7
 #define QT2160_CMD_CALIBRATE  10
+#define QT2160_CMD_LEDS       70

 #define QT2160_CYCLE_INTERVAL	(2*HZ)
@@ -217,6 +218,30 @@ static int __devinit qt2160_write(struct i2c_client
*client, u8 reg, u8 data) return ret;
 }

+static int qt2160_event(struct input_dev *dev,
+			unsigned int type, unsigned int code, int value)
+{
+	struct qt2160_data *qt2160 = input_get_drvdata(dev);
+	struct i2c_client *client = qt2160->client;
+	u32 val;
+
+	switch (type) {
+	case EV_LED:
+		val = qt2160_read(qt2160->client, QT2160_CMD_LEDS);
+		if (value)
+			val |= (1 << code);
+		else
+			val &= ~(1 << code);
So qt2160 happens to use the same encoding as Linux and the leds
have the same purpose? Or maybe LED subsystem should be used to
register general-purpose leds?
+		qt2160_write(qt2160->client, QT2160_CMD_LEDS, val);
I do not think this will work as qt2160_event() runs under a spinlock
with interrupts off, and qt2160_read() and qt2160_write() do I2C IO
and thus may sleep.

Also qt2160_write is marked __devinit and so may not be available to
qt2160_event.

How was this tested?

Thanks.

-- 
Dmitry
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help