* [PATCH 1/5] HID:hid-logitech: Introduce dev_attr for combined pedals feature
@ 2016-09-09 22:50 Simon Wood
2016-09-09 22:50 ` [PATCH 2/5] HID:hid-logitech: Add combined pedal support Logitech wheels Simon Wood
` (4 more replies)
0 siblings, 5 replies; 14+ messages in thread
From: Simon Wood @ 2016-09-09 22:50 UTC (permalink / raw)
To: linux-input
Cc: linux-kernel, Jiri Kosina, Edwin Velds, Elias Vanderstuyft,
Michal Maly, Simon Wood
Introduce a dev_attr which can be used to combine the accelerator
and brake pedals into a single axis. This is useful for older games
which can not handle separate accelerator and brake.
Signed-off-by: Simon Wood <simon@mungewell.org>
---
.../ABI/testing/sysfs-driver-hid-logitech-lg4ff | 9 ++++
drivers/hid/hid-lg4ff.c | 58 ++++++++++++++++++++++
2 files changed, 67 insertions(+)
diff --git a/Documentation/ABI/testing/sysfs-driver-hid-logitech-lg4ff b/Documentation/ABI/testing/sysfs-driver-hid-logitech-lg4ff
index db197a8..69fb890 100644
--- a/Documentation/ABI/testing/sysfs-driver-hid-logitech-lg4ff
+++ b/Documentation/ABI/testing/sysfs-driver-hid-logitech-lg4ff
@@ -50,3 +50,12 @@ Description: Displays the real model of the wheel regardless of any
alternate mode the wheel might be switched to.
It is a read-only value.
This entry is not created for devices that have only one mode.
+
+What: /sys/bus/hid/drivers/logitech/<dev>/combine_pedals
+Date: Sep 2016
+KernelVersion: 4.9
+Contact: Simon Wood <simon@mungewell.org>
+Description: Controls whether a combined value of accelerator and brake is
+ reported on the Y axis of the controller. Useful for older games
+ which can do not work with separate accelerator/brake axis.
+ Off ('0') by default, enabled by setting '1'.
diff --git a/drivers/hid/hid-lg4ff.c b/drivers/hid/hid-lg4ff.c
index af3a8ec..ca31ce4 100644
--- a/drivers/hid/hid-lg4ff.c
+++ b/drivers/hid/hid-lg4ff.c
@@ -75,6 +75,7 @@ static void lg4ff_set_range_g25(struct hid_device *hid, u16 range);
struct lg4ff_wheel_data {
const u32 product_id;
+ u16 combine;
u16 range;
const u16 min_range;
const u16 max_range;
@@ -345,6 +346,7 @@ static void lg4ff_init_wheel_data(struct lg4ff_wheel_data * const wdata, const s
{
struct lg4ff_wheel_data t_wdata = { .product_id = wheel->product_id,
.real_product_id = real_product_id,
+ .combine = 0,
.min_range = wheel->min_range,
.max_range = wheel->max_range,
.set_range = wheel->set_range,
@@ -885,6 +887,58 @@ static ssize_t lg4ff_alternate_modes_store(struct device *dev, struct device_att
}
static DEVICE_ATTR(alternate_modes, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH, lg4ff_alternate_modes_show, lg4ff_alternate_modes_store);
+static ssize_t lg4ff_combine_show(struct device *dev, struct device_attribute *attr,
+ char *buf)
+{
+ struct hid_device *hid = to_hid_device(dev);
+ struct lg4ff_device_entry *entry;
+ struct lg_drv_data *drv_data;
+ size_t count;
+
+ drv_data = hid_get_drvdata(hid);
+ if (!drv_data) {
+ hid_err(hid, "Private driver data not found!\n");
+ return 0;
+ }
+
+ entry = drv_data->device_props;
+ if (!entry) {
+ hid_err(hid, "Device properties not found!\n");
+ return 0;
+ }
+
+ count = scnprintf(buf, PAGE_SIZE, "%u\n", entry->wdata.combine);
+ return count;
+}
+
+static ssize_t lg4ff_combine_store(struct device *dev, struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ struct hid_device *hid = to_hid_device(dev);
+ struct lg4ff_device_entry *entry;
+ struct lg_drv_data *drv_data;
+ u16 combine = simple_strtoul(buf, NULL, 10);
+
+ drv_data = hid_get_drvdata(hid);
+ if (!drv_data) {
+ hid_err(hid, "Private driver data not found!\n");
+ return -EINVAL;
+ }
+
+ entry = drv_data->device_props;
+ if (!entry) {
+ hid_err(hid, "Device properties not found!\n");
+ return -EINVAL;
+ }
+
+ if (combine > 1)
+ combine = 1;
+
+ entry->wdata.combine = combine;
+ return count;
+}
+static DEVICE_ATTR(combine_pedals, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH, lg4ff_combine_show, lg4ff_combine_store);
+
/* Export the currently set range of the wheel */
static ssize_t lg4ff_range_show(struct device *dev, struct device_attribute *attr,
char *buf)
@@ -1259,6 +1313,9 @@ int lg4ff_init(struct hid_device *hid)
}
/* Create sysfs interface */
+ error = device_create_file(&hid->dev, &dev_attr_combine_pedals);
+ if (error)
+ hid_warn(hid, "Unable to create sysfs interface for \"combine\", errno %d\n", error);
error = device_create_file(&hid->dev, &dev_attr_range);
if (error)
hid_warn(hid, "Unable to create sysfs interface for \"range\", errno %d\n", error);
@@ -1358,6 +1415,7 @@ int lg4ff_deinit(struct hid_device *hid)
device_remove_file(&hid->dev, &dev_attr_alternate_modes);
}
+ device_remove_file(&hid->dev, &dev_attr_combine_pedals);
device_remove_file(&hid->dev, &dev_attr_range);
#ifdef CONFIG_LEDS_CLASS
{
--
2.7.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 2/5] HID:hid-logitech: Add combined pedal support Logitech wheels
2016-09-09 22:50 [PATCH 1/5] HID:hid-logitech: Introduce dev_attr for combined pedals feature Simon Wood
@ 2016-09-09 22:50 ` Simon Wood
2016-09-09 22:50 ` [PATCH 3/5] HID:hid-logitech: Compute combined pedals if not supplied Simon Wood
` (3 subsequent siblings)
4 siblings, 0 replies; 14+ messages in thread
From: Simon Wood @ 2016-09-09 22:50 UTC (permalink / raw)
To: linux-input
Cc: linux-kernel, Jiri Kosina, Edwin Velds, Elias Vanderstuyft,
Michal Maly, Simon Wood
Add support for reporting a combined accelerator/brake axis for wheels
which contain combined data in their HID stream.
This includes DF, MOMO, MOMO2 and DFP.
Signed-off-by: Simon Wood <simon@mungewell.org>
---
drivers/hid/hid-lg.c | 12 ++++++++++++
drivers/hid/hid-lg4ff.c | 32 ++++++++++++++++++++++++++++++++
drivers/hid/hid-lg4ff.h | 4 ++++
3 files changed, 48 insertions(+)
diff --git a/drivers/hid/hid-lg.c b/drivers/hid/hid-lg.c
index feb2be7..06f8a5e 100644
--- a/drivers/hid/hid-lg.c
+++ b/drivers/hid/hid-lg.c
@@ -657,6 +657,17 @@ static int lg_event(struct hid_device *hdev, struct hid_field *field,
return 0;
}
+static int lg_raw_event(struct hid_device *hdev, struct hid_report *report,
+ u8 *rd, int size)
+{
+ struct lg_drv_data *drv_data = hid_get_drvdata(hdev);
+
+ if (drv_data->quirks & LG_FF4)
+ return lg4ff_raw_event(hdev, report, rd, size, drv_data);
+
+ return 0;
+}
+
static int lg_probe(struct hid_device *hdev, const struct hid_device_id *id)
{
struct usb_interface *iface = to_usb_interface(hdev->dev.parent);
@@ -830,6 +841,7 @@ static struct hid_driver lg_driver = {
.input_mapping = lg_input_mapping,
.input_mapped = lg_input_mapped,
.event = lg_event,
+ .raw_event = lg_raw_event,
.probe = lg_probe,
.remove = lg_remove,
};
diff --git a/drivers/hid/hid-lg4ff.c b/drivers/hid/hid-lg4ff.c
index ca31ce4..79d34c2 100644
--- a/drivers/hid/hid-lg4ff.c
+++ b/drivers/hid/hid-lg4ff.c
@@ -329,6 +329,38 @@ int lg4ff_adjust_input_event(struct hid_device *hid, struct hid_field *field,
}
}
+int lg4ff_raw_event(struct hid_device *hdev, struct hid_report *report,
+ u8 *rd, int size, struct lg_drv_data *drv_data)
+{
+ struct lg4ff_device_entry *entry = drv_data->device_props;
+
+ if (!entry)
+ return 0;
+
+ /* adjust HID report present combined pedals data */
+ if (entry->wdata.combine) {
+ switch (entry->wdata.product_id) {
+ case USB_DEVICE_ID_LOGITECH_WHEEL:
+ rd[5] = rd[3];
+ rd[6] = 0x7F;
+ return 1;
+ case USB_DEVICE_ID_LOGITECH_MOMO_WHEEL:
+ case USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2:
+ rd[4] = rd[3];
+ rd[5] = 0x7F;
+ return 1;
+ case USB_DEVICE_ID_LOGITECH_DFP_WHEEL:
+ rd[5] = rd[4];
+ rd[6] = 0x7F;
+ return 1;
+ default:
+ return 0;
+ }
+ }
+
+ return 0;
+}
+
static void lg4ff_init_wheel_data(struct lg4ff_wheel_data * const wdata, const struct lg4ff_wheel *wheel,
const struct lg4ff_multimode_wheel *mmode_wheel,
const u16 real_product_id)
diff --git a/drivers/hid/hid-lg4ff.h b/drivers/hid/hid-lg4ff.h
index 66201af..de1f350 100644
--- a/drivers/hid/hid-lg4ff.h
+++ b/drivers/hid/hid-lg4ff.h
@@ -6,11 +6,15 @@ extern int lg4ff_no_autoswitch; /* From hid-lg.c */
int lg4ff_adjust_input_event(struct hid_device *hid, struct hid_field *field,
struct hid_usage *usage, s32 value, struct lg_drv_data *drv_data);
+int lg4ff_raw_event(struct hid_device *hdev, struct hid_report *report,
+ u8 *rd, int size, struct lg_drv_data *drv_data);
int lg4ff_init(struct hid_device *hdev);
int lg4ff_deinit(struct hid_device *hdev);
#else
static inline int lg4ff_adjust_input_event(struct hid_device *hid, struct hid_field *field,
struct hid_usage *usage, s32 value, struct lg_drv_data *drv_data) { return 0; }
+static inline int lg4ff_raw_event(struct hid_device *hdev, struct hid_report *report,
+ u8 *rd, int size, struct lg_drv_data *drv_data) { return 0; }
static inline int lg4ff_init(struct hid_device *hdev) { return -1; }
static inline int lg4ff_deinit(struct hid_device *hdev) { return -1; }
#endif
--
2.7.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 3/5] HID:hid-logitech: Compute combined pedals if not supplied
2016-09-09 22:50 [PATCH 1/5] HID:hid-logitech: Introduce dev_attr for combined pedals feature Simon Wood
2016-09-09 22:50 ` [PATCH 2/5] HID:hid-logitech: Add combined pedal support Logitech wheels Simon Wood
@ 2016-09-09 22:50 ` Simon Wood
2016-09-09 22:50 ` [PATCH 4/5] HID:hid-logitech: Rewrite of descriptor for all DF wheels Simon Wood
` (2 subsequent siblings)
4 siblings, 0 replies; 14+ messages in thread
From: Simon Wood @ 2016-09-09 22:50 UTC (permalink / raw)
To: linux-input
Cc: linux-kernel, Jiri Kosina, Edwin Velds, Elias Vanderstuyft,
Michal Maly, Simon Wood
Add support for computing a combined accelerator/brake axis for wheels
which don't contain combined data in their HID stream.
This includes DFGT, G25, G27, G29 and Wii-Wheel.
Signed-off-by: Simon Wood <simon@mungewell.org>
---
drivers/hid/hid-lg4ff.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/drivers/hid/hid-lg4ff.c b/drivers/hid/hid-lg4ff.c
index 79d34c2..cc5c9ebd 100644
--- a/drivers/hid/hid-lg4ff.c
+++ b/drivers/hid/hid-lg4ff.c
@@ -332,6 +332,7 @@ int lg4ff_adjust_input_event(struct hid_device *hid, struct hid_field *field,
int lg4ff_raw_event(struct hid_device *hdev, struct hid_report *report,
u8 *rd, int size, struct lg_drv_data *drv_data)
{
+ int offset;
struct lg4ff_device_entry *entry = drv_data->device_props;
if (!entry)
@@ -353,9 +354,25 @@ int lg4ff_raw_event(struct hid_device *hdev, struct hid_report *report,
rd[5] = rd[4];
rd[6] = 0x7F;
return 1;
+ case USB_DEVICE_ID_LOGITECH_G25_WHEEL:
+ case USB_DEVICE_ID_LOGITECH_G27_WHEEL:
+ offset = 5;
+ break;
+ case USB_DEVICE_ID_LOGITECH_DFGT_WHEEL:
+ case USB_DEVICE_ID_LOGITECH_G29_WHEEL:
+ offset = 6;
+ break;
+ case USB_DEVICE_ID_LOGITECH_WII_WHEEL:
+ offset = 3;
+ break;
default:
return 0;
}
+
+ /* Compute a combined axis when wheel does not supply it */
+ rd[offset] = (0xFF + rd[offset] - rd[offset+1]) >> 1;
+ rd[offset+1] = 0x7F;
+ return 1;
}
return 0;
--
2.7.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 4/5] HID:hid-logitech: Rewrite of descriptor for all DF wheels
2016-09-09 22:50 [PATCH 1/5] HID:hid-logitech: Introduce dev_attr for combined pedals feature Simon Wood
2016-09-09 22:50 ` [PATCH 2/5] HID:hid-logitech: Add combined pedal support Logitech wheels Simon Wood
2016-09-09 22:50 ` [PATCH 3/5] HID:hid-logitech: Compute combined pedals if not supplied Simon Wood
@ 2016-09-09 22:50 ` Simon Wood
2016-09-10 1:34 ` kbuild test robot
2016-09-14 18:55 ` Simon Wood
2016-09-09 22:50 ` [PATCH 5/5] HID:hid-logitech: Documentation updates/corrections Simon Wood
2016-09-18 16:55 ` [Patch-V2 1/6] HID:hid-logitech: Introduce control for combined pedals feature Simon Wood
4 siblings, 2 replies; 14+ messages in thread
From: Simon Wood @ 2016-09-09 22:50 UTC (permalink / raw)
To: linux-input
Cc: linux-kernel, Jiri Kosina, Edwin Velds, Elias Vanderstuyft,
Michal Maly, Simon Wood
Rewrite the HID descriptor for _all_ Driving Force wheels (real
or emulated) so that they can report separate Accelerator and
Brake axis.
If the user wants a combined accel/brake axis, they can use the
'combined pedals' feature.
$ echo 1 > /sys/bus/hid/devices/<device-id>/combine_pedals
Signed-off-by: Simon Wood <simon@mungewell.org>
---
drivers/hid/hid-lg.c | 13 +------------
1 file changed, 1 insertion(+), 12 deletions(-)
diff --git a/drivers/hid/hid-lg.c b/drivers/hid/hid-lg.c
index 06f8a5e..53429c6 100644
--- a/drivers/hid/hid-lg.c
+++ b/drivers/hid/hid-lg.c
@@ -365,18 +365,7 @@ static __u8 *lg_report_fixup(struct hid_device *hdev, __u8 *rdesc,
/* Several wheels report as this id when operating in emulation mode. */
case USB_DEVICE_ID_LOGITECH_WHEEL:
- udesc = &(hid_to_usb_dev(hdev)->descriptor);
- if (!udesc) {
- hid_err(hdev, "NULL USB device descriptor\n");
- break;
- }
- bcdDevice = le16_to_cpu(udesc->bcdDevice);
- rev_maj = bcdDevice >> 8;
- rev_min = bcdDevice & 0xff;
-
- /* Update the report descriptor for only the Driving Force wheel */
- if (rev_maj == 1 && rev_min == 2 &&
- *rsize == DF_RDESC_ORIG_SIZE) {
+ if (*rsize == DF_RDESC_ORIG_SIZE) {
hid_info(hdev,
"fixing up Logitech Driving Force report descriptor\n");
rdesc = df_rdesc_fixed;
--
2.7.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 5/5] HID:hid-logitech: Documentation updates/corrections
2016-09-09 22:50 [PATCH 1/5] HID:hid-logitech: Introduce dev_attr for combined pedals feature Simon Wood
` (2 preceding siblings ...)
2016-09-09 22:50 ` [PATCH 4/5] HID:hid-logitech: Rewrite of descriptor for all DF wheels Simon Wood
@ 2016-09-09 22:50 ` Simon Wood
2016-09-18 16:55 ` [Patch-V2 1/6] HID:hid-logitech: Introduce control for combined pedals feature Simon Wood
4 siblings, 0 replies; 14+ messages in thread
From: Simon Wood @ 2016-09-09 22:50 UTC (permalink / raw)
To: linux-input
Cc: linux-kernel, Jiri Kosina, Edwin Velds, Elias Vanderstuyft,
Michal Maly, Simon Wood
Signed-off-by: Simon Wood <simon@mungewell.org>
---
Documentation/ABI/testing/sysfs-driver-hid-logitech-lg4ff | 6 ++++++
drivers/hid/Kconfig | 6 +++---
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/Documentation/ABI/testing/sysfs-driver-hid-logitech-lg4ff b/Documentation/ABI/testing/sysfs-driver-hid-logitech-lg4ff
index 69fb890..36e4d68 100644
--- a/Documentation/ABI/testing/sysfs-driver-hid-logitech-lg4ff
+++ b/Documentation/ABI/testing/sysfs-driver-hid-logitech-lg4ff
@@ -35,6 +35,12 @@ Description: Displays a set of alternate modes supported by a wheel. Each
DF-EX <*--------> G25 <-> G27
DF-EX <*----------------> G27
+ G29:
+ DF-EX <*> DFP <-> G25 <-> G27 <-> G29
+ DF-EX <*--------> G25 <-> G27 <-> G29
+ DF-EX <*----------------> G27 <-> G29
+ DF-EX <*------------------------> G29
+
DFGT:
DF-EX <*> DFP <-> DFGT
DF-EX <*--------> DFGT
diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
index 78ac481..bebf89c0 100644
--- a/drivers/hid/Kconfig
+++ b/drivers/hid/Kconfig
@@ -457,8 +457,6 @@ config LOGITECH_FF
- Logitech WingMan Cordless RumblePad
- Logitech WingMan Cordless RumblePad 2
- Logitech WingMan Force 3D
- - Logitech Formula Force EX
- - Logitech WingMan Formula Force GP
and if you want to enable force feedback for them.
Note: if you say N here, this device will still be supported, but without
@@ -491,12 +489,14 @@ config LOGIWHEELS_FF
Say Y here if you want to enable force feedback and range setting
support for following Logitech wheels:
- Logitech Driving Force
+ - Logitech Driving Force EX
- Logitech Driving Force Pro
- Logitech Driving Force GT
- Logitech G25
- Logitech G27
+ - Logitech G29
- Logitech MOMO/MOMO 2
- - Logitech Formula Force EX
+ - Logitech Formula Force EX/FX/GP
config HID_MAGICMOUSE
tristate "Apple Magic Mouse/Trackpad multi-touch support"
--
2.7.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 4/5] HID:hid-logitech: Rewrite of descriptor for all DF wheels
2016-09-09 22:50 ` [PATCH 4/5] HID:hid-logitech: Rewrite of descriptor for all DF wheels Simon Wood
@ 2016-09-10 1:34 ` kbuild test robot
2016-09-14 18:55 ` Simon Wood
1 sibling, 0 replies; 14+ messages in thread
From: kbuild test robot @ 2016-09-10 1:34 UTC (permalink / raw)
To: Simon Wood
Cc: kbuild-all, linux-input, linux-kernel, Jiri Kosina, Edwin Velds,
Elias Vanderstuyft, Michal Maly, Simon Wood
[-- Attachment #1: Type: text/plain, Size: 3390 bytes --]
Hi Simon,
[auto build test WARNING on hid/for-next]
[also build test WARNING on v4.8-rc5 next-20160909]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
[Suggest to use git(>=2.9.0) format-patch --base=<commit> (or --base=auto for convenience) to record what (public, well-known) commit your patch series was built on]
[Check https://git-scm.com/docs/git-format-patch for more information]
url: https://github.com/0day-ci/linux/commits/Simon-Wood/HID-hid-logitech-Introduce-dev_attr-for-combined-pedals-feature/20160910-065505
base: https://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid.git for-next
config: sh-titan_defconfig (attached as .config)
compiler: sh4-linux-gnu-gcc (Debian 5.4.0-6) 5.4.0 20160609
reproduce:
wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=sh
All warnings (new ones prefixed by >>):
drivers/hid/hid-lg.c: In function 'lg_report_fixup':
>> drivers/hid/hid-lg.c:347:28: warning: unused variable 'rev_min' [-Wunused-variable]
__u16 bcdDevice, rev_maj, rev_min;
^
>> drivers/hid/hid-lg.c:347:19: warning: unused variable 'rev_maj' [-Wunused-variable]
__u16 bcdDevice, rev_maj, rev_min;
^
>> drivers/hid/hid-lg.c:347:8: warning: unused variable 'bcdDevice' [-Wunused-variable]
__u16 bcdDevice, rev_maj, rev_min;
^
>> drivers/hid/hid-lg.c:346:32: warning: unused variable 'udesc' [-Wunused-variable]
struct usb_device_descriptor *udesc;
^
vim +/rev_min +347 drivers/hid/hid-lg.c
5f22a799 drivers/hid/hid-logitech.c Jiri Slaby 2008-05-16 340 * the original value of 0x28c of logical maximum to 0x104d
5f22a799 drivers/hid/hid-logitech.c Jiri Slaby 2008-05-16 341 */
73e4008d drivers/hid/hid-lg.c Nikolai Kondrashov 2010-08-06 342 static __u8 *lg_report_fixup(struct hid_device *hdev, __u8 *rdesc,
73e4008d drivers/hid/hid-lg.c Nikolai Kondrashov 2010-08-06 343 unsigned int *rsize)
5f22a799 drivers/hid/hid-logitech.c Jiri Slaby 2008-05-16 344 {
25751553 drivers/hid/hid-lg.c Axel Lin 2012-09-13 345 struct lg_drv_data *drv_data = hid_get_drvdata(hdev);
54bfe3f0 drivers/hid/hid-lg.c Paul Sbarra 2013-02-17 @346 struct usb_device_descriptor *udesc;
54bfe3f0 drivers/hid/hid-lg.c Paul Sbarra 2013-02-17 @347 __u16 bcdDevice, rev_maj, rev_min;
5f22a799 drivers/hid/hid-logitech.c Jiri Slaby 2008-05-16 348
4ab25786 drivers/hid/hid-lg.c Jiri Kosina 2014-08-21 349 if ((drv_data->quirks & LG_RDESC) && *rsize >= 91 && rdesc[83] == 0x26 &&
5f22a799 drivers/hid/hid-logitech.c Jiri Slaby 2008-05-16 350 rdesc[84] == 0x8c && rdesc[85] == 0x02) {
:::::: The code at line 347 was first introduced by commit
:::::: 54bfe3f0dab2b2f0ac629690f187537d95adeb4f HID: logitech: add report descriptor for Driving Force wheel
:::::: TO: Paul Sbarra <sbarra.paul@gmail.com>
:::::: CC: Jiri Kosina <jkosina@suse.cz>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/octet-stream, Size: 15776 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 4/5] HID:hid-logitech: Rewrite of descriptor for all DF wheels
2016-09-09 22:50 ` [PATCH 4/5] HID:hid-logitech: Rewrite of descriptor for all DF wheels Simon Wood
2016-09-10 1:34 ` kbuild test robot
@ 2016-09-14 18:55 ` Simon Wood
1 sibling, 0 replies; 14+ messages in thread
From: Simon Wood @ 2016-09-14 18:55 UTC (permalink / raw)
To: Simon Wood
Cc: linux-input, linux-kernel, Jiri Kosina, Edwin Velds,
Elias Vanderstuyft, Michal Maly, Simon Wood
On Fri, September 9, 2016 7:34 pm, kbuild test robot wrote:
> All warnings (new ones prefixed by >>):
>
>
> drivers/hid/hid-lg.c: In function 'lg_report_fixup':
>
>>> drivers/hid/hid-lg.c:347:28: warning: unused variable 'rev_min'
>>> [-Wunused-variable]
>>>
> __u16 bcdDevice, rev_maj, rev_min;
> ^
>
>>> drivers/hid/hid-lg.c:347:19: warning: unused variable 'rev_maj'
>>> [-Wunused-variable]
>>>
> __u16 bcdDevice, rev_maj, rev_min;
> ^
>
>>> drivers/hid/hid-lg.c:347:8: warning: unused variable 'bcdDevice'
>>> [-Wunused-variable]
>>>
> __u16 bcdDevice, rev_maj, rev_min;
> ^
>
>>> drivers/hid/hid-lg.c:346:32: warning: unused variable 'udesc'
>>> [-Wunused-variable]
>>>
> struct usb_device_descriptor *udesc; ^
Hi all,
No other comments from the rest of the patch set (so far), so I'll send a
V2 patch set to cover these towards the end of the week.
Also have better support for the "Wingman Forumula Force GT" to include,
as I picked one up cheap on Kijiji.
Simon.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Patch-V2 1/6] HID:hid-logitech: Introduce control for combined pedals feature
2016-09-09 22:50 [PATCH 1/5] HID:hid-logitech: Introduce dev_attr for combined pedals feature Simon Wood
` (3 preceding siblings ...)
2016-09-09 22:50 ` [PATCH 5/5] HID:hid-logitech: Documentation updates/corrections Simon Wood
@ 2016-09-18 16:55 ` Simon Wood
2016-09-18 16:55 ` [Patch-V2 2/6] HID:hid-logitech: Add combined pedal support Logitech wheels Simon Wood
` (5 more replies)
4 siblings, 6 replies; 14+ messages in thread
From: Simon Wood @ 2016-09-18 16:55 UTC (permalink / raw)
To: linux-input
Cc: linux-kernel, Jiri Kosina, Edwin Velds, Elias Vanderstuyft,
Michal Maly, Simon Wood
Introduce a dev_attr which can be used to combine the accelerator
and brake pedals into a single axis. This is useful for older games
which can not handle seperate accelerator and brake.
Signed-off-by: Simon Wood <simon@mungewell.org>
---
.../ABI/testing/sysfs-driver-hid-logitech-lg4ff | 9 ++++
drivers/hid/hid-lg4ff.c | 58 ++++++++++++++++++++++
2 files changed, 67 insertions(+)
diff --git a/Documentation/ABI/testing/sysfs-driver-hid-logitech-lg4ff b/Documentation/ABI/testing/sysfs-driver-hid-logitech-lg4ff
index db197a8..9cd7c5a 100644
--- a/Documentation/ABI/testing/sysfs-driver-hid-logitech-lg4ff
+++ b/Documentation/ABI/testing/sysfs-driver-hid-logitech-lg4ff
@@ -50,3 +50,12 @@ Description: Displays the real model of the wheel regardless of any
alternate mode the wheel might be switched to.
It is a read-only value.
This entry is not created for devices that have only one mode.
+
+What: /sys/bus/hid/drivers/logitech/<dev>/combine_pedals
+Date: Sep 2016
+KernelVersion: 4.9
+Contact: Simon Wood <simon@mungewell.org>
+Description: Controls whether a combined value of accelerator and brake is
+ reported on the Y axis of the controller. Useful for older games
+ which can do not work with separate accelerator/brake axis.
+ Off ('0') by default, enabled by setting '1'.
diff --git a/drivers/hid/hid-lg4ff.c b/drivers/hid/hid-lg4ff.c
index af3a8ec..ca31ce4 100644
--- a/drivers/hid/hid-lg4ff.c
+++ b/drivers/hid/hid-lg4ff.c
@@ -75,6 +75,7 @@ static void lg4ff_set_range_g25(struct hid_device *hid, u16 range);
struct lg4ff_wheel_data {
const u32 product_id;
+ u16 combine;
u16 range;
const u16 min_range;
const u16 max_range;
@@ -345,6 +346,7 @@ static void lg4ff_init_wheel_data(struct lg4ff_wheel_data * const wdata, const s
{
struct lg4ff_wheel_data t_wdata = { .product_id = wheel->product_id,
.real_product_id = real_product_id,
+ .combine = 0,
.min_range = wheel->min_range,
.max_range = wheel->max_range,
.set_range = wheel->set_range,
@@ -885,6 +887,58 @@ static ssize_t lg4ff_alternate_modes_store(struct device *dev, struct device_att
}
static DEVICE_ATTR(alternate_modes, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH, lg4ff_alternate_modes_show, lg4ff_alternate_modes_store);
+static ssize_t lg4ff_combine_show(struct device *dev, struct device_attribute *attr,
+ char *buf)
+{
+ struct hid_device *hid = to_hid_device(dev);
+ struct lg4ff_device_entry *entry;
+ struct lg_drv_data *drv_data;
+ size_t count;
+
+ drv_data = hid_get_drvdata(hid);
+ if (!drv_data) {
+ hid_err(hid, "Private driver data not found!\n");
+ return 0;
+ }
+
+ entry = drv_data->device_props;
+ if (!entry) {
+ hid_err(hid, "Device properties not found!\n");
+ return 0;
+ }
+
+ count = scnprintf(buf, PAGE_SIZE, "%u\n", entry->wdata.combine);
+ return count;
+}
+
+static ssize_t lg4ff_combine_store(struct device *dev, struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ struct hid_device *hid = to_hid_device(dev);
+ struct lg4ff_device_entry *entry;
+ struct lg_drv_data *drv_data;
+ u16 combine = simple_strtoul(buf, NULL, 10);
+
+ drv_data = hid_get_drvdata(hid);
+ if (!drv_data) {
+ hid_err(hid, "Private driver data not found!\n");
+ return -EINVAL;
+ }
+
+ entry = drv_data->device_props;
+ if (!entry) {
+ hid_err(hid, "Device properties not found!\n");
+ return -EINVAL;
+ }
+
+ if (combine > 1)
+ combine = 1;
+
+ entry->wdata.combine = combine;
+ return count;
+}
+static DEVICE_ATTR(combine_pedals, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH, lg4ff_combine_show, lg4ff_combine_store);
+
/* Export the currently set range of the wheel */
static ssize_t lg4ff_range_show(struct device *dev, struct device_attribute *attr,
char *buf)
@@ -1259,6 +1313,9 @@ int lg4ff_init(struct hid_device *hid)
}
/* Create sysfs interface */
+ error = device_create_file(&hid->dev, &dev_attr_combine_pedals);
+ if (error)
+ hid_warn(hid, "Unable to create sysfs interface for \"combine\", errno %d\n", error);
error = device_create_file(&hid->dev, &dev_attr_range);
if (error)
hid_warn(hid, "Unable to create sysfs interface for \"range\", errno %d\n", error);
@@ -1358,6 +1415,7 @@ int lg4ff_deinit(struct hid_device *hid)
device_remove_file(&hid->dev, &dev_attr_alternate_modes);
}
+ device_remove_file(&hid->dev, &dev_attr_combine_pedals);
device_remove_file(&hid->dev, &dev_attr_range);
#ifdef CONFIG_LEDS_CLASS
{
--
2.7.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Patch-V2 2/6] HID:hid-logitech: Add combined pedal support Logitech wheels
2016-09-18 16:55 ` [Patch-V2 1/6] HID:hid-logitech: Introduce control for combined pedals feature Simon Wood
@ 2016-09-18 16:55 ` Simon Wood
2016-09-18 16:55 ` [Patch-V2 3/6] HID:hid-logitech: Compute combined pedals value Simon Wood
` (4 subsequent siblings)
5 siblings, 0 replies; 14+ messages in thread
From: Simon Wood @ 2016-09-18 16:55 UTC (permalink / raw)
To: linux-input
Cc: linux-kernel, Jiri Kosina, Edwin Velds, Elias Vanderstuyft,
Michal Maly, Simon Wood
Add support for reporting a combined accelerator/brake axis for wheels
which contain combined data in their HID stream.
This includes DF, MOMO, MOMO2 and DFP.
Signed-off-by: Simon Wood <simon@mungewell.org>
---
drivers/hid/hid-lg.c | 12 ++++++++++++
drivers/hid/hid-lg4ff.c | 32 ++++++++++++++++++++++++++++++++
drivers/hid/hid-lg4ff.h | 4 ++++
3 files changed, 48 insertions(+)
diff --git a/drivers/hid/hid-lg.c b/drivers/hid/hid-lg.c
index feb2be7..06f8a5e 100644
--- a/drivers/hid/hid-lg.c
+++ b/drivers/hid/hid-lg.c
@@ -657,6 +657,17 @@ static int lg_event(struct hid_device *hdev, struct hid_field *field,
return 0;
}
+static int lg_raw_event(struct hid_device *hdev, struct hid_report *report,
+ u8 *rd, int size)
+{
+ struct lg_drv_data *drv_data = hid_get_drvdata(hdev);
+
+ if (drv_data->quirks & LG_FF4)
+ return lg4ff_raw_event(hdev, report, rd, size, drv_data);
+
+ return 0;
+}
+
static int lg_probe(struct hid_device *hdev, const struct hid_device_id *id)
{
struct usb_interface *iface = to_usb_interface(hdev->dev.parent);
@@ -830,6 +841,7 @@ static struct hid_driver lg_driver = {
.input_mapping = lg_input_mapping,
.input_mapped = lg_input_mapped,
.event = lg_event,
+ .raw_event = lg_raw_event,
.probe = lg_probe,
.remove = lg_remove,
};
diff --git a/drivers/hid/hid-lg4ff.c b/drivers/hid/hid-lg4ff.c
index ca31ce4..79d34c2 100644
--- a/drivers/hid/hid-lg4ff.c
+++ b/drivers/hid/hid-lg4ff.c
@@ -329,6 +329,38 @@ int lg4ff_adjust_input_event(struct hid_device *hid, struct hid_field *field,
}
}
+int lg4ff_raw_event(struct hid_device *hdev, struct hid_report *report,
+ u8 *rd, int size, struct lg_drv_data *drv_data)
+{
+ struct lg4ff_device_entry *entry = drv_data->device_props;
+
+ if (!entry)
+ return 0;
+
+ /* adjust HID report present combined pedals data */
+ if (entry->wdata.combine) {
+ switch (entry->wdata.product_id) {
+ case USB_DEVICE_ID_LOGITECH_WHEEL:
+ rd[5] = rd[3];
+ rd[6] = 0x7F;
+ return 1;
+ case USB_DEVICE_ID_LOGITECH_MOMO_WHEEL:
+ case USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2:
+ rd[4] = rd[3];
+ rd[5] = 0x7F;
+ return 1;
+ case USB_DEVICE_ID_LOGITECH_DFP_WHEEL:
+ rd[5] = rd[4];
+ rd[6] = 0x7F;
+ return 1;
+ default:
+ return 0;
+ }
+ }
+
+ return 0;
+}
+
static void lg4ff_init_wheel_data(struct lg4ff_wheel_data * const wdata, const struct lg4ff_wheel *wheel,
const struct lg4ff_multimode_wheel *mmode_wheel,
const u16 real_product_id)
diff --git a/drivers/hid/hid-lg4ff.h b/drivers/hid/hid-lg4ff.h
index 66201af..de1f350 100644
--- a/drivers/hid/hid-lg4ff.h
+++ b/drivers/hid/hid-lg4ff.h
@@ -6,11 +6,15 @@ extern int lg4ff_no_autoswitch; /* From hid-lg.c */
int lg4ff_adjust_input_event(struct hid_device *hid, struct hid_field *field,
struct hid_usage *usage, s32 value, struct lg_drv_data *drv_data);
+int lg4ff_raw_event(struct hid_device *hdev, struct hid_report *report,
+ u8 *rd, int size, struct lg_drv_data *drv_data);
int lg4ff_init(struct hid_device *hdev);
int lg4ff_deinit(struct hid_device *hdev);
#else
static inline int lg4ff_adjust_input_event(struct hid_device *hid, struct hid_field *field,
struct hid_usage *usage, s32 value, struct lg_drv_data *drv_data) { return 0; }
+static inline int lg4ff_raw_event(struct hid_device *hdev, struct hid_report *report,
+ u8 *rd, int size, struct lg_drv_data *drv_data) { return 0; }
static inline int lg4ff_init(struct hid_device *hdev) { return -1; }
static inline int lg4ff_deinit(struct hid_device *hdev) { return -1; }
#endif
--
2.7.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Patch-V2 3/6] HID:hid-logitech: Compute combined pedals value
2016-09-18 16:55 ` [Patch-V2 1/6] HID:hid-logitech: Introduce control for combined pedals feature Simon Wood
2016-09-18 16:55 ` [Patch-V2 2/6] HID:hid-logitech: Add combined pedal support Logitech wheels Simon Wood
@ 2016-09-18 16:55 ` Simon Wood
2016-09-18 16:55 ` [Patch-V2 4/6] HID:hid-logitech: Rewrite of descriptor for all DF wheels Simon Wood
` (3 subsequent siblings)
5 siblings, 0 replies; 14+ messages in thread
From: Simon Wood @ 2016-09-18 16:55 UTC (permalink / raw)
To: linux-input
Cc: linux-kernel, Jiri Kosina, Edwin Velds, Elias Vanderstuyft,
Michal Maly, Simon Wood
Add support for computing a combined accelerator/brake axis for wheels
which don't contain combined data in their HID stream.
This includes DFGT, G25, G27, G29 and Wii-Wheel.
Signed-off-by: Simon Wood <simon@mungewell.org>
---
drivers/hid/hid-lg4ff.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/drivers/hid/hid-lg4ff.c b/drivers/hid/hid-lg4ff.c
index 79d34c2..cc5c9ebd 100644
--- a/drivers/hid/hid-lg4ff.c
+++ b/drivers/hid/hid-lg4ff.c
@@ -332,6 +332,7 @@ int lg4ff_adjust_input_event(struct hid_device *hid, struct hid_field *field,
int lg4ff_raw_event(struct hid_device *hdev, struct hid_report *report,
u8 *rd, int size, struct lg_drv_data *drv_data)
{
+ int offset;
struct lg4ff_device_entry *entry = drv_data->device_props;
if (!entry)
@@ -353,9 +354,25 @@ int lg4ff_raw_event(struct hid_device *hdev, struct hid_report *report,
rd[5] = rd[4];
rd[6] = 0x7F;
return 1;
+ case USB_DEVICE_ID_LOGITECH_G25_WHEEL:
+ case USB_DEVICE_ID_LOGITECH_G27_WHEEL:
+ offset = 5;
+ break;
+ case USB_DEVICE_ID_LOGITECH_DFGT_WHEEL:
+ case USB_DEVICE_ID_LOGITECH_G29_WHEEL:
+ offset = 6;
+ break;
+ case USB_DEVICE_ID_LOGITECH_WII_WHEEL:
+ offset = 3;
+ break;
default:
return 0;
}
+
+ /* Compute a combined axis when wheel does not supply it */
+ rd[offset] = (0xFF + rd[offset] - rd[offset+1]) >> 1;
+ rd[offset+1] = 0x7F;
+ return 1;
}
return 0;
--
2.7.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Patch-V2 4/6] HID:hid-logitech: Rewrite of descriptor for all DF wheels
2016-09-18 16:55 ` [Patch-V2 1/6] HID:hid-logitech: Introduce control for combined pedals feature Simon Wood
2016-09-18 16:55 ` [Patch-V2 2/6] HID:hid-logitech: Add combined pedal support Logitech wheels Simon Wood
2016-09-18 16:55 ` [Patch-V2 3/6] HID:hid-logitech: Compute combined pedals value Simon Wood
@ 2016-09-18 16:55 ` Simon Wood
2016-09-18 16:55 ` [Patch-V2 5/6] HID:hid-logitech: Improve Wingman Formula Force GP support Simon Wood
` (2 subsequent siblings)
5 siblings, 0 replies; 14+ messages in thread
From: Simon Wood @ 2016-09-18 16:55 UTC (permalink / raw)
To: linux-input
Cc: linux-kernel, Jiri Kosina, Edwin Velds, Elias Vanderstuyft,
Michal Maly, Simon Wood
Rewrite the HID descriptor for _all_ Driving Force wheels (real
or emulated) so that they can report separate Accelerator and
Brake axis.
If the user wants a combined accel/brake axis, they can use the
'combined pedals' feature.
$ echo 1 > /sys/bus/hid/devices/<device-id>/combine_pedals
Signed-off-by: Simon Wood <simon@mungewell.org>
---
drivers/hid/hid-lg.c | 15 +--------------
1 file changed, 1 insertion(+), 14 deletions(-)
diff --git a/drivers/hid/hid-lg.c b/drivers/hid/hid-lg.c
index 06f8a5e..ffcf4f1 100644
--- a/drivers/hid/hid-lg.c
+++ b/drivers/hid/hid-lg.c
@@ -343,8 +343,6 @@ static __u8 *lg_report_fixup(struct hid_device *hdev, __u8 *rdesc,
unsigned int *rsize)
{
struct lg_drv_data *drv_data = hid_get_drvdata(hdev);
- struct usb_device_descriptor *udesc;
- __u16 bcdDevice, rev_maj, rev_min;
if ((drv_data->quirks & LG_RDESC) && *rsize >= 91 && rdesc[83] == 0x26 &&
rdesc[84] == 0x8c && rdesc[85] == 0x02) {
@@ -365,18 +363,7 @@ static __u8 *lg_report_fixup(struct hid_device *hdev, __u8 *rdesc,
/* Several wheels report as this id when operating in emulation mode. */
case USB_DEVICE_ID_LOGITECH_WHEEL:
- udesc = &(hid_to_usb_dev(hdev)->descriptor);
- if (!udesc) {
- hid_err(hdev, "NULL USB device descriptor\n");
- break;
- }
- bcdDevice = le16_to_cpu(udesc->bcdDevice);
- rev_maj = bcdDevice >> 8;
- rev_min = bcdDevice & 0xff;
-
- /* Update the report descriptor for only the Driving Force wheel */
- if (rev_maj == 1 && rev_min == 2 &&
- *rsize == DF_RDESC_ORIG_SIZE) {
+ if (*rsize == DF_RDESC_ORIG_SIZE) {
hid_info(hdev,
"fixing up Logitech Driving Force report descriptor\n");
rdesc = df_rdesc_fixed;
--
2.7.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Patch-V2 5/6] HID:hid-logitech: Improve Wingman Formula Force GP support
2016-09-18 16:55 ` [Patch-V2 1/6] HID:hid-logitech: Introduce control for combined pedals feature Simon Wood
` (2 preceding siblings ...)
2016-09-18 16:55 ` [Patch-V2 4/6] HID:hid-logitech: Rewrite of descriptor for all DF wheels Simon Wood
@ 2016-09-18 16:55 ` Simon Wood
2016-09-18 16:55 ` [Patch-V2 6/6] HID:hid-logitech: Documentation updates/corrections Simon Wood
2016-09-26 13:41 ` [Patch-V2 1/6] HID:hid-logitech: Introduce control for combined pedals feature Jiri Kosina
5 siblings, 0 replies; 14+ messages in thread
From: Simon Wood @ 2016-09-18 16:55 UTC (permalink / raw)
To: linux-input
Cc: linux-kernel, Jiri Kosina, Edwin Velds, Elias Vanderstuyft,
Michal Maly, Simon Wood
Move ForceFeedback support for the Formula Force GP into hid-lgff4
and re-write HID descriptor, thus allowing combined pedals or not
as user desires.
Signed-off-by: Simon Wood <simon@mungewell.org>
---
drivers/hid/hid-lg.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++-
drivers/hid/hid-lg4ff.c | 2 ++
2 files changed, 60 insertions(+), 1 deletion(-)
diff --git a/drivers/hid/hid-lg.c b/drivers/hid/hid-lg.c
index ffcf4f1..76f644d 100644
--- a/drivers/hid/hid-lg.c
+++ b/drivers/hid/hid-lg.c
@@ -49,6 +49,7 @@
#define FV_RDESC_ORIG_SIZE 130
#define MOMO_RDESC_ORIG_SIZE 87
#define MOMO2_RDESC_ORIG_SIZE 87
+#define FFG_RDESC_ORIG_SIZE 85
/* Fixed report descriptors for Logitech Driving Force (and Pro)
* wheel controllers
@@ -334,6 +335,52 @@ static __u8 momo2_rdesc_fixed[] = {
0xC0 /* End Collection */
};
+static __u8 ffg_rdesc_fixed[] = {
+0x05, 0x01, /* Usage Page (Desktop), */
+0x09, 0x04, /* Usage (Joystik), */
+0xA1, 0x01, /* Collection (Application), */
+0xA1, 0x02, /* Collection (Logical), */
+0x95, 0x01, /* Report Count (1), */
+0x75, 0x0A, /* Report Size (10), */
+0x15, 0x00, /* Logical Minimum (0), */
+0x26, 0xFF, 0x03, /* Logical Maximum (1023), */
+0x35, 0x00, /* Physical Minimum (0), */
+0x46, 0xFF, 0x03, /* Physical Maximum (1023), */
+0x09, 0x30, /* Usage (X), */
+0x81, 0x02, /* Input (Variable), */
+0x95, 0x06, /* Report Count (6), */
+0x75, 0x01, /* Report Size (1), */
+0x25, 0x01, /* Logical Maximum (1), */
+0x45, 0x01, /* Physical Maximum (1), */
+0x05, 0x09, /* Usage Page (Button), */
+0x19, 0x01, /* Usage Minimum (01h), */
+0x29, 0x06, /* Usage Maximum (06h), */
+0x81, 0x02, /* Input (Variable), */
+0x95, 0x01, /* Report Count (1), */
+0x75, 0x08, /* Report Size (8), */
+0x26, 0xFF, 0x00, /* Logical Maximum (255), */
+0x46, 0xFF, 0x00, /* Physical Maximum (255), */
+0x06, 0x00, 0xFF, /* Usage Page (FF00h), */
+0x09, 0x01, /* Usage (01h), */
+0x81, 0x02, /* Input (Variable), */
+0x05, 0x01, /* Usage Page (Desktop), */
+0x81, 0x01, /* Input (Constant), */
+0x09, 0x31, /* Usage (Y), */
+0x81, 0x02, /* Input (Variable), */
+0x09, 0x32, /* Usage (Z), */
+0x81, 0x02, /* Input (Variable), */
+0x06, 0x00, 0xFF, /* Usage Page (FF00h), */
+0x09, 0x01, /* Usage (01h), */
+0x81, 0x02, /* Input (Variable), */
+0xC0, /* End Collection, */
+0xA1, 0x02, /* Collection (Logical), */
+0x09, 0x02, /* Usage (02h), */
+0x95, 0x07, /* Report Count (7), */
+0x91, 0x02, /* Output (Variable), */
+0xC0, /* End Collection, */
+0xC0 /* End Collection */
+};
+
/*
* Certain Logitech keyboards send in report #3 keys which are far
* above the logical maximum described in descriptor. This extends
@@ -361,6 +408,15 @@ static __u8 *lg_report_fixup(struct hid_device *hdev, __u8 *rdesc,
switch (hdev->product) {
+ case USB_DEVICE_ID_LOGITECH_WINGMAN_FFG:
+ if (*rsize == FFG_RDESC_ORIG_SIZE) {
+ hid_info(hdev,
+ "fixing up Logitech Wingman Formula Force GP report descriptor\n");
+ rdesc = ffg_rdesc_fixed;
+ *rsize = sizeof(ffg_rdesc_fixed);
+ }
+ break;
+
/* Several wheels report as this id when operating in emulation mode. */
case USB_DEVICE_ID_LOGITECH_WHEEL:
if (*rsize == DF_RDESC_ORIG_SIZE) {
@@ -608,6 +664,7 @@ static int lg_input_mapped(struct hid_device *hdev, struct hid_input *hi,
usage->code == ABS_RZ)) {
switch (hdev->product) {
case USB_DEVICE_ID_LOGITECH_G29_WHEEL:
+ case USB_DEVICE_ID_LOGITECH_WINGMAN_FFG:
case USB_DEVICE_ID_LOGITECH_WHEEL:
case USB_DEVICE_ID_LOGITECH_MOMO_WHEEL:
case USB_DEVICE_ID_LOGITECH_DFP_WHEEL:
@@ -807,7 +864,7 @@ static const struct hid_device_id lg_devices[] = {
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WII_WHEEL),
.driver_data = LG_FF4 },
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_FFG),
- .driver_data = LG_FF },
+ .driver_data = LG_NOGET | LG_FF4 },
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2),
.driver_data = LG_FF2 },
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FLIGHT_SYSTEM_G940),
diff --git a/drivers/hid/hid-lg4ff.c b/drivers/hid/hid-lg4ff.c
index cc5c9ebd..1fc12e3 100644
--- a/drivers/hid/hid-lg4ff.c
+++ b/drivers/hid/hid-lg4ff.c
@@ -137,6 +137,7 @@ struct lg4ff_alternate_mode {
};
static const struct lg4ff_wheel lg4ff_devices[] = {
+ {USB_DEVICE_ID_LOGITECH_WINGMAN_FFG, lg4ff_wheel_effects, 40, 180, NULL},
{USB_DEVICE_ID_LOGITECH_WHEEL, lg4ff_wheel_effects, 40, 270, NULL},
{USB_DEVICE_ID_LOGITECH_MOMO_WHEEL, lg4ff_wheel_effects, 40, 270, NULL},
{USB_DEVICE_ID_LOGITECH_DFP_WHEEL, lg4ff_wheel_effects, 40, 900, lg4ff_set_range_dfp},
@@ -345,6 +346,7 @@ int lg4ff_raw_event(struct hid_device *hdev, struct hid_report *report,
rd[5] = rd[3];
rd[6] = 0x7F;
return 1;
+ case USB_DEVICE_ID_LOGITECH_WINGMAN_FFG:
case USB_DEVICE_ID_LOGITECH_MOMO_WHEEL:
case USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2:
rd[4] = rd[3];
--
2.7.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Patch-V2 6/6] HID:hid-logitech: Documentation updates/corrections
2016-09-18 16:55 ` [Patch-V2 1/6] HID:hid-logitech: Introduce control for combined pedals feature Simon Wood
` (3 preceding siblings ...)
2016-09-18 16:55 ` [Patch-V2 5/6] HID:hid-logitech: Improve Wingman Formula Force GP support Simon Wood
@ 2016-09-18 16:55 ` Simon Wood
2016-09-26 13:41 ` [Patch-V2 1/6] HID:hid-logitech: Introduce control for combined pedals feature Jiri Kosina
5 siblings, 0 replies; 14+ messages in thread
From: Simon Wood @ 2016-09-18 16:55 UTC (permalink / raw)
To: linux-input
Cc: linux-kernel, Jiri Kosina, Edwin Velds, Elias Vanderstuyft,
Michal Maly, Simon Wood
Signed-off-by: Simon Wood <simon@mungewell.org>
---
.../ABI/testing/sysfs-driver-hid-logitech-lg4ff | 6 ++++++
drivers/hid/Kconfig | 23 +++++++++++++---------
2 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/Documentation/ABI/testing/sysfs-driver-hid-logitech-lg4ff b/Documentation/ABI/testing/sysfs-driver-hid-logitech-lg4ff
index 9cd7c5a..305dffd 100644
--- a/Documentation/ABI/testing/sysfs-driver-hid-logitech-lg4ff
+++ b/Documentation/ABI/testing/sysfs-driver-hid-logitech-lg4ff
@@ -35,6 +35,12 @@ Description: Displays a set of alternate modes supported by a wheel. Each
DF-EX <*--------> G25 <-> G27
DF-EX <*----------------> G27
+ G29:
+ DF-EX <*> DFP <-> G25 <-> G27 <-> G29
+ DF-EX <*--------> G25 <-> G27 <-> G29
+ DF-EX <*----------------> G27 <-> G29
+ DF-EX <*------------------------> G29
+
DFGT:
DF-EX <*> DFP <-> DFGT
DF-EX <*--------> DFGT
diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
index 78ac481..5227d8a 100644
--- a/drivers/hid/Kconfig
+++ b/drivers/hid/Kconfig
@@ -457,8 +457,6 @@ config LOGITECH_FF
- Logitech WingMan Cordless RumblePad
- Logitech WingMan Cordless RumblePad 2
- Logitech WingMan Force 3D
- - Logitech Formula Force EX
- - Logitech WingMan Formula Force GP
and if you want to enable force feedback for them.
Note: if you say N here, this device will still be supported, but without
@@ -488,15 +486,22 @@ config LOGIWHEELS_FF
select INPUT_FF_MEMLESS
default LOGITECH_FF
help
- Say Y here if you want to enable force feedback and range setting
+ Say Y here if you want to enable force feedback and range setting(*)
support for following Logitech wheels:
+ - Logitech G25 (*)
+ - Logitech G27 (*)
+ - Logitech G29 (*)
- Logitech Driving Force
- - Logitech Driving Force Pro
- - Logitech Driving Force GT
- - Logitech G25
- - Logitech G27
- - Logitech MOMO/MOMO 2
- - Logitech Formula Force EX
+ - Logitech Driving Force Pro (*)
+ - Logitech Driving Force GT (*)
+ - Logitech Driving Force EX/RX
+ - Logitech Driving Force Wireless
+ - Logitech Speed Force Wireless
+ - Logitech MOMO Force
+ - Logitech MOMO Racing Force
+ - Logitech Formula Force GP
+ - Logitech Formula Force EX/RX
+ - Logitech Wingman Formula Force GP
config HID_MAGICMOUSE
tristate "Apple Magic Mouse/Trackpad multi-touch support"
--
2.7.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [Patch-V2 1/6] HID:hid-logitech: Introduce control for combined pedals feature
2016-09-18 16:55 ` [Patch-V2 1/6] HID:hid-logitech: Introduce control for combined pedals feature Simon Wood
` (4 preceding siblings ...)
2016-09-18 16:55 ` [Patch-V2 6/6] HID:hid-logitech: Documentation updates/corrections Simon Wood
@ 2016-09-26 13:41 ` Jiri Kosina
5 siblings, 0 replies; 14+ messages in thread
From: Jiri Kosina @ 2016-09-26 13:41 UTC (permalink / raw)
To: Simon Wood
Cc: linux-input, linux-kernel, Edwin Velds, Elias Vanderstuyft,
Michal Maly, Simon Wood
Hi,
the series is now in hid.git#for-4.9/logitech. Thanks,
--
Jiri Kosina
SUSE Labs
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2016-09-26 13:41 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-09-09 22:50 [PATCH 1/5] HID:hid-logitech: Introduce dev_attr for combined pedals feature Simon Wood
2016-09-09 22:50 ` [PATCH 2/5] HID:hid-logitech: Add combined pedal support Logitech wheels Simon Wood
2016-09-09 22:50 ` [PATCH 3/5] HID:hid-logitech: Compute combined pedals if not supplied Simon Wood
2016-09-09 22:50 ` [PATCH 4/5] HID:hid-logitech: Rewrite of descriptor for all DF wheels Simon Wood
2016-09-10 1:34 ` kbuild test robot
2016-09-14 18:55 ` Simon Wood
2016-09-09 22:50 ` [PATCH 5/5] HID:hid-logitech: Documentation updates/corrections Simon Wood
2016-09-18 16:55 ` [Patch-V2 1/6] HID:hid-logitech: Introduce control for combined pedals feature Simon Wood
2016-09-18 16:55 ` [Patch-V2 2/6] HID:hid-logitech: Add combined pedal support Logitech wheels Simon Wood
2016-09-18 16:55 ` [Patch-V2 3/6] HID:hid-logitech: Compute combined pedals value Simon Wood
2016-09-18 16:55 ` [Patch-V2 4/6] HID:hid-logitech: Rewrite of descriptor for all DF wheels Simon Wood
2016-09-18 16:55 ` [Patch-V2 5/6] HID:hid-logitech: Improve Wingman Formula Force GP support Simon Wood
2016-09-18 16:55 ` [Patch-V2 6/6] HID:hid-logitech: Documentation updates/corrections Simon Wood
2016-09-26 13:41 ` [Patch-V2 1/6] HID:hid-logitech: Introduce control for combined pedals feature Jiri Kosina
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).