[media] cec: add MEDIA_CEC_RC config option

Add an explicit config option to select whether the CEC remote control
messages are to be passed on to the RC subsystem or not.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
This commit is contained in:
Hans Verkuil 2017-04-17 08:05:10 -03:00 коммит произвёл Mauro Carvalho Chehab
Родитель ee7e987133
Коммит 5f2c467c54
3 изменённых файлов: 15 добавлений и 9 удалений

Просмотреть файл

@ -6,8 +6,14 @@ config CEC_CORE
config MEDIA_CEC_NOTIFIER config MEDIA_CEC_NOTIFIER
bool bool
config MEDIA_CEC_RC
bool "HDMI CEC RC integration"
depends on CEC_CORE && RC_CORE
---help---
Pass on CEC remote control messages to the RC framework.
config MEDIA_CEC_DEBUG config MEDIA_CEC_DEBUG
bool "HDMI CEC debugfs interface" bool "HDMI CEC debugfs interface"
depends on MEDIA_CEC_SUPPORT && DEBUG_FS depends on CEC_CORE && DEBUG_FS
---help--- ---help---
Turns on the DebugFS interface for CEC devices. Turns on the DebugFS interface for CEC devices.

Просмотреть файл

@ -1732,7 +1732,7 @@ static int cec_receive_notify(struct cec_adapter *adap, struct cec_msg *msg,
!(adap->log_addrs.flags & CEC_LOG_ADDRS_FL_ALLOW_RC_PASSTHRU)) !(adap->log_addrs.flags & CEC_LOG_ADDRS_FL_ALLOW_RC_PASSTHRU))
break; break;
#if IS_REACHABLE(CONFIG_RC_CORE) #ifdef CONFIG_MEDIA_CEC_RC
switch (msg->msg[2]) { switch (msg->msg[2]) {
/* /*
* Play function, this message can have variable length * Play function, this message can have variable length
@ -1769,7 +1769,7 @@ static int cec_receive_notify(struct cec_adapter *adap, struct cec_msg *msg,
if (!(adap->capabilities & CEC_CAP_RC) || if (!(adap->capabilities & CEC_CAP_RC) ||
!(adap->log_addrs.flags & CEC_LOG_ADDRS_FL_ALLOW_RC_PASSTHRU)) !(adap->log_addrs.flags & CEC_LOG_ADDRS_FL_ALLOW_RC_PASSTHRU))
break; break;
#if IS_REACHABLE(CONFIG_RC_CORE) #ifdef CONFIG_MEDIA_CEC_RC
rc_keyup(adap->rc); rc_keyup(adap->rc);
#endif #endif
break; break;

Просмотреть файл

@ -220,7 +220,7 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
struct cec_adapter *adap; struct cec_adapter *adap;
int res; int res;
#if !IS_REACHABLE(CONFIG_RC_CORE) #ifndef CONFIG_MEDIA_CEC_RC
caps &= ~CEC_CAP_RC; caps &= ~CEC_CAP_RC;
#endif #endif
@ -256,7 +256,7 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
return ERR_PTR(res); return ERR_PTR(res);
} }
#if IS_REACHABLE(CONFIG_RC_CORE) #ifdef CONFIG_MEDIA_CEC_RC
if (!(caps & CEC_CAP_RC)) if (!(caps & CEC_CAP_RC))
return adap; return adap;
@ -305,7 +305,7 @@ int cec_register_adapter(struct cec_adapter *adap,
adap->owner = parent->driver->owner; adap->owner = parent->driver->owner;
adap->devnode.dev.parent = parent; adap->devnode.dev.parent = parent;
#if IS_REACHABLE(CONFIG_RC_CORE) #ifdef CONFIG_MEDIA_CEC_RC
if (adap->capabilities & CEC_CAP_RC) { if (adap->capabilities & CEC_CAP_RC) {
adap->rc->dev.parent = parent; adap->rc->dev.parent = parent;
res = rc_register_device(adap->rc); res = rc_register_device(adap->rc);
@ -322,7 +322,7 @@ int cec_register_adapter(struct cec_adapter *adap,
res = cec_devnode_register(&adap->devnode, adap->owner); res = cec_devnode_register(&adap->devnode, adap->owner);
if (res) { if (res) {
#if IS_REACHABLE(CONFIG_RC_CORE) #ifdef CONFIG_MEDIA_CEC_RC
/* Note: rc_unregister also calls rc_free */ /* Note: rc_unregister also calls rc_free */
rc_unregister_device(adap->rc); rc_unregister_device(adap->rc);
adap->rc = NULL; adap->rc = NULL;
@ -357,7 +357,7 @@ void cec_unregister_adapter(struct cec_adapter *adap)
if (IS_ERR_OR_NULL(adap)) if (IS_ERR_OR_NULL(adap))
return; return;
#if IS_REACHABLE(CONFIG_RC_CORE) #ifdef CONFIG_MEDIA_CEC_RC
/* Note: rc_unregister also calls rc_free */ /* Note: rc_unregister also calls rc_free */
rc_unregister_device(adap->rc); rc_unregister_device(adap->rc);
adap->rc = NULL; adap->rc = NULL;
@ -381,7 +381,7 @@ void cec_delete_adapter(struct cec_adapter *adap)
kthread_stop(adap->kthread); kthread_stop(adap->kthread);
if (adap->kthread_config) if (adap->kthread_config)
kthread_stop(adap->kthread_config); kthread_stop(adap->kthread_config);
#if IS_REACHABLE(CONFIG_RC_CORE) #ifdef CONFIG_MEDIA_CEC_RC
rc_free_device(adap->rc); rc_free_device(adap->rc);
#endif #endif
kfree(adap); kfree(adap);