Thread (24 messages) 24 messages, 9 authors, 2010-03-03

Re: [PATCH 1/3] picolcd: driver for PicoLCD HID device

From: Oliver Neukum <oliver@neukum.org>
Date: 2010-02-24 18:28:17
Also in: linux-input, lkml

Am Mittwoch, 24. Februar 2010 17:00:49 schrieb Bruno Prémont:
+static int picolcd_raw_event(struct hid_device *hdev,
+               struct hid_report *report, u8 *raw_data, int size)
+{
+       struct picolcd_data *data = hid_get_drvdata(hdev);
+       char hexdata[25];
+       int i;
+
+       if (data = NULL)
+               return 1;
+
+       for (i = 0; i < sizeof(hexdata) / 2; i++)
+               sprintf(hexdata+2*i, "%02hhx", raw_data[i]);
+       if (size >= sizeof(hexdata)/2) {
+               hexdata[sizeof(hexdata)-4] = '.';
+               hexdata[sizeof(hexdata)-3] = '.';
+               hexdata[sizeof(hexdata)-2] = '.';
+               hexdata[sizeof(hexdata)-1] = '\0';
+       } else
+               hexdata[size*2] = '\0';
+
+       switch (report->id) {
+       case REPORT_KEYPAD:
+               if (size = 3 && raw_data[0] = 0x11 && data->input_keys) {
+                       return picolcd_raw_keypad(hdev, report, raw_data+1, size-1);
+               } else {
+                       dbg_hid(PICOLCD_NAME " unsupported key event (%d bytes): 0x%s\n", size, hexdata);
+                       break;
+               }
+               break;
+       case REPORT_VERSION:
+               if (size = 3)
+                       dev_info(&hdev->dev, "Firmware version is %hd.%hd\n", raw_data[1], raw_data[2]);
+
+               spin_lock(&data->lock);
If I recall correctly raw_event is called in interrupt. As you take a spinlock here,
the lock in code not called in interrupt must disable interrupts, or you may
deadlock.

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