From: Mauro Carvalho Chehab <mchehab@s-opensource.com>
To: Sean Young <sean@mess.org>
Cc: linux-input@vger.kernel.org, linux-media@vger.kernel.org
Subject: Re: [PATCH] [media/input] rc: report rc protocol type to userspace through input
Date: Thu, 22 Sep 2016 11:57:13 -0300 [thread overview]
Message-ID: <20160922115713.7f341c46@vento.lan> (raw)
In-Reply-To: <1474451661-28986-1-git-send-email-sean@mess.org>
Em Wed, 21 Sep 2016 10:54:21 +0100
Sean Young <sean@mess.org> 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@mess.org>
> ---
> 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@gmail.com>
> */
> -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@cerqueira.org>
> */
> -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
next prev parent reply other threads:[~2016-09-22 14:57 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-21 9:54 [PATCH] [media/input] rc: report rc protocol type to userspace through input Sean Young
2016-09-22 14:57 ` Mauro Carvalho Chehab [this message]
2016-09-23 22:08 ` Dmitry Torokhov
2016-09-25 13:00 ` Sean Young
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160922115713.7f341c46@vento.lan \
--to=mchehab@s-opensource.com \
--cc=linux-input@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=sean@mess.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).