From: Andrew Davis <[email protected]>

Enable HDMI support for BeagleY-AI platform. The display controller used is
TIDSS and the HDMI bridge used is IT66122.

Based on DT by: Robert Nelson <[email protected]>

Signed-off-by: Andrew Davis <[email protected]>
Signed-off-by: Swamil Jain <[email protected]>
[tomi.valkeinen: cosmetic fixes]
Tested-by: Robert Nelson <[email protected]>
Tested-by: Swamil Jain <[email protected]>
Signed-off-by: Tomi Valkeinen <[email protected]>
---
 arch/arm64/boot/dts/ti/k3-am67a-beagley-ai.dts | 197 +++++++++++++++++++++++++
 1 file changed, 197 insertions(+)

diff --git a/arch/arm64/boot/dts/ti/k3-am67a-beagley-ai.dts 
b/arch/arm64/boot/dts/ti/k3-am67a-beagley-ai.dts
index 5255e04b9ac7..b7bcc90005d7 100644
--- a/arch/arm64/boot/dts/ti/k3-am67a-beagley-ai.dts
+++ b/arch/arm64/boot/dts/ti/k3-am67a-beagley-ai.dts
@@ -146,6 +146,34 @@ led-1 {
                        default-state = "on";
                };
        };
+
+       hdmi0: connector-hdmi {
+               compatible = "hdmi-connector";
+               label = "hdmi";
+               type = "d";
+               port {
+                       hdmi_connector_in: endpoint {
+                               remote-endpoint = <&it66122_out>;
+                       };
+               };
+       };
+
+       sound0: sound {
+               compatible = "simple-audio-card";
+               simple-audio-card,name = "it66122 HDMI";
+               simple-audio-card,format = "i2s";
+               simple-audio-card,bitclock-master = <&hdmi_dailink_master>;
+               simple-audio-card,frame-master = <&hdmi_dailink_master>;
+
+               hdmi_dailink_master: simple-audio-card,cpu {
+                       sound-dai = <&mcasp1>;
+                       system-clock-direction-out;
+               };
+
+               simple-audio-card,codec {
+                       sound-dai = <&it66122>;
+               };
+       };
 };
 
 &main_pmx0 {
@@ -185,6 +213,20 @@ J722S_IOPAD(0x0240, PIN_INPUT, 7) /* (B24) 
MMC1_SDCD.GPIO1_48 */
                bootph-all;
        };
 
+       main_i2c1_pins_default: main-i2c1-default-pins {
+               pinctrl-single,pins = <
+                       J722S_IOPAD(0x01e8, PIN_INPUT_PULLUP, 0) /* (C24) 
I2C1_SCL */
+                       J722S_IOPAD(0x01ec, PIN_INPUT_PULLUP, 0) /* (A22) 
I2C1_SDA */
+               >;
+               bootph-all;
+       };
+
+       main_gpio0_ioexp_intr_pins_default: main-gpio0-ioexp-intr-default-pins {
+               pinctrl-single,pins = <
+                       J722S_IOPAD(0x0110, PIN_INPUT, 7) /* (G27) 
MMC2_DAT1.GPIO0_67 */
+               >;
+       };
+
        mdio_pins_default: mdio-default-pins {
                pinctrl-single,pins = <
                        J722S_IOPAD(0x0160, PIN_OUTPUT, 0) /* (AC24) MDIO0_MDC 
*/
@@ -227,6 +269,47 @@ vdd_3v3_sd_pins_default: vdd-3v3-sd-default-pins {
                        J722S_IOPAD(0x0254, PIN_OUTPUT, 7) /* (E25) 
USB0_DRVVBUS.GPIO1_50 */
                >;
        };
+
+       dss1_pins_default: dss1-default-pins {
+               pinctrl-single,pins = <
+                       J722S_IOPAD(0x0100, PIN_OUTPUT, 0) /* (AB23) 
VOUT0_VSYNC */
+                       J722S_IOPAD(0x00f8, PIN_OUTPUT, 0) /* (AB24) 
VOUT0_HSYNC */
+                       J722S_IOPAD(0x0104, PIN_OUTPUT, 0) /* (AC26) VOUT0_PCLK 
*/
+                       J722S_IOPAD(0x00fc, PIN_OUTPUT, 0) /* (AC27) VOUT0_DE */
+                       J722S_IOPAD(0x00b8, PIN_OUTPUT, 0) /* (W27) VOUT0_DATA0 
*/
+                       J722S_IOPAD(0x00bc, PIN_OUTPUT, 0) /* (W25) VOUT0_DATA1 
*/
+                       J722S_IOPAD(0x00c0, PIN_OUTPUT, 0) /* (W24) VOUT0_DATA2 
*/
+                       J722S_IOPAD(0x00c4, PIN_OUTPUT, 0) /* (W23) VOUT0_DATA3 
*/
+                       J722S_IOPAD(0x00c8, PIN_OUTPUT, 0) /* (W22) VOUT0_DATA4 
*/
+                       J722S_IOPAD(0x00cc, PIN_OUTPUT, 0) /* (W21) VOUT0_DATA5 
*/
+                       J722S_IOPAD(0x00d0, PIN_OUTPUT, 0) /* (Y26) VOUT0_DATA6 
*/
+                       J722S_IOPAD(0x00d4, PIN_OUTPUT, 0) /* (Y27) VOUT0_DATA7 
*/
+                       J722S_IOPAD(0x00d8, PIN_OUTPUT, 0) /* (AA24) 
VOUT0_DATA8 */
+                       J722S_IOPAD(0x00dc, PIN_OUTPUT, 0) /* (AA27) 
VOUT0_DATA9 */
+                       J722S_IOPAD(0x00e0, PIN_OUTPUT, 0) /* (AA25) 
VOUT0_DATA10 */
+                       J722S_IOPAD(0x00e4, PIN_OUTPUT, 0) /* (AB25) 
VOUT0_DATA11 */
+                       J722S_IOPAD(0x00e8, PIN_OUTPUT, 0) /* (AA23) 
VOUT0_DATA12 */
+                       J722S_IOPAD(0x00ec, PIN_OUTPUT, 0) /* (AA22) 
VOUT0_DATA13 */
+                       J722S_IOPAD(0x00f0, PIN_OUTPUT, 0) /* (AB26) 
VOUT0_DATA14 */
+                       J722S_IOPAD(0x00f4, PIN_OUTPUT, 0) /* (AB27) 
VOUT0_DATA15 */
+                       J722S_IOPAD(0x005c, PIN_OUTPUT, 1) /* (AC25) 
GPMC0_AD8.VOUT0_DATA16 */
+                       J722S_IOPAD(0x0060, PIN_OUTPUT, 1) /* (U26) 
GPMC0_AD9.VOUT0_DATA17 */
+                       J722S_IOPAD(0x0064, PIN_OUTPUT, 1) /* (V27) 
GPMC0_AD10.VOUT0_DATA18 */
+                       J722S_IOPAD(0x0068, PIN_OUTPUT, 1) /* (V25) 
GPMC0_AD11.VOUT0_DATA19 */
+                       J722S_IOPAD(0x006c, PIN_OUTPUT, 1) /* (V26) 
GPMC0_AD12.VOUT0_DATA20 */
+                       J722S_IOPAD(0x0070, PIN_OUTPUT, 1) /* (V24) 
GPMC0_AD13.VOUT0_DATA21 */
+                       J722S_IOPAD(0x0074, PIN_OUTPUT, 1) /* (V22) 
GPMC0_AD14.VOUT0_DATA22 */
+                       J722S_IOPAD(0x0078, PIN_OUTPUT, 1) /* (V23) 
GPMC0_AD15.VOUT0_DATA23 */
+               >;
+       };
+
+       main_mcasp1_pins_default: main-mcasp1-default-pins {
+               pinctrl-single,pins = <
+                       J722S_IOPAD(0x0090, PIN_INPUT, 2) /* (P27) 
GPMC0_BE0n_CLE.MCASP1_ACLKX */
+                       J722S_IOPAD(0x0098, PIN_INPUT, 2) /* (V21) 
GPMC0_WAIT0.MCASP1_AFSX */
+                       J722S_IOPAD(0x008c, PIN_INPUT, 2) /* (N23) 
GPMC0_WEn.MCASP1_AXR0 */
+               >;
+       };
 };
 
 &cpsw3g {
@@ -284,6 +367,13 @@ J722S_MCU_IOPAD(0x050, PIN_INPUT_PULLUP, 0)        /* (C6) 
WKUP_I2C1_SDA */
                >;
                bootph-all;
        };
+
+       hdmi_gpio_pins_default: hdmi-gpio-default-pins {
+               pinctrl-single,pins = <
+                       J722S_MCU_IOPAD(0x0038, PIN_INPUT_PULLUP | 
PIN_DEBOUNCE_CONF6, 7) /* (D8) MCU_MCAN0_RX.MCU_GPIO0_14 HDMI_INTn */
+                       J722S_MCU_IOPAD(0x0034, PIN_OUTPUT_PULLUP, 7) /* (B2) 
MCU_MCAN0_TX.MCU_GPIO0_13 HDMI_RSTn */
+               >;
+       };
 };
 
 &wkup_uart0 {
@@ -385,6 +475,63 @@ rtc: rtc@68 {
        };
 };
 
+&main_i2c1 {
+       status = "okay";
+       pinctrl-names = "default";
+       pinctrl-0 = <&main_i2c1_pins_default>;
+       clock-frequency = <400000>;
+       bootph-all;
+
+       it66122: bridge-hdmi@4c {
+               compatible = "ite,it66122";
+               reg = <0x4c>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&hdmi_gpio_pins_default>;
+               vcn33-supply = <&vdd_3v3>;
+               vcn18-supply = <&buck2_reg>;
+               vrf12-supply = <&ldo2_reg>;
+               reset-gpios = <&mcu_gpio0 13 GPIO_ACTIVE_LOW>;
+               interrupt-parent = <&mcu_gpio0>;
+               interrupts = <14 IRQ_TYPE_EDGE_FALLING>;
+               #sound-dai-cells = <0>;
+
+               ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       /*
+                        * HDMI can be serviced with 3 potential VPs -
+                        * (DSS0 VP1 / DSS1 VP0 / DSS1 VP1).
+                        * For now, we will service it with DSS1 VP1.
+                        */
+                       port@0 {
+                               reg = <0>;
+
+                               it66122_in: endpoint {
+                                       bus-width = <24>;
+                                       remote-endpoint = <&dss1_dpi0_out>;
+                               };
+                       };
+
+                       port@1 {
+                               reg = <1>;
+
+                               it66122_out: endpoint {
+                                       remote-endpoint = <&hdmi_connector_in>;
+                               };
+                       };
+               };
+       };
+};
+
+&main_gpio0 {
+       status = "okay";
+};
+
+&mcu_gpio0 {
+       status = "okay";
+};
+
 &sdhci1 {
        /* SD/MMC */
        vmmc-supply = <&vdd_mmc1>;
@@ -399,4 +546,54 @@ &sdhci1 {
        status = "okay";
 };
 
+&dss1 {
+       status = "okay";
+       pinctrl-names = "default";
+       pinctrl-0 = <&dss1_pins_default>;
+
+       clocks = <&k3_clks 232 8>,
+                <&k3_clks 232 0>,
+                <&k3_clks 232 4>;
+
+       assigned-clocks = <&k3_clks 241 0>, /* DSS1-VP0 */
+                         <&k3_clks 240 0>, /* DSS1-VP1 */
+                         <&k3_clks 245 0>; /* DPI Output */
+
+       assigned-clock-parents = <&k3_clks 241 2>, /* PLL 17 HDMI */
+                                <&k3_clks 240 1>, /* PLL 18 DSI */
+                                <&k3_clks 245 2>; /* DSS1-DPI0 */
+
+       ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               /* DSS1-VP1: DPI/HDMI Output */
+               port@0 {
+                       reg = <0>;
+
+                       dss1_dpi0_out: endpoint {
+                               remote-endpoint = <&it66122_in>;
+                       };
+               };
+       };
+};
+
+&mcasp1 {
+       status = "okay";
+       #sound-dai-cells = <0>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&main_mcasp1_pins_default>;
+       auxclk-fs-ratio = <2177>;
+       op-mode = <0>; /* MCASP_IIS_MODE */
+       tdm-slots = <2>;
+       serial-dir = <  /* 0: INACTIVE, 1: TX, 2: RX */
+               1 0 0 0
+               0 0 0 0
+               0 0 0 0
+               0 0 0 0
+       >;
+       tx-num-evt = <32>;
+       rx-num-evt = <32>;
+};
+
 #include "k3-j722s-ti-ipc-firmware.dtsi"

-- 
2.43.0

Reply via email to