hid-for-linus-2024101301
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIVAwUAZww7rKZi849r7WBJAQI63g/+MJwCtLFv+kDZtmzrmf3jJKtyzxW5JNh4 ZjfJwp2EGhpbb7ei8PSIyMU2UBXbS285uMz6/LQBE8Y73OuTN90Y5YRHDsxAL3kB 8itEUkA+HmHDmDEUvVa0Xu9MAZRQN8u7uQEwTZ/PeqMEgKr5eVZ1jPw7qupthxO4 5QPVyONYuQv8HutJ+BqeRu33z3c/DX044lDec/V2dHpPJ1oxI59z1dUwEWLLKvNb hgvbbYdzITyR5SiFTZWYES23S+YOU7/yabDmkOcWgTmLNPUfNYUxiyxqIUzvI6tp QU30PAyu5uKuBCDMry/7QNTsOWj7yuOtRMm1BlMwUzEsRYwwXFS64LUJnNY7IcRH siS1tikcrklrRdl8g5VkHRCV0knR7eo58l+luDExDH20xYwI8aa/122aU8uxueAe sct7Aqut2KD/VPOQkqnxUbEJ8x4Rh+jiLI3LwRGgyAmS9xXCu87T2BucyEKTfHYi ZRgwmDJTq5psc77FJybnAsqjChDh3xVK5TPHDWhWdyp5/Yp5u7LHVd2ZVcjbyK7E GcUasyu2PvKlgQMXMVqbEipLEbN9EaztQpb1N+OQnzxVt1yklJcR8taBqsA84jxO Seo1g1c2ttxnOh4AgcndQwgStfvj08YHIjDgNT2vMQ2V1PhxjLo0UzopMODWa77k lp1GNfHWLgk= =HKsr -----END PGP SIGNATURE----- Merge tag 'hid-for-linus-2024101301' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid Pull HID fixes from Jiri Kosina: - fix for memory corruption regression in amd_sfh driver (Basavaraj Natikar) - fix for mis-reporting of BTN_TOOL_PEN and BTN_TOOL_RUBBER for AES sensors tools in Wacom driver (Jason Gerecke) - fix for unitialized variable use in intel-ish-hid driver (SurajSonawane2415) - a few device-specific quirks / device ID additions * tag 'hid-for-linus-2024101301' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid: HID: wacom: Hardcode (non-inverted) AES pens as BTN_TOOL_PEN HID: amd_sfh: Switch to device-managed dmam_alloc_coherent() HID: multitouch: Add quirk for HONOR MagicBook Art 14 touchpad HID: multitouch: Add support for B2402FVA track point HID: plantronics: Workaround for an unexcepted opposite volume key hid: intel-ish-hid: Fix uninitialized variable 'rv' in ish_fw_xfer_direct_dma
This commit is contained in:
commit
6485cf5ea2
@ -236,7 +236,7 @@ int amd_sfh_hid_client_init(struct amd_mp2_dev *privdata)
|
|||||||
cl_data->in_data = in_data;
|
cl_data->in_data = in_data;
|
||||||
|
|
||||||
for (i = 0; i < cl_data->num_hid_devices; i++) {
|
for (i = 0; i < cl_data->num_hid_devices; i++) {
|
||||||
in_data->sensor_virt_addr[i] = dma_alloc_coherent(dev, sizeof(int) * 8,
|
in_data->sensor_virt_addr[i] = dmam_alloc_coherent(dev, sizeof(int) * 8,
|
||||||
&cl_data->sensor_dma_addr[i],
|
&cl_data->sensor_dma_addr[i],
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
if (!in_data->sensor_virt_addr[i]) {
|
if (!in_data->sensor_virt_addr[i]) {
|
||||||
@ -331,7 +331,6 @@ cleanup:
|
|||||||
int amd_sfh_hid_client_deinit(struct amd_mp2_dev *privdata)
|
int amd_sfh_hid_client_deinit(struct amd_mp2_dev *privdata)
|
||||||
{
|
{
|
||||||
struct amdtp_cl_data *cl_data = privdata->cl_data;
|
struct amdtp_cl_data *cl_data = privdata->cl_data;
|
||||||
struct amd_input_data *in_data = cl_data->in_data;
|
|
||||||
int i, status;
|
int i, status;
|
||||||
|
|
||||||
for (i = 0; i < cl_data->num_hid_devices; i++) {
|
for (i = 0; i < cl_data->num_hid_devices; i++) {
|
||||||
@ -351,12 +350,5 @@ int amd_sfh_hid_client_deinit(struct amd_mp2_dev *privdata)
|
|||||||
cancel_delayed_work_sync(&cl_data->work_buffer);
|
cancel_delayed_work_sync(&cl_data->work_buffer);
|
||||||
amdtp_hid_remove(cl_data);
|
amdtp_hid_remove(cl_data);
|
||||||
|
|
||||||
for (i = 0; i < cl_data->num_hid_devices; i++) {
|
|
||||||
if (in_data->sensor_virt_addr[i]) {
|
|
||||||
dma_free_coherent(&privdata->pdev->dev, 8 * sizeof(int),
|
|
||||||
in_data->sensor_virt_addr[i],
|
|
||||||
cl_data->sensor_dma_addr[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1036,6 +1036,8 @@
|
|||||||
#define USB_DEVICE_ID_PLANTRONICS_BLACKWIRE_3220_SERIES 0xc056
|
#define USB_DEVICE_ID_PLANTRONICS_BLACKWIRE_3220_SERIES 0xc056
|
||||||
#define USB_DEVICE_ID_PLANTRONICS_BLACKWIRE_3215_SERIES 0xc057
|
#define USB_DEVICE_ID_PLANTRONICS_BLACKWIRE_3215_SERIES 0xc057
|
||||||
#define USB_DEVICE_ID_PLANTRONICS_BLACKWIRE_3225_SERIES 0xc058
|
#define USB_DEVICE_ID_PLANTRONICS_BLACKWIRE_3225_SERIES 0xc058
|
||||||
|
#define USB_DEVICE_ID_PLANTRONICS_BLACKWIRE_3325_SERIES 0x430c
|
||||||
|
#define USB_DEVICE_ID_PLANTRONICS_ENCOREPRO_500_SERIES 0x431e
|
||||||
|
|
||||||
#define USB_VENDOR_ID_PANASONIC 0x04da
|
#define USB_VENDOR_ID_PANASONIC 0x04da
|
||||||
#define USB_DEVICE_ID_PANABOARD_UBT780 0x1044
|
#define USB_DEVICE_ID_PANABOARD_UBT780 0x1044
|
||||||
|
@ -2026,6 +2026,10 @@ static const struct hid_device_id mt_devices[] = {
|
|||||||
HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
|
HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
|
||||||
USB_VENDOR_ID_ELAN, 0x3148) },
|
USB_VENDOR_ID_ELAN, 0x3148) },
|
||||||
|
|
||||||
|
{ .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU,
|
||||||
|
HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
|
||||||
|
USB_VENDOR_ID_ELAN, 0x32ae) },
|
||||||
|
|
||||||
/* Elitegroup panel */
|
/* Elitegroup panel */
|
||||||
{ .driver_data = MT_CLS_SERIAL,
|
{ .driver_data = MT_CLS_SERIAL,
|
||||||
MT_USB_DEVICE(USB_VENDOR_ID_ELITEGROUP,
|
MT_USB_DEVICE(USB_VENDOR_ID_ELITEGROUP,
|
||||||
@ -2095,6 +2099,11 @@ static const struct hid_device_id mt_devices[] = {
|
|||||||
HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
|
HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
|
||||||
0x347d, 0x7853) },
|
0x347d, 0x7853) },
|
||||||
|
|
||||||
|
/* HONOR MagicBook Art 14 touchpad */
|
||||||
|
{ .driver_data = MT_CLS_VTL,
|
||||||
|
HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
|
||||||
|
0x35cc, 0x0104) },
|
||||||
|
|
||||||
/* Ilitek dual touch panel */
|
/* Ilitek dual touch panel */
|
||||||
{ .driver_data = MT_CLS_NSMU,
|
{ .driver_data = MT_CLS_NSMU,
|
||||||
MT_USB_DEVICE(USB_VENDOR_ID_ILITEK,
|
MT_USB_DEVICE(USB_VENDOR_ID_ILITEK,
|
||||||
|
@ -38,8 +38,10 @@
|
|||||||
(usage->hid & HID_USAGE_PAGE) == HID_UP_CONSUMER)
|
(usage->hid & HID_USAGE_PAGE) == HID_UP_CONSUMER)
|
||||||
|
|
||||||
#define PLT_QUIRK_DOUBLE_VOLUME_KEYS BIT(0)
|
#define PLT_QUIRK_DOUBLE_VOLUME_KEYS BIT(0)
|
||||||
|
#define PLT_QUIRK_FOLLOWED_OPPOSITE_VOLUME_KEYS BIT(1)
|
||||||
|
|
||||||
#define PLT_DOUBLE_KEY_TIMEOUT 5 /* ms */
|
#define PLT_DOUBLE_KEY_TIMEOUT 5 /* ms */
|
||||||
|
#define PLT_FOLLOWED_OPPOSITE_KEY_TIMEOUT 220 /* ms */
|
||||||
|
|
||||||
struct plt_drv_data {
|
struct plt_drv_data {
|
||||||
unsigned long device_type;
|
unsigned long device_type;
|
||||||
@ -137,6 +139,21 @@ static int plantronics_event(struct hid_device *hdev, struct hid_field *field,
|
|||||||
|
|
||||||
drv_data->last_volume_key_ts = cur_ts;
|
drv_data->last_volume_key_ts = cur_ts;
|
||||||
}
|
}
|
||||||
|
if (drv_data->quirks & PLT_QUIRK_FOLLOWED_OPPOSITE_VOLUME_KEYS) {
|
||||||
|
unsigned long prev_ts, cur_ts;
|
||||||
|
|
||||||
|
/* Usages are filtered in plantronics_usages. */
|
||||||
|
|
||||||
|
if (!value) /* Handle key presses only. */
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
prev_ts = drv_data->last_volume_key_ts;
|
||||||
|
cur_ts = jiffies;
|
||||||
|
if (jiffies_to_msecs(cur_ts - prev_ts) <= PLT_FOLLOWED_OPPOSITE_KEY_TIMEOUT)
|
||||||
|
return 1; /* Ignore the followed opposite volume key. */
|
||||||
|
|
||||||
|
drv_data->last_volume_key_ts = cur_ts;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -210,6 +227,12 @@ static const struct hid_device_id plantronics_devices[] = {
|
|||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_PLANTRONICS,
|
{ HID_USB_DEVICE(USB_VENDOR_ID_PLANTRONICS,
|
||||||
USB_DEVICE_ID_PLANTRONICS_BLACKWIRE_3225_SERIES),
|
USB_DEVICE_ID_PLANTRONICS_BLACKWIRE_3225_SERIES),
|
||||||
.driver_data = PLT_QUIRK_DOUBLE_VOLUME_KEYS },
|
.driver_data = PLT_QUIRK_DOUBLE_VOLUME_KEYS },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_PLANTRONICS,
|
||||||
|
USB_DEVICE_ID_PLANTRONICS_BLACKWIRE_3325_SERIES),
|
||||||
|
.driver_data = PLT_QUIRK_FOLLOWED_OPPOSITE_VOLUME_KEYS },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_PLANTRONICS,
|
||||||
|
USB_DEVICE_ID_PLANTRONICS_ENCOREPRO_500_SERIES),
|
||||||
|
.driver_data = PLT_QUIRK_FOLLOWED_OPPOSITE_VOLUME_KEYS },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_PLANTRONICS, HID_ANY_ID) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_PLANTRONICS, HID_ANY_ID) },
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
@ -635,7 +635,7 @@ static int ish_fw_xfer_direct_dma(struct ishtp_cl_data *client_data,
|
|||||||
const struct firmware *fw,
|
const struct firmware *fw,
|
||||||
const struct shim_fw_info fw_info)
|
const struct shim_fw_info fw_info)
|
||||||
{
|
{
|
||||||
int rv;
|
int rv = 0;
|
||||||
void *dma_buf;
|
void *dma_buf;
|
||||||
dma_addr_t dma_buf_phy;
|
dma_addr_t dma_buf_phy;
|
||||||
u32 fragment_offset, fragment_size, payload_max_size;
|
u32 fragment_offset, fragment_size, payload_max_size;
|
||||||
|
@ -2567,6 +2567,8 @@ static void wacom_wac_pen_report(struct hid_device *hdev,
|
|||||||
/* Going into range select tool */
|
/* Going into range select tool */
|
||||||
if (wacom_wac->hid_data.invert_state)
|
if (wacom_wac->hid_data.invert_state)
|
||||||
wacom_wac->tool[0] = BTN_TOOL_RUBBER;
|
wacom_wac->tool[0] = BTN_TOOL_RUBBER;
|
||||||
|
else if (wacom_wac->features.quirks & WACOM_QUIRK_AESPEN)
|
||||||
|
wacom_wac->tool[0] = BTN_TOOL_PEN;
|
||||||
else if (wacom_wac->id[0])
|
else if (wacom_wac->id[0])
|
||||||
wacom_wac->tool[0] = wacom_intuos_get_tool_type(wacom_wac->id[0]);
|
wacom_wac->tool[0] = wacom_intuos_get_tool_type(wacom_wac->id[0]);
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user