Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid

Pull HID fixes from Jiri Kosina:

- memory leak fix for Wacom driver (Ping Cheng)

- various trivial small fixes, cleanups and device ID additions

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid:
HID: logitech-hidpp: Add product ID for MX Ergo in Bluetooth mode
HID: Ignore battery for Elan touchscreen on ASUS UX550
HID: logitech-dj: add the G602 receiver
HID: wiimote: remove h from printk format specifier
HID: uclogic: remove h from printk format specifier
HID: sony: select CONFIG_CRC32
HID: sfh: fix address space confusion
HID: multitouch: Enable multi-input for Synaptics pointstick/touchpad device
HID: wacom: Fix memory leakage caused by kfifo_alloc

+55 -12
+1
drivers/hid/Kconfig
··· 899 899 depends on NEW_LEDS 900 900 depends on LEDS_CLASS 901 901 select POWER_SUPPLY 902 + select CRC32 902 903 help 903 904 Support for 904 905
+4 -4
drivers/hid/amd-sfh-hid/amd_sfh_client.c
··· 154 154 155 155 for (i = 0; i < cl_data->num_hid_devices; i++) { 156 156 cl_data->sensor_virt_addr[i] = dma_alloc_coherent(dev, sizeof(int) * 8, 157 - &cl_data->sensor_phys_addr[i], 157 + &cl_data->sensor_dma_addr[i], 158 158 GFP_KERNEL); 159 159 cl_data->sensor_sts[i] = 0; 160 160 cl_data->sensor_requested_cnt[i] = 0; ··· 187 187 } 188 188 info.period = msecs_to_jiffies(AMD_SFH_IDLE_LOOP); 189 189 info.sensor_idx = cl_idx; 190 - info.phys_address = cl_data->sensor_phys_addr[i]; 190 + info.dma_address = cl_data->sensor_dma_addr[i]; 191 191 192 192 cl_data->report_descr[i] = kzalloc(cl_data->report_descr_sz[i], GFP_KERNEL); 193 193 if (!cl_data->report_descr[i]) { ··· 212 212 if (cl_data->sensor_virt_addr[i]) { 213 213 dma_free_coherent(&privdata->pdev->dev, 8 * sizeof(int), 214 214 cl_data->sensor_virt_addr[i], 215 - cl_data->sensor_phys_addr[i]); 215 + cl_data->sensor_dma_addr[i]); 216 216 } 217 217 kfree(cl_data->feature_report[i]); 218 218 kfree(cl_data->input_report[i]); ··· 238 238 if (cl_data->sensor_virt_addr[i]) { 239 239 dma_free_coherent(&privdata->pdev->dev, 8 * sizeof(int), 240 240 cl_data->sensor_virt_addr[i], 241 - cl_data->sensor_phys_addr[i]); 241 + cl_data->sensor_dma_addr[i]); 242 242 } 243 243 } 244 244 kfree(cl_data);
+1 -1
drivers/hid/amd-sfh-hid/amd_sfh_hid.h
··· 27 27 int hid_descr_size[MAX_HID_DEVICES]; 28 28 phys_addr_t phys_addr_base; 29 29 u32 *sensor_virt_addr[MAX_HID_DEVICES]; 30 - phys_addr_t sensor_phys_addr[MAX_HID_DEVICES]; 30 + dma_addr_t sensor_dma_addr[MAX_HID_DEVICES]; 31 31 u32 sensor_sts[MAX_HID_DEVICES]; 32 32 u32 sensor_requested_cnt[MAX_HID_DEVICES]; 33 33 u8 report_type[MAX_HID_DEVICES];
+1 -1
drivers/hid/amd-sfh-hid/amd_sfh_pcie.c
··· 41 41 cmd_param.s.buf_layout = 1; 42 42 cmd_param.s.buf_length = 16; 43 43 44 - writeq(info.phys_address, privdata->mmio + AMD_C2P_MSG2); 44 + writeq(info.dma_address, privdata->mmio + AMD_C2P_MSG2); 45 45 writel(cmd_param.ul, privdata->mmio + AMD_C2P_MSG1); 46 46 writel(cmd_base.ul, privdata->mmio + AMD_C2P_MSG0); 47 47 }
+1 -1
drivers/hid/amd-sfh-hid/amd_sfh_pcie.h
··· 67 67 struct amd_mp2_sensor_info { 68 68 u8 sensor_idx; 69 69 u32 period; 70 - phys_addr_t phys_address; 70 + dma_addr_t dma_address; 71 71 }; 72 72 73 73 void amd_start_sensor(struct amd_mp2_dev *privdata, struct amd_mp2_sensor_info info);
+1
drivers/hid/hid-ids.h
··· 389 389 #define USB_DEVICE_ID_TOSHIBA_CLICK_L9W 0x0401 390 390 #define USB_DEVICE_ID_HP_X2 0x074d 391 391 #define USB_DEVICE_ID_HP_X2_10_COVER 0x0755 392 + #define USB_DEVICE_ID_ASUS_UX550_TOUCHSCREEN 0x2706 392 393 393 394 #define USB_VENDOR_ID_ELECOM 0x056e 394 395 #define USB_DEVICE_ID_ELECOM_BM084 0x0061
+2
drivers/hid/hid-input.c
··· 322 322 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 323 323 USB_DEVICE_ID_LOGITECH_DINOVO_EDGE_KBD), 324 324 HID_BATTERY_QUIRK_IGNORE }, 325 + { HID_USB_DEVICE(USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ASUS_UX550_TOUCHSCREEN), 326 + HID_BATTERY_QUIRK_IGNORE }, 325 327 {} 326 328 }; 327 329
+4
drivers/hid/hid-logitech-dj.c
··· 1869 1869 HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, 1870 1870 0xc531), 1871 1871 .driver_data = recvr_type_gaming_hidpp}, 1872 + { /* Logitech G602 receiver (0xc537) */ 1873 + HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, 1874 + 0xc537), 1875 + .driver_data = recvr_type_gaming_hidpp}, 1872 1876 { /* Logitech lightspeed receiver (0xc539) */ 1873 1877 HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, 1874 1878 USB_DEVICE_ID_LOGITECH_NANO_RECEIVER_LIGHTSPEED_1),
+2
drivers/hid/hid-logitech-hidpp.c
··· 4053 4053 { /* MX Master mouse over Bluetooth */ 4054 4054 HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb012), 4055 4055 .driver_data = HIDPP_QUIRK_HI_RES_SCROLL_X2121 }, 4056 + { /* MX Ergo trackball over Bluetooth */ 4057 + HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb01d) }, 4056 4058 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb01e), 4057 4059 .driver_data = HIDPP_QUIRK_HI_RES_SCROLL_X2121 }, 4058 4060 { /* MX Master 3 mouse over Bluetooth */
+4
drivers/hid/hid-multitouch.c
··· 2054 2054 HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8, 2055 2055 USB_VENDOR_ID_SYNAPTICS, 0xce08) }, 2056 2056 2057 + { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT, 2058 + HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8, 2059 + USB_VENDOR_ID_SYNAPTICS, 0xce09) }, 2060 + 2057 2061 /* TopSeed panels */ 2058 2062 { .driver_data = MT_CLS_TOPSEED, 2059 2063 MT_USB_DEVICE(USB_VENDOR_ID_TOPSEED2,
+1 -1
drivers/hid/hid-uclogic-params.c
··· 90 90 goto cleanup; 91 91 } else if (rc < 0) { 92 92 hid_err(hdev, 93 - "failed retrieving string descriptor #%hhu: %d\n", 93 + "failed retrieving string descriptor #%u: %d\n", 94 94 idx, rc); 95 95 goto cleanup; 96 96 }
+1 -1
drivers/hid/hid-wiimote-core.c
··· 1482 1482 wdata->state.cmd_err = err; 1483 1483 wiimote_cmd_complete(wdata); 1484 1484 } else if (err) { 1485 - hid_warn(wdata->hdev, "Remote error %hhu on req %hhu\n", err, 1485 + hid_warn(wdata->hdev, "Remote error %u on req %u\n", err, 1486 1486 cmd); 1487 1487 } 1488 1488 }
+32 -3
drivers/hid/wacom_sys.c
··· 1270 1270 group); 1271 1271 } 1272 1272 1273 + static void wacom_devm_kfifo_release(struct device *dev, void *res) 1274 + { 1275 + struct kfifo_rec_ptr_2 *devres = res; 1276 + 1277 + kfifo_free(devres); 1278 + } 1279 + 1280 + static int wacom_devm_kfifo_alloc(struct wacom *wacom) 1281 + { 1282 + struct wacom_wac *wacom_wac = &wacom->wacom_wac; 1283 + struct kfifo_rec_ptr_2 *pen_fifo = &wacom_wac->pen_fifo; 1284 + int error; 1285 + 1286 + pen_fifo = devres_alloc(wacom_devm_kfifo_release, 1287 + sizeof(struct kfifo_rec_ptr_2), 1288 + GFP_KERNEL); 1289 + 1290 + if (!pen_fifo) 1291 + return -ENOMEM; 1292 + 1293 + error = kfifo_alloc(pen_fifo, WACOM_PKGLEN_MAX, GFP_KERNEL); 1294 + if (error) { 1295 + devres_free(pen_fifo); 1296 + return error; 1297 + } 1298 + 1299 + devres_add(&wacom->hdev->dev, pen_fifo); 1300 + 1301 + return 0; 1302 + } 1303 + 1273 1304 enum led_brightness wacom_leds_brightness_get(struct wacom_led *led) 1274 1305 { 1275 1306 struct wacom *wacom = led->wacom; ··· 2755 2724 if (features->check_for_hid_type && features->hid_type != hdev->type) 2756 2725 return -ENODEV; 2757 2726 2758 - error = kfifo_alloc(&wacom_wac->pen_fifo, WACOM_PKGLEN_MAX, GFP_KERNEL); 2727 + error = wacom_devm_kfifo_alloc(wacom); 2759 2728 if (error) 2760 2729 return error; 2761 2730 ··· 2817 2786 2818 2787 if (wacom->wacom_wac.features.type != REMOTE) 2819 2788 wacom_release_resources(wacom); 2820 - 2821 - kfifo_free(&wacom_wac->pen_fifo); 2822 2789 } 2823 2790 2824 2791 #ifdef CONFIG_PM