On Sun, Apr 17, 2022 at 06:15:26PM +0200, Pavel Rojtberg wrote: > From: Pavel Rojtberg <rojtberg@xxxxxxxxx> Wait, who wrote this, "lawl" or you? > Newer gamepads turn themselves off when the mode button is held down. > For XBOX360W gamepads we must do this this in the driver. > > Signed-off-by: lawl <github@xxxxxxxxxxxxx> We need a real name here please. > Signed-off-by: Pavel Rojtberg <rojtberg@xxxxxxxxx> > --- > drivers/input/joystick/xpad.c | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c > index 7640cbb..a9894a6 100644 > --- a/drivers/input/joystick/xpad.c > +++ b/drivers/input/joystick/xpad.c > @@ -620,11 +620,13 @@ struct usb_xpad { > int pad_nr; /* the order x360 pads were attached */ > const char *name; /* name of the device */ > struct work_struct work; /* init/remove device from callback */ > + time64_t mode_btn_down_ts; > }; > > static int xpad_init_input(struct usb_xpad *xpad); > static void xpad_deinit_input(struct usb_xpad *xpad); > static void xpadone_ack_mode_report(struct usb_xpad *xpad, u8 seq_num); > +static void xpad360w_poweroff_controller(struct usb_xpad *xpad); > > /* > * xpad_process_packet > @@ -776,6 +778,23 @@ static void xpad360_process_packet(struct usb_xpad *xpad, struct input_dev *dev, > } > > input_sync(dev); > + > + /* XBOX360W controllers can't be turned off without driver assistance */ > + if (xpad->xtype == XTYPE_XBOX360W) { > + if (xpad->mode_btn_down_ts > 0 > + && xpad->pad_present > + && (ktime_get_seconds() - xpad->mode_btn_down_ts) >= 5) { Did you run this through checkpatch? Please indent properly and put the "&&" on the end of the lines. And what does "5" mean here? > + xpad360w_poweroff_controller(xpad); > + xpad->mode_btn_down_ts = 0; > + return; > + } > + > + /* mode button down/up */ > + if (data[3] & 0x04) BIT(2)? thanks, greg k-h