All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Diffs between the CEC pull request and v17 patch series
@ 2016-06-18 12:18 Hans Verkuil
  2016-06-18 13:20 ` Mauro Carvalho Chehab
  0 siblings, 1 reply; 2+ messages in thread
From: Hans Verkuil @ 2016-06-18 12:18 UTC (permalink / raw)
  To: Linux Media Mailing List; +Cc: Mauro Carvalho Chehab

Mauro,

This patch is the diff between my previous CEC pull request and the upcoming patch series 17.

It contains all the non-codingstyle changes made since the original pull request to avoid you
having to dig through the new patch series for the changes.

This should take care of all your comments (I hope!).

Changes since the original pull request:

- checkpatch changes (not included in this patch). There are still a number of 80-char limit
  warnings, but splitting those up makes the code harder to read IMHO.
- Dropped media/cec.h from Documentation/DocBook/device-drivers.tmpl
  (cec-edid.h isn't staging, so that stayed)
- Added notes to the cec DocBook files that mentions that this is a proposed API.
- Updated the DocBook files incorporating the review comments
- Disable CEC support by default in Kconfig for HDMI drivers since cec is still staging.
- CEC_DQEVENT didn't block waiting for events in blocking mode. Fixed this. The documentation
  was correct, but it was never implemented.
- Monitor mode now requires CAP_NET_ADMIN.
- Three fixes in cec-funcs.h: the language string wasn't zero-terminated and the
  latency messages are broadcast messages, not directed messages.
- Remove the cec.h dependency from cec-edid.h. Partially because cec.h belongs to the
  staging driver, partially because it really isn't necessary.
- Updated the TODO file
- Fixed vivid-cec.c top-level comment & copyright year.

Regards,

	Hans

diff --git a/Documentation/DocBook/device-drivers.tmpl b/Documentation/DocBook/device-drivers.tmpl
index 5b77199..de79efd 100644
--- a/Documentation/DocBook/device-drivers.tmpl
+++ b/Documentation/DocBook/device-drivers.tmpl
@@ -272,10 +272,6 @@ X!Isound/sound_firmware.c
 !Iinclude/media/media-devnode.h
 !Iinclude/media/media-entity.h
     </sect1>
      <sect1><title>Consumer Electronics Control devices</title>
-!Iinclude/media/cec.h
 !Iinclude/media/cec-edid.h
      </sect1>

diff --git a/Documentation/DocBook/media/v4l/cec-api.xml b/Documentation/DocBook/media/v4l/cec-api.xml
index caa04c0..7062c1f 100644
--- a/Documentation/DocBook/media/v4l/cec-api.xml
+++ b/Documentation/DocBook/media/v4l/cec-api.xml
@@ -30,6 +30,10 @@

   <section id="cec-intro">
     <title>Introduction</title>
+    <para>
+      Note: this documents the proposed CEC API. This API is not yet finalized and
+      is currently only available as a staging kernel module.
+    </para>
     <para>HDMI connectors provide a single pin for use by the Consumer Electronics
     Control protocol. This protocol allows different devices connected by an HDMI cable
     to communicate. The protocol for CEC version 1.4 is defined in supplements 1 (CEC)
@@ -48,8 +52,7 @@
     <para>In addition, CEC can be implemented in HDMI receivers, transmitters and in USB
     devices that have an HDMI input and an HDMI output and that control just the CEC pin.</para>

-    <para>Drivers that support CEC and that allow (or require) userspace to handle CEC
-    messages and/or configure the CEC adapter will create a CEC device node (/dev/cecX)
+    <para>Drivers that support CEC will create a CEC device node (/dev/cecX)
     to give userspace access to the CEC adapter. The &CEC-ADAP-G-CAPS; ioctl will tell userspace
     what it is allowed to do.</para>
   </section>
diff --git a/Documentation/DocBook/media/v4l/cec-func-close.xml b/Documentation/DocBook/media/v4l/cec-func-close.xml
index c3978af..0812c8c 100644
--- a/Documentation/DocBook/media/v4l/cec-func-close.xml
+++ b/Documentation/DocBook/media/v4l/cec-func-close.xml
@@ -35,6 +35,11 @@
   <refsect1>
     <title>Description</title>

+    <para>
+      Note: this documents the proposed CEC API. This API is not yet finalized and
+      is currently only available as a staging kernel module.
+    </para>
+
     <para>Closes the cec device. Resources associated with the file descriptor
     are freed. The device configuration remain unchanged.</para>
   </refsect1>
diff --git a/Documentation/DocBook/media/v4l/cec-func-ioctl.xml b/Documentation/DocBook/media/v4l/cec-func-ioctl.xml
index 0480eeb..f92817a 100644
--- a/Documentation/DocBook/media/v4l/cec-func-ioctl.xml
+++ b/Documentation/DocBook/media/v4l/cec-func-ioctl.xml
@@ -49,6 +49,11 @@

   <refsect1>
     <title>Description</title>
+    <para>
+      Note: this documents the proposed CEC API. This API is not yet finalized and
+      is currently only available as a staging kernel module.
+    </para>
+
     <para>The <function>ioctl()</function> function manipulates cec device
     parameters. The argument <parameter>fd</parameter> must be an open file
     descriptor.</para>
diff --git a/Documentation/DocBook/media/v4l/cec-func-open.xml b/Documentation/DocBook/media/v4l/cec-func-open.xml
index d814847..2edc555 100644
--- a/Documentation/DocBook/media/v4l/cec-func-open.xml
+++ b/Documentation/DocBook/media/v4l/cec-func-open.xml
@@ -33,14 +33,24 @@
       <varlistentry>
 	<term><parameter>flags</parameter></term>
 	<listitem>
-	  <para>Open flags. Access mode must be either <constant>O_RDONLY</constant>
-	  or <constant>O_RDWR</constant>. Other flags have no effect.</para>
+	  <para>Open flags. Access mode must be <constant>O_RDWR</constant>.
+	  </para>
+	  <para>When the <constant>O_NONBLOCK</constant> flag is
+given, the &CEC-RECEIVE; ioctl will return &EAGAIN; when no message is
+available, and the &CEC-TRANSMIT;, &CEC-ADAP-S-PHYS-ADDR; and
+&CEC-ADAP-S-LOG-ADDRS; ioctls all act in non-blocking mode.</para>
+	  <para>Other flags have no effect.</para>
 	</listitem>
       </varlistentry>
     </variablelist>
   </refsect1>
   <refsect1>
     <title>Description</title>
+    <para>
+      Note: this documents the proposed CEC API. This API is not yet finalized and
+      is currently only available as a staging kernel module.
+    </para>
+
     <para>To open a cec device applications call <function>open()</function>
     with the desired device name. The function has no side effects; the device
     configuration remain unchanged.</para>
@@ -53,7 +63,7 @@

     <para><function>open</function> returns the new file descriptor on success.
     On error, -1 is returned, and <varname>errno</varname> is set appropriately.
-    Possible error codes are:</para>
+    Possible error codes include:</para>

     <variablelist>
       <varlistentry>
diff --git a/Documentation/DocBook/media/v4l/cec-func-poll.xml b/Documentation/DocBook/media/v4l/cec-func-poll.xml
index 6853817..1bddbde 100644
--- a/Documentation/DocBook/media/v4l/cec-func-poll.xml
+++ b/Documentation/DocBook/media/v4l/cec-func-poll.xml
@@ -24,6 +24,11 @@
   <refsect1>
     <title>Description</title>

+    <para>
+      Note: this documents the proposed CEC API. This API is not yet finalized and
+      is currently only available as a staging kernel module.
+    </para>
+
     <para>With the <function>poll()</function> function applications
 can wait for CEC events.</para>

diff --git a/Documentation/DocBook/media/v4l/cec-ioc-adap-g-caps.xml b/Documentation/DocBook/media/v4l/cec-ioc-adap-g-caps.xml
index b99ed22..3523ef2 100644
--- a/Documentation/DocBook/media/v4l/cec-ioc-adap-g-caps.xml
+++ b/Documentation/DocBook/media/v4l/cec-ioc-adap-g-caps.xml
@@ -49,6 +49,11 @@
   <refsect1>
     <title>Description</title>

+    <para>
+      Note: this documents the proposed CEC API. This API is not yet finalized and
+      is currently only available as a staging kernel module.
+    </para>
+
     <para>All cec devices must support the <constant>CEC_ADAP_G_CAPS</constant>
     ioctl. To query device information, applications call the ioctl with a
     pointer to a &cec-caps;. The driver fills the structure and returns
@@ -96,20 +101,26 @@
 	    <entry><constant>CEC_CAP_PHYS_ADDR</constant></entry>
 	    <entry>0x00000001</entry>
 	    <entry>Userspace has to configure the physical address by
-	    calling &CEC-ADAP-S-PHYS-ADDR;.</entry>
+	    calling &CEC-ADAP-S-PHYS-ADDR;. If this capability isn't set,
+	    then setting the physical address is handled by the kernel
+	    whenever the EDID is set (for an HDMI receiver) or read (for
+	    an HDMI transmitter).</entry>
 	  </row>
 	  <row>
 	    <entry><constant>CEC_CAP_LOG_ADDRS</constant></entry>
 	    <entry>0x00000002</entry>
 	    <entry>Userspace has to configure the logical addresses by
-	    calling &CEC-ADAP-S-LOG-ADDRS;.</entry>
+	    calling &CEC-ADAP-S-LOG-ADDRS;. If this capability isn't set,
+	    then the kernel will have configured this.</entry>
 	  </row>
 	  <row>
 	    <entry><constant>CEC_CAP_TRANSMIT</constant></entry>
 	    <entry>0x00000004</entry>
 	    <entry>Userspace can transmit CEC messages by calling &CEC-TRANSMIT;. This
 	    implies that userspace can be a follower as well, since being able to
-	    transmit messages is a prerequisite of becoming a follower.
+	    transmit messages is a prerequisite of becoming a follower. If this
+	    capability isn't set, then the kernel will handle all CEC transmits
+	    and process all CEC messages it receives.
 	    </entry>
 	  </row>
 	  <row>
diff --git a/Documentation/DocBook/media/v4l/cec-ioc-adap-g-log-addrs.xml b/Documentation/DocBook/media/v4l/cec-ioc-adap-g-log-addrs.xml
index 01bc5ab..302b829 100644
--- a/Documentation/DocBook/media/v4l/cec-ioc-adap-g-log-addrs.xml
+++ b/Documentation/DocBook/media/v4l/cec-ioc-adap-g-log-addrs.xml
@@ -50,15 +50,20 @@
   <refsect1>
     <title>Description</title>

-    <para>To query the current CEC logical addresses applications call the
+    <para>
+      Note: this documents the proposed CEC API. This API is not yet finalized and
+      is currently only available as a staging kernel module.
+    </para>
+
+    <para>To query the current CEC logical addresses, applications call the
 <constant>CEC_ADAP_G_LOG_ADDRS</constant> ioctl with a pointer to a
 <structname>cec_log_addrs</structname> structure where the drivers stores the
 logical addresses.</para>

-    <para>To set new logical addresses applications fill in struct <structname>cec_log_addrs</structname>
+    <para>To set new logical addresses, applications fill in struct <structname>cec_log_addrs</structname>
 and call the <constant>CEC_ADAP_S_LOG_ADDRS</constant> ioctl with a pointer to this struct.
 The <constant>CEC_ADAP_S_LOG_ADDRS</constant> ioctl is only available if
-<constant>CEC_CAP_LOG_ADDRS</constant> is set. This ioctl will block until all
+<constant>CEC_CAP_LOG_ADDRS</constant> is set (&ENOTTY; is returned otherwise). This ioctl will block until all
 requested logical addresses have been claimed. <constant>CEC_ADAP_S_LOG_ADDRS</constant>
 can only be called by a file handle in initiator mode (see &CEC-S-MODE;).</para>

@@ -81,7 +86,7 @@ can only be called by a file handle in initiator mode (see &CEC-S-MODE;).</para>
 	    <entry><structfield>log_addr_mask</structfield></entry>
 	    <entry>The bitmask of all logical addresses this adapter has claimed.
 	    If this adapter is Unregistered then <structfield>log_addr_mask</structfield>
-	    sets bit 15, if this adapter is not configured at all, then
+	    sets bit 15 and clears all other bits. If this adapter is not configured at all, then
 	    <structfield>log_addr_mask</structfield> is set to 0. Set by the driver.</entry>
 	  </row>
 	  <row>
diff --git a/Documentation/DocBook/media/v4l/cec-ioc-adap-g-phys-addr.xml b/Documentation/DocBook/media/v4l/cec-ioc-adap-g-phys-addr.xml
index 7a08269..d95f178 100644
--- a/Documentation/DocBook/media/v4l/cec-ioc-adap-g-phys-addr.xml
+++ b/Documentation/DocBook/media/v4l/cec-ioc-adap-g-phys-addr.xml
@@ -50,6 +50,11 @@
   <refsect1>
     <title>Description</title>

+    <para>
+      Note: this documents the proposed CEC API. This API is not yet finalized and
+      is currently only available as a staging kernel module.
+    </para>
+
     <para>To query the current physical address applications call the
 <constant>CEC_ADAP_G_PHYS_ADDR</constant> ioctl with a pointer to an __u16
 where the driver stores the physical address.</para>
@@ -57,11 +62,10 @@ where the driver stores the physical address.</para>
     <para>To set a new physical address applications store the physical address in
 an __u16 and call the <constant>CEC_ADAP_S_PHYS_ADDR</constant> ioctl with a
 pointer to this integer. <constant>CEC_ADAP_S_PHYS_ADDR</constant> is only
-available if <constant>CEC_CAP_PHYS_ADDR</constant> is set. It is not allowed
-to change a valid physical address to another valid physical address: you must
-select <constant>CEC_PHYS_ADDR_INVALID</constant> (f.f.f.f) first.
-<constant>CEC_ADAP_S_PHYS_ADDR</constant>
-can only be called by a file handle in initiator mode (see &CEC-S-MODE;).</para>
+available if <constant>CEC_CAP_PHYS_ADDR</constant> is set (&ENOTTY; will be returned
+otherwise). <constant>CEC_ADAP_S_PHYS_ADDR</constant>
+can only be called by a file handle in initiator mode (see &CEC-S-MODE;), if not
+&EBUSY; will be returned.</para>

     <para>The physical address is a 16-bit number where each group of 4 bits
 represent a digit of the physical address a.b.c.d where the most significant
diff --git a/Documentation/DocBook/media/v4l/cec-ioc-dqevent.xml b/Documentation/DocBook/media/v4l/cec-ioc-dqevent.xml
index 6a9960f..87d4f29 100644
--- a/Documentation/DocBook/media/v4l/cec-ioc-dqevent.xml
+++ b/Documentation/DocBook/media/v4l/cec-ioc-dqevent.xml
@@ -49,6 +49,11 @@
   <refsect1>
     <title>Description</title>

+    <para>
+      Note: this documents the proposed CEC API. This API is not yet finalized and
+      is currently only available as a staging kernel module.
+    </para>
+
     <para>CEC devices can send asynchronous events. These can be retrieved by calling
     the <constant>CEC_DQEVENT</constant> ioctl. If the file descriptor is in non-blocking
     mode and no event is pending, then it will return -1 and set errno to the &EAGAIN;.</para>
@@ -110,7 +115,7 @@
 	  <row>
 	    <entry>__u32</entry>
 	    <entry><structfield>event</structfield></entry>
-	    <entry>The event, see <xref linkend="cec-events" />.</entry>
+	    <entry>The CEC event type, see <xref linkend="cec-events" />.</entry>
 	    <entry></entry>
 	  </row>
 	  <row>
@@ -144,7 +149,7 @@
     </table>

     <table pgwide="1" frame="none" id="cec-events">
-      <title>CEC Events</title>
+      <title>CEC Events Types</title>
       <tgroup cols="3">
 	&cs-def;
 	<tbody valign="top">
diff --git a/Documentation/DocBook/media/v4l/cec-ioc-g-mode.xml b/Documentation/DocBook/media/v4l/cec-ioc-g-mode.xml
index 0cb1941..26b4282 100644
--- a/Documentation/DocBook/media/v4l/cec-ioc-g-mode.xml
+++ b/Documentation/DocBook/media/v4l/cec-ioc-g-mode.xml
@@ -50,12 +50,18 @@
   <refsect1>
     <title>Description</title>

+    <para>
+      Note: this documents the proposed CEC API. This API is not yet finalized and
+      is currently only available as a staging kernel module.
+    </para>
+
     <para>By default any filehandle can use &CEC-TRANSMIT; and &CEC-RECEIVE;, but
-in order to prevent applications from stepping on each others toes you want to get
-exclusive access to the CEC adapter. This ioctl allows you to try and become the
-exclusive initiator and/or follower. The initiator is the filehandle that is used
+in order to prevent applications from stepping on each others toes it must be possible
+to obtain exclusive access to the CEC adapter. This ioctl sets the filehandle
+to initiator and/or follower mode which can be exclusive depending on the chosen
+mode. The initiator is the filehandle that is used
 to initiate messages, i.e. it commands other CEC devices. The follower is the filehandle
-that receives messages sent to our CEC adapter and processes them. The same filehandle
+that receives messages sent to the CEC adapter and processes them. The same filehandle
 can be both initiator and follower, or this role can be taken by two different
 filehandles.</para>

@@ -72,10 +78,11 @@ is a follower, then the message is passed on to the follower who will use
 make the right decisions.</para>

     <para>The CEC framework will process core messages unless requested otherwise
-by the follower. The follower can enable the passthrough mode. In that case the
-CEC framework will pass on most core messages without processing them. In that
-case the follower will have to implement those messages. There are some messages
-that the core will always process, regardless of the passthrough mode.</para>
+by the follower. The follower can enable the passthrough mode. In that case, the
+CEC framework will pass on most core messages without processing them and
+the follower will have to implement those messages. There are some messages
+that the core will always process, regardless of the passthrough mode. See
+<xref linkend="cec-core-processing" /> for details.</para>

     <para>If there is no initiator, then any CEC filehandle can use &CEC-TRANSMIT;.
 If there is an exclusive initiator then only that initiator can call &CEC-TRANSMIT;.
@@ -162,7 +169,9 @@ The follower can of course always call &CEC-TRANSMIT;.</para>
 	    with <constant>CEC_MODE_NO_INITIATOR</constant>, otherwise &EINVAL; will be
 	    returned. In monitor mode all messages this CEC device transmits and all messages
 	    it receives (both broadcast messages and directed messages for one its logical
-	    addresses) will be reported. This is very useful for debugging.</entry>
+	    addresses) will be reported. This is very useful for debugging. This is only
+	    allowed if the process has the <constant>CAP_NET_ADMIN</constant>
+	    capability. If that is not set, then &EPERM; is returned.</entry>
 	  </row>
 	  <row>
 	    <entry><constant>CEC_MODE_MONITOR_ALL</constant></entry>
@@ -172,8 +181,9 @@ The follower can of course always call &CEC-TRANSMIT;.</para>
             returned. In 'monitor all' mode all messages this CEC device transmits and all messages
             it receives, including directed messages for other CEC devices will be reported. This
 	    is very useful for debugging, but not all devices support this. This mode requires that
-	    the <constant>CEC_CAP_MONITOR_ALL</constant> capability is set, and depending on the
-	    hardware, you may have to be root to select this mode.</entry>
+	    the <constant>CEC_CAP_MONITOR_ALL</constant> capability is set, otherwise &EINVAL; is
+	    returned. This is only allowed if the process has the <constant>CAP_NET_ADMIN</constant>
+	    capability. If that is not set, then &EPERM; is returned.</entry>
 	  </row>
 	</tbody>
       </tgroup>
diff --git a/Documentation/DocBook/media/v4l/cec-ioc-receive.xml b/Documentation/DocBook/media/v4l/cec-ioc-receive.xml
index 66bf82f..4da7239 100644
--- a/Documentation/DocBook/media/v4l/cec-ioc-receive.xml
+++ b/Documentation/DocBook/media/v4l/cec-ioc-receive.xml
@@ -50,6 +50,11 @@
   <refsect1>
     <title>Description</title>

+    <para>
+      Note: this documents the proposed CEC API. This API is not yet finalized and
+      is currently only available as a staging kernel module.
+    </para>
+
     <para>To receive a CEC message the application has to fill in the
     <structname>cec_msg</structname> structure and pass it to the
     <constant>CEC_RECEIVE</constant> ioctl. <constant>CEC_RECEIVE</constant> is
diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig
index 6c2acb6..929c500 100644
--- a/drivers/media/i2c/Kconfig
+++ b/drivers/media/i2c/Kconfig
@@ -222,7 +222,7 @@ config VIDEO_ADV7604
 config VIDEO_ADV7604_CEC
 	bool "Enable Analog Devices ADV7604 CEC support"
 	depends on VIDEO_ADV7604 && MEDIA_CEC
-	default y
+	default n
 	---help---
 	  When selected the adv7604 will support the optional
 	  HDMI CEC feature.
@@ -244,7 +244,7 @@ config VIDEO_ADV7842
 config VIDEO_ADV7842_CEC
 	bool "Enable Analog Devices ADV7842 CEC support"
 	depends on VIDEO_ADV7842 && MEDIA_CEC
-	default y
+	default n
 	---help---
 	  When selected the adv7842 will support the optional
 	  HDMI CEC feature.
@@ -477,7 +477,7 @@ config VIDEO_ADV7511
 config VIDEO_ADV7511_CEC
 	bool "Enable Analog Devices ADV7511 CEC support"
 	depends on VIDEO_ADV7511 && MEDIA_CEC
-	default y
+	default n
 	---help---
 	  When selected the adv7511 will support the optional
 	  HDMI CEC feature.
diff --git a/drivers/media/platform/vivid/Kconfig b/drivers/media/platform/vivid/Kconfig
index 20c5eea..dbb1584 100644
--- a/drivers/media/platform/vivid/Kconfig
+++ b/drivers/media/platform/vivid/Kconfig
@@ -26,7 +26,7 @@ config VIDEO_VIVID
 config VIDEO_VIVID_CEC
 	bool "Enable CEC emulation support"
 	depends on VIDEO_VIVID && MEDIA_CEC
-	default y
+	default n
 	---help---
 	  When selected the vivid module will emulate the optional
 	  HDMI CEC feature.
diff --git a/drivers/media/platform/vivid/vivid-cec.c b/drivers/media/platform/vivid/vivid-cec.c
index 2ad7f06..b5714fa 100644
--- a/drivers/media/platform/vivid/vivid-cec.c
+++ b/drivers/media/platform/vivid/vivid-cec.c
@@ -1,7 +1,7 @@
 /*
- * vivid-core.c - A Virtual Video Test Driver, core initialization
+ * vivid-cec.c - A Virtual Video Test Driver, cec emulation
  *
- * Copyright 2014 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
+ * Copyright 2016 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
  *
  * This program is free software; you may redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff --git a/drivers/staging/media/cec/TODO b/drivers/staging/media/cec/TODO
index c0751ef..e3c384a 100644
--- a/drivers/staging/media/cec/TODO
+++ b/drivers/staging/media/cec/TODO
@@ -10,4 +10,14 @@ them public.

 Hopefully this will happen later in 2016.

+Other TODOs:
+
+- Add a flag to inhibit passing CEC RC messages to the rc subsystem.
+  Applications should be able to choose this when calling S_LOG_ADDRS.
+- Convert cec.txt to sphinx.
+- If the reply field of cec_msg is set then when the reply arrives it
+  is only sent to the filehandle that transmitted the original message
+  and not to any followers. Should this behavior change or perhaps
+  controlled through a cec_msg flag?
+
 Hans Verkuil <hans.verkuil@cisco.com>
diff --git a/drivers/staging/media/cec/cec.c b/drivers/staging/media/cec/cec.c
index 65a3cb3..8634773 100644
--- a/drivers/staging/media/cec/cec.c
+++ b/drivers/staging/media/cec/cec.c
@@ -1827,9 +1827,17 @@ static long cec_ioctl(struct file *filp, unsigned cmd, unsigned long arg)
 		struct cec_event_queue *evq = NULL;
 		struct cec_event *ev = NULL;
 		u64 ts = ~0ULL;
-		unsigned i;
+		unsigned int i;

 		mutex_lock(&fh->lock);
+		while (!fh->events && block) {
+			mutex_unlock(&fh->lock);
+			err = wait_event_interruptible(fh->wait, fh->events);
+			if (err)
+				return err;
+			mutex_lock(&fh->lock);
+		}
+
 		/* Find the oldest event */
 		for (i = 0; i < CEC_NUM_EVENTS; i++) {
 			struct cec_event_queue *q = fh->evqueue + i;
@@ -1975,6 +1983,10 @@ static long cec_ioctl(struct file *filp, unsigned cmd, unsigned long arg)
 		if (mode_initiator && mode_follower >= CEC_MODE_MONITOR)
 			return -EINVAL;

+		/* Monitor modes require CAP_NET_ADMIN */
+		if (mode_follower >= CEC_MODE_MONITOR && !capable(CAP_NET_ADMIN))
+			return -EPERM;
+
 		mutex_lock(&adap->lock);
 		/*
 		 * You can't become exclusive follower if someone else already
diff --git a/include/linux/cec-funcs.h b/include/linux/cec-funcs.h
index 25c37bb..155f6b9 100644
--- a/include/linux/cec-funcs.h
+++ b/include/linux/cec-funcs.h
@@ -835,6 +835,7 @@ static inline void cec_ops_set_menu_language(struct cec_msg *msg,
 					     char *language)
 {
 	memcpy(language, msg->msg + 2, 3);
+	language[3] = '\0';
 }

 static inline void cec_msg_get_menu_language(struct cec_msg *msg,
@@ -1574,6 +1576,7 @@ static inline void cec_msg_report_current_latency(struct cec_msg *msg,
 						  __u8 audio_out_delay)
 {
 	msg->len = 7;
+	msg->msg[0] |= 0xf; /* broadcast */
 	msg->msg[1] = CEC_MSG_REPORT_CURRENT_LATENCY;
 	msg->msg[2] = phys_addr >> 8;
 	msg->msg[3] = phys_addr & 0xff;
@@ -1601,6 +1604,7 @@ static inline void cec_msg_request_current_latency(struct cec_msg *msg,
 						   __u16 phys_addr)
 {
 	msg->len = 4;
+	msg->msg[0] |= 0xf; /* broadcast */
 	msg->msg[1] = CEC_MSG_REQUEST_CURRENT_LATENCY;
 	msg->msg[2] = phys_addr >> 8;
 	msg->msg[3] = phys_addr & 0xff;
diff --git a/include/media/cec-edid.h b/include/media/cec-edid.h
index d6e39ca..bdf731e 100644
--- a/include/media/cec-edid.h
+++ b/include/media/cec-edid.h
@@ -21,8 +21,8 @@
 #define _MEDIA_CEC_EDID_H

 #include <linux/types.h>
-#include <linux/cec.h>

+#define CEC_PHYS_ADDR_INVALID		0xffff
 #define cec_phys_addr_exp(pa) \
 	((pa) >> 12), ((pa) >> 8) & 0xf, ((pa) >> 4) & 0xf, (pa) & 0xf


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] Diffs between the CEC pull request and v17 patch series
  2016-06-18 12:18 [PATCH] Diffs between the CEC pull request and v17 patch series Hans Verkuil
@ 2016-06-18 13:20 ` Mauro Carvalho Chehab
  0 siblings, 0 replies; 2+ messages in thread
From: Mauro Carvalho Chehab @ 2016-06-18 13:20 UTC (permalink / raw)
  To: Hans Verkuil; +Cc: Linux Media Mailing List

Em Sat, 18 Jun 2016 14:18:07 +0200
Hans Verkuil <hverkuil@xs4all.nl> escreveu:

> Mauro,
> 
> This patch is the diff between my previous CEC pull request and the upcoming patch series 17.
> 
> It contains all the non-codingstyle changes made since the original pull request to avoid you
> having to dig through the new patch series for the changes.
> 
> This should take care of all your comments (I hope!).

Sounds ok. Just a minor nitpick.

> 
> Changes since the original pull request:
> 
> - checkpatch changes (not included in this patch). There are still a number of 80-char limit
>   warnings, but splitting those up makes the code harder to read IMHO.
> - Dropped media/cec.h from Documentation/DocBook/device-drivers.tmpl
>   (cec-edid.h isn't staging, so that stayed)
> - Added notes to the cec DocBook files that mentions that this is a proposed API.
> - Updated the DocBook files incorporating the review comments
> - Disable CEC support by default in Kconfig for HDMI drivers since cec is still staging.
> - CEC_DQEVENT didn't block waiting for events in blocking mode. Fixed this. The documentation
>   was correct, but it was never implemented.
> - Monitor mode now requires CAP_NET_ADMIN.
> - Three fixes in cec-funcs.h: the language string wasn't zero-terminated and the
>   latency messages are broadcast messages, not directed messages.
> - Remove the cec.h dependency from cec-edid.h. Partially because cec.h belongs to the
>   staging driver, partially because it really isn't necessary.
> - Updated the TODO file
> - Fixed vivid-cec.c top-level comment & copyright year.
> 
> Regards,
> 
> 	Hans
> 
> diff --git a/Documentation/DocBook/device-drivers.tmpl b/Documentation/DocBook/device-drivers.tmpl
> index 5b77199..de79efd 100644
> --- a/Documentation/DocBook/device-drivers.tmpl
> +++ b/Documentation/DocBook/device-drivers.tmpl
> @@ -272,10 +272,6 @@ X!Isound/sound_firmware.c
>  !Iinclude/media/media-devnode.h
>  !Iinclude/media/media-entity.h
>      </sect1>
>       <sect1><title>Consumer Electronics Control devices</title>
> -!Iinclude/media/cec.h
>  !Iinclude/media/cec-edid.h
>       </sect1>
> 
> diff --git a/Documentation/DocBook/media/v4l/cec-api.xml b/Documentation/DocBook/media/v4l/cec-api.xml
> index caa04c0..7062c1f 100644
> --- a/Documentation/DocBook/media/v4l/cec-api.xml
> +++ b/Documentation/DocBook/media/v4l/cec-api.xml
> @@ -30,6 +30,10 @@
> 
>    <section id="cec-intro">
>      <title>Introduction</title>
> +    <para>
> +      Note: this documents the proposed CEC API. This API is not yet finalized and
> +      is currently only available as a staging kernel module.
> +    </para>
>      <para>HDMI connectors provide a single pin for use by the Consumer Electronics
>      Control protocol. This protocol allows different devices connected by an HDMI cable
>      to communicate. The protocol for CEC version 1.4 is defined in supplements 1 (CEC)
> @@ -48,8 +52,7 @@
>      <para>In addition, CEC can be implemented in HDMI receivers, transmitters and in USB
>      devices that have an HDMI input and an HDMI output and that control just the CEC pin.</para>
> 
> -    <para>Drivers that support CEC and that allow (or require) userspace to handle CEC
> -    messages and/or configure the CEC adapter will create a CEC device node (/dev/cecX)
> +    <para>Drivers that support CEC will create a CEC device node (/dev/cecX)
>      to give userspace access to the CEC adapter. The &CEC-ADAP-G-CAPS; ioctl will tell userspace
>      what it is allowed to do.</para>
>    </section>
> diff --git a/Documentation/DocBook/media/v4l/cec-func-close.xml b/Documentation/DocBook/media/v4l/cec-func-close.xml
> index c3978af..0812c8c 100644
> --- a/Documentation/DocBook/media/v4l/cec-func-close.xml
> +++ b/Documentation/DocBook/media/v4l/cec-func-close.xml
> @@ -35,6 +35,11 @@
>    <refsect1>
>      <title>Description</title>
> 
> +    <para>
> +      Note: this documents the proposed CEC API. This API is not yet finalized and
> +      is currently only available as a staging kernel module.
> +    </para>
> +
>      <para>Closes the cec device. Resources associated with the file descriptor
>      are freed. The device configuration remain unchanged.</para>
>    </refsect1>
> diff --git a/Documentation/DocBook/media/v4l/cec-func-ioctl.xml b/Documentation/DocBook/media/v4l/cec-func-ioctl.xml
> index 0480eeb..f92817a 100644
> --- a/Documentation/DocBook/media/v4l/cec-func-ioctl.xml
> +++ b/Documentation/DocBook/media/v4l/cec-func-ioctl.xml
> @@ -49,6 +49,11 @@
> 
>    <refsect1>
>      <title>Description</title>
> +    <para>
> +      Note: this documents the proposed CEC API. This API is not yet finalized and
> +      is currently only available as a staging kernel module.
> +    </para>
> +
>      <para>The <function>ioctl()</function> function manipulates cec device
>      parameters. The argument <parameter>fd</parameter> must be an open file
>      descriptor.</para>
> diff --git a/Documentation/DocBook/media/v4l/cec-func-open.xml b/Documentation/DocBook/media/v4l/cec-func-open.xml
> index d814847..2edc555 100644
> --- a/Documentation/DocBook/media/v4l/cec-func-open.xml
> +++ b/Documentation/DocBook/media/v4l/cec-func-open.xml
> @@ -33,14 +33,24 @@
>        <varlistentry>
>  	<term><parameter>flags</parameter></term>
>  	<listitem>
> -	  <para>Open flags. Access mode must be either <constant>O_RDONLY</constant>
> -	  or <constant>O_RDWR</constant>. Other flags have no effect.</para>
> +	  <para>Open flags. Access mode must be <constant>O_RDWR</constant>.
> +	  </para>
> +	  <para>When the <constant>O_NONBLOCK</constant> flag is
> +given, the &CEC-RECEIVE; ioctl will return &EAGAIN; when no message is
> +available, and the &CEC-TRANSMIT;, &CEC-ADAP-S-PHYS-ADDR; and
> +&CEC-ADAP-S-LOG-ADDRS; ioctls all act in non-blocking mode.</para>
> +	  <para>Other flags have no effect.</para>
>  	</listitem>
>        </varlistentry>
>      </variablelist>
>    </refsect1>
>    <refsect1>
>      <title>Description</title>
> +    <para>
> +      Note: this documents the proposed CEC API. This API is not yet finalized and
> +      is currently only available as a staging kernel module.
> +    </para>
> +
>      <para>To open a cec device applications call <function>open()</function>
>      with the desired device name. The function has no side effects; the device
>      configuration remain unchanged.</para>
> @@ -53,7 +63,7 @@
> 
>      <para><function>open</function> returns the new file descriptor on success.
>      On error, -1 is returned, and <varname>errno</varname> is set appropriately.
> -    Possible error codes are:</para>
> +    Possible error codes include:</para>
> 
>      <variablelist>
>        <varlistentry>
> diff --git a/Documentation/DocBook/media/v4l/cec-func-poll.xml b/Documentation/DocBook/media/v4l/cec-func-poll.xml
> index 6853817..1bddbde 100644
> --- a/Documentation/DocBook/media/v4l/cec-func-poll.xml
> +++ b/Documentation/DocBook/media/v4l/cec-func-poll.xml
> @@ -24,6 +24,11 @@
>    <refsect1>
>      <title>Description</title>
> 
> +    <para>
> +      Note: this documents the proposed CEC API. This API is not yet finalized and
> +      is currently only available as a staging kernel module.
> +    </para>
> +
>      <para>With the <function>poll()</function> function applications
>  can wait for CEC events.</para>
> 
> diff --git a/Documentation/DocBook/media/v4l/cec-ioc-adap-g-caps.xml b/Documentation/DocBook/media/v4l/cec-ioc-adap-g-caps.xml
> index b99ed22..3523ef2 100644
> --- a/Documentation/DocBook/media/v4l/cec-ioc-adap-g-caps.xml
> +++ b/Documentation/DocBook/media/v4l/cec-ioc-adap-g-caps.xml
> @@ -49,6 +49,11 @@
>    <refsect1>
>      <title>Description</title>
> 
> +    <para>
> +      Note: this documents the proposed CEC API. This API is not yet finalized and
> +      is currently only available as a staging kernel module.
> +    </para>
> +
>      <para>All cec devices must support the <constant>CEC_ADAP_G_CAPS</constant>
>      ioctl. To query device information, applications call the ioctl with a
>      pointer to a &cec-caps;. The driver fills the structure and returns
> @@ -96,20 +101,26 @@
>  	    <entry><constant>CEC_CAP_PHYS_ADDR</constant></entry>
>  	    <entry>0x00000001</entry>
>  	    <entry>Userspace has to configure the physical address by
> -	    calling &CEC-ADAP-S-PHYS-ADDR;.</entry>
> +	    calling &CEC-ADAP-S-PHYS-ADDR;. If this capability isn't set,
> +	    then setting the physical address is handled by the kernel
> +	    whenever the EDID is set (for an HDMI receiver) or read (for
> +	    an HDMI transmitter).</entry>
>  	  </row>
>  	  <row>
>  	    <entry><constant>CEC_CAP_LOG_ADDRS</constant></entry>
>  	    <entry>0x00000002</entry>
>  	    <entry>Userspace has to configure the logical addresses by
> -	    calling &CEC-ADAP-S-LOG-ADDRS;.</entry>
> +	    calling &CEC-ADAP-S-LOG-ADDRS;. If this capability isn't set,
> +	    then the kernel will have configured this.</entry>
>  	  </row>
>  	  <row>
>  	    <entry><constant>CEC_CAP_TRANSMIT</constant></entry>
>  	    <entry>0x00000004</entry>
>  	    <entry>Userspace can transmit CEC messages by calling &CEC-TRANSMIT;. This
>  	    implies that userspace can be a follower as well, since being able to
> -	    transmit messages is a prerequisite of becoming a follower.
> +	    transmit messages is a prerequisite of becoming a follower. If this
> +	    capability isn't set, then the kernel will handle all CEC transmits
> +	    and process all CEC messages it receives.
>  	    </entry>
>  	  </row>
>  	  <row>
> diff --git a/Documentation/DocBook/media/v4l/cec-ioc-adap-g-log-addrs.xml b/Documentation/DocBook/media/v4l/cec-ioc-adap-g-log-addrs.xml
> index 01bc5ab..302b829 100644
> --- a/Documentation/DocBook/media/v4l/cec-ioc-adap-g-log-addrs.xml
> +++ b/Documentation/DocBook/media/v4l/cec-ioc-adap-g-log-addrs.xml
> @@ -50,15 +50,20 @@
>    <refsect1>
>      <title>Description</title>
> 
> -    <para>To query the current CEC logical addresses applications call the
> +    <para>
> +      Note: this documents the proposed CEC API. This API is not yet finalized and
> +      is currently only available as a staging kernel module.
> +    </para>
> +
> +    <para>To query the current CEC logical addresses, applications call the
>  <constant>CEC_ADAP_G_LOG_ADDRS</constant> ioctl with a pointer to a
>  <structname>cec_log_addrs</structname> structure where the drivers stores the
>  logical addresses.</para>
> 
> -    <para>To set new logical addresses applications fill in struct <structname>cec_log_addrs</structname>
> +    <para>To set new logical addresses, applications fill in struct <structname>cec_log_addrs</structname>
>  and call the <constant>CEC_ADAP_S_LOG_ADDRS</constant> ioctl with a pointer to this struct.
>  The <constant>CEC_ADAP_S_LOG_ADDRS</constant> ioctl is only available if
> -<constant>CEC_CAP_LOG_ADDRS</constant> is set. This ioctl will block until all
> +<constant>CEC_CAP_LOG_ADDRS</constant> is set (&ENOTTY; is returned otherwise). This ioctl will block until all
>  requested logical addresses have been claimed. <constant>CEC_ADAP_S_LOG_ADDRS</constant>
>  can only be called by a file handle in initiator mode (see &CEC-S-MODE;).</para>
> 
> @@ -81,7 +86,7 @@ can only be called by a file handle in initiator mode (see &CEC-S-MODE;).</para>
>  	    <entry><structfield>log_addr_mask</structfield></entry>
>  	    <entry>The bitmask of all logical addresses this adapter has claimed.
>  	    If this adapter is Unregistered then <structfield>log_addr_mask</structfield>
> -	    sets bit 15, if this adapter is not configured at all, then
> +	    sets bit 15 and clears all other bits. If this adapter is not configured at all, then
>  	    <structfield>log_addr_mask</structfield> is set to 0. Set by the driver.</entry>
>  	  </row>
>  	  <row>
> diff --git a/Documentation/DocBook/media/v4l/cec-ioc-adap-g-phys-addr.xml b/Documentation/DocBook/media/v4l/cec-ioc-adap-g-phys-addr.xml
> index 7a08269..d95f178 100644
> --- a/Documentation/DocBook/media/v4l/cec-ioc-adap-g-phys-addr.xml
> +++ b/Documentation/DocBook/media/v4l/cec-ioc-adap-g-phys-addr.xml
> @@ -50,6 +50,11 @@
>    <refsect1>
>      <title>Description</title>
> 
> +    <para>
> +      Note: this documents the proposed CEC API. This API is not yet finalized and
> +      is currently only available as a staging kernel module.
> +    </para>
> +
>      <para>To query the current physical address applications call the
>  <constant>CEC_ADAP_G_PHYS_ADDR</constant> ioctl with a pointer to an __u16
>  where the driver stores the physical address.</para>
> @@ -57,11 +62,10 @@ where the driver stores the physical address.</para>
>      <para>To set a new physical address applications store the physical address in
>  an __u16 and call the <constant>CEC_ADAP_S_PHYS_ADDR</constant> ioctl with a
>  pointer to this integer. <constant>CEC_ADAP_S_PHYS_ADDR</constant> is only
> -available if <constant>CEC_CAP_PHYS_ADDR</constant> is set. It is not allowed
> -to change a valid physical address to another valid physical address: you must
> -select <constant>CEC_PHYS_ADDR_INVALID</constant> (f.f.f.f) first.
> -<constant>CEC_ADAP_S_PHYS_ADDR</constant>
> -can only be called by a file handle in initiator mode (see &CEC-S-MODE;).</para>
> +available if <constant>CEC_CAP_PHYS_ADDR</constant> is set (&ENOTTY; will be returned
> +otherwise). <constant>CEC_ADAP_S_PHYS_ADDR</constant>
> +can only be called by a file handle in initiator mode (see &CEC-S-MODE;), if not
> +&EBUSY; will be returned.</para>
> 
>      <para>The physical address is a 16-bit number where each group of 4 bits
>  represent a digit of the physical address a.b.c.d where the most significant
> diff --git a/Documentation/DocBook/media/v4l/cec-ioc-dqevent.xml b/Documentation/DocBook/media/v4l/cec-ioc-dqevent.xml
> index 6a9960f..87d4f29 100644
> --- a/Documentation/DocBook/media/v4l/cec-ioc-dqevent.xml
> +++ b/Documentation/DocBook/media/v4l/cec-ioc-dqevent.xml
> @@ -49,6 +49,11 @@
>    <refsect1>
>      <title>Description</title>
> 
> +    <para>
> +      Note: this documents the proposed CEC API. This API is not yet finalized and
> +      is currently only available as a staging kernel module.
> +    </para>
> +
>      <para>CEC devices can send asynchronous events. These can be retrieved by calling
>      the <constant>CEC_DQEVENT</constant> ioctl. If the file descriptor is in non-blocking
>      mode and no event is pending, then it will return -1 and set errno to the &EAGAIN;.</para>
> @@ -110,7 +115,7 @@
>  	  <row>
>  	    <entry>__u32</entry>
>  	    <entry><structfield>event</structfield></entry>
> -	    <entry>The event, see <xref linkend="cec-events" />.</entry>
> +	    <entry>The CEC event type, see <xref linkend="cec-events" />.</entry>
>  	    <entry></entry>
>  	  </row>
>  	  <row>
> @@ -144,7 +149,7 @@
>      </table>
> 
>      <table pgwide="1" frame="none" id="cec-events">
> -      <title>CEC Events</title>
> +      <title>CEC Events Types</title>
>        <tgroup cols="3">
>  	&cs-def;
>  	<tbody valign="top">
> diff --git a/Documentation/DocBook/media/v4l/cec-ioc-g-mode.xml b/Documentation/DocBook/media/v4l/cec-ioc-g-mode.xml
> index 0cb1941..26b4282 100644
> --- a/Documentation/DocBook/media/v4l/cec-ioc-g-mode.xml
> +++ b/Documentation/DocBook/media/v4l/cec-ioc-g-mode.xml
> @@ -50,12 +50,18 @@
>    <refsect1>
>      <title>Description</title>
> 
> +    <para>
> +      Note: this documents the proposed CEC API. This API is not yet finalized and
> +      is currently only available as a staging kernel module.
> +    </para>
> +
>      <para>By default any filehandle can use &CEC-TRANSMIT; and &CEC-RECEIVE;, but
> -in order to prevent applications from stepping on each others toes you want to get
> -exclusive access to the CEC adapter. This ioctl allows you to try and become the
> -exclusive initiator and/or follower. The initiator is the filehandle that is used
> +in order to prevent applications from stepping on each others toes it must be possible
> +to obtain exclusive access to the CEC adapter. This ioctl sets the filehandle
> +to initiator and/or follower mode which can be exclusive depending on the chosen
> +mode. The initiator is the filehandle that is used
>  to initiate messages, i.e. it commands other CEC devices. The follower is the filehandle
> -that receives messages sent to our CEC adapter and processes them. The same filehandle
> +that receives messages sent to the CEC adapter and processes them. The same filehandle
>  can be both initiator and follower, or this role can be taken by two different
>  filehandles.</para>
> 
> @@ -72,10 +78,11 @@ is a follower, then the message is passed on to the follower who will use
>  make the right decisions.</para>
> 
>      <para>The CEC framework will process core messages unless requested otherwise
> -by the follower. The follower can enable the passthrough mode. In that case the
> -CEC framework will pass on most core messages without processing them. In that
> -case the follower will have to implement those messages. There are some messages
> -that the core will always process, regardless of the passthrough mode.</para>
> +by the follower. The follower can enable the passthrough mode. In that case, the
> +CEC framework will pass on most core messages without processing them and
> +the follower will have to implement those messages. There are some messages
> +that the core will always process, regardless of the passthrough mode. See
> +<xref linkend="cec-core-processing" /> for details.</para>
> 
>      <para>If there is no initiator, then any CEC filehandle can use &CEC-TRANSMIT;.
>  If there is an exclusive initiator then only that initiator can call &CEC-TRANSMIT;.
> @@ -162,7 +169,9 @@ The follower can of course always call &CEC-TRANSMIT;.</para>
>  	    with <constant>CEC_MODE_NO_INITIATOR</constant>, otherwise &EINVAL; will be
>  	    returned. In monitor mode all messages this CEC device transmits and all messages
>  	    it receives (both broadcast messages and directed messages for one its logical
> -	    addresses) will be reported. This is very useful for debugging.</entry>
> +	    addresses) will be reported. This is very useful for debugging. This is only
> +	    allowed if the process has the <constant>CAP_NET_ADMIN</constant>
> +	    capability. If that is not set, then &EPERM; is returned.</entry>
>  	  </row>
>  	  <row>
>  	    <entry><constant>CEC_MODE_MONITOR_ALL</constant></entry>
> @@ -172,8 +181,9 @@ The follower can of course always call &CEC-TRANSMIT;.</para>
>              returned. In 'monitor all' mode all messages this CEC device transmits and all messages
>              it receives, including directed messages for other CEC devices will be reported. This
>  	    is very useful for debugging, but not all devices support this. This mode requires that
> -	    the <constant>CEC_CAP_MONITOR_ALL</constant> capability is set, and depending on the
> -	    hardware, you may have to be root to select this mode.</entry>
> +	    the <constant>CEC_CAP_MONITOR_ALL</constant> capability is set, otherwise &EINVAL; is
> +	    returned. This is only allowed if the process has the <constant>CAP_NET_ADMIN</constant>
> +	    capability. If that is not set, then &EPERM; is returned.</entry>
>  	  </row>
>  	</tbody>
>        </tgroup>
> diff --git a/Documentation/DocBook/media/v4l/cec-ioc-receive.xml b/Documentation/DocBook/media/v4l/cec-ioc-receive.xml
> index 66bf82f..4da7239 100644
> --- a/Documentation/DocBook/media/v4l/cec-ioc-receive.xml
> +++ b/Documentation/DocBook/media/v4l/cec-ioc-receive.xml
> @@ -50,6 +50,11 @@
>    <refsect1>
>      <title>Description</title>
> 
> +    <para>
> +      Note: this documents the proposed CEC API. This API is not yet finalized and
> +      is currently only available as a staging kernel module.
> +    </para>
> +
>      <para>To receive a CEC message the application has to fill in the
>      <structname>cec_msg</structname> structure and pass it to the
>      <constant>CEC_RECEIVE</constant> ioctl. <constant>CEC_RECEIVE</constant> is
> diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig
> index 6c2acb6..929c500 100644
> --- a/drivers/media/i2c/Kconfig
> +++ b/drivers/media/i2c/Kconfig
> @@ -222,7 +222,7 @@ config VIDEO_ADV7604
>  config VIDEO_ADV7604_CEC
>  	bool "Enable Analog Devices ADV7604 CEC support"
>  	depends on VIDEO_ADV7604 && MEDIA_CEC
> -	default y
> +	default n

I guess just removing default has the same effect.

>  	---help---
>  	  When selected the adv7604 will support the optional
>  	  HDMI CEC feature.
> @@ -244,7 +244,7 @@ config VIDEO_ADV7842
>  config VIDEO_ADV7842_CEC
>  	bool "Enable Analog Devices ADV7842 CEC support"
>  	depends on VIDEO_ADV7842 && MEDIA_CEC
> -	default y
> +	default n
>  	---help---
>  	  When selected the adv7842 will support the optional
>  	  HDMI CEC feature.
> @@ -477,7 +477,7 @@ config VIDEO_ADV7511
>  config VIDEO_ADV7511_CEC
>  	bool "Enable Analog Devices ADV7511 CEC support"
>  	depends on VIDEO_ADV7511 && MEDIA_CEC
> -	default y
> +	default n
>  	---help---
>  	  When selected the adv7511 will support the optional
>  	  HDMI CEC feature.
> diff --git a/drivers/media/platform/vivid/Kconfig b/drivers/media/platform/vivid/Kconfig
> index 20c5eea..dbb1584 100644
> --- a/drivers/media/platform/vivid/Kconfig
> +++ b/drivers/media/platform/vivid/Kconfig
> @@ -26,7 +26,7 @@ config VIDEO_VIVID
>  config VIDEO_VIVID_CEC
>  	bool "Enable CEC emulation support"
>  	depends on VIDEO_VIVID && MEDIA_CEC
> -	default y
> +	default n
>  	---help---
>  	  When selected the vivid module will emulate the optional
>  	  HDMI CEC feature.
> diff --git a/drivers/media/platform/vivid/vivid-cec.c b/drivers/media/platform/vivid/vivid-cec.c
> index 2ad7f06..b5714fa 100644
> --- a/drivers/media/platform/vivid/vivid-cec.c
> +++ b/drivers/media/platform/vivid/vivid-cec.c
> @@ -1,7 +1,7 @@
>  /*
> - * vivid-core.c - A Virtual Video Test Driver, core initialization
> + * vivid-cec.c - A Virtual Video Test Driver, cec emulation
>   *
> - * Copyright 2014 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
> + * Copyright 2016 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
>   *
>   * This program is free software; you may redistribute it and/or modify
>   * it under the terms of the GNU General Public License as published by
> diff --git a/drivers/staging/media/cec/TODO b/drivers/staging/media/cec/TODO
> index c0751ef..e3c384a 100644
> --- a/drivers/staging/media/cec/TODO
> +++ b/drivers/staging/media/cec/TODO
> @@ -10,4 +10,14 @@ them public.
> 
>  Hopefully this will happen later in 2016.
> 
> +Other TODOs:
> +
> +- Add a flag to inhibit passing CEC RC messages to the rc subsystem.
> +  Applications should be able to choose this when calling S_LOG_ADDRS.
> +- Convert cec.txt to sphinx.
> +- If the reply field of cec_msg is set then when the reply arrives it
> +  is only sent to the filehandle that transmitted the original message
> +  and not to any followers. Should this behavior change or perhaps
> +  controlled through a cec_msg flag?
> +
>  Hans Verkuil <hans.verkuil@cisco.com>
> diff --git a/drivers/staging/media/cec/cec.c b/drivers/staging/media/cec/cec.c
> index 65a3cb3..8634773 100644
> --- a/drivers/staging/media/cec/cec.c
> +++ b/drivers/staging/media/cec/cec.c
> @@ -1827,9 +1827,17 @@ static long cec_ioctl(struct file *filp, unsigned cmd, unsigned long arg)
>  		struct cec_event_queue *evq = NULL;
>  		struct cec_event *ev = NULL;
>  		u64 ts = ~0ULL;
> -		unsigned i;
> +		unsigned int i;
> 
>  		mutex_lock(&fh->lock);
> +		while (!fh->events && block) {
> +			mutex_unlock(&fh->lock);
> +			err = wait_event_interruptible(fh->wait, fh->events);
> +			if (err)
> +				return err;
> +			mutex_lock(&fh->lock);
> +		}
> +
>  		/* Find the oldest event */
>  		for (i = 0; i < CEC_NUM_EVENTS; i++) {
>  			struct cec_event_queue *q = fh->evqueue + i;
> @@ -1975,6 +1983,10 @@ static long cec_ioctl(struct file *filp, unsigned cmd, unsigned long arg)
>  		if (mode_initiator && mode_follower >= CEC_MODE_MONITOR)
>  			return -EINVAL;
> 
> +		/* Monitor modes require CAP_NET_ADMIN */
> +		if (mode_follower >= CEC_MODE_MONITOR && !capable(CAP_NET_ADMIN))
> +			return -EPERM;
> +
>  		mutex_lock(&adap->lock);
>  		/*
>  		 * You can't become exclusive follower if someone else already
> diff --git a/include/linux/cec-funcs.h b/include/linux/cec-funcs.h
> index 25c37bb..155f6b9 100644
> --- a/include/linux/cec-funcs.h
> +++ b/include/linux/cec-funcs.h
> @@ -835,6 +835,7 @@ static inline void cec_ops_set_menu_language(struct cec_msg *msg,
>  					     char *language)
>  {
>  	memcpy(language, msg->msg + 2, 3);
> +	language[3] = '\0';
>  }
> 
>  static inline void cec_msg_get_menu_language(struct cec_msg *msg,
> @@ -1574,6 +1576,7 @@ static inline void cec_msg_report_current_latency(struct cec_msg *msg,
>  						  __u8 audio_out_delay)
>  {
>  	msg->len = 7;
> +	msg->msg[0] |= 0xf; /* broadcast */
>  	msg->msg[1] = CEC_MSG_REPORT_CURRENT_LATENCY;
>  	msg->msg[2] = phys_addr >> 8;
>  	msg->msg[3] = phys_addr & 0xff;
> @@ -1601,6 +1604,7 @@ static inline void cec_msg_request_current_latency(struct cec_msg *msg,
>  						   __u16 phys_addr)
>  {
>  	msg->len = 4;
> +	msg->msg[0] |= 0xf; /* broadcast */
>  	msg->msg[1] = CEC_MSG_REQUEST_CURRENT_LATENCY;
>  	msg->msg[2] = phys_addr >> 8;
>  	msg->msg[3] = phys_addr & 0xff;
> diff --git a/include/media/cec-edid.h b/include/media/cec-edid.h
> index d6e39ca..bdf731e 100644
> --- a/include/media/cec-edid.h
> +++ b/include/media/cec-edid.h
> @@ -21,8 +21,8 @@
>  #define _MEDIA_CEC_EDID_H
> 
>  #include <linux/types.h>
> -#include <linux/cec.h>
> 
> +#define CEC_PHYS_ADDR_INVALID		0xffff
>  #define cec_phys_addr_exp(pa) \
>  	((pa) >> 12), ((pa) >> 8) & 0xf, ((pa) >> 4) & 0xf, (pa) & 0xf
> 



Thanks,
Mauro

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-06-18 13:20 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-18 12:18 [PATCH] Diffs between the CEC pull request and v17 patch series Hans Verkuil
2016-06-18 13:20 ` Mauro Carvalho Chehab

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.