Re: [PATCH 1/3] Input: xpad - fix support for some third-party controllers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 3/23/23 18:30, Dmitry Torokhov wrote:
> On Fri, Feb 24, 2023 at 05:21:46PM -0800, Vicki Pfau wrote:
>> Some third-party controllers, such as the HORPIAD FPS for Nintendo Switch and
>> Gamesir-G3w, require a specific packet that the first-party XInput driver sends
>> before it will start sending reports. It's not currently known what this packet
>> does, but since the first-party driver always sends it's unlikely that this
>> could cause issues with existing controllers.
>>
>> Co-authored-by: Andrey Smirnov <andrew.smirnov@xxxxxxxxx>
>> Signed-off-by: Vicki Pfau <vi@xxxxxxxxxxx>
>> ---
>>  drivers/input/joystick/xpad.c | 22 ++++++++++++++++++++++
>>  1 file changed, 22 insertions(+)
>>
>> diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
>> index 403b57e8176b..04af2213407f 100644
>> --- a/drivers/input/joystick/xpad.c
>> +++ b/drivers/input/joystick/xpad.c
>> @@ -265,6 +265,7 @@ static const struct xpad_device {
>>  	{ 0x0f0d, 0x0067, "HORIPAD ONE", 0, XTYPE_XBOXONE },
>>  	{ 0x0f0d, 0x0078, "Hori Real Arcade Pro V Kai Xbox One", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE },
>>  	{ 0x0f0d, 0x00c5, "Hori Fighting Commander ONE", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE },
>> +	{ 0x0f0d, 0x00dc, "HORIPAD FPS for Nintendo Switch", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
>>  	{ 0x0f30, 0x010b, "Philips Recoil", 0, XTYPE_XBOX },
>>  	{ 0x0f30, 0x0202, "Joytech Advanced Controller", 0, XTYPE_XBOX },
>>  	{ 0x0f30, 0x8888, "BigBen XBMiniPad Controller", 0, XTYPE_XBOX },
>> @@ -2020,6 +2021,27 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
>>  		goto err_free_in_urb;
>>  	}
>>  
>> +	if (xpad->xtype == XTYPE_XBOX360) {
>> +		/* Some third-party controllers Xbox 360-style controllers
>> +		 * require this message to finish initialization */
>> +		uint8_t dummy[20];
>> +		int ret;
>> +
>> +		usb_control_msg_recv(udev, 0,
>> +				     /* bRequest */ 0x01,
>> +				     /* bmRequestType */
>> +				     USB_TYPE_VENDOR | USB_DIR_IN |
>> +				     USB_RECIP_INTERFACE,
>> +				     /* wValue */ 0x100,
>> +				     /* wIndex */ 0x00,
>> +				     dummy, sizeof(dummy),
>> +				     25,
>> +				     GFP_KERNEL);
>> +		if (ret)
>> +			dev_warn(&xpad->dev->dev,
>> +				 "unable to receive magic message: %d\n", ret);
> 
> You are not setting "ret", how was this tested?

Presumably with a stack frame that had that space unwittingly initialized to zero. Good catch, thanks. I've resubmitted with this fixed in v2.

> 
>> +	}
>> +
>>  	ep_irq_in = ep_irq_out = NULL;
>>  
>>  	for (i = 0; i < 2; i++) {
>> -- 
>> 2.39.2
>>
> 



[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux