On Thu, Oct 01, 2015 at 10:57:17PM +0200, Pavel Rojtberg wrote:
> From: Pavel Rojtberg <[email protected]>
>
> as discussed here[0], x360w is the only pad that maps dpad_to_button.
> This is bad for downstream developers as they have to differ between
> x360 and x360w which is not intuitive.
>
> This patch implements the suggested solution of exposing the dpad both
> as axes and as buttons. This retains backward compability with software
> already dealing with the difference while makes new software work as
> expected across x360/ x360w pads.
>
> [0] http://www.spinics.net/lists/linux-input/msg34421.html
>
> Signed-off-by: Pavel Rojtberg <[email protected]>
Applied, thank you.
> ---
> drivers/input/joystick/xpad.c | 18 ++++++++++++++++--
> 1 file changed, 16 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
> index 1195dbb..15da2a3 100644
> --- a/drivers/input/joystick/xpad.c
> +++ b/drivers/input/joystick/xpad.c
> @@ -436,7 +436,14 @@ static void xpad360_process_packet(struct usb_xpad *xpad,
> input_report_key(dev, BTN_TRIGGER_HAPPY2, data[2] & 0x08);
> input_report_key(dev, BTN_TRIGGER_HAPPY3, data[2] & 0x01);
> input_report_key(dev, BTN_TRIGGER_HAPPY4, data[2] & 0x02);
> - } else {
> + }
> + /* this should be a simple else block. However historically xbox360w
> + * has mapped DPAD to buttons while xbox360 did not.
> + * This made no sense, but now we can not just switch back and have to
> + * support both behaviors.
> + */
> + if (!(xpad->mapping & MAP_DPAD_TO_BUTTONS) ||
> + xpad->xtype == XTYPE_XBOX360W) {
> input_report_abs(dev, ABS_HAT0X,
> !!(data[2] & 0x08) - !!(data[2] & 0x04));
> input_report_abs(dev, ABS_HAT0Y,
> @@ -1144,7 +1151,14 @@ static int xpad_probe(struct usb_interface *intf,
> const struct usb_device_id *id
> if (xpad->mapping & MAP_DPAD_TO_BUTTONS) {
> for (i = 0; xpad_btn_pad[i] >= 0; i++)
> __set_bit(xpad_btn_pad[i], input_dev->keybit);
> - } else {
> + }
> + /* this should be a simple else block. However historically xbox360w
> + * has mapped DPAD to buttons while xbox360 did not.
> + * This made no sense, but now we can not just switch back and have to
> + * support both behaviors.
> + */
> + if(!(xpad->mapping & MAP_DPAD_TO_BUTTONS) ||
> + xpad->xtype == XTYPE_XBOX360W) {
> for (i = 0; xpad_abs_pad[i] >= 0; i++)
> xpad_set_up_abs(input_dev, xpad_abs_pad[i]);
> }
> --
> 1.9.1
>
--
Dmitry
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html