media: cec: clear all cec_log_addrs fields
authorHans Verkuil <hverkuil@xs4all.nl>
Tue, 4 Jul 2017 14:21:14 +0000 (11:21 -0300)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Tue, 18 Jul 2017 15:36:19 +0000 (12:36 -0300)
The CEC version, vendor ID and OSD name were not cleared when clearing the
current set of logical addresses. This was unexpected and somewhat confusing,
so reset all these fields to their default values. Also document this since
the documentation wasn't quite clear either.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Documentation/media/uapi/cec/cec-ioc-adap-g-log-addrs.rst
drivers/media/cec/cec-adap.c

index fcf863ab6f4378343dc764f29c5baca37438f6f1..91cecc4d69cbcb4f9d7b2bab3a04751fb89651cc 100644 (file)
@@ -48,7 +48,9 @@ can only be called by a file descriptor in initiator mode (see :ref:`CEC_S_MODE`
 the ``EBUSY`` error code will be returned.
 
 To clear existing logical addresses set ``num_log_addrs`` to 0. All other fields
-will be ignored in that case. The adapter will go to the unconfigured state.
+will be ignored in that case. The adapter will go to the unconfigured state and the
+``cec_version``, ``vendor_id`` and ``osd_name`` fields are all reset to their default
+values (CEC version 2.0, no vendor ID and an empty OSD name).
 
 If the physical address is valid (see :ref:`ioctl CEC_ADAP_S_PHYS_ADDR <CEC_ADAP_S_PHYS_ADDR>`),
 then this ioctl will block until all requested logical
index bf45977b2823b067076eb1e01f741af8dd424bdb..5a2363cbaeb166c1723180f5e9385fd12679cf8f 100644 (file)
@@ -1471,8 +1471,13 @@ int __cec_s_log_addrs(struct cec_adapter *adap,
                return -ENODEV;
 
        if (!log_addrs || log_addrs->num_log_addrs == 0) {
-               adap->log_addrs.num_log_addrs = 0;
                cec_adap_unconfigure(adap);
+               adap->log_addrs.num_log_addrs = 0;
+               for (i = 0; i < CEC_MAX_LOG_ADDRS; i++)
+                       adap->log_addrs.log_addr[i] = CEC_LOG_ADDR_INVALID;
+               adap->log_addrs.osd_name[0] = '\0';
+               adap->log_addrs.vendor_id = CEC_VENDOR_ID_NONE;
+               adap->log_addrs.cec_version = CEC_OP_CEC_VERSION_2_0;
                return 0;
        }