// SPDX-License-Identifier: GPL-2.0 OR MIT /* * Copyright 2012 Shawn Guo <shawn.guo@linaro.org> * Copyright 2013-2017 Lothar Waßmann <LW@KARO-electronics.de> */ /dts-v1/; #include "imx28.dtsi" #include <dt-bindings/gpio/gpio.h> #include <dt-bindings/interrupt-controller/irq.h> / { model = "Ka-Ro electronics TX28 module"; compatible = "karo,tx28", "fsl,imx28"; aliases { can0 = &can0; can1 = &can1; display = &display0; ds1339 = &ds1339; gpio5 = &gpio5; lcdif = &lcdif; lcdif_23bit_pins = &tx28_lcdif_23bit_pins; lcdif_24bit_pins = &lcdif_24bit_pins_a; reg_can_xcvr = ®_can_xcvr; spi_gpio = &spi_gpio; spi_mxs = &ssp3; stk5led = &user_led; usbotg = &usb0; }; memory@40000000 { device_type = "memory"; reg = <0x40000000 0>; /* will be filled in by U-Boot */ }; onewire { compatible = "w1-gpio"; gpios = <&gpio2 7 GPIO_ACTIVE_HIGH>; status = "disabled"; }; reg_usb0_vbus: regulator-usb0-vbus { compatible = "regulator-fixed"; regulator-name = "usb0_vbus"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; gpio = <&gpio0 18 GPIO_ACTIVE_HIGH>; enable-active-high; }; reg_usb1_vbus: regulator-usb1-vbus { compatible = "regulator-fixed"; regulator-name = "usb1_vbus"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; gpio = <&gpio3 27 GPIO_ACTIVE_HIGH>; enable-active-high; }; reg_2p5v: regulator-2p5v { compatible = "regulator-fixed"; regulator-name = "2P5V"; regulator-min-microvolt = <2500000>; regulator-max-microvolt = <2500000>; regulator-always-on; }; reg_3p3v: regulator-3p3v { compatible = "regulator-fixed"; regulator-name = "3P3V"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-always-on; }; reg_can_xcvr: regulator-can-xcvr { compatible = "regulator-fixed"; regulator-name = "CAN XCVR"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; gpio = <&gpio1 0 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&tx28_flexcan_xcvr_pins>; }; reg_lcd: regulator-lcd-power { compatible = "regulator-fixed"; regulator-name = "LCD POWER"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; gpio = <&gpio1 31 GPIO_ACTIVE_HIGH>; enable-active-high; }; reg_lcd_reset: regulator-lcd-reset { compatible = "regulator-fixed"; regulator-name = "LCD RESET"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; gpio = <&gpio3 30 GPIO_ACTIVE_HIGH>; startup-delay-us = <300000>; enable-active-high; regulator-always-on; regulator-boot-on; }; mclk: clock-mclk { compatible = "fixed-clock"; #clock-cells = <0>; clock-frequency = <26000000>; }; sound { compatible = "fsl,imx28-tx28-sgtl5000", "fsl,mxs-audio-sgtl5000"; model = "imx28-tx28-sgtl5000"; saif-controllers = <&saif0 &saif1>; audio-codec = <&sgtl5000>; }; leds { compatible = "gpio-leds"; user_led: user { label = "Heartbeat"; gpios = <&gpio4 10 GPIO_ACTIVE_HIGH>; linux,default-trigger = "heartbeat"; }; }; backlight { compatible = "pwm-backlight"; pwms = <&pwm 0 500000>; /* * a silly way to create a 1:1 relationship between the * PWM value and the actual duty cycle */ brightness-levels = < 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100>; default-brightness-level = <50>; }; matrix_keypad: matrix-keypad { compatible = "gpio-matrix-keypad"; col-gpios = < &gpio5 0 GPIO_ACTIVE_HIGH &gpio5 1 GPIO_ACTIVE_HIGH &gpio5 2 GPIO_ACTIVE_HIGH &gpio5 3 GPIO_ACTIVE_HIGH >; row-gpios = < &gpio5 4 GPIO_ACTIVE_HIGH &gpio5 5 GPIO_ACTIVE_HIGH &gpio5 6 GPIO_ACTIVE_HIGH &gpio5 7 GPIO_ACTIVE_HIGH >; /* sample keymap */ linux,keymap = < 0x00000074 /* row 0, col 0, KEY_POWER */ 0x00010052 /* row 0, col 1, KEY_KP0 */ 0x0002004f /* row 0, col 2, KEY_KP1 */ 0x00030050 /* row 0, col 3, KEY_KP2 */ 0x01000051 /* row 1, col 0, KEY_KP3 */ 0x0101004b /* row 1, col 1, KEY_KP4 */ 0x0102004c /* row 1, col 2, KEY_KP5 */ 0x0103004d /* row 1, col 3, KEY_KP6 */ 0x02000047 /* row 2, col 0, KEY_KP7 */ 0x02010048 /* row 2, col 1, KEY_KP8 */ 0x02020049 /* row 2, col 2, KEY_KP9 */ >; gpio-activelow; wakeup-source; debounce-delay-ms = <100>; col-scan-delay-us = <5000>; linux,no-autorepeat; }; spi_gpio: spi { compatible = "spi-gpio"; #address-cells = <1>; #size-cells = <0>; pinctrl-names = "default"; pinctrl-0 = <&tx28_spi_gpio_pins>; sck-gpios = <&gpio2 24 GPIO_ACTIVE_HIGH>; mosi-gpios = <&gpio2 25 GPIO_ACTIVE_HIGH>; miso-gpios = <&gpio2 26 GPIO_ACTIVE_HIGH>; num-chipselects = <3>; cs-gpios = < &gpio2 27 GPIO_ACTIVE_LOW &gpio3 8 GPIO_ACTIVE_LOW &gpio3 9 GPIO_ACTIVE_LOW >; /* enable this and disable ssp3 below, if you need full duplex SPI transfer */ status = "disabled"; }; }; /* 2nd TX-Std UART - (A)UART1 */ &auart1 { pinctrl-names = "default"; pinctrl-0 = <&auart1_pins_a>; status = "okay"; }; /* 3rd TX-Std UART - (A)UART3 */ &auart3 { pinctrl-names = "default"; pinctrl-0 = <&auart3_pins_a>; status = "okay"; }; &can0 { pinctrl-names = "default"; pinctrl-0 = <&can0_pins_a>; xceiver-supply = <®_can_xcvr>; status = "okay"; }; &can1 { pinctrl-names = "default"; pinctrl-0 = <&can1_pins_a>; xceiver-supply = <®_can_xcvr>; status = "okay"; }; &digctl { status = "okay"; }; /* 1st TX-Std UART - (D)UART */ &duart { pinctrl-names = "default"; pinctrl-0 = <&duart_4pins_a>; status = "okay"; }; &gpmi { pinctrl-0 = <&gpmi_pins_a &gpmi_status_cfg>; nand-on-flash-bbt; status = "okay"; }; &i2c0 { pinctrl-names = "default"; pinctrl-0 = <&i2c0_pins_a>; clock-frequency = <400000>; status = "okay"; sgtl5000: sgtl5000@a { compatible = "fsl,sgtl5000"; reg = <0x0a>; VDDA-supply = <®_2p5v>; VDDIO-supply = <®_3p3v>; clocks = <&mclk>; }; gpio5: pca953x@20 { compatible = "nxp,pca9554"; reg = <0x20>; pinctrl-names = "default"; pinctrl-0 = <&tx28_pca9554_pins>; interrupt-parent = <&gpio3>; interrupts = <28 IRQ_TYPE_NONE>; gpio-controller; #gpio-cells = <2>; interrupt-controller; #interrupt-cells = <2>; }; polytouch: edt-ft5x06@38 { compatible = "edt,edt-ft5x06"; reg = <0x38>; pinctrl-names = "default"; pinctrl-0 = <&tx28_edt_ft5x06_pins>; interrupt-parent = <&gpio2>; interrupts = <5 IRQ_TYPE_EDGE_FALLING>; reset-gpios = <&gpio2 6 GPIO_ACTIVE_LOW>; wake-gpios = <&gpio4 9 GPIO_ACTIVE_HIGH>; wakeup-source; }; touchscreen: tsc2007@48 { compatible = "ti,tsc2007"; reg = <0x48>; pinctrl-names = "default"; pinctrl-0 = <&tx28_tsc2007_pins>; interrupt-parent = <&gpio3>; interrupts = <20 IRQ_TYPE_EDGE_FALLING>; pendown-gpio = <&gpio3 20 GPIO_ACTIVE_LOW>; ti,x-plate-ohms = /bits/ 16 <660>; }; ds1339: rtc@68 { compatible = "dallas,ds1339"; reg = <0x68>; trickle-resistor-ohms = <250>; trickle-diode-disable; }; }; &lcdif { pinctrl-names = "default"; pinctrl-0 = <&lcdif_24bit_pins_a &lcdif_sync_pins_a &tx28_lcdif_ctrl_pins>; lcd-supply = <®_lcd>; display = <&display0>; status = "okay"; display0: display0 { bits-per-pixel = <32>; bus-width = <24>; display-timings { native-mode = <&timing5>; timing0: timing0 { panel-name = "VGA"; clock-frequency = <25175000>; hactive = <640>; vactive = <480>; hback-porch = <48>; hsync-len = <96>; hfront-porch = <16>; vback-porch = <33>; vsync-len = <2>; vfront-porch = <10>; hsync-active = <0>; vsync-active = <0>; de-active = <1>; pixelclk-active = <1>; }; timing1: timing1 { panel-name = "ETV570"; clock-frequency = <25175000>; hactive = <640>; vactive = <480>; hback-porch = <114>; hsync-len = <30>; hfront-porch = <16>; vback-porch = <32>; vsync-len = <3>; vfront-porch = <10>; hsync-active = <0>; vsync-active = <0>; de-active = <1>; pixelclk-active = <1>; }; timing2: timing2 { panel-name = "ET0350"; clock-frequency = <6500000>; hactive = <320>; vactive = <240>; hback-porch = <34>; hsync-len = <34>; hfront-porch = <20>; vback-porch = <15>; vsync-len = <3>; vfront-porch = <4>; hsync-active = <0>; vsync-active = <0>; de-active = <1>; pixelclk-active = <1>; }; timing3: timing3 { panel-name = "ET0430"; clock-frequency = <9000000>; hactive = <480>; vactive = <272>; hback-porch = <2>; hsync-len = <41>; hfront-porch = <2>; vback-porch = <2>; vsync-len = <10>; vfront-porch = <2>; hsync-active = <0>; vsync-active = <0>; de-active = <1>; pixelclk-active = <1>; }; timing4: timing4 { panel-name = "ET0500", "ET0700"; clock-frequency = <33260000>; hactive = <800>; vactive = <480>; hback-porch = <88>; hsync-len = <128>; hfront-porch = <40>; vback-porch = <33>; vsync-len = <2>; vfront-porch = <10>; hsync-active = <0>; vsync-active = <0>; de-active = <1>; pixelclk-active = <1>; }; timing5: timing5 { panel-name = "ETQ570"; clock-frequency = <6400000>; hactive = <320>; vactive = <240>; hback-porch = <38>; hsync-len = <30>; hfront-porch = <30>; vback-porch = <16>; vsync-len = <3>; vfront-porch = <4>; hsync-active = <0>; vsync-active = <0>; de-active = <1>; pixelclk-active = <1>; }; }; }; }; &lradc { fsl,lradc-touchscreen-wires = <4>; status = "okay"; }; &mac0 { phy-mode = "rmii"; pinctrl-names = "default", "gpio_mode"; pinctrl-0 = <&mac0_pins_a>; pinctrl-1 = <&tx28_mac0_pins_gpio>; status = "okay"; }; &mac1 { phy-mode = "rmii"; pinctrl-names = "default"; pinctrl-0 = <&mac1_pins_a>; /* not enabled by default */ }; &mxs_rtc { status = "okay"; }; &ocotp { status = "okay"; }; &pwm { pinctrl-names = "default"; pinctrl-0 = <&pwm0_pins_a>; status = "okay"; }; &pinctrl { pinctrl-names = "default"; pinctrl-0 = <&hog_pins_a>; hog_pins_a: hog@0 { reg = <0>; fsl,pinmux-ids = < MX28_PAD_ENET0_RXD3__GPIO_4_10 /* module LED */ >; fsl,drive-strength = <MXS_DRIVE_4mA>; fsl,voltage = <MXS_VOLTAGE_HIGH>; fsl,pull-up = <MXS_PULL_DISABLE>; }; tx28_edt_ft5x06_pins: tx28-edt-ft5x06-pins@0 { reg = <0>; fsl,pinmux-ids = < MX28_PAD_SSP0_DATA6__GPIO_2_6 /* RESET */ MX28_PAD_SSP0_DATA5__GPIO_2_5 /* IRQ */ MX28_PAD_ENET0_RXD2__GPIO_4_9 /* WAKE */ >; fsl,drive-strength = <MXS_DRIVE_4mA>; fsl,voltage = <MXS_VOLTAGE_HIGH>; fsl,pull-up = <MXS_PULL_DISABLE>; }; tx28_flexcan_xcvr_pins: tx28-flexcan-xcvr-pins@0 { reg = <0>; fsl,pinmux-ids = < MX28_PAD_LCD_D00__GPIO_1_0 >; fsl,drive-strength = <MXS_DRIVE_4mA>; fsl,voltage = <MXS_VOLTAGE_HIGH>; fsl,pull-up = <MXS_PULL_DISABLE>; }; tx28_lcdif_23bit_pins: tx28-lcdif-23bit@0 { reg = <0>; fsl,pinmux-ids = < /* LCD_D00 may be used as Flexcan Transceiver Enable on STK5-V5 */ MX28_PAD_LCD_D01__LCD_D1 MX28_PAD_LCD_D02__LCD_D2 MX28_PAD_LCD_D03__LCD_D3 MX28_PAD_LCD_D04__LCD_D4 MX28_PAD_LCD_D05__LCD_D5 MX28_PAD_LCD_D06__LCD_D6 MX28_PAD_LCD_D07__LCD_D7 MX28_PAD_LCD_D08__LCD_D8 MX28_PAD_LCD_D09__LCD_D9 MX28_PAD_LCD_D10__LCD_D10 MX28_PAD_LCD_D11__LCD_D11 MX28_PAD_LCD_D12__LCD_D12 MX28_PAD_LCD_D13__LCD_D13 MX28_PAD_LCD_D14__LCD_D14 MX28_PAD_LCD_D15__LCD_D15 MX28_PAD_LCD_D16__LCD_D16 MX28_PAD_LCD_D17__LCD_D17 MX28_PAD_LCD_D18__LCD_D18 MX28_PAD_LCD_D19__LCD_D19 MX28_PAD_LCD_D20__LCD_D20 MX28_PAD_LCD_D21__LCD_D21 MX28_PAD_LCD_D22__LCD_D22 MX28_PAD_LCD_D23__LCD_D23 >; fsl,drive-strength = <MXS_DRIVE_4mA>; fsl,voltage = <MXS_VOLTAGE_HIGH>; fsl,pull-up = <MXS_PULL_DISABLE>; }; tx28_lcdif_ctrl_pins: tx28-lcdif-ctrl@0 { reg = <0>; fsl,pinmux-ids = < MX28_PAD_LCD_ENABLE__GPIO_1_31 /* Enable */ MX28_PAD_LCD_RESET__GPIO_3_30 /* Reset */ >; fsl,drive-strength = <MXS_DRIVE_4mA>; fsl,voltage = <MXS_VOLTAGE_HIGH>; fsl,pull-up = <MXS_PULL_DISABLE>; }; tx28_mac0_pins_gpio: tx28-mac0-gpio-pins@0 { reg = <0>; fsl,pinmux-ids = < MX28_PAD_ENET0_MDC__GPIO_4_0 MX28_PAD_ENET0_MDIO__GPIO_4_1 MX28_PAD_ENET0_RX_EN__GPIO_4_2 MX28_PAD_ENET0_RXD0__GPIO_4_3 MX28_PAD_ENET0_RXD1__GPIO_4_4 MX28_PAD_ENET0_TX_EN__GPIO_4_6 MX28_PAD_ENET0_TXD0__GPIO_4_7 MX28_PAD_ENET0_TXD1__GPIO_4_8 MX28_PAD_ENET_CLK__GPIO_4_16 >; fsl,drive-strength = <MXS_DRIVE_4mA>; fsl,voltage = <MXS_VOLTAGE_HIGH>; fsl,pull-up = <MXS_PULL_DISABLE>; }; tx28_pca9554_pins: tx28-pca9554-pins@0 { reg = <0>; fsl,pinmux-ids = < MX28_PAD_PWM3__GPIO_3_28 >; fsl,drive-strength = <MXS_DRIVE_4mA>; fsl,voltage = <MXS_VOLTAGE_HIGH>; fsl,pull-up = <MXS_PULL_DISABLE>; }; tx28_spi_gpio_pins: spi-gpiogrp@0 { reg = <0>; fsl,pinmux-ids = < MX28_PAD_AUART2_RX__GPIO_3_8 MX28_PAD_AUART2_TX__GPIO_3_9 MX28_PAD_SSP3_SCK__GPIO_2_24 MX28_PAD_SSP3_MOSI__GPIO_2_25 MX28_PAD_SSP3_MISO__GPIO_2_26 MX28_PAD_SSP3_SS0__GPIO_2_27 >; fsl,drive-strength = <MXS_DRIVE_8mA>; fsl,voltage = <MXS_VOLTAGE_HIGH>; fsl,pull-up = <MXS_PULL_DISABLE>; }; tx28_tsc2007_pins: tx28-tsc2007-pins@0 { reg = <0>; fsl,pinmux-ids = < MX28_PAD_SAIF0_MCLK__GPIO_3_20 /* TSC2007 IRQ */ >; fsl,drive-strength = <MXS_DRIVE_4mA>; fsl,voltage = <MXS_VOLTAGE_HIGH>; fsl,pull-up = <MXS_PULL_DISABLE>; }; tx28_usbphy0_pins: tx28-usbphy0-pins@0 { reg = <0>; fsl,pinmux-ids = < MX28_PAD_GPMI_CE2N__GPIO_0_18 /* USBOTG_VBUSEN */ MX28_PAD_GPMI_CE3N__GPIO_0_19 /* USBOTH_OC */ >; fsl,drive-strength = <MXS_DRIVE_12mA>; fsl,voltage = <MXS_VOLTAGE_HIGH>; fsl,pull-up = <MXS_PULL_DISABLE>; }; tx28_usbphy1_pins: tx28-usbphy1-pins@0 { reg = <0>; fsl,pinmux-ids = < MX28_PAD_SPDIF__GPIO_3_27 /* USBH_VBUSEN */ MX28_PAD_JTAG_RTCK__GPIO_4_20 /* USBH_OC */ >; fsl,drive-strength = <MXS_DRIVE_12mA>; fsl,voltage = <MXS_VOLTAGE_HIGH>; fsl,pull-up = <MXS_PULL_DISABLE>; }; }; &saif0 { pinctrl-names = "default"; pinctrl-0 = <&saif0_pins_b>; fsl,saif-master; status = "okay"; }; &saif1 { pinctrl-names = "default"; pinctrl-0 = <&saif1_pins_a>; status = "okay"; }; &ssp0 { compatible = "fsl,imx28-mmc"; pinctrl-names = "default", "special"; pinctrl-0 = <&mmc0_4bit_pins_a &mmc0_cd_cfg &mmc0_sck_cfg>; bus-width = <4>; status = "okay"; }; &ssp3 { compatible = "fsl,imx28-spi"; pinctrl-names = "default"; pinctrl-0 = <&spi3_pins_a>; clock-frequency = <57600000>; status = "okay"; }; &usb0 { vbus-supply = <®_usb0_vbus>; disable-over-current; dr_mode = "peripheral"; status = "okay"; }; &usb1 { vbus-supply = <®_usb1_vbus>; disable-over-current; dr_mode = "host"; status = "okay"; }; &usbphy0 { pinctrl-names = "default"; pinctrl-0 = <&tx28_usbphy0_pins>; phy_type = "utmi"; status = "okay"; }; &usbphy1 { pinctrl-names = "default"; pinctrl-0 = <&tx28_usbphy1_pins>; phy_type = "utmi"; status = "okay"; };