Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5f2c467c authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab
Browse files

[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: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent ee7e9871
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -6,8 +6,14 @@ config CEC_CORE
config MEDIA_CEC_NOTIFIER
	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
	bool "HDMI CEC debugfs interface"
	depends on MEDIA_CEC_SUPPORT && DEBUG_FS
	depends on CEC_CORE && DEBUG_FS
	---help---
	  Turns on the DebugFS interface for CEC devices.
+2 −2
Original line number Diff line number Diff line
@@ -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))
			break;

#if IS_REACHABLE(CONFIG_RC_CORE)
#ifdef CONFIG_MEDIA_CEC_RC
		switch (msg->msg[2]) {
		/*
		 * 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) ||
		    !(adap->log_addrs.flags & CEC_LOG_ADDRS_FL_ALLOW_RC_PASSTHRU))
			break;
#if IS_REACHABLE(CONFIG_RC_CORE)
#ifdef CONFIG_MEDIA_CEC_RC
		rc_keyup(adap->rc);
#endif
		break;
+6 −6
Original line number Diff line number Diff line
@@ -220,7 +220,7 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
	struct cec_adapter *adap;
	int res;

#if !IS_REACHABLE(CONFIG_RC_CORE)
#ifndef CONFIG_MEDIA_CEC_RC
	caps &= ~CEC_CAP_RC;
#endif

@@ -256,7 +256,7 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
		return ERR_PTR(res);
	}

#if IS_REACHABLE(CONFIG_RC_CORE)
#ifdef CONFIG_MEDIA_CEC_RC
	if (!(caps & CEC_CAP_RC))
		return adap;

@@ -305,7 +305,7 @@ int cec_register_adapter(struct cec_adapter *adap,
	adap->owner = parent->driver->owner;
	adap->devnode.dev.parent = parent;

#if IS_REACHABLE(CONFIG_RC_CORE)
#ifdef CONFIG_MEDIA_CEC_RC
	if (adap->capabilities & CEC_CAP_RC) {
		adap->rc->dev.parent = parent;
		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);
	if (res) {
#if IS_REACHABLE(CONFIG_RC_CORE)
#ifdef CONFIG_MEDIA_CEC_RC
		/* Note: rc_unregister also calls rc_free */
		rc_unregister_device(adap->rc);
		adap->rc = NULL;
@@ -357,7 +357,7 @@ void cec_unregister_adapter(struct cec_adapter *adap)
	if (IS_ERR_OR_NULL(adap))
		return;

#if IS_REACHABLE(CONFIG_RC_CORE)
#ifdef CONFIG_MEDIA_CEC_RC
	/* Note: rc_unregister also calls rc_free */
	rc_unregister_device(adap->rc);
	adap->rc = NULL;
@@ -381,7 +381,7 @@ void cec_delete_adapter(struct cec_adapter *adap)
	kthread_stop(adap->kthread);
	if (adap->kthread_config)
		kthread_stop(adap->kthread_config);
#if IS_REACHABLE(CONFIG_RC_CORE)
#ifdef CONFIG_MEDIA_CEC_RC
	rc_free_device(adap->rc);
#endif
	kfree(adap);