Skip to content

Commit

Permalink
[media] rc: add allowed/enabled wakeup protocol masks
Browse files Browse the repository at this point in the history
Only a single allowed and enabled protocol mask currently exists in
struct rc_dev, however to support a separate wakeup filter protocol two
of each are needed, ideally as an array.

Therefore make both rc_dev::allowed_protos and rc_dev::enabled_protocols
arrays, update all users to reference the first element
(RC_FILTER_NORMAL), and add a couple more helper functions for drivers
to use for setting the allowed and enabled wakeup protocols.

We also rename allowed_protos to allowed_protocols while we're at it,
which is more consistent with enabled_protocols.

Signed-off-by: James Hogan <james.hogan@imgtec.com>
Reviewed-by: Antti Seppälä <a.seppala@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
  • Loading branch information
James Hogan authored and Mauro Carvalho Chehab committed Mar 11, 2014
1 parent 1a1934f commit acff5f2
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 13 deletions.
10 changes: 5 additions & 5 deletions drivers/media/rc/rc-main.c
Original file line number Diff line number Diff line change
Expand Up @@ -830,9 +830,9 @@ static ssize_t show_protocols(struct device *device,

mutex_lock(&dev->lock);

enabled = dev->enabled_protocols;
enabled = dev->enabled_protocols[RC_FILTER_NORMAL];
if (dev->driver_type == RC_DRIVER_SCANCODE)
allowed = dev->allowed_protos;
allowed = dev->allowed_protocols[RC_FILTER_NORMAL];
else if (dev->raw)
allowed = ir_raw_get_allowed_protocols();
else {
Expand Down Expand Up @@ -906,7 +906,7 @@ static ssize_t store_protocols(struct device *device,
ret = -EINVAL;
goto out;
}
type = dev->enabled_protocols;
type = dev->enabled_protocols[RC_FILTER_NORMAL];

while ((tmp = strsep((char **) &data, " \n")) != NULL) {
if (!*tmp)
Expand Down Expand Up @@ -964,7 +964,7 @@ static ssize_t store_protocols(struct device *device,
}
}

dev->enabled_protocols = type;
dev->enabled_protocols[RC_FILTER_NORMAL] = type;
IR_dprintk(1, "Current protocol(s): 0x%llx\n",
(long long)type);

Expand Down Expand Up @@ -1316,7 +1316,7 @@ int rc_register_device(struct rc_dev *dev)
rc = dev->change_protocol(dev, &rc_type);
if (rc < 0)
goto out_raw;
dev->enabled_protocols = rc_type;
dev->enabled_protocols[RC_FILTER_NORMAL] = rc_type;
}

mutex_unlock(&dev->lock);
Expand Down
32 changes: 24 additions & 8 deletions include/media/rc-core.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,10 @@ enum rc_filter_type {
* @input_dev: the input child device used to communicate events to userspace
* @driver_type: specifies if protocol decoding is done in hardware or software
* @idle: used to keep track of RX state
* @allowed_protos: bitmask with the supported RC_BIT_* protocols
* @enabled_protocols: bitmask with the enabled RC_BIT_* protocols
* @allowed_protocols: bitmask with the supported RC_BIT_* protocols for each
* filter type
* @enabled_protocols: bitmask with the enabled RC_BIT_* protocols for each
* filter type
* @scanmask: some hardware decoders are not capable of providing the full
* scancode to the application. As this is a hardware limit, we can't do
* anything with it. Yet, as the same keycode table can be used with other
Expand Down Expand Up @@ -124,8 +126,8 @@ struct rc_dev {
struct input_dev *input_dev;
enum rc_driver_type driver_type;
bool idle;
u64 allowed_protos;
u64 enabled_protocols;
u64 allowed_protocols[RC_FILTER_MAX];
u64 enabled_protocols[RC_FILTER_MAX];
u32 users;
u32 scanmask;
void *priv;
Expand Down Expand Up @@ -162,24 +164,38 @@ struct rc_dev {

static inline bool rc_protocols_allowed(struct rc_dev *rdev, u64 protos)
{
return rdev->allowed_protos & protos;
return rdev->allowed_protocols[RC_FILTER_NORMAL] & protos;
}

/* should be called prior to registration or with mutex held */
static inline void rc_set_allowed_protocols(struct rc_dev *rdev, u64 protos)
{
rdev->allowed_protos = protos;
rdev->allowed_protocols[RC_FILTER_NORMAL] = protos;
}

static inline bool rc_protocols_enabled(struct rc_dev *rdev, u64 protos)
{
return rdev->enabled_protocols & protos;
return rdev->enabled_protocols[RC_FILTER_NORMAL] & protos;
}

/* should be called prior to registration or with mutex held */
static inline void rc_set_enabled_protocols(struct rc_dev *rdev, u64 protos)
{
rdev->enabled_protocols = protos;
rdev->enabled_protocols[RC_FILTER_NORMAL] = protos;
}

/* should be called prior to registration or with mutex held */
static inline void rc_set_allowed_wakeup_protocols(struct rc_dev *rdev,
u64 protos)
{
rdev->allowed_protocols[RC_FILTER_WAKEUP] = protos;
}

/* should be called prior to registration or with mutex held */
static inline void rc_set_enabled_wakeup_protocols(struct rc_dev *rdev,
u64 protos)
{
rdev->enabled_protocols[RC_FILTER_WAKEUP] = protos;
}

/*
Expand Down

0 comments on commit acff5f2

Please sign in to comment.