// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2019 BayLibre SAS. * Author: Jerome Brunet */ /* Libretech Amlogic GX PC form factor - AKA: Tartiflette */ #include #include #include / { adc-keys { compatible = "adc-keys"; io-channels = <&saradc 0>; io-channel-names = "buttons"; keyup-threshold-microvolt = <1800000>; button-update { label = "update"; linux,code = ; press-threshold-microvolt = <1300000>; }; }; aliases { serial0 = &uart_AO; ethernet0 = ðmac; spi0 = &spifc; }; dio2133: analog-amplifier { compatible = "simple-audio-amplifier"; sound-name-prefix = "AU2"; VCC-supply = <&vcc5v>; enable-gpios = <&gpio GPIOH_5 GPIO_ACTIVE_HIGH>; }; chosen { stdout-path = "serial0:115200n8"; }; cvbs-connector { compatible = "composite-video-connector"; status = "disabled"; port { cvbs_connector_in: endpoint { remote-endpoint = <&cvbs_vdac_out>; }; }; }; emmc_pwrseq: emmc-pwrseq { compatible = "mmc-pwrseq-emmc"; reset-gpios = <&gpio BOOT_9 GPIO_ACTIVE_LOW>; }; hdmi-connector { compatible = "hdmi-connector"; type = "a"; port { hdmi_connector_in: endpoint { remote-endpoint = <&hdmi_tx_tmds_out>; }; }; }; gpio-keys-polled { compatible = "gpio-keys-polled"; poll-interval = <100>; power-button { label = "power"; linux,code = ; gpios = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_LOW>; }; }; memory@0 { device_type = "memory"; reg = <0x0 0x0 0x0 0x80000000>; }; ao_5v: regulator-ao_5v { compatible = "regulator-fixed"; regulator-name = "AO_5V"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; vin-supply = <&dc_in>; regulator-always-on; }; dc_in: regulator-dc_in { compatible = "regulator-fixed"; regulator-name = "DC_IN"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; regulator-always-on; }; leds { compatible = "gpio-leds"; led-green { color = ; function = LED_FUNCTION_DISK_ACTIVITY; gpios = <&gpio_ao GPIOAO_9 GPIO_ACTIVE_HIGH>; linux,default-trigger = "disk-activity"; }; led-blue { color = ; function = LED_FUNCTION_STATUS; gpios = <&gpio GPIODV_28 GPIO_ACTIVE_HIGH>; linux,default-trigger = "heartbeat"; panic-indicator; }; }; vcc_card: regulator-vcc_card { compatible = "regulator-fixed"; regulator-name = "VCC_CARD"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; vin-supply = <&vddio_ao3v3>; gpio = <&gpio GPIODV_4 GPIO_ACTIVE_HIGH>; enable-active-high; }; vcc5v: regulator-vcc5v { compatible = "regulator-fixed"; regulator-name = "VCC5V"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; vin-supply = <&ao_5v>; gpio = <&gpio GPIOH_3 GPIO_OPEN_DRAIN>; }; vddio_ao18: regulator-vddio_ao18 { compatible = "regulator-fixed"; regulator-name = "VDDIO_AO18"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; vin-supply = <&ao_5v>; regulator-always-on; }; vddio_ao3v3: regulator-vddio_ao3v3 { compatible = "regulator-fixed"; regulator-name = "VDDIO_AO3V3"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; vin-supply = <&ao_5v>; regulator-always-on; }; vddio_boot: regulator-vddio_boot { compatible = "regulator-fixed"; regulator-name = "VDDIO_BOOT"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; vin-supply = <&vddio_ao3v3>; regulator-always-on; }; vddio_card: regulator-vddio-card { compatible = "regulator-gpio"; regulator-name = "VDDIO_CARD"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <3300000>; gpios = <&gpio GPIODV_5 GPIO_ACTIVE_HIGH>; gpios-states = <0>; states = <3300000 0>, <1800000 1>; regulator-settling-time-up-us = <200>; regulator-settling-time-down-us = <50000>; }; sound { compatible = "amlogic,gx-sound-card"; model = "GXL-LIBRETECH-S9XX-PC"; audio-aux-devs = <&dio2133>; audio-widgets = "Speaker", "7J4-14 LEFT", "Speaker", "7J4-11 RIGHT"; audio-routing = "AU2 INL", "ACODEC LOLN", "AU2 INR", "ACODEC LORN", "7J4-14 LEFT", "AU2 OUTL", "7J4-11 RIGHT", "AU2 OUTR"; assigned-clocks = <&clkc CLKID_MPLL0>, <&clkc CLKID_MPLL1>, <&clkc CLKID_MPLL2>; assigned-clock-parents = <0>, <0>, <0>; assigned-clock-rates = <294912000>, <270950400>, <393216000>; status = "okay"; dai-link-0 { sound-dai = <&aiu AIU_CPU CPU_I2S_FIFO>; }; dai-link-1 { sound-dai = <&aiu AIU_CPU CPU_I2S_ENCODER>; dai-format = "i2s"; mclk-fs = <256>; codec-0 { sound-dai = <&aiu AIU_HDMI CTRL_I2S>; }; codec-1 { sound-dai = <&aiu AIU_ACODEC CTRL_I2S>; }; }; dai-link-2 { sound-dai = <&aiu AIU_HDMI CTRL_OUT>; codec-0 { sound-dai = <&hdmi_tx>; }; }; dai-link-3 { sound-dai = <&aiu AIU_ACODEC CTRL_OUT>; codec-0 { sound-dai = <&acodec>; }; }; }; }; &acodec { AVDD-supply = <&vddio_ao18>; status = "okay"; }; &aiu { status = "okay"; }; &cec_AO { pinctrl-0 = <&ao_cec_pins>; pinctrl-names = "default"; hdmi-phandle = <&hdmi_tx>; status = "okay"; }; &cvbs_vdac_port { cvbs_vdac_out: endpoint { remote-endpoint = <&cvbs_connector_in>; }; }; ðmac { pinctrl-0 = <ð_pins>, <ð_phy_irq_pins>; pinctrl-names = "default"; phy-handle = <&external_phy>; amlogic,tx-delay-ns = <2>; phy-mode = "rgmii"; status = "okay"; }; &external_mdio { external_phy: ethernet-phy@0 { reg = <0>; max-speed = <1000>; reset-assert-us = <10000>; reset-deassert-us = <30000>; reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>; interrupt-parent = <&gpio_intc>; interrupts = <25 IRQ_TYPE_LEVEL_LOW>; }; }; &pinctrl_periphs { /* * Make sure the reset pin of the usb HUB is driven high to take * it out of reset. */ usb1_rst_pins: usb1_rst_irq { mux { groups = "GPIODV_3"; function = "gpio_periphs"; bias-disable; output-high; }; }; /* Make sure the phy irq pin is properly configured as input */ eth_phy_irq_pins: eth_phy_irq { mux { groups = "GPIOZ_15"; function = "gpio_periphs"; bias-disable; output-disable; }; }; }; &hdmi_tx { pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>; pinctrl-names = "default"; hdmi-supply = <&vcc5v>; status = "okay"; }; &hdmi_tx_tmds_port { hdmi_tx_tmds_out: endpoint { remote-endpoint = <&hdmi_connector_in>; }; }; &ir { pinctrl-0 = <&remote_input_ao_pins>; pinctrl-names = "default"; status = "okay"; }; &i2c_C { pinctrl-0 = <&i2c_c_dv18_pins>; pinctrl-names = "default"; status = "okay"; rtc: rtc@51 { reg = <0x51>; compatible = "nxp,pcf8563"; #clock-cells = <0>; clock-output-names = "rtc_clkout"; }; }; &pwm_AO_ab { pinctrl-0 = <&pwm_ao_a_3_pins>; pinctrl-names = "default"; clocks = <&clkc CLKID_FCLK_DIV4>; clock-names = "clkin0"; status = "okay"; }; &pwm_ab { pinctrl-0 = <&pwm_b_pins>; pinctrl-names = "default"; clocks = <&clkc CLKID_FCLK_DIV4>; clock-names = "clkin0"; status = "okay"; }; &pwm_ef { pinctrl-0 = <&pwm_e_pins>, <&pwm_f_clk_pins>; pinctrl-names = "default"; clocks = <&clkc CLKID_FCLK_DIV4>; clock-names = "clkin0"; status = "okay"; }; &saradc { vref-supply = <&vddio_ao18>; status = "okay"; }; /* SD card */ &sd_emmc_b { pinctrl-0 = <&sdcard_pins>; pinctrl-1 = <&sdcard_clk_gate_pins>; pinctrl-names = "default", "clk-gate"; bus-width = <4>; cap-sd-highspeed; sd-uhs-sdr12; sd-uhs-sdr25; sd-uhs-sdr50; sd-uhs-ddr50; max-frequency = <200000000>; disable-wp; cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_LOW>; vmmc-supply = <&vcc_card>; vqmmc-supply = <&vddio_card>; status = "okay"; }; /* eMMC */ &sd_emmc_c { pinctrl-0 = <&emmc_pins>; pinctrl-1 = <&emmc_clk_gate_pins>; pinctrl-names = "default", "clk-gate"; bus-width = <8>; cap-mmc-highspeed; mmc-ddr-1_8v; mmc-hs200-1_8v; max-frequency = <200000000>; disable-wp; mmc-pwrseq = <&emmc_pwrseq>; vmmc-supply = <&vddio_ao3v3>; vqmmc-supply = <&vddio_boot>; status = "okay"; }; &spifc { pinctrl-0 = <&nor_pins>; pinctrl-names = "default"; status = "okay"; gd25lq128: spi-flash@0 { compatible = "jedec,spi-nor"; #address-cells = <1>; #size-cells = <1>; reg = <0>; spi-max-frequency = <12000000>; }; }; &uart_AO { pinctrl-0 = <&uart_ao_a_pins>; pinctrl-names = "default"; status = "okay"; }; &usb { status = "okay"; dr_mode = "host"; }; &usb2_phy0 { pinctrl-0 = <&usb1_rst_pins>; pinctrl-names = "default"; phy-supply = <&vcc5v>; }; &usb2_phy1 { phy-supply = <&vcc5v>; };