€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ)/translations/zh_CN/admin-guide/media/cec”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/zh_TW/admin-guide/media/cec”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/it_IT/admin-guide/media/cec”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/ja_JP/admin-guide/media/cec”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/ko_KR/admin-guide/media/cec”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/pt_BR/admin-guide/media/cec”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/sp_SP/admin-guide/media/cec”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒC/var/lib/git/docbuild/linux/Documentation/admin-guide/media/cec.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒHDMI CEC”h]”hŒHDMI CEC”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒSupported hardware in mainline”h]”hŒSupported hardware in mainline”…”�”}”(hhàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÝh²hh³hÇh´KubhŒ paragraph”“”)�”}”(hŒHDMI Transmitters:”h]”hŒHDMI Transmitters:”…”�”}”(hhðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K hhÝh²hubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒExynos4”h]”hï)�”}”(hjh]”hŒExynos4”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)�”}”(hŒExynos5”h]”hï)�”}”(hjh]”hŒExynos5”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)�”}”(hŒSTIH4xx HDMI CEC”h]”hï)�”}”(hj5h]”hŒSTIH4xx HDMI CEC”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)�”}”(hŒCV4L2 adv7511 (same HW, but a different driver from the drm adv7511)”h]”hï)�”}”(hjLh]”hŒCV4L2 adv7511 (same HW, but a different driver from the drm adv7511)”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhjJubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)�”}”(hŒstm32”h]”hï)�”}”(hjch]”hŒstm32”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjaubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)�”}”(hŒAllwinner A10 (sun4i)”h]”hï)�”}”(hjzh]”hŒAllwinner A10 (sun4i)”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjxubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)�”}”(hŒ Raspberry Pi”h]”hï)�”}”(hj‘h]”hŒ Raspberry Pi”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)�”}”(hŒdw-hdmi (Synopsis IP)”h]”hï)�”}”(hj¨h]”hŒdw-hdmi (Synopsis IP)”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)�”}”(hŒ&amlogic (meson ao-cec and ao-cec-g12a)”h]”hï)�”}”(hj¿h]”hŒ&amlogic (meson ao-cec and ao-cec-g12a)”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)�”}”(hŒdrm adv7511/adv7533”h]”hï)�”}”(hjÖh]”hŒdrm adv7511/adv7533”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)�”}”(hŒomap4”h]”hï)�”}”(hjíh]”hŒomap4”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjëubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)�”}”(hŒtegra”h]”hï)�”}”(hjh]”hŒtegra”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)�”}”(hŒrk3288, rk3399”h]”hï)�”}”(hjh]”hŒrk3288, rk3399”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)�”}”(hŒtda998x”h]”hï)�”}”(hj2h]”hŒtda998x”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)�”}”(hŒ>DisplayPort CEC-Tunneling-over-AUX on i915, nouveau and amdgpu”h]”hï)�”}”(hjIh]”hŒ>DisplayPort CEC-Tunneling-over-AUX on i915, nouveau and amdgpu”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhjGubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)�”}”(hŒChromeOS EC CEC”h]”hï)�”}”(hj`h]”hŒChromeOS EC CEC”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)�”}”(hŒCEC for SECO boards (UDOO x86).”h]”hï)�”}”(hjwh]”hŒCEC for SECO boards (UDOO x86).”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjuubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)�”}”(hŒChrontel CH7322 ”h]”hï)�”}”(hŒChrontel CH7322”h]”hŒChrontel CH7322”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1hþh³hÇh´K hhÝh²hubhï)�”}”(hŒHDMI Receivers:”h]”hŒHDMI Receivers:”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K hhÝh²hubhÿ)�”}”(hhh]”(j)�”}”(hŒ adv7604/11/12”h]”hï)�”}”(hj¿h]”hŒ adv7604/11/12”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K"hj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjºh²hh³hÇh´Nubj)�”}”(hŒadv7842”h]”hï)�”}”(hjÖh]”hŒadv7842”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K#hjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjºh²hh³hÇh´Nubj)�”}”(hŒ tc358743 ”h]”hï)�”}”(hŒtc358743”h]”hŒtc358743”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K$hjëubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjºh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jªj«uh1hþh³hÇh´K"hhÝh²hubhï)�”}”(hŒOUSB Dongles (see below for additional information on how to use these dongles):”h]”hŒOUSB Dongles (see below for additional information on how to use these dongles):”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K&hhÝh²hubhÿ)�”}”(hhh]”(j)�”}”(hXPulse-Eight: the pulse8-cec driver implements the following module option: ``persistent_config``: by default this is off, but when set to 1 the driver will store the current settings to the device's internal eeprom and restore it the next time the device is connected to the USB port. ”h]”hï)�”}”(hXPulse-Eight: the pulse8-cec driver implements the following module option: ``persistent_config``: by default this is off, but when set to 1 the driver will store the current settings to the device's internal eeprom and restore it the next time the device is connected to the USB port.”h]”(hŒKPulse-Eight: the pulse8-cec driver implements the following module option: ”…”�”}”(hjh²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``persistent_config``”h]”hŒpersistent_config”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjubhŒ¾: by default this is off, but when set to 1 the driver will store the current settings to the device’s internal eeprom and restore it the next time the device is connected to the USB port.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K)hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)�”}”(hŒÏRainShadow Tech. Note: this driver does not support the persistent_config module option of the Pulse-Eight driver. The hardware supports it, but I have no plans to add this feature. But I accept patches :-) ”h]”hï)�”}”(hŒÎRainShadow Tech. Note: this driver does not support the persistent_config module option of the Pulse-Eight driver. The hardware supports it, but I have no plans to add this feature. But I accept patches :-)”h]”hŒÎRainShadow Tech. Note: this driver does not support the persistent_config module option of the Pulse-Eight driver. The hardware supports it, but I have no plans to add this feature. But I accept patches :-)”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K.hjFubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)�”}”(hŒhExtron DA HD 4K PLUS HDMI Distribution Amplifier. See :ref:`extron_da_hd_4k_plus` for more information. ”h]”hï)�”}”(hŒgExtron DA HD 4K PLUS HDMI Distribution Amplifier. See :ref:`extron_da_hd_4k_plus` for more information.”h]”(hŒ6Extron DA HD 4K PLUS HDMI Distribution Amplifier. See ”…”�”}”(hjbh²hh³Nh´Nubh)�”}”(hŒ:ref:`extron_da_hd_4k_plus`”h]”hŒinline”“”)�”}”(hjlh]”hŒextron_da_hd_4k_plus”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-ref”eh"]”h$]”h&]”uh1jnhjjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œadmin-guide/media/cec”Œ refdomain”j{Œreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆŒ reftarget”Œextron_da_hd_4k_plus”uh1hh³hÇh´K2hjbubhŒ for more information.”…”�”}”(hjbh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K2hj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jªj«uh1hþh³hÇh´K)hhÝh²hubhï)�”}”(hŒMiscellaneous:”h]”hŒMiscellaneous:”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K5hhÝh²hubhÿ)�”}”(hhh]”(j)�”}”(hŒvvivid: emulates a CEC receiver and CEC transmitter. Can be used to test CEC applications without actual CEC hardware. ”h]”hï)�”}”(hŒuvivid: emulates a CEC receiver and CEC transmitter. Can be used to test CEC applications without actual CEC hardware.”h]”hŒuvivid: emulates a CEC receiver and CEC transmitter. Can be used to test CEC applications without actual CEC hardware.”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K7hj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj³h²hh³hÇh´Nubj)�”}”(hŒ’cec-gpio. If the CEC pin is hooked up to a GPIO pin then you can control the CEC line through this driver. This supports error injection as well. ”h]”hï)�”}”(hŒ‘cec-gpio. If the CEC pin is hooked up to a GPIO pin then you can control the CEC line through this driver. This supports error injection as well.”h]”hŒ‘cec-gpio. If the CEC pin is hooked up to a GPIO pin then you can control the CEC line through this driver. This supports error injection as well.”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K:hjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj³h²hh³hÇh´Nubj)�”}”(hX*cec-gpio and Allwinner A10 (or any other driver that uses the CEC pin framework to drive the CEC pin directly): the CEC pin framework uses high-resolution timers. These timers are affected by NTP daemons that speed up or slow down the clock to sync with the official time. The chronyd server will by default increase or decrease the clock by 1/12th. This will cause the CEC timings to go out of spec. To fix this, add a 'maxslewrate 40000' line to chronyd.conf. This limits the clock frequency change to 1/25th, which keeps the CEC timings within spec. ”h]”hï)�”}”(hX(cec-gpio and Allwinner A10 (or any other driver that uses the CEC pin framework to drive the CEC pin directly): the CEC pin framework uses high-resolution timers. These timers are affected by NTP daemons that speed up or slow down the clock to sync with the official time. The chronyd server will by default increase or decrease the clock by 1/12th. This will cause the CEC timings to go out of spec. To fix this, add a 'maxslewrate 40000' line to chronyd.conf. This limits the clock frequency change to 1/25th, which keeps the CEC timings within spec.”h]”hX,cec-gpio and Allwinner A10 (or any other driver that uses the CEC pin framework to drive the CEC pin directly): the CEC pin framework uses high-resolution timers. These timers are affected by NTP daemons that speed up or slow down the clock to sync with the official time. The chronyd server will by default increase or decrease the clock by 1/12th. This will cause the CEC timings to go out of spec. To fix this, add a ‘maxslewrate 40000’ line to chronyd.conf. This limits the clock frequency change to 1/25th, which keeps the CEC timings within spec.”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K>hjæubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj³h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jªj«uh1hþh³hÇh´K7hhÝh²hubeh}”(h]”Œsupported-hardware-in-mainline”ah ]”h"]”Œsupported hardware in mainline”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Utilities”h]”hŒ Utilities”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj h²hh³hÇh´KIubhï)�”}”(hŒCUtilities are available here: https://git.linuxtv.org/v4l-utils.git”h]”(hŒUtilities are available here: ”…”�”}”(hjh²hh³Nh´NubhŒ reference”“”)�”}”(hŒ%https://git.linuxtv.org/v4l-utils.git”h]”hŒ%https://git.linuxtv.org/v4l-utils.git”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j)uh1j%hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KKhj h²hubhï)�”}”(hŒ'``utils/cec-ctl``: control a CEC device”h]”(j')�”}”(hŒ``utils/cec-ctl``”h]”hŒ utils/cec-ctl”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj<ubhŒ: control a CEC device”…”�”}”(hj<h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KMhj h²hubhï)�”}”(hŒ@``utils/cec-compliance``: test compliance of a remote CEC device”h]”(j')�”}”(hŒ``utils/cec-compliance``”h]”hŒutils/cec-compliance”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjXubhŒ(: test compliance of a remote CEC device”…”�”}”(hjXh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KOhj h²hubhï)�”}”(hŒ5``utils/cec-follower``: emulate a CEC follower device”h]”(j')�”}”(hŒ``utils/cec-follower``”h]”hŒutils/cec-follower”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjtubhŒ: emulate a CEC follower device”…”�”}”(hjth²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KQhj h²hubhï)�”}”(hŒ}Note that ``cec-ctl`` has support for the CEC Hospitality Profile as is used in some hotel displays. See http://www.htng.org.”h]”(hŒ Note that ”…”�”}”(hj�h²hh³Nh´Nubj')�”}”(hŒ ``cec-ctl``”h]”hŒcec-ctl”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj�ubhŒT has support for the CEC Hospitality Profile as is used in some hotel displays. See ”…”�”}”(hj�h²hh³Nh´Nubj&)�”}”(hŒhttp://www.htng.org”h]”hŒhttp://www.htng.org”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j¬uh1j%hj�ubhŒ.”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KShj h²hubhï)�”}”(hŒfNote that the libcec library (https://github.com/Pulse-Eight/libcec) supports the linux CEC framework.”h]”(hŒNote that the libcec library (”…”�”}”(hjÃh²hh³Nh´Nubj&)�”}”(hŒ%https://github.com/Pulse-Eight/libcec”h]”hŒ%https://github.com/Pulse-Eight/libcec”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jÍuh1j%hjÃubhŒ#) supports the linux CEC framework.”…”�”}”(hjÃh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KVhj h²hubhï)�”}”(hXIf you want to get the CEC specification, then look at the References of the HDMI wikipedia page: https://en.wikipedia.org/wiki/HDMI. CEC is part of the HDMI specification. HDMI 1.3 is freely available (very similar to HDMI 1.4 w.r.t. CEC) and should be good enough for most things.”h]”(hŒbIf you want to get the CEC specification, then look at the References of the HDMI wikipedia page: ”…”�”}”(hjäh²hh³Nh´Nubj&)�”}”(hŒ"https://en.wikipedia.org/wiki/HDMI”h]”hŒ"https://en.wikipedia.org/wiki/HDMI”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jîuh1j%hjäubhŒ–. CEC is part of the HDMI specification. HDMI 1.3 is freely available (very similar to HDMI 1.4 w.r.t. CEC) and should be good enough for most things.”…”�”}”(hjäh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KYhj h²hubeh}”(h]”Œ utilities”ah ]”h"]”Œ utilities”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KIubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ-DisplayPort to HDMI Adapters with working CEC”h]”hŒ-DisplayPort to HDMI Adapters with working CEC”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj h²hh³hÇh´K`ubhï)�”}”(hXBackground: most adapters do not support the CEC Tunneling feature, and of those that do many did not actually connect the CEC pin. Unfortunately, this means that while a CEC device is created, it is actually all alone in the world and will never be able to see other CEC devices.”h]”hXBackground: most adapters do not support the CEC Tunneling feature, and of those that do many did not actually connect the CEC pin. Unfortunately, this means that while a CEC device is created, it is actually all alone in the world and will never be able to see other CEC devices.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kbhj h²hubhï)�”}”(hŒ·This is a list of known working adapters that have CEC Tunneling AND that properly connected the CEC pin. If you find adapters that work but are not in this list, then drop me a note.”h]”hŒ·This is a list of known working adapters that have CEC Tunneling AND that properly connected the CEC pin. If you find adapters that work but are not in this list, then drop me a note.”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khhj h²hubhï)�”}”(hŒ]To test: hook up your DP-to-HDMI adapter to a CEC capable device (typically a TV), then run::”h]”hŒ\To test: hook up your DP-to-HDMI adapter to a CEC capable device (typically a TV), then run:”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Klhj h²hubhŒ literal_block”“”)�”}”(hŒscec-ctl --playback # Configure the PC as a CEC Playback device cec-ctl -S # Show the CEC topology”h]”hŒscec-ctl --playback # Configure the PC as a CEC Playback device cec-ctl -S # Show the CEC topology”…”�”}”hjJsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jHh³hÇh´Kohj h²hubhï)�”}”(hŒ‹The ``cec-ctl -S`` command should show at least two CEC devices, ourselves and the CEC device you are connected to (i.e. typically the TV).”h]”(hŒThe ”…”�”}”(hjXh²hh³Nh´Nubj')�”}”(hŒ``cec-ctl -S``”h]”hŒ cec-ctl -S”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjXubhŒy command should show at least two CEC devices, ourselves and the CEC device you are connected to (i.e. typically the TV).”…”�”}”(hjXh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Krhj h²hubhï)�”}”(hŒ´General note: I have only seen this work with the Parade PS175, PS176 and PS186 chipsets and the MegaChips 2900. While MegaChips 28x0 claims CEC support, I have never seen it work.”h]”hŒ´General note: I have only seen this work with the Parade PS175, PS176 and PS186 chipsets and the MegaChips 2900. While MegaChips 28x0 claims CEC support, I have never seen it work.”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kuhj h²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ USB-C to HDMI”h]”hŒ USB-C to HDMI”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj†h²hh³hÇh´Kzubhï)�”}”(hŒ\Samsung Multiport Adapter EE-PW700: https://www.samsung.com/ie/support/model/EE-PW700BBEGWW/”h]”(hŒ$Samsung Multiport Adapter EE-PW700: ”…”�”}”(hj—h²hh³Nh´Nubj&)�”}”(hŒ8https://www.samsung.com/ie/support/model/EE-PW700BBEGWW/”h]”hŒ8https://www.samsung.com/ie/support/model/EE-PW700BBEGWW/”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j¡uh1j%hj—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K|hj†h²hubhï)�”}”(hŒ@Kramer ADC-U31C/HF: https://www.kramerav.com/product/ADC-U31C/HF”h]”(hŒKramer ADC-U31C/HF: ”…”�”}”(hj´h²hh³Nh´Nubj&)�”}”(hŒ,https://www.kramerav.com/product/ADC-U31C/HF”h]”hŒ,https://www.kramerav.com/product/ADC-U31C/HF”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j¾uh1j%hj´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K~hj†h²hubhï)�”}”(hŒnClub3D CAC-2504: https://www.club-3d.com/en/detail/2449/usb_3.1_type_c_to_hdmi_2.0_uhd_4k_60hz_active_adapter/”h]”(hŒClub3D CAC-2504: ”…”�”}”(hjÑh²hh³Nh´Nubj&)�”}”(hŒ]https://www.club-3d.com/en/detail/2449/usb_3.1_type_c_to_hdmi_2.0_uhd_4k_60hz_active_adapter/”h]”hŒ]https://www.club-3d.com/en/detail/2449/usb_3.1_type_c_to_hdmi_2.0_uhd_4k_60hz_active_adapter/”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jÛuh1j%hjÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K€hj†h²hubeh}”(h]”Œ usb-c-to-hdmi”ah ]”h"]”Œ usb-c to hdmi”ah$]”h&]”uh1hÈhj h²hh³hÇh´KzubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒDisplayPort to HDMI”h]”hŒDisplayPort to HDMI”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjöh²hh³hÇh´Kƒubhï)�”}”(hŒYClub3D CAC-1080: https://www.club-3d.com/en/detail/2442/displayport_1.4_to_hdmi_2.0b_hdr/”h]”(hŒClub3D CAC-1080: ”…”�”}”(hjh²hh³Nh´Nubj&)�”}”(hŒHhttps://www.club-3d.com/en/detail/2442/displayport_1.4_to_hdmi_2.0b_hdr/”h]”hŒHhttps://www.club-3d.com/en/detail/2442/displayport_1.4_to_hdmi_2.0b_hdr/”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”juh1j%hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K…hjöh²hubhï)�”}”(hŒmCableCreation (SKU: CD0712): https://www.cablecreation.com/products/active-displayport-to-hdmi-adapter-4k-hdr”h]”(hŒCableCreation (SKU: CD0712): ”…”�”}”(hj$h²hh³Nh´Nubj&)�”}”(hŒPhttps://www.cablecreation.com/products/active-displayport-to-hdmi-adapter-4k-hdr”h]”hŒPhttps://www.cablecreation.com/products/active-displayport-to-hdmi-adapter-4k-hdr”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j.uh1j%hj$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K‡hjöh²hubhï)�”}”(hŒ~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”h]”(hŒ6HP DisplayPort to HDMI True 4k Adapter (P/N 2JA63AA): ”…”�”}”(hjAh²hh³Nh´Nubj&)�”}”(hŒHhttps://www.hp.com/us-en/shop/pdp/hp-displayport-to-hdmi-true-4k-adapter”h]”hŒHhttps://www.hp.com/us-en/shop/pdp/hp-displayport-to-hdmi-true-4k-adapter”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jKuh1j%hjAubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K‰hjöh²hubeh}”(h]”Œdisplayport-to-hdmi”ah ]”h"]”Œdisplayport to hdmi”ah$]”h&]”uh1hÈhj h²hh³hÇh´KƒubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒMini-DisplayPort to HDMI”h]”hŒMini-DisplayPort to HDMI”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjfh²hh³hÇh´KŒubhï)�”}”(hŒ^Club3D CAC-1180: https://www.club-3d.com/en/detail/2443/mini_displayport_1.4_to_hdmi_2.0b_hdr/”h]”(hŒClub3D CAC-1180: ”…”�”}”(hjwh²hh³Nh´Nubj&)�”}”(hŒMhttps://www.club-3d.com/en/detail/2443/mini_displayport_1.4_to_hdmi_2.0b_hdr/”h]”hŒMhttps://www.club-3d.com/en/detail/2443/mini_displayport_1.4_to_hdmi_2.0b_hdr/”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j�uh1j%hjwubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KŽhjfh²hubhï)�”}”(hŒGNote that passive adapters will never work, you need an active adapter.”h]”hŒGNote that passive adapters will never work, you need an active adapter.”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K�hjfh²hubhï)�”}”(hŒÆThe Club3D adapters in this list are all MegaChips 2900 based. Other Club3D adapters are PS176 based and do NOT have the CEC pin hooked up, so only the three Club3D adapters above are known to work.”h]”hŒÆThe Club3D adapters in this list are all MegaChips 2900 based. Other Club3D adapters are PS176 based and do NOT have the CEC pin hooked up, so only the three Club3D adapters above are known to work.”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K’hjfh²hubhï)�”}”(hŒüI suspect that MegaChips 2900 based designs in general are likely to work whereas with the PS176 it is more hit-and-miss (mostly miss). The PS186 is likely to have the CEC pin hooked up, it looks like they changed the reference design for that chipset.”h]”hŒüI suspect that MegaChips 2900 based designs in general are likely to work whereas with the PS176 it is more hit-and-miss (mostly miss). The PS186 is likely to have the CEC pin hooked up, it looks like they changed the reference design for that chipset.”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K–hjfh²hubeh}”(h]”Œmini-displayport-to-hdmi”ah ]”h"]”Œmini-displayport to hdmi”ah$]”h&]”uh1hÈhj h²hh³hÇh´KŒubeh}”(h]”Œ-displayport-to-hdmi-adapters-with-working-cec”ah ]”h"]”Œ-displayport to hdmi adapters with working cec”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K`ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒUSB CEC Dongles”h]”hŒUSB CEC Dongles”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÎh²hh³hÇh´K�ubhï)�”}”(hXThese dongles appear as ``/dev/ttyACMX`` devices and need the ``inputattach`` utility to create the ``/dev/cecX`` devices. Support for the Pulse-Eight has been added to ``inputattach`` 1.6.0. Support for the Rainshadow Tech has been added to ``inputattach`` 1.6.1.”h]”(hŒThese dongles appear as ”…”�”}”(hjßh²hh³Nh´Nubj')�”}”(hŒ``/dev/ttyACMX``”h]”hŒ /dev/ttyACMX”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjßubhŒ devices and need the ”…”�”}”(hjßh²hh³Nh´Nubj')�”}”(hŒ``inputattach``”h]”hŒ inputattach”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjßubhŒ utility to create the ”…”�”}”(hjßh²hh³Nh´Nubj')�”}”(hŒ ``/dev/cecX``”h]”hŒ /dev/cecX”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjßubhŒ8 devices. Support for the Pulse-Eight has been added to ”…”�”}”(hjßh²hh³Nh´Nubj')�”}”(hŒ``inputattach``”h]”hŒ inputattach”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjßubhŒ: 1.6.0. Support for the Rainshadow Tech has been added to ”…”�”}”(hjßh²hh³Nh´Nubj')�”}”(hŒ``inputattach``”h]”hŒ inputattach”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjßubhŒ 1.6.1.”…”�”}”(hjßh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KŸhjÎh²hubhï)�”}”(hŒBYou also need udev rules to automatically start systemd services::”h]”hŒAYou also need udev rules to automatically start systemd services:”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K¤hjÎh²hubjI)�”}”(hXSUBSYSTEM=="tty", KERNEL=="ttyACM[0-9]*", ATTRS{idVendor}=="2548", ATTRS{idProduct}=="1002", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}+="pulse8-cec-inputattach@%k.service" SUBSYSTEM=="tty", KERNEL=="ttyACM[0-9]*", ATTRS{idVendor}=="2548", ATTRS{idProduct}=="1001", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}+="pulse8-cec-inputattach@%k.service" SUBSYSTEM=="tty", KERNEL=="ttyACM[0-9]*", ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="ff59", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}+="rainshadow-cec-inputattach@%k.service"”h]”hXSUBSYSTEM=="tty", KERNEL=="ttyACM[0-9]*", ATTRS{idVendor}=="2548", ATTRS{idProduct}=="1002", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}+="pulse8-cec-inputattach@%k.service" SUBSYSTEM=="tty", KERNEL=="ttyACM[0-9]*", ATTRS{idVendor}=="2548", ATTRS{idProduct}=="1001", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}+="pulse8-cec-inputattach@%k.service" SUBSYSTEM=="tty", KERNEL=="ttyACM[0-9]*", ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="ff59", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}+="rainshadow-cec-inputattach@%k.service"”…”�”}”hjUsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jHh³hÇh´K¦hjÎh²hubhï)�”}”(hŒand these systemd services:”h]”hŒand these systemd services:”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KªhjÎh²hubhï)�”}”(hŒJFor Pulse-Eight make /lib/systemd/system/pulse8-cec-inputattach@.service::”h]”hŒIFor Pulse-Eight make /lib/systemd/system/pulse8-cec-inputattach@.service:”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K¬hjÎh²hubjI)�”}”(hŒ…[Unit] Description=inputattach for pulse8-cec device on %I [Service] Type=simple ExecStart=/usr/bin/inputattach --pulse8-cec /dev/%I”h]”hŒ…[Unit] Description=inputattach for pulse8-cec device on %I [Service] Type=simple ExecStart=/usr/bin/inputattach --pulse8-cec /dev/%I”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jHh³hÇh´K®hjÎh²hubhï)�”}”(hŒVFor the RainShadow Tech make /lib/systemd/system/rainshadow-cec-inputattach@.service::”h]”hŒUFor the RainShadow Tech make /lib/systemd/system/rainshadow-cec-inputattach@.service:”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KµhjÎh²hubjI)�”}”(hŒ�[Unit] Description=inputattach for rainshadow-cec device on %I [Service] Type=simple ExecStart=/usr/bin/inputattach --rainshadow-cec /dev/%I”h]”hŒ�[Unit] Description=inputattach for rainshadow-cec device on %I [Service] Type=simple ExecStart=/usr/bin/inputattach --rainshadow-cec /dev/%I”…”�”}”hj›sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jHh³hÇh´K·hjÎh²hubhï)�”}”(hŒ_For proper suspend/resume support create: /lib/systemd/system/restart-cec-inputattach.service::”h]”hŒ^For proper suspend/resume support create: /lib/systemd/system/restart-cec-inputattach.service:”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K¿hjÎh²hubjI)�”}”(hXp[Unit] Description=restart inputattach for cec devices After=suspend.target [Service] Type=forking 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' [Install] WantedBy=suspend.target”h]”hXp[Unit] Description=restart inputattach for cec devices After=suspend.target [Service] Type=forking 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' [Install] WantedBy=suspend.target”…”�”}”hj·sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jHh³hÇh´KÁhjÎh²hubhï)�”}”(hŒ5And run ``systemctl enable restart-cec-inputattach``.”h]”(hŒAnd run ”…”�”}”(hjÅh²hh³Nh´Nubj')�”}”(hŒ,``systemctl enable restart-cec-inputattach``”h]”hŒ(systemctl enable restart-cec-inputattach”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjÅubhŒ.”…”�”}”(hjÅh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KÌhjÎh²hubhï)�”}”(hŒ‡To automatically set the physical address of the CEC device whenever the EDID changes, you can use ``cec-ctl`` with the ``-E`` option::”h]”(hŒcTo automatically set the physical address of the CEC device whenever the EDID changes, you can use ”…”�”}”(hjåh²hh³Nh´Nubj')�”}”(hŒ ``cec-ctl``”h]”hŒcec-ctl”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjåubhŒ with the ”…”�”}”(hjåh²hh³Nh´Nubj')�”}”(hŒ``-E``”h]”hŒ-E”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjåubhŒ option:”…”�”}”(hjåh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KÎhjÎh²hubjI)�”}”(hŒ)cec-ctl -E /sys/class/drm/card0-DP-1/edid”h]”hŒ)cec-ctl -E /sys/class/drm/card0-DP-1/edid”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jHh³hÇh´KÑhjÎh²hubhï)�”}”(hŒËThis assumes the dongle is connected to the card0-DP-1 output (``xrandr`` will tell you which output is used) and it will poll for changes to the EDID and update the Physical Address whenever they occur.”h]”(hŒ?This assumes the dongle is connected to the card0-DP-1 output (”…”�”}”(hj%h²hh³Nh´Nubj')�”}”(hŒ ``xrandr``”h]”hŒxrandr”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj%ubhŒ‚ will tell you which output is used) and it will poll for changes to the EDID and update the Physical Address whenever they occur.”…”�”}”(hj%h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KÓhjÎh²hubhï)�”}”(hŒhTo automatically run this command you can use cron. Edit crontab with ``crontab -e`` and add this line::”h]”(hŒFTo automatically run this command you can use cron. Edit crontab with ”…”�”}”(hjEh²hh³Nh´Nubj')�”}”(hŒ``crontab -e``”h]”hŒ crontab -e”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjEubhŒ and add this line:”…”�”}”(hjEh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K×hjÎh²hubjI)�”}”(hŒ@@reboot /usr/local/bin/cec-ctl -E /sys/class/drm/card0-DP-1/edid”h]”hŒ@@reboot /usr/local/bin/cec-ctl -E /sys/class/drm/card0-DP-1/edid”…”�”}”hjesbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jHh³hÇh´KÚhjÎh²hubhï)�”}”(hŒhThis only works for display drivers that expose the EDID in ``/sys/class/drm``, such as the i915 driver.”h]”(hŒ CEC message in order to wake up such displays. Unfortunately, not all CEC adapters can support this. An example is the Odroid-U3 SBC that has a level-shifter that is powered off when the HPD signal is low, thus blocking the CEC pin. Even though the SoC can use CEC without a HPD, the level-shifter will prevent this from functioning.”h]”hXÞSome displays when in standby mode have no HDMI Hotplug Detect signal, but CEC is still enabled so connected devices can send an CEC message in order to wake up such displays. Unfortunately, not all CEC adapters can support this. An example is the Odroid-U3 SBC that has a level-shifter that is powered off when the HPD signal is low, thus blocking the CEC pin. Even though the SoC can use CEC without a HPD, the level-shifter will prevent this from functioning.”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kãhj›h²hubhï)�”}”(hŒ‹There is a CEC capability flag to signal this: ``CEC_CAP_NEEDS_HPD``. If set, then the hardware cannot wake up displays with this behavior.”h]”(hŒ/There is a CEC capability flag to signal this: ”…”�”}”(hjºh²hh³Nh´Nubj')�”}”(hŒ``CEC_CAP_NEEDS_HPD``”h]”hŒCEC_CAP_NEEDS_HPD”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjºubhŒG. If set, then the hardware cannot wake up displays with this behavior.”…”�”}”(hjºh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Këhj›h²hubhï)�”}”(hX)Note for CEC application implementers: the message must be the first message you send, don't send any other messages before. Certain very bad but unfortunately not uncommon CEC implementations get very confused if they receive anything else but this message and they won't wake up.”h]”hX-Note for CEC application implementers: the message must be the first message you send, don’t send any other messages before. Certain very bad but unfortunately not uncommon CEC implementations get very confused if they receive anything else but this message and they won’t wake up.”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kîhj›h²hubhï)�”}”(hŒSWhen writing a driver it can be tricky to test this. There are two ways to do this:”h]”hŒSWhen writing a driver it can be tricky to test this. There are two ways to do this:”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kôhj›h²hubhŒenumerated_list”“”)�”}”(hhh]”(j)�”}”(hXGet a Pulse-Eight USB CEC dongle, connect an HDMI cable from your device to the Pulse-Eight, but do not connect the Pulse-Eight to the display. Now configure the Pulse-Eight dongle:: cec-ctl -p0.0.0.0 --tv and start monitoring:: sudo cec-ctl -M On the device you are testing run:: cec-ctl --playback It should report a physical address of f.f.f.f. Now run this command:: cec-ctl -t0 --image-view-on The Pulse-Eight should see the message. If not, then something (hardware and/or software) is preventing the CEC message from going out. To make sure you have the wiring correct just connect the Pulse-Eight to a CEC-enabled display and run the same command on your device: now there is a HPD, so you should see the command arriving at the Pulse-Eight. ”h]”(hï)�”}”(hŒ�Get a Pulse-Eight USB CEC dongle, connect an HDMI cable from your device to the Pulse-Eight, but do not connect the Pulse-Eight to the display.”h]”hŒ�Get a Pulse-Eight USB CEC dongle, connect an HDMI cable from your device to the Pulse-Eight, but do not connect the Pulse-Eight to the display.”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K÷hjûubhï)�”}”(hŒ&Now configure the Pulse-Eight dongle::”h]”hŒ%Now configure the Pulse-Eight dongle:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KûhjûubjI)�”}”(hŒcec-ctl -p0.0.0.0 --tv”h]”hŒcec-ctl -p0.0.0.0 --tv”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jHh³hÇh´Kýhjûubhï)�”}”(hŒand start monitoring::”h]”hŒand start monitoring:”…”�”}”(hj) h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KÿhjûubjI)�”}”(hŒsudo cec-ctl -M”h]”hŒsudo cec-ctl -M”…”�”}”hj7 sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jHh³hÇh´Mhjûubhï)�”}”(hŒ#On the device you are testing run::”h]”hŒ"On the device you are testing run:”…”�”}”(hjE h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MhjûubjI)�”}”(hŒcec-ctl --playback”h]”hŒcec-ctl --playback”…”�”}”hjS sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jHh³hÇh´Mhjûubhï)�”}”(hŒFIt should report a physical address of f.f.f.f. Now run this command::”h]”hŒEIt should report a physical address of f.f.f.f. Now run this command:”…”�”}”(hja h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MhjûubjI)�”}”(hŒcec-ctl -t0 --image-view-on”h]”hŒcec-ctl -t0 --image-view-on”…”�”}”hjo sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jHh³hÇh´M hjûubhï)�”}”(hŒ—The Pulse-Eight should see the message. If not, then something (hardware and/or software) is preventing the CEC message from going out.”h]”hŒ—The Pulse-Eight should see the message. If not, then something (hardware and/or software) is preventing the CEC message from going out.”…”�”}”(hj} h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M hjûubhï)�”}”(hŒÖTo make sure you have the wiring correct just connect the Pulse-Eight to a CEC-enabled display and run the same command on your device: now there is a HPD, so you should see the command arriving at the Pulse-Eight.”h]”hŒÖTo make sure you have the wiring correct just connect the Pulse-Eight to a CEC-enabled display and run the same command on your device: now there is a HPD, so you should see the command arriving at the Pulse-Eight.”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Mhjûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjøh²hh³hÇh´Nubj)�”}”(hX8If you have another linux device supporting CEC without HPD, then you can just connect your device to that device. Yes, you can connect two HDMI outputs together. You won't have a HPD (which is what we want for this test), but the second device can monitor the CEC pin. Otherwise use the same commands as in 1. ”h]”(hï)�”}”(hX If you have another linux device supporting CEC without HPD, then you can just connect your device to that device. Yes, you can connect two HDMI outputs together. You won't have a HPD (which is what we want for this test), but the second device can monitor the CEC pin.”h]”hXIf you have another linux device supporting CEC without HPD, then you can just connect your device to that device. Yes, you can connect two HDMI outputs together. You won’t have a HPD (which is what we want for this test), but the second device can monitor the CEC pin.”…”�”}”(hj£ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MhjŸ ubhï)�”}”(hŒ(Otherwise use the same commands as in 1.”h]”hŒ(Otherwise use the same commands as in 1.”…”�”}”(hj± h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MhjŸ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjøh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ)”uh1jöhj›h²hh³hÇh´K÷ubhï)�”}”(hX If CEC messages do not come through when there is no HPD, then you need to figure out why. Typically it is either a hardware restriction or the software powers off the CEC core when the HPD goes low. The first cannot be corrected of course, the second will likely required driver changes.”h]”hX If CEC messages do not come through when there is no HPD, then you need to figure out why. Typically it is either a hardware restriction or the software powers off the CEC core when the HPD goes low. The first cannot be corrected of course, the second will likely required driver changes.”…”�”}”(hjÐ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Mhj›h²hubeh}”(h]”Œcec-without-hpd”ah ]”h"]”Œcec without hpd”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KáubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒMicrocontrollers & CEC”h]”hŒMicrocontrollers & CEC”…”�”}”(hjé h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjæ h²hh³hÇh´M$ubhï)�”}”(hXWe have seen some CEC implementations in displays that use a microcontroller to sample the bus. This does not have to be a problem, but some implementations have timing issues. This is hard to discover unless you can hook up a low-level CEC debugger (see the next section).”h]”hXWe have seen some CEC implementations in displays that use a microcontroller to sample the bus. This does not have to be a problem, but some implementations have timing issues. This is hard to discover unless you can hook up a low-level CEC debugger (see the next section).”…”�”}”(hj÷ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M&hjæ h²hubhï)�”}”(hXYou will see cases where the CEC transmitter holds the CEC line high or low for a longer time than is allowed. For directed messages this is not a problem since if that happens the message will not be Acked and it will be retransmitted. For broadcast messages no such mechanism exists.”h]”hXYou will see cases where the CEC transmitter holds the CEC line high or low for a longer time than is allowed. For directed messages this is not a problem since if that happens the message will not be Acked and it will be retransmitted. For broadcast messages no such mechanism exists.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M+hjæ h²hubhï)�”}”(hŒÐIt's not clear what to do about this. It is probably wise to transmit some broadcast messages twice to reduce the chance of them being lost. Specifically and are candidates for that.”h]”hŒÒIt’s not clear what to do about this. It is probably wise to transmit some broadcast messages twice to reduce the chance of them being lost. Specifically and are candidates for that.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M0hjæ h²hubeh}”(h]”Œmicrocontrollers-cec”ah ]”h"]”Œmicrocontrollers & cec”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´M$ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒMaking a CEC debugger”h]”hŒMaking a CEC debugger”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj) h²hh³hÇh´M6ubhï)�”}”(hŒbBy using a Raspberry Pi 4B and some cheap components you can make your own low-level CEC debugger.”h]”hŒbBy using a Raspberry Pi 4B and some cheap components you can make your own low-level CEC debugger.”…”�”}”(hj: h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M8hj) h²hubhï)�”}”(hŒiThe critical component is one of these HDMI female-female passthrough connectors (full soldering type 1):”h]”hŒiThe critical component is one of these HDMI female-female passthrough connectors (full soldering type 1):”…”�”}”(hjH h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M;hj) h²hubhï)�”}”(hŒ©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”h]”j&)�”}”(hjX h]”hŒ©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”…”�”}”(hjZ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jX uh1j%hjV ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M>hj) h²hubhï)�”}”(hŒßThe video quality is variable and certainly not enough to pass-through 4kp60 (594 MHz) video. You might be able to support 4kp30, but more likely you will be limited to 1080p60 (148.5 MHz). But for CEC testing that is fine.”h]”hŒßThe video quality is variable and certainly not enough to pass-through 4kp60 (594 MHz) video. You might be able to support 4kp30, but more likely you will be limited to 1080p60 (148.5 MHz). But for CEC testing that is fine.”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M@hj) h²hubhï)�”}”(hŒ0You need a breadboard and some breadboard wires:”h]”hŒ0You need a breadboard and some breadboard wires:”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MDhj) h²hubhï)�”}”(hŒrhttp://www.dx.com/p/diy-40p-male-to-female-male-to-male-female-to-female-dupont-line-wire-3pcs-356089#.WYLOOXWGN7I”h]”j&)�”}”(hjŒ h]”hŒrhttp://www.dx.com/p/diy-40p-male-to-female-male-to-male-female-to-female-dupont-line-wire-3pcs-356089#.WYLOOXWGN7I”…”�”}”(hjŽ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jŒ uh1j%hjŠ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MFhj) h²hubhï)�”}”(hŒmIf you want to monitor the HPD and/or 5V lines as well, then you need one of these 5V to 3.3V level shifters:”h]”hŒmIf you want to monitor the HPD and/or 5V lines as well, then you need one of these 5V to 3.3V level shifters:”…”�”}”(hj¢ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MHhj) h²hubhï)�”}”(hŒ$https://www.adafruit.com/product/757”h]”j&)�”}”(hj² h]”hŒ$https://www.adafruit.com/product/757”…”�”}”(hj´ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j² uh1j%hj° ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MKhj) h²hubhï)�”}”(hŒd(This is just where I got these components, there are many other places you can get similar things).”h]”hŒd(This is just where I got these components, there are many other places you can get similar things).”…”�”}”(hjÈ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MMhj) h²hubhï)�”}”(hŒjThe ground pin of the HDMI connector needs to be connected to a ground pin of the Raspberry Pi, of course.”h]”hŒjThe ground pin of the HDMI connector needs to be connected to a ground pin of the Raspberry Pi, of course.”…”�”}”(hjÖ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MPhj) h²hubhï)�”}”(hX�The CEC pin of the HDMI connector needs to be connected to these pins: GPIO 6 and GPIO 7. The optional HPD pin of the HDMI connector should be connected via the level shifter to these pins: GPIO 23 and GPIO 12. The optional 5V pin of the HDMI connector should be connected via the level shifter to these pins: GPIO 25 and GPIO 22. Monitoring the HPD and 5V lines is not necessary, but it is helpful.”h]”hX�The CEC pin of the HDMI connector needs to be connected to these pins: GPIO 6 and GPIO 7. The optional HPD pin of the HDMI connector should be connected via the level shifter to these pins: GPIO 23 and GPIO 12. The optional 5V pin of the HDMI connector should be connected via the level shifter to these pins: GPIO 25 and GPIO 22. Monitoring the HPD and 5V lines is not necessary, but it is helpful.”…”�”}”(hjä h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MShj) h²hubhï)�”}”(hŒsThis device tree addition in ``arch/arm/boot/dts/bcm2711-rpi-4-b.dts`` will hook up the cec-gpio driver correctly::”h]”(hŒThis device tree addition in ”…”�”}”(hjò h²hh³Nh´Nubj')�”}”(hŒ)``arch/arm/boot/dts/bcm2711-rpi-4-b.dts``”h]”hŒ%arch/arm/boot/dts/bcm2711-rpi-4-b.dts”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjò ubhŒ, will hook up the cec-gpio driver correctly:”…”�”}”(hjò h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MZhj) h²hubjI)�”}”(hXžcec@6 { compatible = "cec-gpio"; cec-gpios = <&gpio 6 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; hpd-gpios = <&gpio 23 GPIO_ACTIVE_HIGH>; v5-gpios = <&gpio 25 GPIO_ACTIVE_HIGH>; }; cec@7 { compatible = "cec-gpio"; cec-gpios = <&gpio 7 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; hpd-gpios = <&gpio 12 GPIO_ACTIVE_HIGH>; v5-gpios = <&gpio 22 GPIO_ACTIVE_HIGH>; };”h]”hXžcec@6 { compatible = "cec-gpio"; cec-gpios = <&gpio 6 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; hpd-gpios = <&gpio 23 GPIO_ACTIVE_HIGH>; v5-gpios = <&gpio 25 GPIO_ACTIVE_HIGH>; }; cec@7 { compatible = "cec-gpio"; cec-gpios = <&gpio 7 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; hpd-gpios = <&gpio 12 GPIO_ACTIVE_HIGH>; v5-gpios = <&gpio 22 GPIO_ACTIVE_HIGH>; };”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jHh³hÇh´M]hj) h²hubhï)�”}”(hŒOIf you haven't hooked up the HPD and/or 5V lines, then just delete those lines.”h]”hŒQIf you haven’t hooked up the HPD and/or 5V lines, then just delete those lines.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Mkhj) h²hubhï)�”}”(hŒôThis dts change will enable two cec GPIO devices: I typically use one to send/receive CEC commands and the other to monitor. If you monitor using an unconfigured CEC adapter then it will use GPIO interrupts which makes monitoring very accurate.”h]”hŒôThis dts change will enable two cec GPIO devices: I typically use one to send/receive CEC commands and the other to monitor. If you monitor using an unconfigured CEC adapter then it will use GPIO interrupts which makes monitoring very accurate.”…”�”}”(hj. h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Mnhj) h²hubhï)�”}”(hXQIf you just want to monitor traffic, then a single instance is sufficient. The minimum configuration is one HDMI female-female passthrough connector and two female-female breadboard wires: one for connecting the HDMI ground pin to a ground pin on the Raspberry Pi, and the other to connect the HDMI CEC pin to GPIO 6 on the Raspberry Pi.”h]”hXQIf you just want to monitor traffic, then a single instance is sufficient. The minimum configuration is one HDMI female-female passthrough connector and two female-female breadboard wires: one for connecting the HDMI ground pin to a ground pin on the Raspberry Pi, and the other to connect the HDMI CEC pin to GPIO 6 on the Raspberry Pi.”…”�”}”(hj< h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Mshj) h²hubhï)�”}”(hŒVThe documentation on how to use the error injection is here: :ref:`cec_pin_error_inj`.”h]”(hŒ=The documentation on how to use the error injection is here: ”…”�”}”(hjJ h²hh³Nh´Nubh)�”}”(hŒ:ref:`cec_pin_error_inj`”h]”jo)�”}”(hjT h]”hŒcec_pin_error_inj”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”(jzŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jnhjR ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j‡Œ refdomain”j` Œreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆj�Œcec_pin_error_inj”uh1hh³hÇh´MyhjJ ubhŒ.”…”�”}”(hjJ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Myhj) h²hubhï)�”}”(hŒ¹``cec-ctl --monitor-pin`` will do low-level CEC bus sniffing and analysis. You can also store the CEC traffic to file using ``--store-pin`` and analyze it later using ``--analyze-pin``.”h]”(j')�”}”(hŒ``cec-ctl --monitor-pin``”h]”hŒcec-ctl --monitor-pin”…”�”}”(hj€ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj| ubhŒc will do low-level CEC bus sniffing and analysis. You can also store the CEC traffic to file using ”…”�”}”(hj| h²hh³Nh´Nubj')�”}”(hŒ``--store-pin``”h]”hŒ --store-pin”…”�”}”(hj’ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj| ubhŒ and analyze it later using ”…”�”}”(hj| h²hh³Nh´Nubj')�”}”(hŒ``--analyze-pin``”h]”hŒ --analyze-pin”…”�”}”(hj¤ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj| ubhŒ.”…”�”}”(hj| h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M{hj) h²hubhï)�”}”(hŒŠYou can also use this as a full-fledged CEC device by configuring it using ``cec-ctl --tv -p0.0.0.0`` or ``cec-ctl --playback -p1.0.0.0``.”h]”(hŒKYou can also use this as a full-fledged CEC device by configuring it using ”…”�”}”(hj¼ h²hh³Nh´Nubj')�”}”(hŒ``cec-ctl --tv -p0.0.0.0``”h]”hŒcec-ctl --tv -p0.0.0.0”…”�”}”(hjÄ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj¼ ubhŒ or ”…”�”}”(hj¼ h²hh³Nh´Nubj')�”}”(hŒ ``cec-ctl --playback -p1.0.0.0``”h]”hŒcec-ctl --playback -p1.0.0.0”…”�”}”(hjÖ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj¼ ubhŒ.”…”�”}”(hj¼ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Mhj) h²hubhŒtarget”“”)�”}”(hŒ.. _extron_da_hd_4k_plus:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œextron-da-hd-4k-plus”uh1jî h´M‚hj) h²hh³hÇubeh}”(h]”Œmaking-a-cec-debugger”ah ]”h"]”Œmaking a cec debugger”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´M6ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ'Extron DA HD 4K PLUS CEC Adapter driver”h]”hŒ'Extron DA HD 4K PLUS CEC Adapter driver”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj h²hh³hÇh´M…ubhï)�”}”(hŒƒThis driver is for the Extron DA HD 4K PLUS series of HDMI Distribution Amplifiers: https://www.extron.com/product/dahd4kplusseries”h]”(hŒTThis driver is for the Extron DA HD 4K PLUS series of HDMI Distribution Amplifiers: ”…”�”}”(hj h²hh³Nh´Nubj&)�”}”(hŒ/https://www.extron.com/product/dahd4kplusseries”h]”hŒ/https://www.extron.com/product/dahd4kplusseries”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j uh1j%hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M‡hj h²hubhï)�”}”(hŒ)The 2, 4 and 6 port models are supported.”h]”hŒ)The 2, 4 and 6 port models are supported.”…”�”}”(hj2 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MŠhj h²hubhï)�”}”(hŒ1Firmware version 1.02.0001 or higher is required.”h]”hŒ1Firmware version 1.02.0001 or higher is required.”…”�”}”(hj@ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MŒhj h²hubhï)�”}”(hŒ¨Note that older Extron hardware revisions have a problem with the CEC voltage, which may mean that CEC will not work. This is fixed in hardware revisions E34814 and up.”h]”hŒ¨Note that older Extron hardware revisions have a problem with the CEC voltage, which may mean that CEC will not work. This is fixed in hardware revisions E34814 and up.”…”�”}”(hjN h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MŽhj h²hubhï)�”}”(hŒÅThe CEC support has two modes: the first is a manual mode where userspace has to manually control CEC for the HDMI Input and all HDMI Outputs. While this gives full control, it is also complicated.”h]”hŒÅThe CEC support has two modes: the first is a manual mode where userspace has to manually control CEC for the HDMI Input and all HDMI Outputs. While this gives full control, it is also complicated.”…”�”}”(hj\ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M’hj h²hubhï)�”}”(hX’The second mode is an automatic mode, which is selected if the module option ``vendor_id`` is set. In that case the driver controls CEC and CEC messages received in the input will be distributed to the outputs. It is still possible to use the /dev/cecX devices to talk to the connected devices directly, but it is the driver that configures everything and deals with things like Hotplug Detect changes.”h]”(hŒMThe second mode is an automatic mode, which is selected if the module option ”…”�”}”(hjj h²hh³Nh´Nubj')�”}”(hŒ ``vendor_id``”h]”hŒ vendor_id”…”�”}”(hjr h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjj ubhX8 is set. In that case the driver controls CEC and CEC messages received in the input will be distributed to the outputs. It is still possible to use the /dev/cecX devices to talk to the connected devices directly, but it is the driver that configures everything and deals with things like Hotplug Detect changes.”…”�”}”(hjj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M–hj h²hubhï)�”}”(hŒ‰The driver also takes care of the EDIDs: /dev/videoX devices are created to read the EDIDs and (for the HDMI Input port) to set the EDID.”h]”hŒ‰The driver also takes care of the EDIDs: /dev/videoX devices are created to read the EDIDs and (for the HDMI Input port) to set the EDID.”…”�”}”(hjŠ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M�hj h²hubhï)�”}”(hXBy default userspace is responsible to set the EDID for the HDMI Input according to the EDIDs of the connected displays. But if the ``manufacturer_name`` module option is set, then the driver will take care of setting the EDID of the HDMI Input based on the supported resolutions of the connected displays. Currently the driver only supports resolutions 1080p60 and 4kp60: if all connected displays support 4kp60, then it will advertise 4kp60 on the HDMI input, otherwise it will fall back to an EDID that just reports 1080p60.”h]”(hŒ„By default userspace is responsible to set the EDID for the HDMI Input according to the EDIDs of the connected displays. But if the ”…”�”}”(hj˜ h²hh³Nh´Nubj')�”}”(hŒ``manufacturer_name``”h]”hŒmanufacturer_name”…”�”}”(hj  h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj˜ ubhXv module option is set, then the driver will take care of setting the EDID of the HDMI Input based on the supported resolutions of the connected displays. Currently the driver only supports resolutions 1080p60 and 4kp60: if all connected displays support 4kp60, then it will advertise 4kp60 on the HDMI input, otherwise it will fall back to an EDID that just reports 1080p60.”…”�”}”(hj˜ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M hj h²hubhï)�”}”(hŒNThe status of the Extron is reported in ``/sys/kernel/debug/cec/cecX/status``.”h]”(hŒ(The status of the Extron is reported in ”…”�”}”(hj¸ h²hh³Nh´Nubj')�”}”(hŒ%``/sys/kernel/debug/cec/cecX/status``”h]”hŒ!/sys/kernel/debug/cec/cecX/status”…”�”}”(hjÀ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj¸ ubhŒ.”…”�”}”(hj¸ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M¨hj h²hubhï)�”}”(hŒHThe extron-da-hd-4k-plus driver implements the following module options:”h]”hŒHThe extron-da-hd-4k-plus driver implements the following module options:”…”�”}”(hjØ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Mªhj h²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ ``debug``”h]”j')�”}”(hjë h]”hŒdebug”…”�”}”(hjí h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjé ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjæ h²hh³hÇh´M­ubhï)�”}”(hŒ3If set to 1, then all serial port traffic is shown.”h]”hŒ3If set to 1, then all serial port traffic is shown.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M¯hjæ h²hubeh}”(h]”Œdebug”ah ]”h"]”Œdebug”ah$]”h&]”uh1hÈhj h²hh³hÇh´M­ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ ``vendor_id``”h]”j')�”}”(hj h]”hŒ vendor_id”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj h²hh³hÇh´M²ubhï)�”}”(hŒ2The CEC Vendor ID to report to connected displays.”h]”hŒ2The CEC Vendor ID to report to connected displays.”…”�”}”(hj0 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M´hj h²hubhï)�”}”(hŒ›If set, then the driver will take care of distributing CEC messages received on the input to the HDMI outputs. This is done for the following CEC messages:”h]”hŒ›If set, then the driver will take care of distributing CEC messages received on the input to the HDMI outputs. This is done for the following CEC messages:”…”�”}”(hj> h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M¶hj h²hubhÿ)�”}”(hhh]”(j)�”}”(hŒ ”h]”hï)�”}”(hjQ h]”hŒ ”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M¹hjO ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjL h²hh³hÇh´Nubj)�”}”(hŒ" and ”h]”hï)�”}”(hjh h]”hŒ" and ”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Mºhjf ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjL h²hh³hÇh´Nubj)�”}”(hŒ”h]”hï)�”}”(hj h]”hŒ”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M»hj} ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjL h²hh³hÇh´Nubj)�”}”(hŒ”h]”hï)�”}”(hj– h]”hŒ”…”�”}”(hj˜ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M¼hj” ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjL h²hh³hÇh´Nubj)�”}”(hŒ ”h]”hï)�”}”(hŒ”h]”hŒ”…”�”}”(hj¯ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M½hj« ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjL h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jªj«uh1hþh³hÇh´M¹hj h²hubhï)�”}”(hŒ�If not set, then userspace is responsible for this, and it will have to configure the CEC devices for HDMI Input and the HDMI Outputs manually.”h]”hŒ�If not set, then userspace is responsible for this, and it will have to configure the CEC devices for HDMI Input and the HDMI Outputs manually.”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M¿hj h²hubeh}”(h]”Œ vendor-id”ah ]”h"]”Œ vendor_id”ah$]”h&]”uh1hÈhj h²hh³hÇh´M²ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ``manufacturer_name``”h]”j')�”}”(hjä h]”hŒmanufacturer_name”…”�”}”(hjæ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjâ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjß h²hh³hÇh´MÃubhï)�”}”(hX]A three character manufacturer name that is used in the EDID for the HDMI Input. If not set, then userspace is responsible for configuring an EDID. If set, then the driver will update the EDID automatically based on the resolutions supported by the connected displays, and it will not be possible anymore to manually set the EDID for the HDMI Input.”h]”hX]A three character manufacturer name that is used in the EDID for the HDMI Input. If not set, then userspace is responsible for configuring an EDID. If set, then the driver will update the EDID automatically based on the resolutions supported by the connected displays, and it will not be possible anymore to manually set the EDID for the HDMI Input.”…”�”}”(hjù h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MÅhjß h²hubeh}”(h]”Œmanufacturer-name”ah ]”h"]”Œmanufacturer_name”ah$]”h&]”uh1hÈhj h²hh³hÇh´MÃubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ``hpd_never_low``”h]”j')�”}”(hjh]”hŒ hpd_never_low”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjh²hh³hÇh´MÌubhï)�”}”(hXIf set, then the Hotplug Detect pin of the HDMI Input will always be high, even if nothing is connected to the HDMI Outputs. If not set (the default) then the Hotplug Detect pin of the HDMI input will go low if all the detected Hotplug Detect pins of the HDMI Outputs are also low.”h]”hXIf set, then the Hotplug Detect pin of the HDMI Input will always be high, even if nothing is connected to the HDMI Outputs. If not set (the default) then the Hotplug Detect pin of the HDMI input will go low if all the detected Hotplug Detect pins of the HDMI Outputs are also low.”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MÎhjh²hubhï)�”}”(hŒ'This option may be changed dynamically.”h]”hŒ'This option may be changed dynamically.”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MÓhjh²hubeh}”(h]”Œ hpd-never-low”ah ]”h"]”Œ hpd_never_low”ah$]”h&]”uh1hÈhj h²hh³hÇh´MÌubeh}”(h]”(Œ'extron-da-hd-4k-plus-cec-adapter-driver”jû eh ]”h"]”(Œ'extron da hd 4k plus cec adapter driver”Œextron_da_hd_4k_plus”eh$]”h&]”uh1hÈhhÊh²hh³hÇh´M…Œexpect_referenced_by_name”}”jSjð sŒexpect_referenced_by_id”}”jû jð subeh}”(h]”Œhdmi-cec”ah ]”h"]”Œhdmi cec”ah$]”h&]”uh1hÈhhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(•à hÍNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j…Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”jû ]”jð asŒnameids”}”(j_j\j jj jjËjÈjójðjcj`jÃjÀj˜j•jã jà j& j# j jþ jSjû jRjOj j jÜ jÙ j j jJjGuŒ nametypes”}”(j_‰j ‰j ‰jˉjó‰jc‰jÉj˜‰jã ‰j& ‰j ‰jSˆjR‰j ‰jÜ ‰j ‰jJ‰uh}”(j\hÊjhÝjj jÈj jðj†j`jöjÀjfj•jÎjà j›j# jæ jþ j) jû j jOj j jæ jÙ j j jß jGjuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”hŒsystem_message”“”)�”}”(hhh]”hï)�”}”(hhh]”hŒ:Hyperlink target "extron-da-hd-4k-plus" is not referenced.”…”�”}”hjïsbah}”(h]”h ]”h"]”h$]”h&]”uh1hîhjìubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÇŒline”M‚uh1jêubaŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.