diff options
author | Jiri Kosina <jkosina@suse.cz> | 2011-01-07 19:08:19 -0500 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2011-01-07 19:08:19 -0500 |
commit | a7153258b70ccbe3922fcee9ca4271d4f4c2bc55 (patch) | |
tree | 12e17027af36846933908da64a1419491ea58676 | |
parent | ae5e49c79c051ea1d5ca91cbd4a0d22189067ba3 (diff) | |
parent | 0fbf8ed976af5bb43cf9cf2492161eb9688fee0c (diff) |
Merge branches 'upstream' and 'upstream-fixes' into for-linus
-rw-r--r-- | drivers/hid/hid-magicmouse.c | 5 | ||||
-rw-r--r-- | drivers/hid/hid-mosart.c | 20 | ||||
-rw-r--r-- | drivers/hid/hid-picolcd.c | 5 |
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 | ||
238 | static 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 | |||
233 | static void mosart_remove(struct hid_device *hdev) | 250 | static 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 | ||
263 | static int __init mosart_init(void) | 283 | static 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 { |