HI Dave,
I don’t know if you’re still looking for this information, but as I’ve landed on your question multiple times while researching this subject, so let me leave some breadcrumbs.
The Waveshare displays consists of some DSI panel, a Goodix touch controller and some form of MCU which is used to control power, enable, and reset signals to these components. As you can see on the Waveshare page, the package is fed 3.3V and 5V, the flex cable provides DSI signals for the video signal as well as the I2C signals used to communicate with the MCU and the touch controller.
Wiring up the Tachyon to the panel is done exactly like in the pictures provided on the web page.
On the software side, two “work-in-progress” patches that recently showed up on LKML are needed:
The first one provides the interface to the MCU, exposing controls of those on-board signals. The latter defines the sequences and properties for a variety of Waveshare displays.
With these patches applied to a modern (v6.18+) Linux kernel, we just need to describe how the pieces are connected, in the board’s DeviceTree.
The 5V supply in the debug connector needs to be explicitly enabled. Then we need to enable &i2c13 with the MCU and the touch controller:
&i2c13 {
clock-frequency = <400000>;
status = "okay";
display_mcu: regulator@45 {
compatible = "waveshare,touchscreen-panel-regulator";
reg = <0x45>;
gpio-controller;
#gpio-cells = <2>;
enable-gpio = <&display_mcu 2 GPIO_ACTIVE_HIGH>;
};
touch-screen@5d {
compatible = "goodix,gt9271";
reg = <0x5d>;
reset-gpio = <&display_mcu 9 0>;
touchscreen-size-x = <1920>;
touchscreen-size-y = <720>;
touchscreen-x-mm = <292>;
touchscreen-y-mm = <110>;
};
};
Which allows us to describe the DSI controller and the actual panel:
&mdss_dsi {
vdda-supply = <&vreg_l6b_1p2>;
status = "okay";
panel@1 {
compatible = "waveshare,12.3-dsi-touch-a,4lane";
reg = <1>;
reset-gpio = <&display_mcu 1 0>;
iovcc-gpio = <&display_mcu 4 0>;
avdd-gpio = <&display_mcu 0 0>;
backlight = <&display_mcu>;
rotation = <270>;
port {
panel_in: endpoint {
remote-endpoint = <&mdss_dsi0_out>;
};
};
};
};
&mdss_dsi0_out {
data-lanes = <0 1 2 3>;
remote-endpoint = <&panel_in>;
};
&mdss_dsi_phy {
vdds-supply = <&vreg_l10c_0p88>;
status = "okay";
};
There are no “terminal commands” or similar, once wired up it just becomes the default display. Both the Linux console and Wayland will use it without any additional tinkering.
Regards,
Bjorn