Commit 5f124797 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab

V4L/DVB: ir-core: Add support for disabling all protocols

Writing "none" to /dev/class/rc/rc*/protocols will disable all protocols.
This allows an easier setup, from userspace, as userspace applications don't
need to disable protocol per protocol, before enabling a different set of
protocols.
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent a9e55ea9
...@@ -45,6 +45,8 @@ static struct { ...@@ -45,6 +45,8 @@ static struct {
{ IR_TYPE_SONY, "sony" }, { IR_TYPE_SONY, "sony" },
}; };
#define PROTO_NONE "none"
/** /**
* show_protocols() - shows the current IR protocol(s) * show_protocols() - shows the current IR protocol(s)
* @d: the device descriptor * @d: the device descriptor
...@@ -101,6 +103,7 @@ static ssize_t show_protocols(struct device *d, ...@@ -101,6 +103,7 @@ static ssize_t show_protocols(struct device *d,
* Writing "+proto" will add a protocol to the list of enabled protocols. * Writing "+proto" will add a protocol to the list of enabled protocols.
* Writing "-proto" will remove a protocol from the list of enabled protocols. * Writing "-proto" will remove a protocol from the list of enabled protocols.
* Writing "proto" will enable only "proto". * Writing "proto" will enable only "proto".
* Writing "none" will disable all protocols.
* Returns -EINVAL if an invalid protocol combination or unknown protocol name * Returns -EINVAL if an invalid protocol combination or unknown protocol name
* is used, otherwise @len. * is used, otherwise @len.
*/ */
...@@ -134,16 +137,22 @@ static ssize_t store_protocols(struct device *d, ...@@ -134,16 +137,22 @@ static ssize_t store_protocols(struct device *d,
disable = false; disable = false;
} }
for (i = 0; i < ARRAY_SIZE(proto_names); i++) {
if (!strncasecmp(tmp, proto_names[i].name, strlen(proto_names[i].name))) { if (!enable && !disable && !strncasecmp(tmp, PROTO_NONE, sizeof(PROTO_NONE))) {
tmp += strlen(proto_names[i].name); mask = 0;
mask = proto_names[i].type; tmp += sizeof(PROTO_NONE);
break; } else {
for (i = 0; i < ARRAY_SIZE(proto_names); i++) {
if (!strncasecmp(tmp, proto_names[i].name, strlen(proto_names[i].name))) {
tmp += strlen(proto_names[i].name);
mask = proto_names[i].type;
break;
}
}
if (i == ARRAY_SIZE(proto_names)) {
IR_dprintk(1, "Unknown protocol\n");
return -EINVAL;
} }
}
if (i == ARRAY_SIZE(proto_names)) {
IR_dprintk(1, "Unknown protocol\n");
return -EINVAL;
} }
tmp = skip_spaces(tmp); tmp = skip_spaces(tmp);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment