Em Wed, 21 Sep 2016 10:54:21 +0100 Sean Young <sean@xxxxxxxx> escreveu: > We might want to know what protocol a remote uses when we do not know. With > this patch and another patch for v4l-utils (follows), you can do that with: > > ./ir-keytable -p rc-5,nec,rc-6,jvc,sony,sanyo,sharp,xmp -t > Testing events. Please, press CTRL-C to abort. > 1474415431.689685: event type EV_MSC(0x04): protocol = RC_TYPE_RC6_MCE > 1474415431.689685: event type EV_MSC(0x04): scancode = 0x800f040e > 1474415431.689685: event type EV_SYN(0x00). > > This makes RC_TYPE_* part of the ABI. We also remove the enum rc_type, > since in input-event-codes.h we cannot not use enums. > > In addition, now that the input layer knows the rc protocol and scancode, > at a later point we could add a feature where keymaps could be created > based on both protocol and scancode, not just scancode. We need Dmitry's ack in order to apply this one. > > Signed-off-by: Sean Young <sean@xxxxxxxx> > --- > drivers/media/i2c/ir-kbd-i2c.c | 17 +++++---- > drivers/media/pci/bt8xx/bttv-input.c | 4 +-- > drivers/media/pci/cx88/cx88-input.c | 4 +-- > drivers/media/pci/ivtv/ivtv-i2c.c | 4 +-- > drivers/media/pci/saa7134/saa7134-input.c | 18 +++++----- > drivers/media/rc/img-ir/img-ir-hw.h | 2 +- > drivers/media/rc/ir-nec-decoder.c | 3 +- > drivers/media/rc/ir-rc5-decoder.c | 3 +- > drivers/media/rc/ir-rc6-decoder.c | 3 +- > drivers/media/rc/ir-sony-decoder.c | 3 +- > drivers/media/rc/rc-main.c | 11 +++--- > drivers/media/usb/cx231xx/cx231xx-input.c | 4 +-- > drivers/media/usb/dvb-usb-v2/af9015.c | 2 +- > drivers/media/usb/dvb-usb-v2/af9035.c | 3 +- > drivers/media/usb/dvb-usb-v2/az6007.c | 2 +- > drivers/media/usb/dvb-usb-v2/rtl28xxu.c | 2 +- > drivers/media/usb/dvb-usb/dib0700_core.c | 2 +- > drivers/media/usb/dvb-usb/dib0700_devices.c | 3 +- > drivers/media/usb/dvb-usb/dtt200u.c | 2 +- > drivers/media/usb/em28xx/em28xx-input.c | 15 ++++---- > drivers/media/usb/tm6000/tm6000-input.c | 3 +- > include/media/i2c/ir-kbd-i2c.h | 4 +-- > include/media/rc-core.h | 7 ++-- > include/media/rc-map.h | 54 ++--------------------------- > include/uapi/linux/input-event-codes.h | 28 +++++++++++++++ > 25 files changed, 89 insertions(+), 114 deletions(-) > > diff --git a/drivers/media/i2c/ir-kbd-i2c.c b/drivers/media/i2c/ir-kbd-i2c.c > index bf82726..f8435fa 100644 > --- a/drivers/media/i2c/ir-kbd-i2c.c > +++ b/drivers/media/i2c/ir-kbd-i2c.c > @@ -62,7 +62,7 @@ module_param(debug, int, 0644); /* debug level (0,1,2) */ > > /* ----------------------------------------------------------------------- */ > > -static int get_key_haup_common(struct IR_i2c *ir, enum rc_type *protocol, > +static int get_key_haup_common(struct IR_i2c *ir, u32 *protocol, > u32 *scancode, u8 *ptoggle, int size, int offset) > { > unsigned char buf[6]; > @@ -104,13 +104,13 @@ static int get_key_haup_common(struct IR_i2c *ir, enum rc_type *protocol, > return 1; > } > > -static int get_key_haup(struct IR_i2c *ir, enum rc_type *protocol, > +static int get_key_haup(struct IR_i2c *ir, u32 *protocol, > u32 *scancode, u8 *toggle) > { > return get_key_haup_common (ir, protocol, scancode, toggle, 3, 0); > } > > -static int get_key_haup_xvr(struct IR_i2c *ir, enum rc_type *protocol, > +static int get_key_haup_xvr(struct IR_i2c *ir, u32 *protocol, > u32 *scancode, u8 *toggle) > { > int ret; > @@ -129,7 +129,7 @@ static int get_key_haup_xvr(struct IR_i2c *ir, enum rc_type *protocol, > return get_key_haup_common(ir, protocol, scancode, toggle, 6, 3); > } > > -static int get_key_pixelview(struct IR_i2c *ir, enum rc_type *protocol, > +static int get_key_pixelview(struct IR_i2c *ir, u32 *protocol, > u32 *scancode, u8 *toggle) > { > unsigned char b; > @@ -146,7 +146,7 @@ static int get_key_pixelview(struct IR_i2c *ir, enum rc_type *protocol, > return 1; > } > > -static int get_key_fusionhdtv(struct IR_i2c *ir, enum rc_type *protocol, > +static int get_key_fusionhdtv(struct IR_i2c *ir, u32 *protocol, > u32 *scancode, u8 *toggle) > { > unsigned char buf[4]; > @@ -171,7 +171,7 @@ static int get_key_fusionhdtv(struct IR_i2c *ir, enum rc_type *protocol, > return 1; > } > > -static int get_key_knc1(struct IR_i2c *ir, enum rc_type *protocol, > +static int get_key_knc1(struct IR_i2c *ir, u32 *protocol, > u32 *scancode, u8 *toggle) > { > unsigned char b; > @@ -201,7 +201,7 @@ static int get_key_knc1(struct IR_i2c *ir, enum rc_type *protocol, > return 1; > } > > -static int get_key_avermedia_cardbus(struct IR_i2c *ir, enum rc_type *protocol, > +static int get_key_avermedia_cardbus(struct IR_i2c *ir, u32 *protocol, > u32 *scancode, u8 *toggle) > { > unsigned char subaddr, key, keygroup; > @@ -248,8 +248,7 @@ static int get_key_avermedia_cardbus(struct IR_i2c *ir, enum rc_type *protocol, > > static int ir_key_poll(struct IR_i2c *ir) > { > - enum rc_type protocol; > - u32 scancode; > + u32 protocol, scancode; > u8 toggle; > int rc; > > diff --git a/drivers/media/pci/bt8xx/bttv-input.c b/drivers/media/pci/bt8xx/bttv-input.c > index a75c53d..9bc5c3b 100644 > --- a/drivers/media/pci/bt8xx/bttv-input.c > +++ b/drivers/media/pci/bt8xx/bttv-input.c > @@ -331,8 +331,8 @@ static void bttv_ir_stop(struct bttv *btv) > * Get_key functions used by I2C remotes > */ > > -static int get_key_pv951(struct IR_i2c *ir, enum rc_type *protocol, > - u32 *scancode, u8 *toggle) > +static int get_key_pv951(struct IR_i2c *ir, u32 *protocol, u32 *scancode, > + u8 *toggle) > { > unsigned char b; > > diff --git a/drivers/media/pci/cx88/cx88-input.c b/drivers/media/pci/cx88/cx88-input.c > index 6eac81b..8950d78 100644 > --- a/drivers/media/pci/cx88/cx88-input.c > +++ b/drivers/media/pci/cx88/cx88-input.c > @@ -556,8 +556,8 @@ void cx88_ir_irq(struct cx88_core *core) > ir_raw_event_handle(ir->dev); > } > > -static int get_key_pvr2000(struct IR_i2c *ir, enum rc_type *protocol, > - u32 *scancode, u8 *toggle) > +static int get_key_pvr2000(struct IR_i2c *ir, u32 *protocol, u32 *scancode, > + u8 *toggle) > { > int flags, code; > > diff --git a/drivers/media/pci/ivtv/ivtv-i2c.c b/drivers/media/pci/ivtv/ivtv-i2c.c > index dd57442..f026d34 100644 > --- a/drivers/media/pci/ivtv/ivtv-i2c.c > +++ b/drivers/media/pci/ivtv/ivtv-i2c.c > @@ -148,8 +148,8 @@ static const char * const hw_devicenames[] = { > "ir_video", /* IVTV_HW_I2C_IR_RX_ADAPTEC */ > }; > > -static int get_key_adaptec(struct IR_i2c *ir, enum rc_type *protocol, > - u32 *scancode, u8 *toggle) > +static int get_key_adaptec(struct IR_i2c *ir, u32 *protocol, u32 *scancode, > + u8 *toggle) > { > unsigned char keybuf[4]; > > diff --git a/drivers/media/pci/saa7134/saa7134-input.c b/drivers/media/pci/saa7134/saa7134-input.c > index eff52bb..d480fb5 100644 > --- a/drivers/media/pci/saa7134/saa7134-input.c > +++ b/drivers/media/pci/saa7134/saa7134-input.c > @@ -112,7 +112,7 @@ static int build_key(struct saa7134_dev *dev) > > /* --------------------- Chip specific I2C key builders ----------------- */ > > -static int get_key_flydvb_trio(struct IR_i2c *ir, enum rc_type *protocol, > +static int get_key_flydvb_trio(struct IR_i2c *ir, u32 *protocol, > u32 *scancode, u8 *toggle) > { > int gpio; > @@ -165,7 +165,7 @@ static int get_key_flydvb_trio(struct IR_i2c *ir, enum rc_type *protocol, > return 1; > } > > -static int get_key_msi_tvanywhere_plus(struct IR_i2c *ir, enum rc_type *protocol, > +static int get_key_msi_tvanywhere_plus(struct IR_i2c *ir, u32 *protocol, > u32 *scancode, u8 *toggle) > { > unsigned char b; > @@ -214,7 +214,7 @@ static int get_key_msi_tvanywhere_plus(struct IR_i2c *ir, enum rc_type *protocol > } > > /* copied and modified from get_key_msi_tvanywhere_plus() */ > -static int get_key_kworld_pc150u(struct IR_i2c *ir, enum rc_type *protocol, > +static int get_key_kworld_pc150u(struct IR_i2c *ir, u32 *protocol, > u32 *scancode, u8 *toggle) > { > unsigned char b; > @@ -262,7 +262,7 @@ static int get_key_kworld_pc150u(struct IR_i2c *ir, enum rc_type *protocol, > return 1; > } > > -static int get_key_purpletv(struct IR_i2c *ir, enum rc_type *protocol, > +static int get_key_purpletv(struct IR_i2c *ir, u32 *protocol, > u32 *scancode, u8 *toggle) > { > unsigned char b; > @@ -287,7 +287,7 @@ static int get_key_purpletv(struct IR_i2c *ir, enum rc_type *protocol, > return 1; > } > > -static int get_key_hvr1110(struct IR_i2c *ir, enum rc_type *protocol, > +static int get_key_hvr1110(struct IR_i2c *ir, u32 *protocol, > u32 *scancode, u8 *toggle) > { > unsigned char buf[5]; > @@ -318,7 +318,7 @@ static int get_key_hvr1110(struct IR_i2c *ir, enum rc_type *protocol, > } > > > -static int get_key_beholdm6xx(struct IR_i2c *ir, enum rc_type *protocol, > +static int get_key_beholdm6xx(struct IR_i2c *ir, u32 *protocol, > u32 *scancode, u8 *toggle) > { > unsigned char data[12]; > @@ -354,7 +354,7 @@ static int get_key_beholdm6xx(struct IR_i2c *ir, enum rc_type *protocol, > /* Common (grey or coloured) pinnacle PCTV remote handling > * > */ > -static int get_key_pinnacle(struct IR_i2c *ir, enum rc_type *protocol, > +static int get_key_pinnacle(struct IR_i2c *ir, u32 *protocol, > u32 *scancode, u8 *toggle, int parity_offset, > int marker, int code_modulo) > { > @@ -408,7 +408,7 @@ static int get_key_pinnacle(struct IR_i2c *ir, enum rc_type *protocol, > * > * Sylvain Pasche <sylvain.pasche@xxxxxxxxx> > */ > -static int get_key_pinnacle_grey(struct IR_i2c *ir, enum rc_type *protocol, > +static int get_key_pinnacle_grey(struct IR_i2c *ir, u32 *protocol, > u32 *scancode, u8 *toggle) > { > > @@ -420,7 +420,7 @@ static int get_key_pinnacle_grey(struct IR_i2c *ir, enum rc_type *protocol, > * > * Ricardo Cerqueira <v4l@xxxxxxxxxxxxx> > */ > -static int get_key_pinnacle_color(struct IR_i2c *ir, enum rc_type *protocol, > +static int get_key_pinnacle_color(struct IR_i2c *ir, u32 *protocol, > u32 *scancode, u8 *toggle) > { > /* code_modulo parameter (0x88) is used to reduce code value to fit inside IR_KEYTAB_SIZE > diff --git a/drivers/media/rc/img-ir/img-ir-hw.h b/drivers/media/rc/img-ir/img-ir-hw.h > index 91a2977..9f14d0f 100644 > --- a/drivers/media/rc/img-ir/img-ir-hw.h > +++ b/drivers/media/rc/img-ir/img-ir-hw.h > @@ -141,7 +141,7 @@ struct img_ir_timing_regvals { > * @toggle: Toggle bit (defaults to 0). > */ > struct img_ir_scancode_req { > - enum rc_type protocol; > + u32 protocol; > u32 scancode; > u8 toggle; > }; > diff --git a/drivers/media/rc/ir-nec-decoder.c b/drivers/media/rc/ir-nec-decoder.c > index 2a9d155..10638d9 100644 > --- a/drivers/media/rc/ir-nec-decoder.c > +++ b/drivers/media/rc/ir-nec-decoder.c > @@ -48,8 +48,7 @@ enum nec_state { > static int ir_nec_decode(struct rc_dev *dev, struct ir_raw_event ev) > { > struct nec_dec *data = &dev->raw->nec; > - u32 scancode; > - enum rc_type rc_type; > + u32 scancode, rc_type; > u8 address, not_address, command, not_command; > bool send_32bits = false; > > diff --git a/drivers/media/rc/ir-rc5-decoder.c b/drivers/media/rc/ir-rc5-decoder.c > index a0fd4e6..4e4bdff 100644 > --- a/drivers/media/rc/ir-rc5-decoder.c > +++ b/drivers/media/rc/ir-rc5-decoder.c > @@ -50,8 +50,7 @@ static int ir_rc5_decode(struct rc_dev *dev, struct ir_raw_event ev) > { > struct rc5_dec *data = &dev->raw->rc5; > u8 toggle; > - u32 scancode; > - enum rc_type protocol; > + u32 scancode, protocol; > > if (!is_timing_event(ev)) { > if (ev.reset) > diff --git a/drivers/media/rc/ir-rc6-decoder.c b/drivers/media/rc/ir-rc6-decoder.c > index e0e2ede..1a62d40 100644 > --- a/drivers/media/rc/ir-rc6-decoder.c > +++ b/drivers/media/rc/ir-rc6-decoder.c > @@ -86,9 +86,8 @@ static enum rc6_mode rc6_mode(struct rc6_dec *data) > static int ir_rc6_decode(struct rc_dev *dev, struct ir_raw_event ev) > { > struct rc6_dec *data = &dev->raw->rc6; > - u32 scancode; > + u32 scancode, protocol; > u8 toggle; > - enum rc_type protocol; > > if (!is_timing_event(ev)) { > if (ev.reset) > diff --git a/drivers/media/rc/ir-sony-decoder.c b/drivers/media/rc/ir-sony-decoder.c > index baa972c..047fd22 100644 > --- a/drivers/media/rc/ir-sony-decoder.c > +++ b/drivers/media/rc/ir-sony-decoder.c > @@ -42,8 +42,7 @@ enum sony_state { > static int ir_sony_decode(struct rc_dev *dev, struct ir_raw_event ev) > { > struct sony_dec *data = &dev->raw->sony; > - enum rc_type protocol; > - u32 scancode; > + u32 protocol, scancode; > u8 device, subdevice, function; > > if (!is_timing_event(ev)) { > diff --git a/drivers/media/rc/rc-main.c b/drivers/media/rc/rc-main.c > index 154020d..9c8e195 100644 > --- a/drivers/media/rc/rc-main.c > +++ b/drivers/media/rc/rc-main.c > @@ -614,6 +614,7 @@ void rc_repeat(struct rc_dev *dev) > > spin_lock_irqsave(&dev->keylock, flags); > > + input_event(dev->input_dev, EV_MSC, MSC_RC_TYPE, dev->last_protocol); > input_event(dev->input_dev, EV_MSC, MSC_SCAN, dev->last_scancode); > input_sync(dev->input_dev); > > @@ -639,7 +640,7 @@ EXPORT_SYMBOL_GPL(rc_repeat); > * This function is used internally to register a keypress, it must be > * called with keylock held. > */ > -static void ir_do_keydown(struct rc_dev *dev, enum rc_type protocol, > +static void ir_do_keydown(struct rc_dev *dev, u32 protocol, > u32 scancode, u32 keycode, u8 toggle) > { > bool new_event = (!dev->keypressed || > @@ -650,6 +651,7 @@ static void ir_do_keydown(struct rc_dev *dev, enum rc_type protocol, > if (new_event && dev->keypressed) > ir_do_keyup(dev, false); > > + input_event(dev->input_dev, EV_MSC, MSC_RC_TYPE, protocol); > input_event(dev->input_dev, EV_MSC, MSC_SCAN, scancode); > > if (new_event && keycode != KEY_RESERVED) { > @@ -682,7 +684,7 @@ static void ir_do_keydown(struct rc_dev *dev, enum rc_type protocol, > * This routine is used to signal that a key has been pressed on the > * remote control. > */ > -void rc_keydown(struct rc_dev *dev, enum rc_type protocol, u32 scancode, u8 toggle) > +void rc_keydown(struct rc_dev *dev, u32 protocol, u32 scancode, u8 toggle) > { > unsigned long flags; > u32 keycode = rc_g_keycode_from_table(dev, scancode); > @@ -710,8 +712,8 @@ EXPORT_SYMBOL_GPL(rc_keydown); > * This routine is used to signal that a key has been pressed on the > * remote control. The driver must manually call rc_keyup() at a later stage. > */ > -void rc_keydown_notimeout(struct rc_dev *dev, enum rc_type protocol, > - u32 scancode, u8 toggle) > +void rc_keydown_notimeout(struct rc_dev *dev, u32 protocol, u32 scancode, > + u8 toggle) > { > unsigned long flags; > u32 keycode = rc_g_keycode_from_table(dev, scancode); > @@ -1425,6 +1427,7 @@ int rc_register_device(struct rc_dev *dev) > set_bit(EV_REP, dev->input_dev->evbit); > set_bit(EV_MSC, dev->input_dev->evbit); > set_bit(MSC_SCAN, dev->input_dev->mscbit); > + set_bit(MSC_RC_TYPE, dev->input_dev->mscbit); > if (dev->open) > dev->input_dev->open = ir_open; > if (dev->close) > diff --git a/drivers/media/usb/cx231xx/cx231xx-input.c b/drivers/media/usb/cx231xx/cx231xx-input.c > index 15d8d1b..51d121a 100644 > --- a/drivers/media/usb/cx231xx/cx231xx-input.c > +++ b/drivers/media/usb/cx231xx/cx231xx-input.c > @@ -24,8 +24,8 @@ > > #define MODULE_NAME "cx231xx-input" > > -static int get_key_isdbt(struct IR_i2c *ir, enum rc_type *protocol, > - u32 *pscancode, u8 *toggle) > +static int get_key_isdbt(struct IR_i2c *ir, u32 *protocol, u32 *pscancode, > + u8 *toggle) > { > int rc; > u8 cmd, scancode; > diff --git a/drivers/media/usb/dvb-usb-v2/af9015.c b/drivers/media/usb/dvb-usb-v2/af9015.c > index 941ceff..1974ba5 100644 > --- a/drivers/media/usb/dvb-usb-v2/af9015.c > +++ b/drivers/media/usb/dvb-usb-v2/af9015.c > @@ -1222,7 +1222,7 @@ static int af9015_rc_query(struct dvb_usb_device *d) > > /* Only process key if canary killed */ > if (buf[16] != 0xff && buf[0] != 0x01) { > - enum rc_type proto; > + u32 proto; > dev_dbg(&d->udev->dev, "%s: key pressed %*ph\n", > __func__, 4, buf + 12); > > diff --git a/drivers/media/usb/dvb-usb-v2/af9035.c b/drivers/media/usb/dvb-usb-v2/af9035.c > index 8961dd7..4ca1607 100644 > --- a/drivers/media/usb/dvb-usb-v2/af9035.c > +++ b/drivers/media/usb/dvb-usb-v2/af9035.c > @@ -1828,8 +1828,7 @@ static int af9035_rc_query(struct dvb_usb_device *d) > { > struct usb_interface *intf = d->intf; > int ret; > - enum rc_type proto; > - u32 key; > + u32 proto, key; > u8 buf[4]; > struct usb_req req = { CMD_IR_GET, 0, 0, NULL, 4, buf }; > > diff --git a/drivers/media/usb/dvb-usb-v2/az6007.c b/drivers/media/usb/dvb-usb-v2/az6007.c > index 50c07fe..9a9012b 100644 > --- a/drivers/media/usb/dvb-usb-v2/az6007.c > +++ b/drivers/media/usb/dvb-usb-v2/az6007.c > @@ -208,7 +208,7 @@ static int az6007_rc_query(struct dvb_usb_device *d) > { > struct az6007_device_state *st = d_to_priv(d); > unsigned code; > - enum rc_type proto; > + u32 proto; > > az6007_read(d, AZ6007_READ_IR, 0, 0, st->data, 10); > > diff --git a/drivers/media/usb/dvb-usb-v2/rtl28xxu.c b/drivers/media/usb/dvb-usb-v2/rtl28xxu.c > index c583c63..ffb97c0 100644 > --- a/drivers/media/usb/dvb-usb-v2/rtl28xxu.c > +++ b/drivers/media/usb/dvb-usb-v2/rtl28xxu.c > @@ -1631,7 +1631,7 @@ static int rtl2831u_rc_query(struct dvb_usb_device *d) > goto err; > > if (buf[4] & 0x01) { > - enum rc_type proto; > + u32 proto; > > if (buf[2] == (u8) ~buf[3]) { > if (buf[0] == (u8) ~buf[1]) { > diff --git a/drivers/media/usb/dvb-usb/dib0700_core.c b/drivers/media/usb/dvb-usb/dib0700_core.c > index f319665..dbe11fc 100644 > --- a/drivers/media/usb/dvb-usb/dib0700_core.c > +++ b/drivers/media/usb/dvb-usb/dib0700_core.c > @@ -676,7 +676,7 @@ static void dib0700_rc_urb_completion(struct urb *purb) > { > struct dvb_usb_device *d = purb->context; > struct dib0700_rc_response *poll_reply; > - enum rc_type protocol; > + u32 protocol; > u32 uninitialized_var(keycode); > u8 toggle; > > diff --git a/drivers/media/usb/dvb-usb/dib0700_devices.c b/drivers/media/usb/dvb-usb/dib0700_devices.c > index 0857b56..94b1630 100644 > --- a/drivers/media/usb/dvb-usb/dib0700_devices.c > +++ b/drivers/media/usb/dvb-usb/dib0700_devices.c > @@ -518,8 +518,7 @@ static u8 rc_request[] = { REQUEST_POLL_RC, 0 }; > static int dib0700_rc_query_old_firmware(struct dvb_usb_device *d) > { > u8 key[4]; > - enum rc_type protocol; > - u32 scancode; > + u32 protocol, scancode; > u8 toggle; > int i; > struct dib0700_state *st = d->priv; > diff --git a/drivers/media/usb/dvb-usb/dtt200u.c b/drivers/media/usb/dvb-usb/dtt200u.c > index d2a01b5..3b1d5da 100644 > --- a/drivers/media/usb/dvb-usb/dtt200u.c > +++ b/drivers/media/usb/dvb-usb/dtt200u.c > @@ -62,7 +62,7 @@ static int dtt200u_rc_query(struct dvb_usb_device *d) > > dvb_usb_generic_rw(d,&cmd,1,key,5,0); > if (key[0] == 1) { > - enum rc_type proto = RC_TYPE_NEC; > + u32 proto = RC_TYPE_NEC; > > scancode = key[1]; > if ((u8) ~key[1] != key[2]) { > diff --git a/drivers/media/usb/em28xx/em28xx-input.c b/drivers/media/usb/em28xx/em28xx-input.c > index 4007356..79e162d 100644 > --- a/drivers/media/usb/em28xx/em28xx-input.c > +++ b/drivers/media/usb/em28xx/em28xx-input.c > @@ -54,7 +54,7 @@ struct em28xx_ir_poll_result { > unsigned int toggle_bit:1; > unsigned int read_count:7; > > - enum rc_type protocol; > + u32 protocol; > u32 scancode; > }; > > @@ -73,7 +73,8 @@ struct em28xx_IR { > > struct i2c_client *i2c_client; > > - int (*get_key_i2c)(struct i2c_client *ir, enum rc_type *protocol, u32 *scancode); > + int (*get_key_i2c)(struct i2c_client *ir, u32 *protocol, > + u32 *scancode); > int (*get_key)(struct em28xx_IR *, struct em28xx_ir_poll_result *); > }; > > @@ -82,7 +83,7 @@ struct em28xx_IR { > **********************************************************/ > > static int em28xx_get_key_terratec(struct i2c_client *i2c_dev, > - enum rc_type *protocol, u32 *scancode) > + u32 *protocol, u32 *scancode) > { > unsigned char b; > > @@ -106,7 +107,7 @@ static int em28xx_get_key_terratec(struct i2c_client *i2c_dev, > } > > static int em28xx_get_key_em_haup(struct i2c_client *i2c_dev, > - enum rc_type *protocol, u32 *scancode) > + u32 *protocol, u32 *scancode) > { > unsigned char buf[2]; > int size; > @@ -136,7 +137,7 @@ static int em28xx_get_key_em_haup(struct i2c_client *i2c_dev, > } > > static int em28xx_get_key_pinnacle_usb_grey(struct i2c_client *i2c_dev, > - enum rc_type *protocol, u32 *scancode) > + u32 *protocol, u32 *scancode) > { > unsigned char buf[3]; > > @@ -154,7 +155,7 @@ static int em28xx_get_key_pinnacle_usb_grey(struct i2c_client *i2c_dev, > } > > static int em28xx_get_key_winfast_usbii_deluxe(struct i2c_client *i2c_dev, > - enum rc_type *protocol, u32 *scancode) > + u32 *protocol, u32 *scancode) > { > unsigned char subaddr, keydetect, key; > > @@ -294,7 +295,7 @@ static int em2874_polling_getkey(struct em28xx_IR *ir, > static int em28xx_i2c_ir_handle_key(struct em28xx_IR *ir) > { > static u32 scancode; > - enum rc_type protocol; > + u32 protocol; > int rc; > > rc = ir->get_key_i2c(ir->i2c_client, &protocol, &scancode); > diff --git a/drivers/media/usb/tm6000/tm6000-input.c b/drivers/media/usb/tm6000/tm6000-input.c > index 26b2ebb..03b5a5f 100644 > --- a/drivers/media/usb/tm6000/tm6000-input.c > +++ b/drivers/media/usb/tm6000/tm6000-input.c > @@ -166,8 +166,7 @@ static void tm6000_ir_keydown(struct tm6000_IR *ir, > const char *buf, unsigned int len) > { > u8 device, command; > - u32 scancode; > - enum rc_type protocol; > + u32 scancode, protocol; > > if (len < 1) > return; > diff --git a/include/media/i2c/ir-kbd-i2c.h b/include/media/i2c/ir-kbd-i2c.h > index d856435..d4a065c 100644 > --- a/include/media/i2c/ir-kbd-i2c.h > +++ b/include/media/i2c/ir-kbd-i2c.h > @@ -20,7 +20,7 @@ struct IR_i2c { > struct delayed_work work; > char name[32]; > char phys[32]; > - int (*get_key)(struct IR_i2c *ir, enum rc_type *protocol, > + int (*get_key)(struct IR_i2c *ir, u32 *protocol, > u32 *scancode, u8 *toggle); > }; > > @@ -45,7 +45,7 @@ struct IR_i2c_init_data { > * Specify either a function pointer or a value indicating one of > * ir_kbd_i2c's internal get_key functions > */ > - int (*get_key)(struct IR_i2c *ir, enum rc_type *protocol, > + int (*get_key)(struct IR_i2c *ir, u32 *protocol, > u32 *scancode, u8 *toggle); > enum ir_kbd_get_key_fn internal_get_key_func; > > diff --git a/include/media/rc-core.h b/include/media/rc-core.h > index 10908e3..e6ae9df 100644 > --- a/include/media/rc-core.h > +++ b/include/media/rc-core.h > @@ -158,7 +158,7 @@ struct rc_dev { > unsigned long keyup_jiffies; > struct timer_list timer_keyup; > u32 last_keycode; > - enum rc_type last_protocol; > + u32 last_protocol; > u32 last_scancode; > u8 last_toggle; > u32 timeout; > @@ -238,8 +238,9 @@ int rc_open(struct rc_dev *rdev); > void rc_close(struct rc_dev *rdev); > > void rc_repeat(struct rc_dev *dev); > -void rc_keydown(struct rc_dev *dev, enum rc_type protocol, u32 scancode, u8 toggle); > -void rc_keydown_notimeout(struct rc_dev *dev, enum rc_type protocol, u32 scancode, u8 toggle); > +void rc_keydown(struct rc_dev *dev, u32 protocol, u32 scancode, u8 toggle); > +void rc_keydown_notimeout(struct rc_dev *dev, u32 protocol, u32 scancode, > + u8 toggle); > void rc_keyup(struct rc_dev *dev); > u32 rc_g_keycode_from_table(struct rc_dev *dev, u32 scancode); > > diff --git a/include/media/rc-map.h b/include/media/rc-map.h > index e1cc14c..cc5e5b3 100644 > --- a/include/media/rc-map.h > +++ b/include/media/rc-map.h > @@ -10,57 +10,7 @@ > */ > > #include <linux/input.h> > - > -/** > - * enum rc_type - type of the Remote Controller protocol > - * > - * @RC_TYPE_UNKNOWN: Protocol not known > - * @RC_TYPE_OTHER: Protocol known but proprietary > - * @RC_TYPE_RC5: Philips RC5 protocol > - * @RC_TYPE_RC5X: Philips RC5x protocol > - * @RC_TYPE_RC5_SZ: StreamZap variant of RC5 > - * @RC_TYPE_JVC: JVC protocol > - * @RC_TYPE_SONY12: Sony 12 bit protocol > - * @RC_TYPE_SONY15: Sony 15 bit protocol > - * @RC_TYPE_SONY20: Sony 20 bit protocol > - * @RC_TYPE_NEC: NEC protocol > - * @RC_TYPE_NECX: Extended NEC protocol > - * @RC_TYPE_NEC32: NEC 32 bit protocol > - * @RC_TYPE_SANYO: Sanyo protocol > - * @RC_TYPE_MCE_KBD: RC6-ish MCE keyboard/mouse > - * @RC_TYPE_RC6_0: Philips RC6-0-16 protocol > - * @RC_TYPE_RC6_6A_20: Philips RC6-6A-20 protocol > - * @RC_TYPE_RC6_6A_24: Philips RC6-6A-24 protocol > - * @RC_TYPE_RC6_6A_32: Philips RC6-6A-32 protocol > - * @RC_TYPE_RC6_MCE: MCE (Philips RC6-6A-32 subtype) protocol > - * @RC_TYPE_SHARP: Sharp protocol > - * @RC_TYPE_XMP: XMP protocol > - * @RC_TYPE_CEC: CEC protocol > - */ > -enum rc_type { > - RC_TYPE_UNKNOWN = 0, > - RC_TYPE_OTHER = 1, > - RC_TYPE_RC5 = 2, > - RC_TYPE_RC5X = 3, > - RC_TYPE_RC5_SZ = 4, > - RC_TYPE_JVC = 5, > - RC_TYPE_SONY12 = 6, > - RC_TYPE_SONY15 = 7, > - RC_TYPE_SONY20 = 8, > - RC_TYPE_NEC = 9, > - RC_TYPE_NECX = 10, > - RC_TYPE_NEC32 = 11, > - RC_TYPE_SANYO = 12, > - RC_TYPE_MCE_KBD = 13, > - RC_TYPE_RC6_0 = 14, > - RC_TYPE_RC6_6A_20 = 15, > - RC_TYPE_RC6_6A_24 = 16, > - RC_TYPE_RC6_6A_32 = 17, > - RC_TYPE_RC6_MCE = 18, > - RC_TYPE_SHARP = 19, > - RC_TYPE_XMP = 20, > - RC_TYPE_CEC = 21, > -}; > +#include <uapi/linux/input-event-codes.h> > > #define RC_BIT_NONE 0ULL > #define RC_BIT_UNKNOWN (1ULL << RC_TYPE_UNKNOWN) > @@ -135,7 +85,7 @@ struct rc_map { > unsigned int size; > unsigned int len; > unsigned int alloc; > - enum rc_type rc_type; > + unsigned int rc_type; > const char *name; > spinlock_t lock; > }; > diff --git a/include/uapi/linux/input-event-codes.h b/include/uapi/linux/input-event-codes.h > index d6d071f..97ef182 100644 > --- a/include/uapi/linux/input-event-codes.h > +++ b/include/uapi/linux/input-event-codes.h > @@ -794,6 +794,7 @@ > #define MSC_RAW 0x03 > #define MSC_SCAN 0x04 > #define MSC_TIMESTAMP 0x05 > +#define MSC_RC_TYPE 0x06 > #define MSC_MAX 0x07 > #define MSC_CNT (MSC_MAX+1) > > @@ -834,4 +835,31 @@ > #define SND_MAX 0x07 > #define SND_CNT (SND_MAX+1) > > +/* > + * rc protocol type > + */ > + > +#define RC_TYPE_UNKNOWN 0 /* Protocol not known */ > +#define RC_TYPE_OTHER 1 /* Protocol known but proprietary */ > +#define RC_TYPE_RC5 2 /* Philips RC5 protocol */ > +#define RC_TYPE_RC5X 3 /* Philips RC5x protocol */ > +#define RC_TYPE_RC5_SZ 4 /* StreamZap variant of RC5 */ > +#define RC_TYPE_JVC 5 /* JVC protocol */ > +#define RC_TYPE_SONY12 6 /* Sony 12 bit protocol */ > +#define RC_TYPE_SONY15 7 /* Sony 15 bit protocol */ > +#define RC_TYPE_SONY20 8 /* Sony 20 bit protocol */ > +#define RC_TYPE_NEC 9 /* NEC protocol */ > +#define RC_TYPE_NECX 10 /* Extended NEC protocol */ > +#define RC_TYPE_NEC32 11 /* NEC 32 bit protocol */ > +#define RC_TYPE_SANYO 12 /* Sanyo protocol */ > +#define RC_TYPE_MCE_KBD 13 /* RC6-ish MCE keyboard/mouse */ > +#define RC_TYPE_RC6_0 14 /* Philips RC6-0-16 protocol */ > +#define RC_TYPE_RC6_6A_20 15 /* Philips RC6-6A-20 protocol */ > +#define RC_TYPE_RC6_6A_24 16 /* Philips RC6-6A-24 protocol */ > +#define RC_TYPE_RC6_6A_32 17 /* Philips RC6-6A-32 protocol */ > +#define RC_TYPE_RC6_MCE 18 /* MCE (Philips RC6-6A-32) protocol */ > +#define RC_TYPE_SHARP 19 /* Sharp protocol */ > +#define RC_TYPE_XMP 20 /* XMP protocol */ > +#define RC_TYPE_CEC 21 Please add a notice that RC_TYPE_CEC corresponds to IR codes via the HDMI CEC interface. There's a drawback with this patch: we'll lose the kernel-doc documentation for the above. It would be good to keep it there somehow (perhaps by adding those codes into a rst file under Documentation/media/uapi and use Documentation/sphinx/parse-headers.pl to generate cross references between this file and its uAPI description, in order to generate warnings if new types get added without the corresponding documentation. > + > #endif Thanks, Mauro -- 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