[REVIEW PATCH 1/2] img-ir/hw: Avoid clearing filter for no-op protocol change

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.naeem@xxxxxxxxxx>
Signed-off-by: James Hogan <james.hogan@xxxxxxxxxx>
Cc: Mauro Carvalho Chehab <m.chehab@xxxxxxxxxxx>
Cc: <stable@xxxxxxxxxxxxxxx> # v3.15+
Cc: linux-media@xxxxxxxxxxxxxxx
---
 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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]