When the img-ir driver is asked to change protocol, if the chosen
decoder is already loaded then don't call img_ir_set_decoder(), so as
not to clear the current filter.

This is important because store_protocol() does not refresh the scancode
filter with the new protocol if the set of enabled protocols hasn't
actually changed, but it will still call the change_protocol() callback,
resulting in the filter being disabled in the hardware.

The problem can be reproduced by setting a filter, and then setting the
protocol to the same protocol that is already set:
$ echo nec > protocols
$ echo 0xffff > filter_mask
$ echo nec > protocols

After this, messages which don't match the filter still get received.

Reported-by: Sifan Naeem <sifan.na...@imgtec.com>
Signed-off-by: James Hogan <james.ho...@imgtec.com>
Cc: Mauro Carvalho Chehab <m.che...@samsung.com>
Cc: <stable@vger.kernel.org> # v3.15+
Cc: linux-me...@vger.kernel.org
---
 drivers/media/rc/img-ir/img-ir-hw.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/media/rc/img-ir/img-ir-hw.c 
b/drivers/media/rc/img-ir/img-ir-hw.c
index 9db065344b41..1566337c1059 100644
--- a/drivers/media/rc/img-ir/img-ir-hw.c
+++ b/drivers/media/rc/img-ir/img-ir-hw.c
@@ -643,6 +643,12 @@ static int img_ir_change_protocol(struct rc_dev *dev, u64 
*ir_type)
                        continue;
                if (*ir_type & dec->type) {
                        *ir_type &= dec->type;
+                       /*
+                        * We don't want to clear the filter if nothing is
+                        * changing as it won't get set again.
+                        */
+                       if (dec == hw->decoder)
+                               return 0;
                        img_ir_set_decoder(priv, dec, *ir_type);
                        goto success;
                }
-- 
2.0.4

--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to