Commit a7153258 authored by Jiri Kosina's avatar Jiri Kosina

Merge branches 'upstream' and 'upstream-fixes' into for-linus

parents ae5e49c7 0fbf8ed9
...@@ -435,6 +435,11 @@ static int magicmouse_input_mapping(struct hid_device *hdev, ...@@ -435,6 +435,11 @@ static int magicmouse_input_mapping(struct hid_device *hdev,
if (!msc->input) if (!msc->input)
msc->input = hi->input; msc->input = hi->input;
/* Magic Trackpad does not give relative data after switching to MT */
if (hi->input->id.product == USB_DEVICE_ID_APPLE_MAGICTRACKPAD &&
field->flags & HID_MAIN_ITEM_RELATIVE)
return -1;
return 0; return 0;
} }
......
...@@ -90,6 +90,10 @@ static int mosart_input_mapping(struct hid_device *hdev, struct hid_input *hi, ...@@ -90,6 +90,10 @@ static int mosart_input_mapping(struct hid_device *hdev, struct hid_input *hi,
case 0xff000000: case 0xff000000:
/* ignore HID features */ /* ignore HID features */
return -1; return -1;
case HID_UP_BUTTON:
/* ignore buttons */
return -1;
} }
return 0; return 0;
...@@ -230,6 +234,19 @@ static int mosart_probe(struct hid_device *hdev, const struct hid_device_id *id) ...@@ -230,6 +234,19 @@ static int mosart_probe(struct hid_device *hdev, const struct hid_device_id *id)
return ret; return ret;
} }
#ifdef CONFIG_PM
static int mosart_reset_resume(struct hid_device *hdev)
{
struct hid_report_enum *re = hdev->report_enum
+ HID_FEATURE_REPORT;
struct hid_report *r = re->report_id_hash[7];
r->field[0]->value[0] = 0x02;
usbhid_submit_report(hdev, r, USB_DIR_OUT);
return 0;
}
#endif
static void mosart_remove(struct hid_device *hdev) static void mosart_remove(struct hid_device *hdev)
{ {
hid_hw_stop(hdev); hid_hw_stop(hdev);
...@@ -258,6 +275,9 @@ static struct hid_driver mosart_driver = { ...@@ -258,6 +275,9 @@ static struct hid_driver mosart_driver = {
.input_mapped = mosart_input_mapped, .input_mapped = mosart_input_mapped,
.usage_table = mosart_grabbed_usages, .usage_table = mosart_grabbed_usages,
.event = mosart_event, .event = mosart_event,
#ifdef CONFIG_PM
.reset_resume = mosart_reset_resume,
#endif
}; };
static int __init mosart_init(void) static int __init mosart_init(void)
......
...@@ -1544,7 +1544,7 @@ static ssize_t picolcd_debug_eeprom_read(struct file *f, char __user *u, ...@@ -1544,7 +1544,7 @@ static ssize_t picolcd_debug_eeprom_read(struct file *f, char __user *u,
/* prepare buffer with info about what we want to read (addr & len) */ /* prepare buffer with info about what we want to read (addr & len) */
raw_data[0] = *off & 0xff; raw_data[0] = *off & 0xff;
raw_data[1] = (*off >> 8) && 0xff; raw_data[1] = (*off >> 8) & 0xff;
raw_data[2] = s < 20 ? s : 20; raw_data[2] = s < 20 ? s : 20;
if (*off + raw_data[2] > 0xff) if (*off + raw_data[2] > 0xff)
raw_data[2] = 0x100 - *off; raw_data[2] = 0x100 - *off;
...@@ -1583,7 +1583,7 @@ static ssize_t picolcd_debug_eeprom_write(struct file *f, const char __user *u, ...@@ -1583,7 +1583,7 @@ static ssize_t picolcd_debug_eeprom_write(struct file *f, const char __user *u,
memset(raw_data, 0, sizeof(raw_data)); memset(raw_data, 0, sizeof(raw_data));
raw_data[0] = *off & 0xff; raw_data[0] = *off & 0xff;
raw_data[1] = (*off >> 8) && 0xff; raw_data[1] = (*off >> 8) & 0xff;
raw_data[2] = s < 20 ? s : 20; raw_data[2] = s < 20 ? s : 20;
if (*off + raw_data[2] > 0xff) if (*off + raw_data[2] > 0xff)
raw_data[2] = 0x100 - *off; raw_data[2] = 0x100 - *off;
...@@ -1867,6 +1867,7 @@ static void picolcd_debug_out_report(struct picolcd_data *data, ...@@ -1867,6 +1867,7 @@ static void picolcd_debug_out_report(struct picolcd_data *data,
report->id, raw_size); report->id, raw_size);
hid_debug_event(hdev, buff); hid_debug_event(hdev, buff);
if (raw_size + 5 > sizeof(raw_data)) { if (raw_size + 5 > sizeof(raw_data)) {
kfree(buff);
hid_debug_event(hdev, " TOO BIG\n"); hid_debug_event(hdev, " TOO BIG\n");
return; return;
} else { } else {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment