// SPDX-License-Identifier: GPL-2.0-only /* * Copyright (C) 2023 Andreas Kemnade */ /dts-v1/; #include #include #include "omap4460.dtsi" / { model = "Epson Moverio BT-200"; compatible = "epson,embt2ws", "ti,omap4460", "ti,omap4"; memory@80000000 { device_type = "memory"; reg = <0x80000000 0x40000000>; /* 1024M */ }; battery: battery { compatible = "simple-battery"; device-chemistry = "lithium-ion"; charge-full-design-microamp-hours = <2720000>; voltage-max-design-microvolt = <4200000>; voltage-min-design-microvolt = <3300000>; constant-charge-voltage-max-microvolt = <4200000>; /* * vendor kernel says max charge 1400000, input limit 900000 * and charges only with dcp chargers. So it is unclear what * is really allowed. Play safe for now and restrict things * here. Maybe 900000 is just the limit of the vendor charger? */ constant-charge-current-max-microamp = <900000>; charge-term-current-microamp = <200000>; }; backlight-left { compatible = "pwm-backlight"; pwms = <&twl_pwm 1 7812500>; power-supply = <&lb_v50>; }; backlight-right { compatible = "pwm-backlight"; pwms = <&twl_pwm 0 7812500>; power-supply = <&lb_v50>; }; chosen { stdout-path = &uart3; }; gpio-keys { compatible = "gpio-keys"; pinctrl-names = "default"; pinctrl-0 = <&gpio_keys_pins>; key-lock { label = "Lock"; gpios = <&gpio2 3 GPIO_ACTIVE_LOW>; linux,code = ; /* SW_TOUCHPAD_LOCK */ linux,input-type = ; }; }; cb_v18: regulator-cb-v18 { pinctrl-names = "default"; pinctrl-0 = <&cb_v18_pins>; compatible = "regulator-fixed"; regulator-name = "cb_v18"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-always-on; gpio = <&gpio1 28 GPIO_ACTIVE_HIGH>; enable-active-high; }; cb_v33: regulator-cb-v33 { pinctrl-names = "default"; pinctrl-0 = <&cb_v33_pins>; compatible = "regulator-fixed"; regulator-name = "cb_v33"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-always-on; gpio = <&gpio6 30 GPIO_ACTIVE_HIGH>; enable-active-high; }; regulator-cb-v50 { pinctrl-names = "default"; pinctrl-0 = <&cb_v50_pins>; compatible = "regulator-fixed"; regulator-name = "cb_v50"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; regulator-always-on; gpio = <&gpio6 31 GPIO_ACTIVE_HIGH>; enable-active-high; }; lb_v50: regulator-lb-v50 { /* required for many things at the head (probably indirectly) */ pinctrl-names = "default"; pinctrl-0 = <&lb_v50_pins>; compatible = "regulator-fixed"; regulator-name = "lb_v50"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; regulator-always-on; gpio = <&gpio1 27 GPIO_ACTIVE_HIGH>; enable-active-high; }; wl12xx_pwrseq: wl12xx-pwrseq { compatible = "mmc-pwrseq-simple"; clocks = <&twl 1>; clock-names = "ext_clock"; }; /* regulator for wl12xx on sdio2 */ wl12xx_vmmc: wl12xx-vmmc { pinctrl-names = "default"; pinctrl-0 = <&wl12xx_gpio>; compatible = "regulator-fixed"; regulator-name = "vwl1271"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; gpio = <&gpio1 24 GPIO_ACTIVE_HIGH>; startup-delay-us = <70000>; enable-active-high; }; }; &gpio1 { pinctrl-names = "default"; pinctrl-0 = <&gpio1_hog_pins &gpio1wk_hog_pins>; lb-reset-hog { gpio-hog; gpios = <9 GPIO_ACTIVE_HIGH>; output-low; line-name = "lb_reset"; }; power-en-hog { gpio-hog; gpios = <10 GPIO_ACTIVE_HIGH>; output-high; line-name = "power_en"; }; /* * Name taken from vendor kernel but no evidence of actual usage found * nor what it really controls. */ panel-power-en-hog { gpio-hog; gpios = <14 GPIO_ACTIVE_HIGH>; output-low; line-name = "panel_power_en"; }; /* * These two are exported to sysfs in vendor kernel, usage unknown, * backlight state seems unrelated to these. */ blc-r-hog { gpio-hog; gpios = <17 GPIO_ACTIVE_HIGH>; output-low; line-name = "blc_r"; }; blc-l-hog { gpio-hog; gpios = <16 GPIO_ACTIVE_HIGH>; output-low; line-name = "blc_l"; }; high-hog { gpio-hog; gpios = <15 GPIO_ACTIVE_HIGH /* maybe dsi to dpi chip reset? */ 21 GPIO_ACTIVE_HIGH 26 GPIO_ACTIVE_HIGH>; output-high; line-name = "unknown-high"; }; low-hog { gpio-hog; gpios = <18 GPIO_ACTIVE_HIGH 19 GPIO_ACTIVE_HIGH 20 GPIO_ACTIVE_HIGH 22 GPIO_ACTIVE_HIGH>; output-low; line-name = "unknown-low"; }; }; &i2c1 { pinctrl-names = "default"; pinctrl-0 = <&i2c1_pins>; clock-frequency = <400000>; twl: pmic@48 { compatible = "ti,twl6032"; reg = <0x48>; #clock-cells = <1>; /* IRQ# = 7 */ interrupts = ; /* IRQ_SYS_1N cascaded to gic */ interrupt-controller; #interrupt-cells = <1>; system-power-controller; charger { compatible = "ti,twl6032-charger", "ti,twl6030-charger"; interrupts = <2>, <5>; io-channels = <&gpadc 10>; io-channel-names = "vusb"; monitored-battery = <&battery>; }; rtc { compatible = "ti,twl4030-rtc"; interrupts = <11>; }; ldo2: regulator-ldo2 { compatible = "ti,twl6032-ldo2"; regulator-min-microvolt = <1000000>; regulator-max-microvolt = <3000000>; }; ldo4: regulator-ldo4 { compatible = "ti,twl6032-ldo4"; regulator-min-microvolt = <1200000>; regulator-max-microvolt = <2800000>; }; ldo3: regulator-ldo3 { compatible = "ti,twl6032-ldo3"; regulator-min-microvolt = <1000000>; regulator-max-microvolt = <3000000>; }; ldo5: regulator-ldo5 { compatible = "ti,twl6032-ldo5"; regulator-min-microvolt = <1200000>; regulator-max-microvolt = <3000000>; ti,retain-on-reset; }; ldo1: regulator-ldo1 { compatible = "ti,twl6032-ldo1"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <2500000>; }; ldo7: regulator-ldo7 { compatible = "ti,twl6032-ldo7"; regulator-min-microvolt = <1200000>; regulator-max-microvolt = <2900000>; }; ldoln: regulator-ldoln { compatible = "ti,twl6032-ldoln"; regulator-always-on; }; ldo6: regulator-ldo6 { compatible = "ti,twl6032-ldo6"; regulator-always-on; }; ldousb: regulator-ldousb { compatible = "ti,twl6032-ldousb"; regulator-always-on; }; vio: regulator-vio { compatible = "ti,twl6032-vio"; regulator-always-on; }; twl_usb_comparator: usb-comparator { compatible = "ti,twl6030-usb"; interrupts = <4>, <10>; }; twl_pwm: pwm { /* provides two PWMs (id 0, 1 for PWM1 and PWM2) */ compatible = "ti,twl6030-pwm"; #pwm-cells = <2>; }; twl_pwmled: pwmled { /* provides one PWM (id 0 for Charging indicator LED) */ compatible = "ti,twl6030-pwmled"; #pwm-cells = <2>; }; gpadc: gpadc { compatible = "ti,twl6032-gpadc"; interrupts = <3>; #io-channel-cells = <1>; }; }; }; #include "twl6030_omap4.dtsi" &twl_usb_comparator { usb-supply = <&ldousb>; }; &i2c2 { pinctrl-names = "default"; pinctrl-0 = <&i2c2_pins>; clock-frequency = <200000>; /* is sometimes not available, research needed */ gpio_head: gpio@20 { compatible = "ti,tca6408"; reg = <0x20>; gpio-controller; #gpio-cells = <2>; }; /* * camera chip at 0x3c, available if <&gpio_head 1> high * and <&gpio_head 5> low */ /* at head/glasses */ mpu9150h: imu@68 { compatible = "invensense,mpu9150"; reg = <0x68>; pinctrl-names = "default"; pinctrl-0 = <&mpu9150h_pins>; interrupt-parent = <&gpio2>; interrupt = <19 IRQ_TYPE_LEVEL_HIGH>; }; }; &i2c3 { pinctrl-names = "default"; pinctrl-0 = <&i2c3_pins>; clock-frequency = <100000>; led-controller@66 { compatible = "rohm,bd2606mvv"; reg = <0x66>; #address-cells = <1>; #size-cells = <0>; led@0 { reg = <0>; color = ; function = LED_FUNCTION_STATUS; }; led@2 { reg = <2>; color = ; function = LED_FUNCTION_STATUS; }; led@4 { reg = <4>; color = ; function = LED_FUNCTION_STATUS; }; }; }; &i2c4 { pinctrl-names = "default"; pinctrl-0 = <&i2c4_pins>; clock-frequency = <360000>; /* TODO: KXTI9 at 0xf */ tlv320aic3x: codec@18 { compatible = "ti,tlv320aic3x"; reg = <0x18>; pinctrl-names = "default"; pinctrl-0 = <&tlv320aic3x_pins>; #sound-dai-cells = <0>; reset-gpios = <&gpio2 23 GPIO_ACTIVE_LOW>; }; mpu9150: imu@68 { compatible = "invensense,mpu9150"; reg = <0x68>; pinctrl-names = "default"; pinctrl-0 = <&mpu9150_pins>; interrupt-parent = <&gpio2>; interrupt = <7 IRQ_TYPE_LEVEL_HIGH>; vddio-supply = <&cb_v18>; vdd-supply = <&cb_v33>; invensense,level-shifter; }; }; &keypad { pinctrl-names = "default"; pinctrl-0 = <&keypad_pins>; keypad,num-rows = <2>; keypad,num-columns = <3>; linux,keymap = ; linux,input-no-autorepeat; }; &mcbsp2 { #sound-dai-cells = <0>; pinctrl-names = "default"; pinctrl-0 = <&mcbsp2_pins>; status = "okay"; }; &mmc1 { /* sdcard */ vmmc-supply = <&ldo5>; broken-cd; bus-width = <4>; }; &mmc2 { /* emmc */ vmmc-supply = <&ldo2>; bus-width = <8>; }; &mmc3 { pinctrl-names = "default"; pinctrl-0 = <&wl12xx_pins>; vmmc-supply = <&wl12xx_vmmc>; mmc-pwrseq = <&wl12xx_pwrseq>; interrupts-extended = <&wakeupgen GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH &omap4_pmx_core 0x12e>; non-removable; bus-width = <4>; cap-power-off-card; #address-cells = <1>; #size-cells = <0>; wlcore: wlcore@2 { compatible = "ti,wl1283"; reg = <2>; interrupts-extended = <&gpio1 23 IRQ_TYPE_LEVEL_HIGH>; interrupt-names = "irq"; ref-clock-frequency = <26000000>; tcxo-clock-frequency = <26000000>; }; }; &mmc4 { status = "disabled"; }; &mmc5 { status = "disabled"; }; &omap4_pmx_core { bt_pins: pinmux-bt-pins { pinctrl-single,pins = < OMAP4_IOPAD(0x1ca, PIN_OUTPUT | MUX_MODE3) /* gpio25 */ >; }; cb_v18_pins: pinmux-cb-v18-pins { pinctrl-single,pins = < OMAP4_IOPAD(0x1d0, PIN_OUTPUT | MUX_MODE3) /* gpio28 */ >; }; cb_v33_pins: pinmux-cb-v33-pins { pinctrl-single,pins = < OMAP4_IOPAD(0x1d2, PIN_OUTPUT | MUX_MODE3) /* gpio190 */ >; }; cb_v50_pins: pinmux-cb-v50-pins { pinctrl-single,pins = < OMAP4_IOPAD(0x1d4, PIN_OUTPUT | MUX_MODE3) /* gpio191 */ >; }; gpio_keys_pins: pinmux-gpio-key-pins { pinctrl-single,pins = < OMAP4_IOPAD(0x56, PIN_INPUT_PULLUP | MUX_MODE3) /* gpio35 */ >; }; gpio1_hog_pins: pinmux-gpio1-hog-pins { pinctrl-single,pins = < OMAP4_IOPAD(0x1b4, PIN_OUTPUT | MUX_MODE3) /* gpio14 */ OMAP4_IOPAD(0x1b8, PIN_OUTPUT | MUX_MODE3) /* gpio16 */ OMAP4_IOPAD(0x1ba, PIN_OUTPUT | MUX_MODE3) /* gpio17 */ OMAP4_IOPAD(0x1b6, PIN_OUTPUT | MUX_MODE3) /* gpio15 */ OMAP4_IOPAD(0x1bc, PIN_OUTPUT | MUX_MODE3) /* gpio18 */ OMAP4_IOPAD(0x1be, PIN_OUTPUT | MUX_MODE3) /* gpio19 */ OMAP4_IOPAD(0x1c0, PIN_OUTPUT | MUX_MODE3) /* gpio20 */ OMAP4_IOPAD(0x1c2, PIN_OUTPUT | MUX_MODE3) /* gpio21 */ OMAP4_IOPAD(0x1c4, PIN_OUTPUT | MUX_MODE3) /* gpio22 */ OMAP4_IOPAD(0x1cc, PIN_OUTPUT | MUX_MODE3) /* gpio26 */ >; }; i2c1_pins: pinmux-i2c1-pins { pinctrl-single,pins = < OMAP4_IOPAD(0x122, PIN_INPUT_PULLUP | MUX_MODE0) /* i2c1_scl */ OMAP4_IOPAD(0x124, PIN_INPUT_PULLUP | MUX_MODE0) /* i2c1_sda */ >; }; i2c2_pins: pinmux-i2c2-pins { pinctrl-single,pins = < OMAP4_IOPAD(0x126, PIN_INPUT | MUX_MODE0) /* i2c2_scl */ OMAP4_IOPAD(0x128, PIN_INPUT | MUX_MODE0) /* i2c2_sda */ >; }; i2c3_pins: pinmux-i2c3-pins { pinctrl-single,pins = < OMAP4_IOPAD(0x12a, PIN_INPUT | MUX_MODE0) /* i2c3_scl */ OMAP4_IOPAD(0x12c, PIN_INPUT | MUX_MODE0) /* i2c3_sda */ >; }; i2c4_pins: pinmux-i2c4-pins { pinctrl-single,pins = < OMAP4_IOPAD(0x12e, PIN_INPUT | MUX_MODE0) /* i2c4_scl */ OMAP4_IOPAD(0x130, PIN_INPUT | MUX_MODE0) /* i2c4_sda */ >; }; keypad_pins: pinmux-keypad-pins { pinctrl-single,pins = < /* kpd_row0 */ OMAP4_IOPAD(0x0050, PIN_INPUT_PULLUP | MUX_MODE1) /* kpd_row1 */ OMAP4_IOPAD(0x0052, PIN_INPUT_PULLUP | MUX_MODE1) /* kpd_row2 */ OMAP4_IOPAD(0x0054, PIN_INPUT_PULLUP | MUX_MODE1) /* kpd_col0 */ OMAP4_IOPAD(0x0058, PIN_OUTPUT | MUX_MODE1) /* kpd_col1 */ OMAP4_IOPAD(0x005a, PIN_OUTPUT | MUX_MODE1) /* kpd_col2 */ OMAP4_IOPAD(0x005c, PIN_OUTPUT | MUX_MODE1) >; }; lb_v50_pins: pinmux-lb-v50-pins { pinctrl-single,pins = < OMAP4_IOPAD(0x1ce, PIN_OUTPUT | MUX_MODE3) /* gpio27 */ >; }; mcbsp2_pins: pinmux-mcbsp2-pins { pinctrl-single,pins = < OMAP4_IOPAD(0x0f6, PIN_INPUT | MUX_MODE0) /* abe_mcbsp2_clkx */ OMAP4_IOPAD(0x0f8, PIN_INPUT | MUX_MODE0) /* abe_mcbsp2_dr */ OMAP4_IOPAD(0x0fa, PIN_OUTPUT | MUX_MODE0) /* abe_mcbsp2_dx */ OMAP4_IOPAD(0x0fc, PIN_INPUT | MUX_MODE0) /* abe_mcbsp2_fsx */ >; }; mpu9150_pins: pinmux-mpu9150-pins { pinctrl-single,pins = < OMAP4_IOPAD(0x5e, PIN_INPUT_PULLUP | MUX_MODE3) >; }; mpu9150h_pins: pinmux-mpu9150h-pins { pinctrl-single,pins = < OMAP4_IOPAD(0x76, PIN_INPUT_PULLUP | MUX_MODE3) >; }; tlv320aic3x_pins: pinmux-tlv320aic3x-pins { pinctrl-single,pins = < OMAP4_IOPAD(0x7e, PIN_OUTPUT | MUX_MODE3) >; }; uart2_pins: pinmux-uart2-pins { pinctrl-single,pins = < OMAP4_IOPAD(0x118, PIN_INPUT_PULLUP | MUX_MODE0) /* uart2_cts.uart2_cts */ OMAP4_IOPAD(0x11a, PIN_OUTPUT | MUX_MODE0) /* uart2_rts.uart2_rts */ OMAP4_IOPAD(0x11c, PIN_INPUT_PULLUP | MUX_MODE0) /* uart2_rx.uart2_rx */ OMAP4_IOPAD(0x11e, PIN_OUTPUT | MUX_MODE0) /* uart2_tx.uart2_tx */ >; }; uart3_pins: pinmux-uart3-pins { pinctrl-single,pins = < OMAP4_IOPAD(0x144, PIN_INPUT | MUX_MODE0) /* uart3_rx_irrx */ OMAP4_IOPAD(0x146, PIN_OUTPUT | MUX_MODE0) /* uart3_tx_irtx */ >; }; usb_otg_hs_pins: pinmux-usb-otg-hs-pins { pinctrl-single,pins = < OMAP4_IOPAD(0x194, PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* usba0_otg_ce */ OMAP4_IOPAD(0x196, PIN_INPUT | MUX_MODE0) /* usba0_otg_dp */ OMAP4_IOPAD(0x198, PIN_INPUT | MUX_MODE0) /* usba0_otg_dm */ >; }; wl12xx_pins: pinmux-wl12xx-pins { pinctrl-single,pins = < OMAP4_IOPAD(0x1c6, PIN_INPUT | MUX_MODE3) /* gpio_23 / IRQ */ OMAP4_IOPAD(0x16c, PIN_INPUT_PULLUP | MUX_MODE2) /* sdmmc3_dat2 */ OMAP4_IOPAD(0x16e, PIN_INPUT_PULLUP | MUX_MODE2) /* sdmmc3_dat1 */ OMAP4_IOPAD(0x170, PIN_INPUT_PULLUP | MUX_MODE2) /* sdmmc3_dat0 */ OMAP4_IOPAD(0x172, PIN_INPUT_PULLUP | MUX_MODE2) /* sdmmc3_dat3 */ OMAP4_IOPAD(0x174, PIN_INPUT_PULLUP | MUX_MODE2) /* sdmmc3_cmd */ OMAP4_IOPAD(0x176, PIN_INPUT_PULLUP | MUX_MODE2) /* sdmmc3_clk */ >; }; wl12xx_gpio: pinmux-wl12xx-gpio-pins { pinctrl-single,pins = < OMAP4_IOPAD(0x1c8, PIN_OUTPUT | MUX_MODE3) /* gpio_24 / WLAN_EN */ >; }; }; &omap4_pmx_wkup { gpio1wk_hog_pins: pinmux-gpio1wk-hog-pins { pinctrl-single,pins = < OMAP4_IOPAD(0x68, PIN_INPUT_PULLDOWN | MUX_MODE3) /* gpio9 */ OMAP4_IOPAD(0x6a, PIN_INPUT | MUX_MODE3) /* gpio10 */ >; }; }; &uart2 { pinctrl-names = "default"; pinctrl-0 = <&uart2_pins &bt_pins>; interrupts-extended = <&wakeupgen GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH &omap4_pmx_core OMAP4_UART2_RX>; bluetooth-gnss { compatible = "ti,wl1283-st"; enable-gpios = <&gpio1 25 GPIO_ACTIVE_HIGH>; /* GPIO_25 */ clocks = <&twl 1>; clock-names = "ext_clock"; }; }; &uart3 { pinctrl-names = "default"; pinctrl-0 = <&uart3_pins>; interrupts-extended = <&wakeupgen GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH &omap4_pmx_core OMAP4_UART3_RX>; }; &usb_otg_hs { pinctrl-names = "default"; pinctrl-0 = <&usb_otg_hs_pins>; interface-type = <1>; mode = <3>; power = <50>; }; &usbhshost { status = "disabled"; };