~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/admin-guide/media/cec.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /Documentation/admin-guide/media/cec.rst (Version linux-6.12-rc7) and /Documentation/admin-guide/media/cec.rst (Version linux-6.2.16)


  1 .. SPDX-License-Identifier: GPL-2.0                 1 .. SPDX-License-Identifier: GPL-2.0
  2                                                     2 
  3 ========                                            3 ========
  4 HDMI CEC                                            4 HDMI CEC
  5 ========                                            5 ========
  6                                                     6 
  7 Supported hardware in mainline                      7 Supported hardware in mainline
  8 ==============================                      8 ==============================
  9                                                     9 
 10 HDMI Transmitters:                                 10 HDMI Transmitters:
 11                                                    11 
 12 - Exynos4                                          12 - Exynos4
 13 - Exynos5                                          13 - Exynos5
 14 - STIH4xx HDMI CEC                                 14 - STIH4xx HDMI CEC
 15 - V4L2 adv7511 (same HW, but a different drive     15 - V4L2 adv7511 (same HW, but a different driver from the drm adv7511)
 16 - stm32                                            16 - stm32
 17 - Allwinner A10 (sun4i)                            17 - Allwinner A10 (sun4i)
 18 - Raspberry Pi                                     18 - Raspberry Pi
 19 - dw-hdmi (Synopsis IP)                            19 - dw-hdmi (Synopsis IP)
 20 - amlogic (meson ao-cec and ao-cec-g12a)           20 - amlogic (meson ao-cec and ao-cec-g12a)
 21 - drm adv7511/adv7533                              21 - drm adv7511/adv7533
 22 - omap4                                            22 - omap4
 23 - tegra                                            23 - tegra
 24 - rk3288, rk3399                                   24 - rk3288, rk3399
 25 - tda998x                                          25 - tda998x
 26 - DisplayPort CEC-Tunneling-over-AUX on i915,      26 - DisplayPort CEC-Tunneling-over-AUX on i915, nouveau and amdgpu
 27 - ChromeOS EC CEC                                  27 - ChromeOS EC CEC
 28 - CEC for SECO boards (UDOO x86).                  28 - CEC for SECO boards (UDOO x86).
 29 - Chrontel CH7322                                  29 - Chrontel CH7322
 30                                                    30 
 31                                                    31 
 32 HDMI Receivers:                                    32 HDMI Receivers:
 33                                                    33 
 34 - adv7604/11/12                                    34 - adv7604/11/12
 35 - adv7842                                          35 - adv7842
 36 - tc358743                                         36 - tc358743
 37                                                    37 
 38 USB Dongles (see below for additional informat     38 USB Dongles (see below for additional information on how to use these
 39 dongles):                                          39 dongles):
 40                                                    40 
 41 - Pulse-Eight: the pulse8-cec driver implement     41 - Pulse-Eight: the pulse8-cec driver implements the following module option:
 42   ``persistent_config``: by default this is of     42   ``persistent_config``: by default this is off, but when set to 1 the driver
 43   will store the current settings to the devic     43   will store the current settings to the device's internal eeprom and restore
 44   it the next time the device is connected to      44   it the next time the device is connected to the USB port.
 45                                                << 
 46 - RainShadow Tech. Note: this driver does not      45 - RainShadow Tech. Note: this driver does not support the persistent_config
 47   module option of the Pulse-Eight driver. The     46   module option of the Pulse-Eight driver. The hardware supports it, but I
 48   have no plans to add this feature. But I acc     47   have no plans to add this feature. But I accept patches :-)
 49                                                    48 
 50 - Extron DA HD 4K PLUS HDMI Distribution Ampli << 
 51   :ref:`extron_da_hd_4k_plus` for more informa << 
 52                                                << 
 53 Miscellaneous:                                     49 Miscellaneous:
 54                                                    50 
 55 - vivid: emulates a CEC receiver and CEC trans     51 - vivid: emulates a CEC receiver and CEC transmitter.
 56   Can be used to test CEC applications without     52   Can be used to test CEC applications without actual CEC hardware.
 57                                                    53 
 58 - cec-gpio. If the CEC pin is hooked up to a G     54 - cec-gpio. If the CEC pin is hooked up to a GPIO pin then
 59   you can control the CEC line through this dr     55   you can control the CEC line through this driver. This supports error
 60   injection as well.                               56   injection as well.
 61                                                    57 
 62 - cec-gpio and Allwinner A10 (or any other dri << 
 63   framework to drive the CEC pin directly): th << 
 64   high-resolution timers. These timers are aff << 
 65   speed up or slow down the clock to sync with << 
 66   chronyd server will by default increase or d << 
 67   1/12th. This will cause the CEC timings to g << 
 68   add a 'maxslewrate 40000' line to chronyd.co << 
 69   frequency change to 1/25th, which keeps the  << 
 70                                                << 
 71                                                    58 
 72 Utilities                                          59 Utilities
 73 =========                                          60 =========
 74                                                    61 
 75 Utilities are available here: https://git.linu     62 Utilities are available here: https://git.linuxtv.org/v4l-utils.git
 76                                                    63 
 77 ``utils/cec-ctl``: control a CEC device            64 ``utils/cec-ctl``: control a CEC device
 78                                                    65 
 79 ``utils/cec-compliance``: test compliance of a     66 ``utils/cec-compliance``: test compliance of a remote CEC device
 80                                                    67 
 81 ``utils/cec-follower``: emulate a CEC follower     68 ``utils/cec-follower``: emulate a CEC follower device
 82                                                    69 
 83 Note that ``cec-ctl`` has support for the CEC      70 Note that ``cec-ctl`` has support for the CEC Hospitality Profile as is
 84 used in some hotel displays. See http://www.ht     71 used in some hotel displays. See http://www.htng.org.
 85                                                    72 
 86 Note that the libcec library (https://github.c     73 Note that the libcec library (https://github.com/Pulse-Eight/libcec) supports
 87 the linux CEC framework.                           74 the linux CEC framework.
 88                                                    75 
 89 If you want to get the CEC specification, then     76 If you want to get the CEC specification, then look at the References of
 90 the HDMI wikipedia page: https://en.wikipedia.     77 the HDMI wikipedia page: https://en.wikipedia.org/wiki/HDMI. CEC is part
 91 of the HDMI specification. HDMI 1.3 is freely      78 of the HDMI specification. HDMI 1.3 is freely available (very similar to
 92 HDMI 1.4 w.r.t. CEC) and should be good enough     79 HDMI 1.4 w.r.t. CEC) and should be good enough for most things.
 93                                                    80 
 94                                                    81 
 95 DisplayPort to HDMI Adapters with working CEC      82 DisplayPort to HDMI Adapters with working CEC
 96 =============================================      83 =============================================
 97                                                    84 
 98 Background: most adapters do not support the C     85 Background: most adapters do not support the CEC Tunneling feature,
 99 and of those that do many did not actually con     86 and of those that do many did not actually connect the CEC pin.
100 Unfortunately, this means that while a CEC dev     87 Unfortunately, this means that while a CEC device is created, it
101 is actually all alone in the world and will ne     88 is actually all alone in the world and will never be able to see other
102 CEC devices.                                       89 CEC devices.
103                                                    90 
104 This is a list of known working adapters that      91 This is a list of known working adapters that have CEC Tunneling AND
105 that properly connected the CEC pin. If you fi     92 that properly connected the CEC pin. If you find adapters that work
106 but are not in this list, then drop me a note.     93 but are not in this list, then drop me a note.
107                                                    94 
108 To test: hook up your DP-to-HDMI adapter to a      95 To test: hook up your DP-to-HDMI adapter to a CEC capable device
109 (typically a TV), then run::                       96 (typically a TV), then run::
110                                                    97 
111         cec-ctl --playback      # Configure th     98         cec-ctl --playback      # Configure the PC as a CEC Playback device
112         cec-ctl -S              # Show the CEC     99         cec-ctl -S              # Show the CEC topology
113                                                   100 
114 The ``cec-ctl -S`` command should show at leas    101 The ``cec-ctl -S`` command should show at least two CEC devices,
115 ourselves and the CEC device you are connected    102 ourselves and the CEC device you are connected to (i.e. typically the TV).
116                                                   103 
117 General note: I have only seen this work with     104 General note: I have only seen this work with the Parade PS175, PS176 and
118 PS186 chipsets and the MegaChips 2900. While M    105 PS186 chipsets and the MegaChips 2900. While MegaChips 28x0 claims CEC support,
119 I have never seen it work.                        106 I have never seen it work.
120                                                   107 
121 USB-C to HDMI                                     108 USB-C to HDMI
122 -------------                                     109 -------------
123                                                   110 
124 Samsung Multiport Adapter EE-PW700: https://ww    111 Samsung Multiport Adapter EE-PW700: https://www.samsung.com/ie/support/model/EE-PW700BBEGWW/
125                                                   112 
126 Kramer ADC-U31C/HF: https://www.kramerav.com/p    113 Kramer ADC-U31C/HF: https://www.kramerav.com/product/ADC-U31C/HF
127                                                   114 
128 Club3D CAC-2504: https://www.club-3d.com/en/de    115 Club3D CAC-2504: https://www.club-3d.com/en/detail/2449/usb_3.1_type_c_to_hdmi_2.0_uhd_4k_60hz_active_adapter/
129                                                   116 
130 DisplayPort to HDMI                               117 DisplayPort to HDMI
131 -------------------                               118 -------------------
132                                                   119 
133 Club3D CAC-1080: https://www.club-3d.com/en/de    120 Club3D CAC-1080: https://www.club-3d.com/en/detail/2442/displayport_1.4_to_hdmi_2.0b_hdr/
134                                                   121 
135 CableCreation (SKU: CD0712): https://www.cable    122 CableCreation (SKU: CD0712): https://www.cablecreation.com/products/active-displayport-to-hdmi-adapter-4k-hdr
136                                                   123 
137 HP DisplayPort to HDMI True 4k Adapter (P/N 2J    124 HP DisplayPort to HDMI True 4k Adapter (P/N 2JA63AA): https://www.hp.com/us-en/shop/pdp/hp-displayport-to-hdmi-true-4k-adapter
138                                                   125 
139 Mini-DisplayPort to HDMI                          126 Mini-DisplayPort to HDMI
140 ------------------------                          127 ------------------------
141                                                   128 
142 Club3D CAC-1180: https://www.club-3d.com/en/de    129 Club3D CAC-1180: https://www.club-3d.com/en/detail/2443/mini_displayport_1.4_to_hdmi_2.0b_hdr/
143                                                   130 
144 Note that passive adapters will never work, yo    131 Note that passive adapters will never work, you need an active adapter.
145                                                   132 
146 The Club3D adapters in this list are all MegaC    133 The Club3D adapters in this list are all MegaChips 2900 based. Other Club3D adapters
147 are PS176 based and do NOT have the CEC pin ho    134 are PS176 based and do NOT have the CEC pin hooked up, so only the three Club3D
148 adapters above are known to work.                 135 adapters above are known to work.
149                                                   136 
150 I suspect that MegaChips 2900 based designs in    137 I suspect that MegaChips 2900 based designs in general are likely to work
151 whereas with the PS176 it is more hit-and-miss    138 whereas with the PS176 it is more hit-and-miss (mostly miss). The PS186 is
152 likely to have the CEC pin hooked up, it looks    139 likely to have the CEC pin hooked up, it looks like they changed the reference
153 design for that chipset.                          140 design for that chipset.
154                                                   141 
155                                                   142 
156 USB CEC Dongles                                   143 USB CEC Dongles
157 ===============                                   144 ===============
158                                                   145 
159 These dongles appear as ``/dev/ttyACMX`` devic    146 These dongles appear as ``/dev/ttyACMX`` devices and need the ``inputattach``
160 utility to create the ``/dev/cecX`` devices. S    147 utility to create the ``/dev/cecX`` devices. Support for the Pulse-Eight
161 has been added to ``inputattach`` 1.6.0. Suppo    148 has been added to ``inputattach`` 1.6.0. Support for the Rainshadow Tech has
162 been added to ``inputattach`` 1.6.1.              149 been added to ``inputattach`` 1.6.1.
163                                                   150 
164 You also need udev rules to automatically star    151 You also need udev rules to automatically start systemd services::
165                                                   152 
166         SUBSYSTEM=="tty", KERNEL=="ttyACM[0-9]    153         SUBSYSTEM=="tty", KERNEL=="ttyACM[0-9]*", ATTRS{idVendor}=="2548", ATTRS{idProduct}=="1002", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}+="pulse8-cec-inputattach@%k.service"
167         SUBSYSTEM=="tty", KERNEL=="ttyACM[0-9]    154         SUBSYSTEM=="tty", KERNEL=="ttyACM[0-9]*", ATTRS{idVendor}=="2548", ATTRS{idProduct}=="1001", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}+="pulse8-cec-inputattach@%k.service"
168         SUBSYSTEM=="tty", KERNEL=="ttyACM[0-9]    155         SUBSYSTEM=="tty", KERNEL=="ttyACM[0-9]*", ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="ff59", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}+="rainshadow-cec-inputattach@%k.service"
169                                                   156 
170 and these systemd services:                       157 and these systemd services:
171                                                   158 
172 For Pulse-Eight make /lib/systemd/system/pulse    159 For Pulse-Eight make /lib/systemd/system/pulse8-cec-inputattach@.service::
173                                                   160 
174         [Unit]                                    161         [Unit]
175         Description=inputattach for pulse8-cec    162         Description=inputattach for pulse8-cec device on %I
176                                                   163 
177         [Service]                                 164         [Service]
178         Type=simple                               165         Type=simple
179         ExecStart=/usr/bin/inputattach --pulse    166         ExecStart=/usr/bin/inputattach --pulse8-cec /dev/%I
180                                                   167 
181 For the RainShadow Tech make /lib/systemd/syst    168 For the RainShadow Tech make /lib/systemd/system/rainshadow-cec-inputattach@.service::
182                                                   169 
183         [Unit]                                    170         [Unit]
184         Description=inputattach for rainshadow    171         Description=inputattach for rainshadow-cec device on %I
185                                                   172 
186         [Service]                                 173         [Service]
187         Type=simple                               174         Type=simple
188         ExecStart=/usr/bin/inputattach --rains    175         ExecStart=/usr/bin/inputattach --rainshadow-cec /dev/%I
189                                                   176 
190                                                   177 
191 For proper suspend/resume support create: /lib    178 For proper suspend/resume support create: /lib/systemd/system/restart-cec-inputattach.service::
192                                                   179 
193         [Unit]                                    180         [Unit]
194         Description=restart inputattach for ce    181         Description=restart inputattach for cec devices
195         After=suspend.target                      182         After=suspend.target
196                                                   183 
197         [Service]                                 184         [Service]
198         Type=forking                              185         Type=forking
199         ExecStart=/bin/bash -c 'for d in /dev/    186         ExecStart=/bin/bash -c 'for d in /dev/serial/by-id/usb-Pulse-Eight*; do /usr/bin/inputattach --daemon --pulse8-cec $d; done; for d in /dev/serial/by-id/usb-RainShadow_Tech*; do /usr/bin/inputattach --daemon --rainshadow-cec $d; done'
200                                                   187 
201         [Install]                                 188         [Install]
202         WantedBy=suspend.target                   189         WantedBy=suspend.target
203                                                   190 
204 And run ``systemctl enable restart-cec-inputat    191 And run ``systemctl enable restart-cec-inputattach``.
205                                                   192 
206 To automatically set the physical address of t    193 To automatically set the physical address of the CEC device whenever the
207 EDID changes, you can use ``cec-ctl`` with the    194 EDID changes, you can use ``cec-ctl`` with the ``-E`` option::
208                                                   195 
209         cec-ctl -E /sys/class/drm/card0-DP-1/e    196         cec-ctl -E /sys/class/drm/card0-DP-1/edid
210                                                   197 
211 This assumes the dongle is connected to the ca    198 This assumes the dongle is connected to the card0-DP-1 output (``xrandr`` will tell
212 you which output is used) and it will poll for    199 you which output is used) and it will poll for changes to the EDID and update
213 the Physical Address whenever they occur.         200 the Physical Address whenever they occur.
214                                                   201 
215 To automatically run this command you can use     202 To automatically run this command you can use cron. Edit crontab with
216 ``crontab -e`` and add this line::                203 ``crontab -e`` and add this line::
217                                                   204 
218         @reboot /usr/local/bin/cec-ctl -E /sys    205         @reboot /usr/local/bin/cec-ctl -E /sys/class/drm/card0-DP-1/edid
219                                                   206 
220 This only works for display drivers that expos    207 This only works for display drivers that expose the EDID in ``/sys/class/drm``,
221 such as the i915 driver.                          208 such as the i915 driver.
222                                                   209 
223                                                   210 
224 CEC Without HPD                                   211 CEC Without HPD
225 ===============                                   212 ===============
226                                                   213 
227 Some displays when in standby mode have no HDM    214 Some displays when in standby mode have no HDMI Hotplug Detect signal, but
228 CEC is still enabled so connected devices can     215 CEC is still enabled so connected devices can send an <Image View On> CEC
229 message in order to wake up such displays. Unf    216 message in order to wake up such displays. Unfortunately, not all CEC
230 adapters can support this. An example is the O    217 adapters can support this. An example is the Odroid-U3 SBC that has a
231 level-shifter that is powered off when the HPD    218 level-shifter that is powered off when the HPD signal is low, thus
232 blocking the CEC pin. Even though the SoC can     219 blocking the CEC pin. Even though the SoC can use CEC without a HPD,
233 the level-shifter will prevent this from funct    220 the level-shifter will prevent this from functioning.
234                                                   221 
235 There is a CEC capability flag to signal this:    222 There is a CEC capability flag to signal this: ``CEC_CAP_NEEDS_HPD``.
236 If set, then the hardware cannot wake up displ    223 If set, then the hardware cannot wake up displays with this behavior.
237                                                   224 
238 Note for CEC application implementers: the <Im    225 Note for CEC application implementers: the <Image View On> message must
239 be the first message you send, don't send any     226 be the first message you send, don't send any other messages before.
240 Certain very bad but unfortunately not uncommo    227 Certain very bad but unfortunately not uncommon CEC implementations
241 get very confused if they receive anything els    228 get very confused if they receive anything else but this message and
242 they won't wake up.                               229 they won't wake up.
243                                                   230 
244 When writing a driver it can be tricky to test    231 When writing a driver it can be tricky to test this. There are two
245 ways to do this:                                  232 ways to do this:
246                                                   233 
247 1) Get a Pulse-Eight USB CEC dongle, connect a    234 1) Get a Pulse-Eight USB CEC dongle, connect an HDMI cable from your
248    device to the Pulse-Eight, but do not conne    235    device to the Pulse-Eight, but do not connect the Pulse-Eight to
249    the display.                                   236    the display.
250                                                   237 
251    Now configure the Pulse-Eight dongle::         238    Now configure the Pulse-Eight dongle::
252                                                   239 
253         cec-ctl -p0.0.0.0 --tv                    240         cec-ctl -p0.0.0.0 --tv
254                                                   241 
255    and start monitoring::                         242    and start monitoring::
256                                                   243 
257         sudo cec-ctl -M                           244         sudo cec-ctl -M
258                                                   245 
259    On the device you are testing run::            246    On the device you are testing run::
260                                                   247 
261         cec-ctl --playback                        248         cec-ctl --playback
262                                                   249 
263    It should report a physical address of f.f.    250    It should report a physical address of f.f.f.f. Now run this
264    command::                                      251    command::
265                                                   252 
266         cec-ctl -t0 --image-view-on               253         cec-ctl -t0 --image-view-on
267                                                   254 
268    The Pulse-Eight should see the <Image View     255    The Pulse-Eight should see the <Image View On> message. If not,
269    then something (hardware and/or software) i    256    then something (hardware and/or software) is preventing the CEC
270    message from going out.                        257    message from going out.
271                                                   258 
272    To make sure you have the wiring correct ju    259    To make sure you have the wiring correct just connect the
273    Pulse-Eight to a CEC-enabled display and ru    260    Pulse-Eight to a CEC-enabled display and run the same command
274    on your device: now there is a HPD, so you     261    on your device: now there is a HPD, so you should see the command
275    arriving at the Pulse-Eight.                   262    arriving at the Pulse-Eight.
276                                                   263 
277 2) If you have another linux device supporting    264 2) If you have another linux device supporting CEC without HPD, then
278    you can just connect your device to that de    265    you can just connect your device to that device. Yes, you can connect
279    two HDMI outputs together. You won't have a    266    two HDMI outputs together. You won't have a HPD (which is what we
280    want for this test), but the second device     267    want for this test), but the second device can monitor the CEC pin.
281                                                   268 
282    Otherwise use the same commands as in 1.       269    Otherwise use the same commands as in 1.
283                                                   270 
284 If CEC messages do not come through when there    271 If CEC messages do not come through when there is no HPD, then you
285 need to figure out why. Typically it is either    272 need to figure out why. Typically it is either a hardware restriction
286 or the software powers off the CEC core when t    273 or the software powers off the CEC core when the HPD goes low. The
287 first cannot be corrected of course, the secon    274 first cannot be corrected of course, the second will likely required
288 driver changes.                                   275 driver changes.
289                                                   276 
290                                                   277 
291 Microcontrollers & CEC                            278 Microcontrollers & CEC
292 ======================                            279 ======================
293                                                   280 
294 We have seen some CEC implementations in displ    281 We have seen some CEC implementations in displays that use a microcontroller
295 to sample the bus. This does not have to be a     282 to sample the bus. This does not have to be a problem, but some implementations
296 have timing issues. This is hard to discover u    283 have timing issues. This is hard to discover unless you can hook up a low-level
297 CEC debugger (see the next section).              284 CEC debugger (see the next section).
298                                                   285 
299 You will see cases where the CEC transmitter h    286 You will see cases where the CEC transmitter holds the CEC line high or low for
300 a longer time than is allowed. For directed me    287 a longer time than is allowed. For directed messages this is not a problem since
301 if that happens the message will not be Acked     288 if that happens the message will not be Acked and it will be retransmitted.
302 For broadcast messages no such mechanism exist    289 For broadcast messages no such mechanism exists.
303                                                   290 
304 It's not clear what to do about this. It is pr    291 It's not clear what to do about this. It is probably wise to transmit some
305 broadcast messages twice to reduce the chance     292 broadcast messages twice to reduce the chance of them being lost. Specifically
306 <Standby> and <Active Source> are candidates f    293 <Standby> and <Active Source> are candidates for that.
307                                                   294 
308                                                   295 
309 Making a CEC debugger                             296 Making a CEC debugger
310 =====================                             297 =====================
311                                                   298 
312 By using a Raspberry Pi 4B and some cheap comp !! 299 By using a Raspberry Pi 2B/3/4 and some cheap components you can make
313 your own low-level CEC debugger.                  300 your own low-level CEC debugger.
314                                                   301 
315 The critical component is one of these HDMI fe !! 302 Here is a picture of my setup:
316 (full soldering type 1):                       !! 303 
                                                   >> 304 https://hverkuil.home.xs4all.nl/rpi3-cec.jpg
                                                   >> 305 
                                                   >> 306 It's a Raspberry Pi 3 together with a breadboard and some breadboard wires:
                                                   >> 307 
                                                   >> 308 http://www.dx.com/p/diy-40p-male-to-female-male-to-male-female-to-female-dupont-line-wire-3pcs-356089#.WYLOOXWGN7I
                                                   >> 309 
                                                   >> 310 Finally on of these HDMI female-female passthrough connectors (full soldering type 1):
317                                                   311 
318 https://elabbay.myshopify.com/collections/came    312 https://elabbay.myshopify.com/collections/camera/products/hdmi-af-af-v1a-hdmi-type-a-female-to-hdmi-type-a-female-pass-through-adapter-breakout-board?variant=45533926147
319                                                   313 
320 The video quality is variable and certainly no !! 314 We've tested this and it works up to 4kp30 (297 MHz). The quality is not high
321 (594 MHz) video. You might be able to support  !! 315 enough to pass-through 4kp60 (594 MHz).
322 be limited to 1080p60 (148.5 MHz). But for CEC << 
323                                                   316 
324 You need a breadboard and some breadboard wire !! 317 I also added an RTC and a breakout shield:
325                                                   318 
326 http://www.dx.com/p/diy-40p-male-to-female-mal !! 319 https://www.amazon.com/Makerfire%C2%AE-Raspberry-Module-DS1307-Battery/dp/B00ZOXWHK4
                                                   >> 320 
                                                   >> 321 https://www.dx.com/p/raspberry-pi-gpio-expansion-board-breadboard-easy-multiplexing-board-one-to-three-with-screw-for-raspberry-pi-2-3-b-b-2729992.html#.YGRCG0MzZ7I
327                                                   322 
328 If you want to monitor the HPD and/or 5V lines !! 323 These two are not needed but they make life a bit easier.
329 these 5V to 3.3V level shifters:               !! 324 
                                                   >> 325 If you want to monitor the HPD line as well, then you need one of these
                                                   >> 326 level shifters:
330                                                   327 
331 https://www.adafruit.com/product/757              328 https://www.adafruit.com/product/757
332                                                   329 
333 (This is just where I got these components, th    330 (This is just where I got these components, there are many other places you
334 can get similar things).                          331 can get similar things).
335                                                   332 
336 The ground pin of the HDMI connector needs to  << 
337 pin of the Raspberry Pi, of course.            << 
338                                                << 
339 The CEC pin of the HDMI connector needs to be     333 The CEC pin of the HDMI connector needs to be connected to these pins:
340 GPIO 6 and GPIO 7. The optional HPD pin of the !! 334 CE0/IO8 and CE1/IO7 (pull-up GPIOs). The (optional) HPD pin of the HDMI
341 be connected via the level shifter to these pi !! 335 connector should be connected (via a level shifter to convert the 5V
342 The optional 5V pin of the HDMI connector shou !! 336 to 3.3V) to these pins: IO17 and IO27. The (optional) 5V pin of the HDMI
343 level shifter to these pins: GPIO 25 and GPIO  !! 337 connector should be connected (via a level shifter) to these pins: IO22
344 5V lines is not necessary, but it is helpful.  !! 338 and IO24. Monitoring the HPD an 5V lines is not necessary, but it is helpful.
345                                                << 
346 This device tree addition in ``arch/arm/boot/d << 
347 will hook up the cec-gpio driver correctly::   << 
348                                                   339 
349         cec@6 {                                !! 340 This kernel patch will hook up the cec-gpio driver correctly to
350                 compatible = "cec-gpio";       !! 341 e.g. ``arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts``::
351                 cec-gpios = <&gpio 6 (GPIO_ACT << 
352                 hpd-gpios = <&gpio 23 GPIO_ACT << 
353                 v5-gpios = <&gpio 25 GPIO_ACTI << 
354         };                                     << 
355                                                   342 
356         cec@7 {                                !! 343         cec-gpio@7 {
357                 compatible = "cec-gpio";          344                 compatible = "cec-gpio";
358                 cec-gpios = <&gpio 7 (GPIO_ACT    345                 cec-gpios = <&gpio 7 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
359                 hpd-gpios = <&gpio 12 GPIO_ACT !! 346                 hpd-gpios = <&gpio 17 GPIO_ACTIVE_HIGH>;
360                 v5-gpios = <&gpio 22 GPIO_ACTI    347                 v5-gpios = <&gpio 22 GPIO_ACTIVE_HIGH>;
361         };                                        348         };
362                                                   349 
363 If you haven't hooked up the HPD and/or 5V lin !! 350         cec-gpio@8 {
364 lines.                                         !! 351                 compatible = "cec-gpio";
                                                   >> 352                 cec-gpios = <&gpio 8 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
                                                   >> 353                 hpd-gpios = <&gpio 27 GPIO_ACTIVE_HIGH>;
                                                   >> 354                 v5-gpios = <&gpio 24 GPIO_ACTIVE_HIGH>;
                                                   >> 355         };
365                                                   356 
366 This dts change will enable two cec GPIO devic    357 This dts change will enable two cec GPIO devices: I typically use one to
367 send/receive CEC commands and the other to mon    358 send/receive CEC commands and the other to monitor. If you monitor using
368 an unconfigured CEC adapter then it will use G    359 an unconfigured CEC adapter then it will use GPIO interrupts which makes
369 monitoring very accurate.                         360 monitoring very accurate.
370                                                   361 
371 If you just want to monitor traffic, then a si << 
372 The minimum configuration is one HDMI female-f << 
373 and two female-female breadboard wires: one fo << 
374 pin to a ground pin on the Raspberry Pi, and t << 
375 CEC pin to GPIO 6 on the Raspberry Pi.         << 
376                                                << 
377 The documentation on how to use the error inje    362 The documentation on how to use the error injection is here: :ref:`cec_pin_error_inj`.
378                                                   363 
379 ``cec-ctl --monitor-pin`` will do low-level CE    364 ``cec-ctl --monitor-pin`` will do low-level CEC bus sniffing and analysis.
380 You can also store the CEC traffic to file usi    365 You can also store the CEC traffic to file using ``--store-pin`` and analyze
381 it later using ``--analyze-pin``.                 366 it later using ``--analyze-pin``.
382                                                   367 
383 You can also use this as a full-fledged CEC de    368 You can also use this as a full-fledged CEC device by configuring it
384 using ``cec-ctl --tv -p0.0.0.0`` or ``cec-ctl     369 using ``cec-ctl --tv -p0.0.0.0`` or ``cec-ctl --playback -p1.0.0.0``.
385                                                << 
386 .. _extron_da_hd_4k_plus:                      << 
387                                                << 
388 Extron DA HD 4K PLUS CEC Adapter driver        << 
389 =======================================        << 
390                                                << 
391 This driver is for the Extron DA HD 4K PLUS se << 
392 Amplifiers: https://www.extron.com/product/dah << 
393                                                << 
394 The 2, 4 and 6 port models are supported.      << 
395                                                << 
396 Firmware version 1.02.0001 or higher is requir << 
397                                                << 
398 Note that older Extron hardware revisions have << 
399 which may mean that CEC will not work. This is << 
400 E34814 and up.                                 << 
401                                                << 
402 The CEC support has two modes: the first is a  << 
403 to manually control CEC for the HDMI Input and << 
404 full control, it is also complicated.          << 
405                                                << 
406 The second mode is an automatic mode, which is << 
407 ``vendor_id`` is set. In that case the driver  << 
408 received in the input will be distributed to t << 
409 to use the /dev/cecX devices to talk to the co << 
410 the driver that configures everything and deal << 
411 changes.                                       << 
412                                                << 
413 The driver also takes care of the EDIDs: /dev/ << 
414 read the EDIDs and (for the HDMI Input port) t << 
415                                                << 
416 By default userspace is responsible to set the << 
417 according to the EDIDs of the connected displa << 
418 module option is set, then the driver will tak << 
419 of the HDMI Input based on the supported resol << 
420 Currently the driver only supports resolutions << 
421 displays support 4kp60, then it will advertise << 
422 it will fall back to an EDID that just reports << 
423                                                << 
424 The status of the Extron is reported in ``/sys << 
425                                                << 
426 The extron-da-hd-4k-plus driver implements the << 
427                                                << 
428 ``debug``                                      << 
429 ---------                                      << 
430                                                << 
431 If set to 1, then all serial port traffic is s << 
432                                                << 
433 ``vendor_id``                                  << 
434 -------------                                  << 
435                                                << 
436 The CEC Vendor ID to report to connected displ << 
437                                                << 
438 If set, then the driver will take care of dist << 
439 on the input to the HDMI outputs. This is done << 
440                                                << 
441 - <Standby>                                    << 
442 - <Image View On> and <Text View On>           << 
443 - <Give Device Power Status>                   << 
444 - <Set System Audio Mode>                      << 
445 - <Request Current Latency>                    << 
446                                                << 
447 If not set, then userspace is responsible for  << 
448 configure the CEC devices for HDMI Input and t << 
449                                                << 
450 ``manufacturer_name``                          << 
451 ---------------------                          << 
452                                                << 
453 A three character manufacturer name that is us << 
454 Input. If not set, then userspace is reponsibl << 
455 If set, then the driver will update the EDID a << 
456 resolutions supported by the connected display << 
457 anymore to manually set the EDID for the HDMI  << 
458                                                << 
459 ``hpd_never_low``                              << 
460 -----------------                              << 
461                                                << 
462 If set, then the Hotplug Detect pin of the HDM << 
463 even if nothing is connected to the HDMI Outpu << 
464 then the Hotplug Detect pin of the HDMI input  << 
465 Hotplug Detect pins of the HDMI Outputs are al << 
466                                                << 
467 This option may be changed dynamically.        << 
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php