[media] cec: fix Kconfig dependency problems

- Use IS_REACHABLE(RC_CORE) instead of IS_ENABLED: if cec is built-in and
  RC_CORE is a module, then CEC can't reach the RC symbols.
- Both cec and cec-edid should be bool and use the same build 'mode' as
  MEDIA_SUPPORT (just as is done for the media controller code).
- Add a note to staging that this should be changed once the cec framework
  is moved out of staging.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Reported-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
This commit is contained in:
Hans Verkuil 2016-07-01 07:33:10 -03:00 committed by Mauro Carvalho Chehab
parent ea8c535e30
commit 5bb2399a4f
7 changed files with 20 additions and 11 deletions

View file

@ -81,7 +81,7 @@ config MEDIA_RC_SUPPORT
Say Y when you have a TV or an IR device. Say Y when you have a TV or an IR device.
config MEDIA_CEC_EDID config MEDIA_CEC_EDID
tristate bool
# #
# Media controller # Media controller

View file

@ -2,7 +2,9 @@
# Makefile for the kernel multimedia device drivers. # Makefile for the kernel multimedia device drivers.
# #
obj-$(CONFIG_MEDIA_CEC_EDID) += cec-edid.o ifeq ($(CONFIG_MEDIA_CEC_EDID),y)
obj-$(CONFIG_MEDIA_SUPPORT) += cec-edid.o
endif
media-objs := media-device.o media-devnode.o media-entity.o media-objs := media-device.o media-devnode.o media-entity.o

View file

@ -1,5 +1,5 @@
config MEDIA_CEC config MEDIA_CEC
tristate "CEC API (EXPERIMENTAL)" bool "CEC API (EXPERIMENTAL)"
depends on MEDIA_SUPPORT depends on MEDIA_SUPPORT
select MEDIA_CEC_EDID select MEDIA_CEC_EDID
---help--- ---help---

View file

@ -1,3 +1,5 @@
cec-objs := cec-core.o cec-adap.o cec-api.o cec-objs := cec-core.o cec-adap.o cec-api.o
obj-$(CONFIG_MEDIA_CEC) += cec.o ifeq ($(CONFIG_MEDIA_CEC),y)
obj-$(CONFIG_MEDIA_SUPPORT) += cec.o
endif

View file

@ -23,5 +23,10 @@ Other TODOs:
And also TYPE_SWITCH and TYPE_CDC_ONLY in addition to the TYPE_UNREGISTERED? And also TYPE_SWITCH and TYPE_CDC_ONLY in addition to the TYPE_UNREGISTERED?
This should give the framework more information about the device type This should give the framework more information about the device type
since SPECIFIC and UNREGISTERED give no useful information. since SPECIFIC and UNREGISTERED give no useful information.
- Once this is out of staging this should no longer be a separate
config option, instead it should be selected by drivers that want it.
- Revisit the IS_REACHABLE(RC_CORE): perhaps the RC_CORE support should
be enabled through a separate config option in drivers/media/Kconfig
or rc/Kconfig?
Hans Verkuil <hans.verkuil@cisco.com> Hans Verkuil <hans.verkuil@cisco.com>

View file

@ -1456,7 +1456,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))
break; break;
#if IS_ENABLED(CONFIG_RC_CORE) #if IS_REACHABLE(CONFIG_RC_CORE)
switch (msg->msg[2]) { switch (msg->msg[2]) {
/* /*
* Play function, this message can have variable length * Play function, this message can have variable length
@ -1492,7 +1492,7 @@ static int cec_receive_notify(struct cec_adapter *adap, struct cec_msg *msg,
case CEC_MSG_USER_CONTROL_RELEASED: case CEC_MSG_USER_CONTROL_RELEASED:
if (!(adap->capabilities & CEC_CAP_RC)) if (!(adap->capabilities & CEC_CAP_RC))
break; break;
#if IS_ENABLED(CONFIG_RC_CORE) #if IS_REACHABLE(CONFIG_RC_CORE)
rc_keyup(adap->rc); rc_keyup(adap->rc);
#endif #endif
break; break;

View file

@ -239,7 +239,7 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
if (!(caps & CEC_CAP_RC)) if (!(caps & CEC_CAP_RC))
return adap; return adap;
#if IS_ENABLED(CONFIG_RC_CORE) #if IS_REACHABLE(CONFIG_RC_CORE)
/* Prepare the RC input device */ /* Prepare the RC input device */
adap->rc = rc_allocate_device(); adap->rc = rc_allocate_device();
if (!adap->rc) { if (!adap->rc) {
@ -282,7 +282,7 @@ int cec_register_adapter(struct cec_adapter *adap)
if (IS_ERR_OR_NULL(adap)) if (IS_ERR_OR_NULL(adap))
return 0; return 0;
#if IS_ENABLED(CONFIG_RC_CORE) #if IS_REACHABLE(CONFIG_RC_CORE)
if (adap->capabilities & CEC_CAP_RC) { if (adap->capabilities & CEC_CAP_RC) {
res = rc_register_device(adap->rc); res = rc_register_device(adap->rc);
@ -298,7 +298,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_ENABLED(CONFIG_RC_CORE) #if IS_REACHABLE(CONFIG_RC_CORE)
/* 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;
@ -333,7 +333,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_ENABLED(CONFIG_RC_CORE) #if IS_REACHABLE(CONFIG_RC_CORE)
/* 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;
@ -353,7 +353,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_ENABLED(CONFIG_RC_CORE) #if IS_REACHABLE(CONFIG_RC_CORE)
if (adap->rc) if (adap->rc)
rc_free_device(adap->rc); rc_free_device(adap->rc);
#endif #endif