Re: [PATCH] Input: break joystick limitation of maximum 80 buttons
hi Andy, sorry from a newbie we found Linux kernel has max joystick buttons up to 80, no more We are selling USB joystick device QMCP737C for flight simulator, which is nothing but common USB joystick. it has 104 buttons Product link https://x-plane.vip/quickmade/qmcp737c/ it works well on Windows, Mac, but not on Linux. Linux kernel exposes /dev/input/js0 max to 80 button, but we have 104 buttons. I did a lot of google search, but nothing I got. then I have to look at Kernel source, to find out where this number max 80 comes from Eventually, I found the final limitation #define BTN_JOYSTICK 0x120 #define BTN_DEAD 0x12f #define BTN_TRIGGER_HAPPY 0x2c0 #define KEY_MAX 0x2ff include/uapi/linux/input-event-codes.h according to function hidinput_configure_usage() in file drivers/hid/hid-input.c the joystick button mapping is not a continues space, generally speak the mapping space is from BTN_JOYSTICK~BTN_DEAD BTN_TRIGGER_HAPPY~KEY_MAX and finally, I got the max limitation is 80. my question is why KEY_MAX is 0x2ff? this number 0x2ff looks like not align with char? integer? the answer is no so may I ask to expand KEY_MAX to such as 0x4ff? Andy Shevchenko 于2020年7月13日周一 下午5:06写道: > > On Sun, Jul 12, 2020 at 07:54:54AM +0800, Wei Shuai wrote: > > The joystick max buttons 80 limitation comes from > > > > #define BTN_JOYSTICK 0x120 > > #define BTN_DEAD 0x12f > > #define BTN_TRIGGER_HAPPY 0x2c0 > > #define KEY_MAX 0x2ff > > > > include/uapi/linux/input-event-codes.h > > > > according to function hidinput_configure_usage() in file > > drivers/hid/hid-input.c > > > > the joystick button mapping is not a continues space > > generally speaking, the mapping space is from > > > > 1. BTN_JOYSTICK~BTN_DEAD > > 2. BTN_TRIGGER_HAPPY~KEY_MAX > > > > Finally, I got the max limitation is 80. > > The patch is expanding KEY_MAX from 0x2ff to 4ff > > and the change has been verified on 104 button USB HID device on Ubuntu > > > If you send and resend this patch too often, nobody will take you seriously. > Also, you have to provide versioning and changelog in each submission. > Besides that, above doesn't answer to question "why?". Why are you doing this > at all? What the problem? > > > -- > With Best Regards, > Andy Shevchenko > >
[PATCH] Input: break joystick limitation of maximum 80 buttons
The joystick max buttons 80 limitation comes from #define BTN_JOYSTICK 0x120 #define BTN_DEAD 0x12f #define BTN_TRIGGER_HAPPY 0x2c0 #define KEY_MAX 0x2ff include/uapi/linux/input-event-codes.h according to function hidinput_configure_usage() in file drivers/hid/hid-input.c the joystick button mapping is not a continues space generally speaking, the mapping space is from 1. BTN_JOYSTICK~BTN_DEAD 2. BTN_TRIGGER_HAPPY~KEY_MAX Finally, I got the max limitation is 80. The patch is expanding KEY_MAX from 0x2ff to 4ff and the change has been verified on 104 button USB HID device on Ubuntu Signed-off-by: Wei Shuai --- include/linux/mod_devicetable.h| 2 +- include/uapi/linux/input-event-codes.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index 8d764aab29de..35eb59ae1f19 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h @@ -311,7 +311,7 @@ struct pcmcia_device_id { /* Input */ #define INPUT_DEVICE_ID_EV_MAX 0x1f #define INPUT_DEVICE_ID_KEY_MIN_INTERESTING0x71 -#define INPUT_DEVICE_ID_KEY_MAX0x2ff +#define INPUT_DEVICE_ID_KEY_MAX0x4ff #define INPUT_DEVICE_ID_REL_MAX0x0f #define INPUT_DEVICE_ID_ABS_MAX0x3f #define INPUT_DEVICE_ID_MSC_MAX0x07 diff --git a/include/uapi/linux/input-event-codes.h b/include/uapi/linux/input-event-codes.h index b6a835d37826..ad1b9bed3828 100644 --- a/include/uapi/linux/input-event-codes.h +++ b/include/uapi/linux/input-event-codes.h @@ -774,7 +774,7 @@ /* We avoid low common keys in module aliases so they don't get huge. */ #define KEY_MIN_INTERESTINGKEY_MUTE -#define KEY_MAX0x2ff +#define KEY_MAX0x4ff #define KEY_CNT(KEY_MAX+1) /* -- 2.17.1
[PATCH] break joystick limitation of maximum 80 buttons
The 80 limitation comes from include/uapi/linux/input-event-codes.h according to function hidinput_configure_usage() in file drivers/hid/hid-input.c the joystick button mapping is not a continues space generally speaking, the mapping space is from 1. BTN_JOYSTICK~BTN_DEAD 2. BTN_TRIGGER_HAPPY~KEY_MAX and Finally I got the max limitation is 80. Signed-off-by: Wei Shuai --- include/linux/mod_devicetable.h| 2 +- include/uapi/linux/input-event-codes.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index 8d764aab29de..35eb59ae1f19 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h @@ -311,7 +311,7 @@ struct pcmcia_device_id { /* Input */ #define INPUT_DEVICE_ID_EV_MAX 0x1f #define INPUT_DEVICE_ID_KEY_MIN_INTERESTING0x71 -#define INPUT_DEVICE_ID_KEY_MAX0x2ff +#define INPUT_DEVICE_ID_KEY_MAX0x4ff #define INPUT_DEVICE_ID_REL_MAX0x0f #define INPUT_DEVICE_ID_ABS_MAX0x3f #define INPUT_DEVICE_ID_MSC_MAX0x07 diff --git a/include/uapi/linux/input-event-codes.h b/include/uapi/linux/input-event-codes.h index b6a835d37826..ad1b9bed3828 100644 --- a/include/uapi/linux/input-event-codes.h +++ b/include/uapi/linux/input-event-codes.h @@ -774,7 +774,7 @@ /* We avoid low common keys in module aliases so they don't get huge. */ #define KEY_MIN_INTERESTINGKEY_MUTE -#define KEY_MAX0x2ff +#define KEY_MAX0x4ff #define KEY_CNT(KEY_MAX+1) /* -- 2.17.1
[PATCH] break joystick limitation of maxmium 80 buttons
The 80 limitation comes from include/uapi/linux/input-event-codes.h according to function hidinput_configure_usage() in file drivers/hid/hid-input.c the joystick button mapping is not a continues space, generally speak the mapping space is from 1. BTN_JOYSTICK~BTN_DEAD 2. BTN_TRIGGER_HAPPY~KEY_MAX Finally I got the max limitation is 80. Signed-off-by: Wei Shuai --- include/linux/mod_devicetable.h| 2 +- include/uapi/linux/input-event-codes.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index 8d764aab29de..35eb59ae1f19 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h @@ -311,7 +311,7 @@ struct pcmcia_device_id { /* Input */ #define INPUT_DEVICE_ID_EV_MAX 0x1f #define INPUT_DEVICE_ID_KEY_MIN_INTERESTING0x71 -#define INPUT_DEVICE_ID_KEY_MAX0x2ff +#define INPUT_DEVICE_ID_KEY_MAX0x4ff #define INPUT_DEVICE_ID_REL_MAX0x0f #define INPUT_DEVICE_ID_ABS_MAX0x3f #define INPUT_DEVICE_ID_MSC_MAX0x07 diff --git a/include/uapi/linux/input-event-codes.h b/include/uapi/linux/input-event-codes.h index b6a835d37826..ad1b9bed3828 100644 --- a/include/uapi/linux/input-event-codes.h +++ b/include/uapi/linux/input-event-codes.h @@ -774,7 +774,7 @@ /* We avoid low common keys in module aliases so they don't get huge. */ #define KEY_MIN_INTERESTINGKEY_MUTE -#define KEY_MAX0x2ff +#define KEY_MAX0x4ff #define KEY_CNT(KEY_MAX+1) /* -- 2.17.1
[PATCH] USB: serial: add support Infineon modem USB flashloader driver
If you want to download Infineon modem via USB, this Infineon USB flashloader driver is required. Signed-off-by: Wei Shuai --- drivers/usb/serial/Kconfig | 10 ++ drivers/usb/serial/Makefile |1 + drivers/usb/serial/flashloader.c | 39 ++ 3 files changed, 50 insertions(+) create mode 100644 drivers/usb/serial/flashloader.c diff --git a/drivers/usb/serial/Kconfig b/drivers/usb/serial/Kconfig index 17b7f9a..cccd495 100644 --- a/drivers/usb/serial/Kconfig +++ b/drivers/usb/serial/Kconfig @@ -693,6 +693,16 @@ config USB_SERIAL_QT2 To compile this driver as a module, choose M here: the module will be called quatech-serial. +config USB_SERIAL_FLASHLOADER + tristate "Infineon Modem Flashloader USB interface driver" + help + Say Y here if you want to download Infineon Modem + via USB Flashloader serial driver. + + To compile this driver as a module, choose M here: the + module will be called flashloader. + + config USB_SERIAL_DEBUG tristate "USB Debugging Device" help diff --git a/drivers/usb/serial/Makefile b/drivers/usb/serial/Makefile index eaf5ca1..0b2ce56 100644 --- a/drivers/usb/serial/Makefile +++ b/drivers/usb/serial/Makefile @@ -64,3 +64,4 @@ obj-$(CONFIG_USB_SERIAL_VIVOPAY_SERIAL) += vivopay-serial.o obj-$(CONFIG_USB_SERIAL_XSENS_MT) += xsens_mt.o obj-$(CONFIG_USB_SERIAL_ZIO) += zio.o obj-$(CONFIG_USB_SERIAL_ZTE) += zte_ev.o +obj-$(CONFIG_USB_SERIAL_FLASHLOADER) += flashloader.o diff --git a/drivers/usb/serial/flashloader.c b/drivers/usb/serial/flashloader.c new file mode 100644 index 000..e6f5c10 --- /dev/null +++ b/drivers/usb/serial/flashloader.c @@ -0,0 +1,39 @@ +/* + * Infineon Flashloader driver + * + * Copyright (C) 2013 Wei Shuai + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License version + * 2 as published by the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include +#include + +static const struct usb_device_id id_table[] = { + { USB_DEVICE(0x8087, 0x0716) }, + { }, +}; +MODULE_DEVICE_TABLE(usb, id_table); + +static struct usb_serial_driver flashloader_device = { + .driver = { + .owner =THIS_MODULE, + .name = "flashloader", + }, + .id_table = id_table, + .num_ports =1, +}; + +static struct usb_serial_driver * const serial_drivers[] = { + _device, NULL +}; + +module_usb_serial_driver(serial_drivers, id_table); +MODULE_LICENSE("GPL"); -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH] USB: serial: add support Infineon modem USB flashloader driver
If you want to download Infineon modem via USB, this Infineon USB flashloader driver is required. Signed-off-by: Wei Shuai cpuw...@gmail.com --- drivers/usb/serial/Kconfig | 10 ++ drivers/usb/serial/Makefile |1 + drivers/usb/serial/flashloader.c | 39 ++ 3 files changed, 50 insertions(+) create mode 100644 drivers/usb/serial/flashloader.c diff --git a/drivers/usb/serial/Kconfig b/drivers/usb/serial/Kconfig index 17b7f9a..cccd495 100644 --- a/drivers/usb/serial/Kconfig +++ b/drivers/usb/serial/Kconfig @@ -693,6 +693,16 @@ config USB_SERIAL_QT2 To compile this driver as a module, choose M here: the module will be called quatech-serial. +config USB_SERIAL_FLASHLOADER + tristate Infineon Modem Flashloader USB interface driver + help + Say Y here if you want to download Infineon Modem + via USB Flashloader serial driver. + + To compile this driver as a module, choose M here: the + module will be called flashloader. + + config USB_SERIAL_DEBUG tristate USB Debugging Device help diff --git a/drivers/usb/serial/Makefile b/drivers/usb/serial/Makefile index eaf5ca1..0b2ce56 100644 --- a/drivers/usb/serial/Makefile +++ b/drivers/usb/serial/Makefile @@ -64,3 +64,4 @@ obj-$(CONFIG_USB_SERIAL_VIVOPAY_SERIAL) += vivopay-serial.o obj-$(CONFIG_USB_SERIAL_XSENS_MT) += xsens_mt.o obj-$(CONFIG_USB_SERIAL_ZIO) += zio.o obj-$(CONFIG_USB_SERIAL_ZTE) += zte_ev.o +obj-$(CONFIG_USB_SERIAL_FLASHLOADER) += flashloader.o diff --git a/drivers/usb/serial/flashloader.c b/drivers/usb/serial/flashloader.c new file mode 100644 index 000..e6f5c10 --- /dev/null +++ b/drivers/usb/serial/flashloader.c @@ -0,0 +1,39 @@ +/* + * Infineon Flashloader driver + * + * Copyright (C) 2013 Wei Shuai cpuw...@gmail.com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License version + * 2 as published by the Free Software Foundation. + */ + +#include linux/kernel.h +#include linux/init.h +#include linux/tty.h +#include linux/module.h +#include linux/usb.h +#include linux/usb/serial.h +#include linux/uaccess.h + +static const struct usb_device_id id_table[] = { + { USB_DEVICE(0x8087, 0x0716) }, + { }, +}; +MODULE_DEVICE_TABLE(usb, id_table); + +static struct usb_serial_driver flashloader_device = { + .driver = { + .owner =THIS_MODULE, + .name = flashloader, + }, + .id_table = id_table, + .num_ports =1, +}; + +static struct usb_serial_driver * const serial_drivers[] = { + flashloader_device, NULL +}; + +module_usb_serial_driver(serial_drivers, id_table); +MODULE_LICENSE(GPL); -- 1.7.9.5 -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/