diff options
Diffstat (limited to 'drivers/media/rc/rc-ir-raw.c')
| -rw-r--r-- | drivers/media/rc/rc-ir-raw.c | 9 | 
1 files changed, 7 insertions, 2 deletions
| diff --git a/drivers/media/rc/rc-ir-raw.c b/drivers/media/rc/rc-ir-raw.c index 144304c94606..205ecc602e34 100644 --- a/drivers/media/rc/rc-ir-raw.c +++ b/drivers/media/rc/rc-ir-raw.c @@ -26,6 +26,7 @@ static LIST_HEAD(ir_raw_client_list);  /* Used to handle IR raw handler extensions */  static DEFINE_MUTEX(ir_raw_handler_lock);  static LIST_HEAD(ir_raw_handler_list); +static DEFINE_MUTEX(available_protocols_lock);  static u64 available_protocols;  static int ir_raw_event_thread(void *data) @@ -234,9 +235,9 @@ u64  ir_raw_get_allowed_protocols(void)  {  	u64 protocols; -	mutex_lock(&ir_raw_handler_lock); +	mutex_lock(&available_protocols_lock);  	protocols = available_protocols; -	mutex_unlock(&ir_raw_handler_lock); +	mutex_unlock(&available_protocols_lock);  	return protocols;  } @@ -330,7 +331,9 @@ int ir_raw_handler_register(struct ir_raw_handler *ir_raw_handler)  	if (ir_raw_handler->raw_register)  		list_for_each_entry(raw, &ir_raw_client_list, list)  			ir_raw_handler->raw_register(raw->dev); +	mutex_lock(&available_protocols_lock);  	available_protocols |= ir_raw_handler->protocols; +	mutex_unlock(&available_protocols_lock);  	mutex_unlock(&ir_raw_handler_lock);  	return 0; @@ -349,7 +352,9 @@ void ir_raw_handler_unregister(struct ir_raw_handler *ir_raw_handler)  		if (ir_raw_handler->raw_unregister)  			ir_raw_handler->raw_unregister(raw->dev);  	} +	mutex_lock(&available_protocols_lock);  	available_protocols &= ~protocols; +	mutex_unlock(&available_protocols_lock);  	mutex_unlock(&ir_raw_handler_lock);  }  EXPORT_SYMBOL(ir_raw_handler_unregister); |