diff options
Diffstat (limited to 'old/input-xpad-properly-name-the-led-class-devices.patch')
| -rw-r--r-- | old/input-xpad-properly-name-the-led-class-devices.patch | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/old/input-xpad-properly-name-the-led-class-devices.patch b/old/input-xpad-properly-name-the-led-class-devices.patch new file mode 100644 index 00000000000000..5bb65928d5fd17 --- /dev/null +++ b/old/input-xpad-properly-name-the-led-class-devices.patch @@ -0,0 +1,93 @@ +From foo@baz Fri Jan 31 13:18:58 CET 2014 +Date: Fri, 31 Jan 2014 13:18:58 +0100 +To: Greg KH <gregkh@linuxfoundation.org> +From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> +Subject: [PATCH] Input: xpad: properly name the LED class devices + +From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> + +Don't just increment the LED device number, but use the joystick id so +that you have a chance to associate the LED device to the correct xpad +device by the name, instead of having to use the sysfs tree, which +really doesn't work. + +Cc: "Pierre-Loup A. Griffais" <pgriffais@valvesoftware.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> + +--- + drivers/input/joystick/xpad.c | 40 +++++++++++++++++----------------------- + 1 file changed, 17 insertions(+), 23 deletions(-) + +--- a/drivers/input/joystick/xpad.c ++++ b/drivers/input/joystick/xpad.c +@@ -781,8 +781,6 @@ static void xpad_led_set(struct led_clas + + static int xpad_led_probe(struct usb_xpad *xpad) + { +- static atomic_t led_seq = ATOMIC_INIT(0); +- long led_no; + struct xpad_led *led; + struct led_classdev *led_cdev; + int error; +@@ -794,9 +792,7 @@ static int xpad_led_probe(struct usb_xpa + if (!led) + return -ENOMEM; + +- led_no = (long)atomic_inc_return(&led_seq) - 1; +- +- snprintf(led->name, sizeof(led->name), "xpad%ld", led_no); ++ snprintf(led->name, sizeof(led->name), "xpad%d", xpad->joydev_id); + led->xpad = xpad; + + led_cdev = &led->led_cdev; +@@ -944,16 +940,17 @@ static int xpad_init_input(struct usb_xp + } + + error = xpad_init_ff(xpad); +- if (error) +- goto fail_init_ff; +- +- error = xpad_led_probe(xpad); +- if (error) +- goto fail_init_led; ++ if (error) { ++ input_free_device(input_dev); ++ return error; ++ } + + error = input_register_device(xpad->dev); +- if (error) +- goto fail_input_register; ++ if (error) { ++ input_ff_destroy(input_dev); ++ input_free_device(input_dev); ++ return error; ++ } + + joydev_dev = device_find_child(&xpad->dev->dev, NULL, + xpad_find_joydev); +@@ -966,17 +963,14 @@ static int xpad_init_input(struct usb_xp + xpad_send_led_command(xpad, (xpad->joydev_id % 4) + 2); + } + +- return 0; +- +-fail_input_register: +- xpad_led_disconnect(xpad); +- +-fail_init_led: +- input_ff_destroy(input_dev); ++ error = xpad_led_probe(xpad); ++ if (error) { ++ input_ff_destroy(input_dev); ++ input_unregister_device(input_dev); ++ return error; ++ } + +-fail_init_ff: +- input_free_device(input_dev); +- return error; ++ return 0; + } + + static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id) |
