aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorJiri Kosina <jkosina@suse.cz>2011-01-07 19:08:19 -0500
committerJiri Kosina <jkosina@suse.cz>2011-01-07 19:08:19 -0500
commita7153258b70ccbe3922fcee9ca4271d4f4c2bc55 (patch)
tree12e17027af36846933908da64a1419491ea58676 /drivers
parentae5e49c79c051ea1d5ca91cbd4a0d22189067ba3 (diff)
parent0fbf8ed976af5bb43cf9cf2492161eb9688fee0c (diff)
Merge branches 'upstream' and 'upstream-fixes' into for-linus
Diffstat (limited to 'drivers')
-rw-r--r--drivers/hid/hid-magicmouse.c5
-rw-r--r--drivers/hid/hid-mosart.c20
-rw-r--r--drivers/hid/hid-picolcd.c5
3 files changed, 28 insertions, 2 deletions
diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c
index 11306b3d9c56..698e6459fd0b 100644
--- a/drivers/hid/hid-magicmouse.c
+++ b/drivers/hid/hid-magicmouse.c
@@ -435,6 +435,11 @@ static int magicmouse_input_mapping(struct hid_device *hdev,
435 if (!msc->input) 435 if (!msc->input)
436 msc->input = hi->input; 436 msc->input = hi->input;
437 437
438 /* Magic Trackpad does not give relative data after switching to MT */
439 if (hi->input->id.product == USB_DEVICE_ID_APPLE_MAGICTRACKPAD &&
440 field->flags & HID_MAIN_ITEM_RELATIVE)
441 return -1;
442
438 return 0; 443 return 0;
439} 444}
440 445
diff --git a/drivers/hid/hid-mosart.c b/drivers/hid/hid-mosart.c
index 0668685380d5..9fb050ce6f04 100644
--- a/drivers/hid/hid-mosart.c
+++ b/drivers/hid/hid-mosart.c
@@ -90,6 +90,10 @@ static int mosart_input_mapping(struct hid_device *hdev, struct hid_input *hi,
90 case 0xff000000: 90 case 0xff000000:
91 /* ignore HID features */ 91 /* ignore HID features */
92 return -1; 92 return -1;
93
94 case HID_UP_BUTTON:
95 /* ignore buttons */
96 return -1;
93 } 97 }
94 98
95 return 0; 99 return 0;
@@ -230,6 +234,19 @@ static int mosart_probe(struct hid_device *hdev, const struct hid_device_id *id)
230 return ret; 234 return ret;
231} 235}
232 236
237#ifdef CONFIG_PM
238static int mosart_reset_resume(struct hid_device *hdev)
239{
240 struct hid_report_enum *re = hdev->report_enum
241 + HID_FEATURE_REPORT;
242 struct hid_report *r = re->report_id_hash[7];
243
244 r->field[0]->value[0] = 0x02;
245 usbhid_submit_report(hdev, r, USB_DIR_OUT);
246 return 0;
247}
248#endif
249
233static void mosart_remove(struct hid_device *hdev) 250static void mosart_remove(struct hid_device *hdev)
234{ 251{
235 hid_hw_stop(hdev); 252 hid_hw_stop(hdev);
@@ -258,6 +275,9 @@ static struct hid_driver mosart_driver = {
258 .input_mapped = mosart_input_mapped, 275 .input_mapped = mosart_input_mapped,
259 .usage_table = mosart_grabbed_usages, 276 .usage_table = mosart_grabbed_usages,
260 .event = mosart_event, 277 .event = mosart_event,
278#ifdef CONFIG_PM
279 .reset_resume = mosart_reset_resume,
280#endif
261}; 281};
262 282
263static int __init mosart_init(void) 283static int __init mosart_init(void)
diff --git a/drivers/hid/hid-picolcd.c b/drivers/hid/hid-picolcd.c
index ed0e066b7f07..de9cf21b3494 100644
--- a/drivers/hid/hid-picolcd.c
+++ b/drivers/hid/hid-picolcd.c
@@ -1544,7 +1544,7 @@ static ssize_t picolcd_debug_eeprom_read(struct file *f, char __user *u,
1544 1544
1545 /* prepare buffer with info about what we want to read (addr & len) */ 1545 /* prepare buffer with info about what we want to read (addr & len) */
1546 raw_data[0] = *off & 0xff; 1546 raw_data[0] = *off & 0xff;
1547 raw_data[1] = (*off >> 8) && 0xff; 1547 raw_data[1] = (*off >> 8) & 0xff;
1548 raw_data[2] = s < 20 ? s : 20; 1548 raw_data[2] = s < 20 ? s : 20;
1549 if (*off + raw_data[2] > 0xff) 1549 if (*off + raw_data[2] > 0xff)
1550 raw_data[2] = 0x100 - *off; 1550 raw_data[2] = 0x100 - *off;
@@ -1583,7 +1583,7 @@ static ssize_t picolcd_debug_eeprom_write(struct file *f, const char __user *u,
1583 1583
1584 memset(raw_data, 0, sizeof(raw_data)); 1584 memset(raw_data, 0, sizeof(raw_data));
1585 raw_data[0] = *off & 0xff; 1585 raw_data[0] = *off & 0xff;
1586 raw_data[1] = (*off >> 8) && 0xff; 1586 raw_data[1] = (*off >> 8) & 0xff;
1587 raw_data[2] = s < 20 ? s : 20; 1587 raw_data[2] = s < 20 ? s : 20;
1588 if (*off + raw_data[2] > 0xff) 1588 if (*off + raw_data[2] > 0xff)
1589 raw_data[2] = 0x100 - *off; 1589 raw_data[2] = 0x100 - *off;
@@ -1867,6 +1867,7 @@ static void picolcd_debug_out_report(struct picolcd_data *data,
1867 report->id, raw_size); 1867 report->id, raw_size);
1868 hid_debug_event(hdev, buff); 1868 hid_debug_event(hdev, buff);
1869 if (raw_size + 5 > sizeof(raw_data)) { 1869 if (raw_size + 5 > sizeof(raw_data)) {
1870 kfree(buff);
1870 hid_debug_event(hdev, " TOO BIG\n"); 1871 hid_debug_event(hdev, " TOO BIG\n");
1871 return; 1872 return;
1872 } else { 1873 } else {