]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
media: cec: add optional adap_configured callback
authorHans Verkuil <hverkuil-cisco@xs4all.nl>
Thu, 3 Feb 2022 12:11:15 +0000 (12:11 +0000)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Sun, 24 Apr 2022 06:41:35 +0000 (07:41 +0100)
This new optional callback is called when the adapter is fully configured
or fully unconfigured. Some drivers may have to take action when this
happens.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Documentation/driver-api/media/cec-core.rst
drivers/media/cec/core/cec-adap.c
include/media/cec.h

index c6194ee81c41b8b439aca6bdd9372250cdb14fad..ae0d20798edcc36a6e06184f953da67c7e3b7ede 100644 (file)
@@ -109,6 +109,7 @@ your driver:
                int (*adap_monitor_all_enable)(struct cec_adapter *adap, bool enable);
                int (*adap_monitor_pin_enable)(struct cec_adapter *adap, bool enable);
                int (*adap_log_addr)(struct cec_adapter *adap, u8 logical_addr);
+               void (*adap_configured)(struct cec_adapter *adap, bool configured);
                int (*adap_transmit)(struct cec_adapter *adap, u8 attempts,
                                      u32 signal_free_time, struct cec_msg *msg);
                void (*adap_status)(struct cec_adapter *adap, struct seq_file *file);
@@ -117,7 +118,7 @@ your driver:
                /* Error injection callbacks */
                ...
 
-               /* High-level callbacks */
+               /* High-level callback */
                ...
        };
 
@@ -178,6 +179,16 @@ can receive directed messages to that address.
 Note that adap_log_addr must return 0 if logical_addr is CEC_LOG_ADDR_INVALID.
 
 
+Called when the adapter is fully configured or unconfigured::
+
+       void (*adap_configured)(struct cec_adapter *adap, bool configured);
+
+If configured == true, then the adapter is fully configured, i.e. all logical
+addresses have been successfully claimed. If configured == false, then the
+adapter is unconfigured. If the driver has to take specific actions after
+(un)configuration, then that can be done through this optional callback.
+
+
 To transmit a new message::
 
        int (*adap_transmit)(struct cec_adapter *adap, u8 attempts,
index 2425cb4c6a9ac498b10399bd10e0fe9fea85c238..e789aec7455cf2020329e2ac1ad75f0490e780de 100644 (file)
@@ -1336,6 +1336,7 @@ static void cec_adap_unconfigure(struct cec_adapter *adap)
        cec_flush(adap);
        wake_up_interruptible(&adap->kthread_waitq);
        cec_post_state_event(adap);
+       call_void_op(adap, adap_configured, false);
 }
 
 /*
@@ -1517,6 +1518,7 @@ configured:
        adap->kthread_config = NULL;
        complete(&adap->config_completion);
        mutex_unlock(&adap->lock);
+       call_void_op(adap, adap_configured, true);
        return 0;
 
 unconfigure:
index 80340c9eb0f27411d9eef323b46d847ddc850a94..6f13b0222aa369e8b9e691a535fe2a2963875381 100644 (file)
@@ -118,6 +118,7 @@ struct cec_adap_ops {
        int (*adap_monitor_all_enable)(struct cec_adapter *adap, bool enable);
        int (*adap_monitor_pin_enable)(struct cec_adapter *adap, bool enable);
        int (*adap_log_addr)(struct cec_adapter *adap, u8 logical_addr);
+       void (*adap_configured)(struct cec_adapter *adap, bool configured);
        int (*adap_transmit)(struct cec_adapter *adap, u8 attempts,
                             u32 signal_free_time, struct cec_msg *msg);
        void (*adap_status)(struct cec_adapter *adap, struct seq_file *file);