Jump to content

XU4, Armbian 23.02.3 Bullseye, HDMI CEC not working


doomdog

Recommended Posts

Greetings, 

 

As the subject says...

CEC not detected in kernel, cec-client throws errors, nothing I tried worked.

 

root@odroidxu4:~# uname -a
Linux odroidxu4 5.4.239-odroidxu4 #1 SMP PREEMPT Thu Mar 16 15:52:54 UTC 2023 armv7l GNU/Linux
 

root@odroidxu4:~# cec-client -l
libCEC version: 6.0.2, compiled on Linux-4.19.0-14-armmp-lpae ... , features: P8_USB, DRM, P8_detect, randr, Exynos, Linux, AOCEC
Found devices: 1

device:              1
com port:            Linux
vendor id:           0000
product id:          0000
firmware version:    0
type:                Linux
 

root@odroidxu4:~# cec-client
No device type given. Using 'recording device'
CEC Parser created - libCEC version 6.0.2
no serial port given. trying autodetect:
 path:     /dev/cec0
 com port: Linux

opening a connection to the CEC adapter...
DEBUG:   [             468]     Broadcast (F): osd name set to 'Broadcast'
DEBUG:   [             468]     CLinuxCECAdapterCommunication::Open - m_fd=3 bStartListening=1
DEBUG:   [             468]     CLinuxCECAdapterCommunication::Open - ioctl CEC_ADAP_G_PHYS_ADDR - addr=ffff
WARNING: [             468]     CLinuxCECAdapterCommunication::Open - physical address is invalid
DEBUG:   [             468]     CLinuxCECAdapterCommunication::Open - ioctl CEC_ADAP_S_LOG_ADDRS - log_addr_mask=0000 num_log_addrs=0
DEBUG:   [             468]     CLinuxCECAdapterCommunication::Open - ioctl CEC_ADAP_S_LOG_ADDRS - log_addr_mask=0000 num_log_addrs=1
NOTICE:  [             469]     connection opened
DEBUG:   [             469]     << Broadcast (F) -> TV (0): POLL
TRAFFIC: [             469]     << f0
ERROR:   [             469]     CLinuxCECAdapterCommunication::Write - ioctl CEC_TRANSMIT failed - tx_status=00 errno=64
TRAFFIC: [             469]     << f0
ERROR:   [             469]     CLinuxCECAdapterCommunication::Write - ioctl CEC_TRANSMIT failed - tx_status=00 errno=64
DEBUG:   [             469]     >> POLL not sent
DEBUG:   [             469]     TV (0): device status changed into 'not present'
DEBUG:   [             469]     registering new CEC client - v6.0.2
DEBUG:   [             469]     SetClientVersion - using client version '6.0.2'
NOTICE:  [             469]     setting HDMI port to 1 on device TV (0)
DEBUG:   [             469]     << Broadcast (F) -> TV (0): POLL
TRAFFIC: [             469]     << f0
ERROR:   [             469]     CLinuxCECAdapterCommunication::Write - ioctl CEC_TRANSMIT failed - tx_status=00 errno=64
TRAFFIC: [             469]     << f0
ERROR:   [             469]     CLinuxCECAdapterCommunication::Write - ioctl CEC_TRANSMIT failed - tx_status=00 errno=64
DEBUG:   [             469]     >> POLL not sent
DEBUG:   [             469]     SetConfiguration: double tap timeout = 200ms, repeat rate = 0ms, release delay = 500ms
DEBUG:   [             469]     detecting logical address for type 'recording device'
DEBUG:   [             469]     trying logical address 'Recorder 1'
DEBUG:   [             469]     << Recorder 1 (1) -> Recorder 1 (1): POLL
DEBUG:   [             469]     CLinuxCECAdapterCommunication::Process - CEC_DQEVENT - CEC_EVENT_STATE_CHANGE - log_addr_mask=0000 phys_addr=ffff
TRAFFIC: [             469]     << 11
ERROR:   [             470]     CLinuxCECAdapterCommunication::Write - ioctl CEC_TRANSMIT failed - tx_status=00 errno=64
TRAFFIC: [             470]     << 11
ERROR:   [             470]     CLinuxCECAdapterCommunication::Write - ioctl CEC_TRANSMIT failed - tx_status=00 errno=64
DEBUG:   [             470]     >> POLL not sent
DEBUG:   [             470]     using logical address 'Recorder 1'
DEBUG:   [             470]     Recorder 1 (1): device status changed into 'handled by libCEC'
DEBUG:   [             470]     Recorder 1 (1): power status changed from 'unknown' to 'on'
DEBUG:   [             470]     Recorder 1 (1): vendor = Pulse Eight (001582)
DEBUG:   [             470]     Recorder 1 (1): CEC version 1.4
DEBUG:   [             470]     AllocateLogicalAddresses - device '0', type 'recording device', LA '1'
DEBUG:   [             470]     CLinuxCECAdapterCommunication::SetLogicalAddresses - ioctl CEC_ADAP_S_LOG_ADDRS - log_addr_mask=0000 num_log_addrs=0
DEBUG:   [             470]     CLinuxCECAdapterCommunication::SetLogicalAddresses - ioctl CEC_ADAP_S_LOG_ADDRS - log_addr_mask=0000 num_log_addrs=1
DEBUG:   [             470]     Recorder 1 (1): osd name set to 'CECTester'
DEBUG:   [             470]     Recorder 1 (1): menu language set to 'eng'
NOTICE:  [             470]     setting HDMI port to 1 on device TV (0)
DEBUG:   [             470]     << Recorder 1 (1) -> TV (0): POLL
TRAFFIC: [             470]     << 10
ERROR:   [             470]     CLinuxCECAdapterCommunication::Write - ioctl CEC_TRANSMIT failed - tx_status=00 errno=64
TRAFFIC: [             470]     << 10
ERROR:   [             470]     CLinuxCECAdapterCommunication::Write - ioctl CEC_TRANSMIT failed - tx_status=00 errno=64
DEBUG:   [             470]     >> POLL not sent
DEBUG:   [             470]     Recorder 1 (1): physical address changed from ffff to 1000
DEBUG:   [             470]     << Recorder 1 (1) -> broadcast (F): physical address 1000
TRAFFIC: [             470]     << 1f:84:10:00:01
ERROR:   [             470]     CLinuxCECAdapterCommunication::Write - ioctl CEC_TRANSMIT failed - tx_status=00 errno=64
TRAFFIC: [             470]     << 1f:84:10:00:01
ERROR:   [             470]     CLinuxCECAdapterCommunication::Write - ioctl CEC_TRANSMIT failed - tx_status=00 errno=64
 

 

root@odroidxu4:~# lsmod
Module                  Size  Used by
rfkill                 24576  1
cpufreq_powersave      16384  0
cpufreq_userspace      16384  0
cpufreq_conservative    16384  0
zstd                   16384  8
joydev                 20480  0
input_leds             16384  0
exynos_gsc             32768  0
s5p_mfc               135168  0
s5p_jpeg               45056  0
v4l2_mem2mem           20480  2 s5p_jpeg,exynos_gsc
videobuf2_dma_contig    20480  3 s5p_jpeg,s5p_mfc,exynos_gsc
mali_kbase            364544  0
videobuf2_memops       16384  1 videobuf2_dma_contig
videobuf2_v4l2         24576  4 s5p_jpeg,s5p_mfc,exynos_gsc,v4l2_mem2mem
videobuf2_common       40960  5 s5p_jpeg,s5p_mfc,exynos_gsc,v4l2_mem2mem,videobuf2_v4l2
s5p_cec                16384  0
evdev                  24576  4
exynos_gpiomem         16384  0
zram                   28672  2
sunrpc                315392  1
ip_tables              24576  0
ipv6                  462848  42
autofs4                36864  2
usbhid                 49152  0
gpio_keys              20480  0
 

 

root@odroidxu4:~# zgrep CEC /proc/config.gz
CONFIG_TABLET_USB_ACECAD=m
CONFIG_CEC_CORE=y
CONFIG_CEC_NOTIFIER=y
CONFIG_MEDIA_CEC_SUPPORT=y
# CONFIG_MEDIA_CEC_RC is not set
# USB HDMI CEC adapters
# CONFIG_USB_PULSE8_CEC is not set
# CONFIG_USB_RAINSHADOW_CEC is not set
# CONFIG_VIDEO_VIVID_CEC is not set
CONFIG_CEC_PLATFORM_DRIVERS=y
# CONFIG_VIDEO_CROS_EC_CEC is not set
# CONFIG_CEC_GPIO is not set
CONFIG_VIDEO_SAMSUNG_S5P_CEC=m
# CONFIG_DRM_DP_CEC is not set
 

 

 

Please help!

Thanks in advance.

 

Link to comment
Share on other sites

Ok, responding to myself lol.

After many days (and nights) of testing, reflashing, up/downgrading, switching kernels/branches, even rolling my own...

....it turns out that whatever I do, kernel 5.4.x just doesn't want to give me CEC.

BUT.

If I run 6.1.y, CEC just works.

It doesn't matter how I get to 6.1 (switching kernels, compiling my own, building from git, any branch, any userspace), it just works.

It doesn't even matter what I have in boot.ini (you know, that option to supposedly turn off CEC, or that pesky HPD).

So I'm at a loss.

If anyone could please find out what's going on here.

What could be the difference between 5.4 and 6.1 with regards to HDMI CEC? I can't figure it out. It bugs me to no end.

Maybe what I described rings a bell for someone.

I'm gonna stop for now and wait for the stable 23.05 with Bookworm, 6.1 and (hopefully!) still working CEC.

 

 

 

Link to comment
Share on other sites

5 hours ago, doomdog said:

What could be the difference between 5.4 and 6.1


tl;dr; difference between generations is usually huge, between private old and mainline new, only bigger.

https://github.com/armbian/build/blob/main/config/sources/families/odroidxu4.conf#L19-L32
5.4.y is private vendor kernel that is getting generic bug-fix patches from mainline

6.1.y is pure mainline

 

5 hours ago, doomdog said:

What could be the difference between 5.4 and 6.1 with regards to HDMI CEC? I can't figure it out. It bugs me to no end.


Without code analysis and understanding of related (CEC) mechanisms it is usually hard to tell anything. Its a complex question that could require extensive study on top of general kernel know-how. Theoretical / I didn't look into the code or commits ... it could be more simple answer too.

 

5 hours ago, doomdog said:

It doesn't even matter what I have in boot.ini

 

Probably features names changed. boot.ini is Harkernel proprietary way of setting kernel / hw parameters, tailored for their kernel.

 

5 hours ago, doomdog said:

I'm gonna stop for now and wait for the stable 23.05 with Bookworm, 6.1 and (hopefully!) still working CEC.


Bookworm "current" will still come with 5.4 so you need to switch to edge 6.1 kernel manually or via armbian-config. We will keep 5.4 at least for next release as dropping it ain't a simple binary decision.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...

Important Information

Terms of Use - Privacy Policy - Guidelines