| From 14edb593338e3811e818aba286237c365f8881a1 Mon Sep 17 00:00:00 2001 |
| From: Tomas Melin <tomas.melin@iki.fi> |
| Date: Tue, 28 Oct 2014 15:43:14 -0300 |
| Subject: media: rc-core: fix protocol_change regression in ir_raw_event_register |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Tomas Melin <tomas.melin@iki.fi> |
| |
| commit 14edb593338e3811e818aba286237c365f8881a1 upstream. |
| |
| IR receiver using nuvoton-cir and lirc required additional configuration |
| steps after upgrade from kernel 3.16 to 3.17-rcX. Bisected regression to |
| commit da6e162d6a4607362f8478c715c797d84d449f8b ("[media] rc-core: |
| simplify sysfs code"). |
| |
| The regression comes from adding function change_protocol in ir-raw.c. |
| It changes behaviour so that only the protocol enabled by driver's |
| map_name will be active after registration. This breaks user space |
| behaviour, lirc does not get key press signals anymore. |
| |
| Enable lirc protocol by default for ir raw decoders to restore original |
| behaviour. |
| |
| Signed-off-by: Tomas Melin <tomas.melin@iki.fi> |
| Acked-by: David Härdeman <david@hardeman.nu> |
| Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/media/rc/rc-ir-raw.c | 1 - |
| drivers/media/rc/rc-main.c | 2 ++ |
| 2 files changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/media/rc/rc-ir-raw.c |
| +++ b/drivers/media/rc/rc-ir-raw.c |
| @@ -262,7 +262,6 @@ int ir_raw_event_register(struct rc_dev |
| return -ENOMEM; |
| |
| dev->raw->dev = dev; |
| - dev->enabled_protocols = ~0; |
| dev->change_protocol = change_protocol; |
| rc = kfifo_alloc(&dev->raw->kfifo, |
| sizeof(struct ir_raw_event) * MAX_IR_EVENT_SIZE, |
| --- a/drivers/media/rc/rc-main.c |
| +++ b/drivers/media/rc/rc-main.c |
| @@ -1421,6 +1421,8 @@ int rc_register_device(struct rc_dev *de |
| |
| if (dev->change_protocol) { |
| u64 rc_type = (1 << rc_map->rc_type); |
| + if (dev->driver_type == RC_DRIVER_IR_RAW) |
| + rc_type |= RC_BIT_LIRC; |
| rc = dev->change_protocol(dev, &rc_type); |
| if (rc < 0) |
| goto out_raw; |