R01 and HDMI output

I’ve got a display plugged in to the microHDMI port on the DevTerm, but I don’t seem to be able to get any output.

On reboot, I see this in the output from dmesg

[    0.199831] [DISP]disp_module_init
[    0.200403] disp 5000000.disp: Adding to iommu group 0
[    0.239946] [DISP] disp_init_hdmi,line:1047:
[    0.239950] dont support hdmi
[    0.240357] raoyiming +++LCD_cfg_panel_info
[    0.240435] display_fb_request,fb_id:0
[    0.256841] [DISP] Fb_copy_boot_fb,line:1444:
[    0.256845] no boot_fb0
[    0.257361] disp_al_manager_apply ouput_type:0
[    0.257763] [DISP] lcd_clk_config,line:731:
[    0.257776] disp 0, clk: pll(330000000),clk(330000000),dclk(55000000) dsi_rate(55000000)
                    clk real:pll(324000000),clk(324000000),dclk(81000000) dsi_rate(150000000)
[    0.258107] raoyiming +++ LCD_open_flow
[    0.272681] <0>raoyiming +++ sunxi_lcd_gpio_set_value
[    0.382658] <0>raoyiming +++ LCD_panel_init
[    1.252847] [DISP] disp_lcd_gpio_set_value,line:2565:
[    1.252853] of_get_named_gpio_flags for lcd_gpio_1 failed

I’m guessing this means that HDMI is explicitly disabled, but of course the main board contains the output connector for it anyway. It is not clear to me whether the R01 core / D1 chip could drive a display via HDMI? The wiki doesn’t contain a lot of detail on the hardware.

Is there something we could tweak in the kernel boot parameters to enable this? /boot/extlinux/extlinux.conf contains…

append earlyprintk=sunxi-uart,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyS0,115200 console=tty0 root=/dev/mmcblk0p4 cma=8M mac_addr=84:10:12:12:01:0
4 LANG=en_US.UTF-8 fbcon=rotate:1

I guess I need to dig in to the kernel sources and D1 spec to learn more!

FWIW, I’ve started to document various things I’m discovering on a GitHub repo. Feel free to have a poke around, raise issues, ask questions, tell me what I’m doing wrong, contribute etc! This is mostly a scratchpad / reference for myself, I am happy to migrate things into the ClockworkPi wiki if that makes sense :slight_smile:

1 Like

Looking at DevTerm/board.dts at main · clockworkpi/DevTerm · GitHub it looks like there are relevant options that should set HDMI output (as well as the LCD). Am I misunderstanding? Also the kernel config looks to have CONFIG_HDMI2_DISP2_SUNXI=y which I would assume would enable this… the hunt continues…

I know it hasn’t been long. Any new discoveries though?

@andypiper Similar issue with a USB microphone. I bought a little $10 mic that plugs into the USB port. Can see it in lsusb, and have set all the configs in pulse / alsa to insure its recognized, but nothing. I have tested the mic on both my big desktop (Debian 11) and my personal laptop (Pop_OS 20.04) and it works fine (for the level of quality it is).

I was suspecting I might have to write my own driver for this thing, but it’s just USB, and Ubuntu seems to recognize it just fine. So… ??

No unfortunately I didn’t make any progress on the HDMI stuff. I wondered whether i might need to play with the X config, since /etc/X11/xorg.conf.d only contains config for the built-in display.

I’m surprised that a USB mic would not work, especially if it is seen by the device tree in lsusb output etc. I really would have thought that given the right config in PulseAudio etc it would be fine.

To follow up on this interesting problem:

Does the amazing @andypiper or someone else has further information/comments?

I haven’t had time to work on HDMI further sorry!

1 Like

The D1 do seems to have HDMI output, though. It is most likely there is no proper driver for whatever to output HDMI on that chip.

Starting with Linux 6.2 the graphic driver for the D1 HDMI out will be included into the kernel

1 Like

Thanks for the link @jan-peter! Can’t wait to see this implemented.

@andypiper a while back I worked on the fbturbo driver for D1 so I know some details about this.
Yes, mode switching is done in the X11-specific driver, and the general fbdrv will not handle this.

The mode switching for D1 does support driving mipi+hdmi together by issuing a command to the kernel driver. However to properly leverage this, the X11 driver must properly interface with the kernel driver.