[media] rc-main: Re-apply filter for no-op protocol change
Since commitda6e162d6a
("[media] rc-core: simplify sysfs code"), when the IR protocol is set using the sysfs interface to the same set of protocols that are already set, store_protocols() does not refresh the scancode filter with the new protocol, even if it has already called the change_protocol() callback successfully. This results in the filter being disabled in the hardware and not re-enabled until the filter is set again using sysfs. Fix in store_protocols() by still re-applying the filter whenever the change_protocol() driver callback succeeded. The problem can be reproduced with the img-ir driver 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 were still being received. Fixes:da6e162d6a
("[media] rc-core: simplify sysfs code") Reported-by: Sifan Naeem <sifan.naeem@imgtec.com> Signed-off-by: James Hogan <james.hogan@imgtec.com> Cc: David Härdeman <david@hardeman.nu> Cc: <stable@vger.kernel.org> # v3.17+ Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
parent
40b8a5a65a
commit
983c5bd26b
|
@ -1021,16 +1021,16 @@ static ssize_t store_protocols(struct device *device,
|
|||
goto out;
|
||||
}
|
||||
|
||||
if (new_protocols == old_protocols) {
|
||||
rc = len;
|
||||
goto out;
|
||||
if (new_protocols != old_protocols) {
|
||||
*current_protocols = new_protocols;
|
||||
IR_dprintk(1, "Protocols changed to 0x%llx\n",
|
||||
(long long)new_protocols);
|
||||
}
|
||||
|
||||
*current_protocols = new_protocols;
|
||||
IR_dprintk(1, "Protocols changed to 0x%llx\n", (long long)new_protocols);
|
||||
|
||||
/*
|
||||
* If the protocol is changed the filter needs updating.
|
||||
* If a protocol change was attempted the filter may need updating, even
|
||||
* if the actual protocol mask hasn't changed (since the driver may have
|
||||
* cleared the filter).
|
||||
* Try setting the same filter with the new protocol (if any).
|
||||
* Fall back to clearing the filter.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue