Pull input fixes from Dmitry Torokhov: - GT1158 ID added to Goodix touchscreen driver - Boeder Force Feedback Wheel USB added to iforce joystick driver - fixup for iforce driver to avoid hangups - fix autoloading of rk805-pwrkey driver. * tag 'input-for-v6.0-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: Input: iforce - add support for Boeder Force Feedback Wheel Input: iforce - wake up after clearing IFORCE_XMIT_RUNNING flag Input: goodix - add compatible string for GT1158 MAINTAINERS: add include/dt-bindings/input to INPUT DRIVERS Input: rk805-pwrkey - fix module autoloading Input: goodix - add support for GT1158 dt-bindings: input: touchscreen: add compatible string for Goodix GT1158
Unified · Split
| @@ -16,6 +16,7 @@ properties: · 15 unmodified lines | |||
| 16 | compatible: | 16 | compatible: |
| 17 | enum: | 17 | enum: |
| 18 | - goodix,gt1151 | 18 | - goodix,gt1151 |
| 19 | - goodix,gt1158 | ||
| 19 | - goodix,gt5663 | 20 | - goodix,gt5663 |
| 20 | - goodix,gt5688 | 21 | - goodix,gt5688 |
| 21 | - goodix,gt911 | 22 | - goodix,gt911 |
| @@ -517,6 +517,7 @@ All I-Force devices are supported by the iforce module. This includes: · 516 unmodified lines | |||
| 517 | * AVB Mag Turbo Force | 517 | * AVB Mag Turbo Force |
| 518 | * AVB Top Shot Pegasus | 518 | * AVB Top Shot Pegasus |
| 519 | * AVB Top Shot Force Feedback Racing Wheel | 519 | * AVB Top Shot Force Feedback Racing Wheel |
| 520 | * Boeder Force Feedback Wheel | ||
| 520 | * Logitech WingMan Force | 521 | * Logitech WingMan Force |
| 521 | * Logitech WingMan Force Wheel | 522 | * Logitech WingMan Force Wheel |
| 522 | * Guillemot Race Leader Force Feedback | 523 | * Guillemot Race Leader Force Feedback |
| @@ -10032,6 +10032,7 @@ F: Documentation/devicetree/bindings/input/ · 10031 unmodified lines | |||
| 10032 | F: Documentation/devicetree/bindings/serio/ | 10032 | F: Documentation/devicetree/bindings/serio/ |
| 10033 | F: Documentation/input/ | 10033 | F: Documentation/input/ |
| 10034 | F: drivers/input/ | 10034 | F: drivers/input/ |
| 10035 | F: include/dt-bindings/input/ | ||
| 10035 | F: include/linux/input.h | 10036 | F: include/linux/input.h |
| 10036 | F: include/linux/input/ | 10037 | F: include/linux/input/ |
| 10037 | F: include/uapi/linux/input-event-codes.h | 10038 | F: include/uapi/linux/input-event-codes.h |
| @@ -50,6 +50,7 @@ static struct iforce_device iforce_device[] = { · 49 unmodified lines | |||
| 50 | { 0x046d, 0xc291, "Logitech WingMan Formula Force", btn_wheel, abs_wheel, ff_iforce }, | 50 | { 0x046d, 0xc291, "Logitech WingMan Formula Force", btn_wheel, abs_wheel, ff_iforce }, |
| 51 | { 0x05ef, 0x020a, "AVB Top Shot Pegasus", btn_joystick_avb, abs_avb_pegasus, ff_iforce }, | 51 | { 0x05ef, 0x020a, "AVB Top Shot Pegasus", btn_joystick_avb, abs_avb_pegasus, ff_iforce }, |
| 52 | { 0x05ef, 0x8884, "AVB Mag Turbo Force", btn_wheel, abs_wheel, ff_iforce }, | 52 | { 0x05ef, 0x8884, "AVB Mag Turbo Force", btn_wheel, abs_wheel, ff_iforce }, |
| 53 | { 0x05ef, 0x8886, "Boeder Force Feedback Wheel", btn_wheel, abs_wheel, ff_iforce }, | ||
| 53 | { 0x05ef, 0x8888, "AVB Top Shot Force Feedback Racing Wheel", btn_wheel, abs_wheel, ff_iforce }, //? | 54 | { 0x05ef, 0x8888, "AVB Top Shot Force Feedback Racing Wheel", btn_wheel, abs_wheel, ff_iforce }, //? |
| 54 | { 0x061c, 0xc0a4, "ACT LABS Force RS", btn_wheel, abs_wheel, ff_iforce }, //? | 55 | { 0x061c, 0xc0a4, "ACT LABS Force RS", btn_wheel, abs_wheel, ff_iforce }, //? |
| 55 | { 0x061c, 0xc084, "ACT LABS Force RS", btn_wheel, abs_wheel, ff_iforce }, | 56 | { 0x061c, 0xc084, "ACT LABS Force RS", btn_wheel, abs_wheel, ff_iforce }, |
| @@ -39,7 +39,7 @@ static void iforce_serio_xmit(struct iforce *iforce) · 38 unmodified lines | |||
| 39 | 39 | ||
| 40 | again: | 40 | again: |
| 41 | if (iforce->xmit.head == iforce->xmit.tail) { | 41 | if (iforce->xmit.head == iforce->xmit.tail) { |
| 42 | clear_bit(IFORCE_XMIT_RUNNING, iforce->xmit_flags); | 42 | iforce_clear_xmit_and_wake(iforce); |
| 43 | spin_unlock_irqrestore(&iforce->xmit_lock, flags); | 43 | spin_unlock_irqrestore(&iforce->xmit_lock, flags); |
| 44 | return; | 44 | return; |
| 45 | } | 45 | } |
| @@ -64,7 +64,7 @@ again: · 18 unmodified lines | |||
| 64 | if (test_and_clear_bit(IFORCE_XMIT_AGAIN, iforce->xmit_flags)) | 64 | if (test_and_clear_bit(IFORCE_XMIT_AGAIN, iforce->xmit_flags)) |
| 65 | goto again; | 65 | goto again; |
| 66 | 66 | ||
| 67 | clear_bit(IFORCE_XMIT_RUNNING, iforce->xmit_flags); | 67 | iforce_clear_xmit_and_wake(iforce); |
| 68 | 68 | ||
| 69 | spin_unlock_irqrestore(&iforce->xmit_lock, flags); | 69 | spin_unlock_irqrestore(&iforce->xmit_lock, flags); |
| 70 | } | 70 | } |
| @@ -169,7 +169,7 @@ static irqreturn_t iforce_serio_irq(struct serio *serio, · 98 unmodified lines | |||
| 169 | iforce_serio->cmd_response_len = iforce_serio->len; | 169 | iforce_serio->cmd_response_len = iforce_serio->len; |
| 170 | 170 | ||
| 171 | /* Signal that command is done */ | 171 | /* Signal that command is done */ |
| 172 | wake_up(&iforce->wait); | 172 | wake_up_all(&iforce->wait); |
| 173 | } else if (likely(iforce->type)) { | 173 | } else if (likely(iforce->type)) { |
| 174 | iforce_process_packet(iforce, iforce_serio->id, | 174 | iforce_process_packet(iforce, iforce_serio->id, |
| 175 | iforce_serio->data_in, | 175 | iforce_serio->data_in, |
| @@ -30,7 +30,7 @@ static void __iforce_usb_xmit(struct iforce *iforce) · 29 unmodified lines | |||
| 30 | spin_lock_irqsave(&iforce->xmit_lock, flags); | 30 | spin_lock_irqsave(&iforce->xmit_lock, flags); |
| 31 | 31 | ||
| 32 | if (iforce->xmit.head == iforce->xmit.tail) { | 32 | if (iforce->xmit.head == iforce->xmit.tail) { |
| 33 | clear_bit(IFORCE_XMIT_RUNNING, iforce->xmit_flags); | 33 | iforce_clear_xmit_and_wake(iforce); |
| 34 | spin_unlock_irqrestore(&iforce->xmit_lock, flags); | 34 | spin_unlock_irqrestore(&iforce->xmit_lock, flags); |
| 35 | return; | 35 | return; |
| 36 | } | 36 | } |
| @@ -58,9 +58,9 @@ static void __iforce_usb_xmit(struct iforce *iforce) · 21 unmodified lines | |||
| 58 | XMIT_INC(iforce->xmit.tail, n); | 58 | XMIT_INC(iforce->xmit.tail, n); |
| 59 | 59 | ||
| 60 | if ( (n=usb_submit_urb(iforce_usb->out, GFP_ATOMIC)) ) { | 60 | if ( (n=usb_submit_urb(iforce_usb->out, GFP_ATOMIC)) ) { |
| 61 | clear_bit(IFORCE_XMIT_RUNNING, iforce->xmit_flags); | ||
| 62 | dev_warn(&iforce_usb->intf->dev, | 61 | dev_warn(&iforce_usb->intf->dev, |
| 63 | "usb_submit_urb failed %d\n", n); | 62 | "usb_submit_urb failed %d\n", n); |
| 63 | iforce_clear_xmit_and_wake(iforce); | ||
| 64 | } | 64 | } |
| 65 | 65 | ||
| 66 | /* The IFORCE_XMIT_RUNNING bit is not cleared here. That's intended. | 66 | /* The IFORCE_XMIT_RUNNING bit is not cleared here. That's intended. |
| @@ -175,15 +175,15 @@ static void iforce_usb_out(struct urb *urb) · 108 unmodified lines | |||
| 175 | struct iforce *iforce = &iforce_usb->iforce; | 175 | struct iforce *iforce = &iforce_usb->iforce; |
| 176 | 176 | ||
| 177 | if (urb->status) { | 177 | if (urb->status) { |
| 178 | clear_bit(IFORCE_XMIT_RUNNING, iforce->xmit_flags); | ||
| 179 | dev_dbg(&iforce_usb->intf->dev, "urb->status %d, exiting\n", | 178 | dev_dbg(&iforce_usb->intf->dev, "urb->status %d, exiting\n", |
| 180 | urb->status); | 179 | urb->status); |
| 180 | iforce_clear_xmit_and_wake(iforce); | ||
| 181 | return; | 181 | return; |
| 182 | } | 182 | } |
| 183 | 183 | ||
| 184 | __iforce_usb_xmit(iforce); | 184 | __iforce_usb_xmit(iforce); |
| 185 | 185 | ||
| 186 | wake_up(&iforce->wait); | 186 | wake_up_all(&iforce->wait); |
| 187 | } | 187 | } |
| 188 | 188 | ||
| 189 | static int iforce_usb_probe(struct usb_interface *intf, | 189 | static int iforce_usb_probe(struct usb_interface *intf, |
| @@ -119,6 +119,12 @@ static inline int iforce_get_id_packet(struct iforce *iforce, u8 id, · 118 unmodified lines | |||
| 119 | response_data, response_len); | 119 | response_data, response_len); |
| 120 | } | 120 | } |
| 121 | 121 | ||
| 122 | static inline void iforce_clear_xmit_and_wake(struct iforce *iforce) | ||
| 123 | { | ||
| 124 | clear_bit(IFORCE_XMIT_RUNNING, iforce->xmit_flags); | ||
| 125 | wake_up_all(&iforce->wait); | ||
| 126 | } | ||
| 127 | |||
| 122 | /* Public functions */ | 128 | /* Public functions */ |
| 123 | /* iforce-main.c */ | 129 | /* iforce-main.c */ |
| 124 | int iforce_init_device(struct device *parent, u16 bustype, | 130 | int iforce_init_device(struct device *parent, u16 bustype, |
| @@ -98,6 +98,7 @@ static struct platform_driver rk805_pwrkey_driver = { · 97 unmodified lines | |||
| 98 | }; | 98 | }; |
| 99 | module_platform_driver(rk805_pwrkey_driver); | 99 | module_platform_driver(rk805_pwrkey_driver); |
| 100 | 100 | ||
| 101 | MODULE_ALIAS("platform:rk805-pwrkey"); | ||
| 101 | MODULE_AUTHOR("Joseph Chen <chenjh@rock-chips.com>"); | 102 | MODULE_AUTHOR("Joseph Chen <chenjh@rock-chips.com>"); |
| 102 | MODULE_DESCRIPTION("RK805 PMIC Power Key driver"); | 103 | MODULE_DESCRIPTION("RK805 PMIC Power Key driver"); |
| 103 | MODULE_LICENSE("GPL"); | 104 | MODULE_LICENSE("GPL"); |
| @@ -95,6 +95,7 @@ static const struct goodix_chip_data gt9x_chip_data = { · 94 unmodified lines | |||
| 95 | 95 | ||
| 96 | static const struct goodix_chip_id goodix_chip_ids[] = { | 96 | static const struct goodix_chip_id goodix_chip_ids[] = { |
| 97 | { .id = "1151", .data = >1x_chip_data }, | 97 | { .id = "1151", .data = >1x_chip_data }, |
| 98 | { .id = "1158", .data = >1x_chip_data }, | ||
| 98 | { .id = "5663", .data = >1x_chip_data }, | 99 | { .id = "5663", .data = >1x_chip_data }, |
| 99 | { .id = "5688", .data = >1x_chip_data }, | 100 | { .id = "5688", .data = >1x_chip_data }, |
| 100 | { .id = "917S", .data = >1x_chip_data }, | 101 | { .id = "917S", .data = >1x_chip_data }, |
| @@ -1508,6 +1509,7 @@ MODULE_DEVICE_TABLE(acpi, goodix_acpi_match); · 1407 unmodified lines | |||
| 1508 | #ifdef CONFIG_OF | 1509 | #ifdef CONFIG_OF |
| 1509 | static const struct of_device_id goodix_of_match[] = { | 1510 | static const struct of_device_id goodix_of_match[] = { |
| 1510 | { .compatible = "goodix,gt1151" }, | 1511 | { .compatible = "goodix,gt1151" }, |
| 1512 | { .compatible = "goodix,gt1158" }, | ||
| 1511 | { .compatible = "goodix,gt5663" }, | 1513 | { .compatible = "goodix,gt5663" }, |
| 1512 | { .compatible = "goodix,gt5688" }, | 1514 | { .compatible = "goodix,gt5688" }, |
| 1513 | { .compatible = "goodix,gt911" }, | 1515 | { .compatible = "goodix,gt911" }, |