On Sat, Jul 11, 2015 at 01:47:44AM +0200, Pavel Rojtberg wrote: > From: Pavel Rojtberg <rojtberg@xxxxxxxxx> > > We initializing the driver/device, we really don't know how many > controllers are connected. So send a "query presence" command to the > base-station. (Command discovered by Zachary Lund) > > Note, this means we now do not "preallocate" all 4 devices when a single > wireless base station is seen, but require the device to be properly > connected to the base station before that can happen. The allocation of > the device happens in the next patch, not here, so in a way, this patch > breaks all wireless devices... Then we have to combine it with the one adding necessary handling. > > based on patch by > "Pierre-Loup A. Griffais" <pgriffais@xxxxxxxxxxxxxxxxx> > > presence packet taken from: > https://github.com/computerquip/xpad5 > > Signed-off-by: Pavel Rojtberg <rojtberg@xxxxxxxxx> > --- > drivers/input/joystick/xpad.c | 33 +++++++++++++++++++++++++++++---- > 1 file changed, 29 insertions(+), 4 deletions(-) > > diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c > index ed17e5d..3349861 100644 > --- a/drivers/input/joystick/xpad.c > +++ b/drivers/input/joystick/xpad.c > @@ -1223,11 +1223,36 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id > usb_kill_urb(xpad->irq_in); > goto fail4; > } > + > + /* > + * send presence packet > + * This will force the controller to resend connection packets. > + * This is useful in the case we activate the module after the > + * adapter has been plugged in, as it won't automatically > + * send us info about the controllers. > + */ > + mutex_lock(&xpad->odata_mutex); > + xpad->odata[0] = 0x08; > + xpad->odata[1] = 0x00; > + xpad->odata[2] = 0x0F; > + xpad->odata[3] = 0xC0; > + xpad->odata[4] = 0x00; > + xpad->odata[5] = 0x00; > + xpad->odata[6] = 0x00; > + xpad->odata[7] = 0x00; > + xpad->odata[8] = 0x00; > + xpad->odata[9] = 0x00; > + xpad->odata[10] = 0x00; > + xpad->odata[11] = 0x00; > + xpad->irq_out->transfer_buffer_length = 12; > + usb_submit_urb(xpad->irq_out, GFP_KERNEL); > + mutex_unlock(&xpad->odata_mutex); > + } else { > + xpad->pad_present = 1; > + error = xpad_init_input(xpad); > + if (error) > + goto fail4; > } > - xpad->pad_present = 1; > - error = xpad_init_input(xpad); > - if (error) > - goto fail4; > > return 0; > > -- > 1.9.1 > -- Dmitry -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html