/* * Device tree for LEGO MINDSTORMS EV3 * * Copyright (C) 2017 David Lechner * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, version 2. */ /dts-v1/; #include #include #include #include "da850.dtsi" / { compatible = "lego,ev3", "ti,da850"; model = "LEGO MINDSTORMS EV3"; aliases { serial1 = &serial1; }; memory@c0000000 { device_type = "memory"; reg = <0xc0000000 0x04000000>; }; /* * The buttons on the EV3 are mapped to keyboard keys. */ gpio_keys { compatible = "gpio-keys"; #address-cells = <1>; #size-cells = <0>; label = "EV3 Brick Buttons"; pinctrl-names = "default"; pinctrl-0 = <&button_pins>, <&button_bias>; center { label = "Center"; linux,code = ; gpios = <&gpio 29 GPIO_ACTIVE_HIGH>; }; left { label = "Left"; linux,code = ; gpios = <&gpio 102 GPIO_ACTIVE_HIGH>; }; back { label = "Back"; linux,code = ; gpios = <&gpio 106 GPIO_ACTIVE_HIGH>; }; right { label = "Right"; linux,code = ; gpios = <&gpio 124 GPIO_ACTIVE_HIGH>; }; down { label = "Down"; linux,code = ; gpios = <&gpio 126 GPIO_ACTIVE_HIGH>; }; up { label = "Up"; linux,code = ; gpios = <&gpio 127 GPIO_ACTIVE_HIGH>; }; }; /* * The EV3 has two built-in bi-color LEDs behind the buttons. */ leds { compatible = "gpio-leds"; pinctrl-names = "default"; pinctrl-0 = <&led_pins>; left_green { label = "led0:green:brick-status"; /* GP6[13] */ gpios = <&gpio 103 GPIO_ACTIVE_HIGH>; linux,default-trigger = "default-on"; }; right_red { label = "led1:red:brick-status"; /* GP6[7] */ gpios = <&gpio 108 GPIO_ACTIVE_HIGH>; linux,default-trigger = "default-on"; }; left_red { label = "led0:red:brick-status"; /* GP6[12] */ gpios = <&gpio 109 GPIO_ACTIVE_HIGH>; linux,default-trigger = "default-on"; }; right_green { label = "led1:green:brick-status"; /* GP6[14] */ gpios = <&gpio 110 GPIO_ACTIVE_HIGH>; linux,default-trigger = "default-on"; }; }; /* * The EV3 is powered down by turning off the main 5V supply. */ gpio-poweroff { compatible = "gpio-poweroff"; gpios = <&gpio 107 GPIO_ACTIVE_LOW>; pinctrl-names = "default"; pinctrl-0 = <&system_power_pin>; }; sound { compatible = "pwm-beeper"; pinctrl-names = "default"; pinctrl-0 = <&ehrpwm0b_pins>; pwms = <&ehrpwm0 1 1000000 0>; amp-supply = <&>; }; /* * This is a 5V current limiting regulator that is shared by USB, * the sensor (input) ports, the motor (output) ports and the A/DC. */ vcc5v: regulator1 { pinctrl-names = "default"; pinctrl-0 = <&vcc5v_pins>; compatible = "regulator-fixed"; regulator-name = "vcc5v"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; gpio = <&gpio 101 0>; over-current-gpios = <&gpio 99 GPIO_ACTIVE_LOW>; enable-active-high; regulator-boot-on; }; /* * This is a simple voltage divider on VCC5V to provide a 2.5V * reference signal to the ADC. */ adc_ref: regulator2 { compatible = "regulator-fixed"; regulator-name = "adc ref"; regulator-min-microvolt = <2500000>; regulator-max-microvolt = <2500000>; regulator-boot-on; vin-supply = <&vcc5v>; }; /* * This is the amplifier for the speaker. */ amp: regulator3 { pinctrl-names = "default"; pinctrl-0 = <&_pins>; compatible = "regulator-fixed"; regulator-name = "amp"; gpio = <&gpio 111 GPIO_ACTIVE_HIGH>; enable-active-high; }; /* * The EV3 can use 6-AA batteries or a rechargeable Li-ion battery pack. */ battery { pinctrl-names = "default"; pinctrl-0 = <&battery_pins>; compatible = "lego,ev3-battery"; io-channels = <&adc 4>, <&adc 3>; io-channel-names = "voltage", "current"; rechargeable-gpios = <&gpio 136 GPIO_ACTIVE_LOW>; }; }; &pmx_core { status = "okay"; mmc0_cd_pin: pinmux_mmc0_cd { pinctrl-single,bits = < /* GP5[14] */ 0x2C 0x00000080 0x000000f0 >; }; button_pins: pinmux_button_pins { pinctrl-single,bits = < /* GP1[13] */ 0x8 0x00000800 0x00000f00 /* GP6[10] */ 0x34 0x00800000 0x00f00000 /* GP6[6] */ 0x38 0x00000080 0x000000f0 /* GP7[12], GP7[14], GP7[15] */ 0x40 0x00808800 0x00f0ff00 >; }; led_pins: pinmux_led_pins { pinctrl-single,bits = < /* GP6[12], GP6[13], GP6[14] */ 0x34 0x00008880 0x0000fff0 /* GP6[7] */ 0x38 0x00000008 0x0000000f >; }; system_power_pin: pinmux_system_power { pinctrl-single,bits = < /* GP6[11] */ 0x34 0x00080000 0x000f0000 >; }; vcc5v_pins: pinmux_vcc5v { pinctrl-single,bits = < /* GP6[5] */ 0x40 0x00000080 0x000000f0 /* GP6[3] */ 0x4c 0x00008000 0x0000f000 >; }; amp_pins: pinmux_amp_pins { pinctrl-single,bits = < /* GP6[15] */ 0x34 0x00000008 0x0000000f >; }; battery_pins: pinmux_battery_pins { pinctrl-single,bits = < /* GP0[6] */ 0x04 0x00000080 0x000000f0 /* GP8[8] */ 0x4c 0x00000080 0x000000f0 >; }; ev3_lcd_pins: pinmux_lcd { pinctrl-single,bits = < /* SIMO, GP2[11], GP2[12], CLK */ 0x14 0x00188100 0x00ffff00 /* GP5[0] */ 0x30 0x80000000 0xf0000000 >; }; }; &pinconf { status = "okay"; /* Buttons have external pulldown resistors */ button_bias: button-bias-groups { disable { groups = "cp5", "cp24", "cp25", "cp28"; bias-disable; }; }; }; /* Input port 1 */ &serial1 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&serial1_rxtx_pins>; }; &rtc0 { status = "okay"; }; &i2c0 { status = "okay"; clock-frequency = <400000>; pinctrl-names = "default"; pinctrl-0 = <&i2c0_pins>; /* * EEPROM contains the first stage bootloader, HW ID and Bluetooth MAC. */ eeprom@50 { compatible = "microchip,24c128"; pagesize = <64>; read-only; reg = <0x50>; }; }; &wdt { status = "okay"; }; &mmc0 { status = "okay"; max-frequency = <50000000>; bus-width = <4>; cd-gpios = <&gpio 94 GPIO_ACTIVE_LOW>; pinctrl-names = "default"; pinctrl-0 = <&mmc0_pins>, <&mmc0_cd_pin>; }; &spi0 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&spi0_pins>, <&spi0_cs0_pin>, <&spi0_cs3_pin>; flash@0 { compatible = "n25q128a13", "jedec,spi-nor"; reg = <0>; spi-max-frequency = <50000000>; ti,spi-wdelay = <8>; /* Partitions are based on the official firmware from LEGO */ partitions { compatible = "fixed-partitions"; #address-cells = <1>; #size-cells = <1>; partition@0 { label = "U-Boot"; reg = <0 0x40000>; }; partition@40000 { label = "U-Boot Env"; reg = <0x40000 0x10000>; }; partition@50000 { label = "Kernel"; reg = <0x50000 0x200000>; }; partition@250000 { label = "Filesystem"; reg = <0x250000 0xa50000>; }; partition@cb0000 { label = "Storage"; reg = <0xcb0000 0x2f0000>; }; }; }; adc: adc@3 { compatible = "ti,ads7957"; reg = <3>; #io-channel-cells = <1>; spi-max-frequency = <10000000>; vref-supply = <&adc_ref>; }; }; &spi1 { status = "okay"; pinctrl-0 = <&ev3_lcd_pins>; pinctrl-names = "default"; cs-gpios = <&gpio 44 GPIO_ACTIVE_LOW>; display@0{ compatible = "lego,ev3-lcd"; reg = <0>; spi-max-frequency = <10000000>; a0-gpios = <&gpio 43 GPIO_ACTIVE_HIGH>; reset-gpios = <&gpio 80 GPIO_ACTIVE_HIGH>; }; }; &ehrpwm0 { status = "okay"; }; &gpio { status = "okay"; /* Don't pull down battery voltage adc io channel */ batt_volt_en { gpio-hog; gpios = <6 GPIO_ACTIVE_HIGH>; output-high; }; }; &usb_phy { status = "okay"; }; &usb0 { status = "okay"; }; &usb1 { status = "okay"; vbus-supply = <&vcc5v>; };