Message ID | 1372386523.28740.8.camel@haswell.thedillows.org (mailing list archive) |
---|---|
State | New, archived |
Delegated to: | Jiri Kosina |
Headers | show |
Hi David, many thanks for this fast and great patch, it works nice. Hope it will be included in kernel very soon :-) thanks much Stephan Am 28.06.2013 04:28, schrieb David Dillow: > Some applications using the PS3 remote would like to have autorepeat > from the device. Use the input subsystem's software emulation to provide > this capability, and enable those that don't need it to turn it off. > --- > I'm not sure this is the correct approach, or if it is even appropriate > for a remote to do autorepeat. However, the media/rc subsystem does do > it by default, and it's been requested by users, so there is at least > some demand. > > This compiled against the hid-sony driver with the PS3 remote changes > merged, but I have done no testing of it. If the approach seems > reasonable, I'll try to test it when the MythTV is idle. > > drivers/hid/hid-sony.c | 20 ++++++++++++++++++++ > 1 file changed, 20 insertions(+) > diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c > index ecbc749..0bbcd07 100644 > --- a/drivers/hid/hid-sony.c > +++ b/drivers/hid/hid-sony.c > @@ -274,6 +274,24 @@ static int ps3remote_mapping(struct hid_device *hdev, struct hid_input *hi, > return 1; > } > > +static int ps3remote_setup_repeat(struct hid_device *hdev) > +{ > + struct hid_input *hidinput = list_first_entry(&hdev->inputs, > + struct hid_input, list); > + struct input_dev *input = hidinput->input; > + > + /* > + * Set up autorepeat defaults per the remote control subsystem; > + * this must be done after hid_hw_start(), as having these non-zero > + * at the time of input_register_device() tells the input system that > + * the hardware does the autorepeat, and the PS3 remote does not. > + */ > + set_bit(EV_REP, input->evbit); > + input->rep[REP_DELAY] = 500; > + input->rep[REP_PERIOD] = 125; > + > + return 0; > +} > > /* Sony Vaio VGX has wrongly mouse pointer declared as constant */ > static __u8 *sony_report_fixup(struct hid_device *hdev, __u8 *rdesc, > @@ -659,6 +677,8 @@ static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id) > ret = sixaxis_set_operational_bt(hdev); > else if (sc->quirks & BUZZ_CONTROLLER) > ret = buzz_init(hdev); > + else if (sc->quirks & PS3REMOTE) > + ret = ps3remote_setup_repeat(hdev); > else > ret = 0; > > > -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c index ecbc749..0bbcd07 100644 --- a/drivers/hid/hid-sony.c +++ b/drivers/hid/hid-sony.c @@ -274,6 +274,24 @@ static int ps3remote_mapping(struct hid_device *hdev, struct hid_input *hi, return 1; } +static int ps3remote_setup_repeat(struct hid_device *hdev) +{ + struct hid_input *hidinput = list_first_entry(&hdev->inputs, + struct hid_input, list); + struct input_dev *input = hidinput->input; + + /* + * Set up autorepeat defaults per the remote control subsystem; + * this must be done after hid_hw_start(), as having these non-zero + * at the time of input_register_device() tells the input system that + * the hardware does the autorepeat, and the PS3 remote does not. + */ + set_bit(EV_REP, input->evbit); + input->rep[REP_DELAY] = 500; + input->rep[REP_PERIOD] = 125; + + return 0; +} /* Sony Vaio VGX has wrongly mouse pointer declared as constant */ static __u8 *sony_report_fixup(struct hid_device *hdev, __u8 *rdesc, @@ -659,6 +677,8 @@ static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id) ret = sixaxis_set_operational_bt(hdev); else if (sc->quirks & BUZZ_CONTROLLER) ret = buzz_init(hdev); + else if (sc->quirks & PS3REMOTE) + ret = ps3remote_setup_repeat(hdev); else ret = 0;