439 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			439 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
/*
 | 
						|
 * Device tree for LEGO MINDSTORMS EV3
 | 
						|
 *
 | 
						|
 * Copyright (C) 2017 David Lechner <david@lechnology.com>
 | 
						|
 *
 | 
						|
 * 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 <dt-bindings/gpio/gpio.h>
 | 
						|
#include <dt-bindings/input/linux-event-codes.h>
 | 
						|
#include <dt-bindings/pwm/pwm.h>
 | 
						|
 | 
						|
#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";
 | 
						|
		label = "EV3 Brick Buttons";
 | 
						|
		pinctrl-names = "default";
 | 
						|
		pinctrl-0 = <&button_bias>;
 | 
						|
 | 
						|
		center {
 | 
						|
			label = "Center";
 | 
						|
			linux,code = <KEY_ENTER>;
 | 
						|
			gpios = <&gpio 29 GPIO_ACTIVE_HIGH>;
 | 
						|
		};
 | 
						|
 | 
						|
		left {
 | 
						|
			label = "Left";
 | 
						|
			linux,code = <KEY_LEFT>;
 | 
						|
			gpios = <&gpio 102 GPIO_ACTIVE_HIGH>;
 | 
						|
		};
 | 
						|
 | 
						|
		back {
 | 
						|
			label = "Back";
 | 
						|
			linux,code = <KEY_BACKSPACE>;
 | 
						|
			gpios = <&gpio 106 GPIO_ACTIVE_HIGH>;
 | 
						|
		};
 | 
						|
 | 
						|
		right {
 | 
						|
			label = "Right";
 | 
						|
			linux,code = <KEY_RIGHT>;
 | 
						|
			gpios = <&gpio 124 GPIO_ACTIVE_HIGH>;
 | 
						|
		};
 | 
						|
 | 
						|
		down {
 | 
						|
			label = "Down";
 | 
						|
			linux,code = <KEY_DOWN>;
 | 
						|
			gpios = <&gpio 126 GPIO_ACTIVE_HIGH>;
 | 
						|
		};
 | 
						|
 | 
						|
		up {
 | 
						|
			label = "Up";
 | 
						|
			linux,code = <KEY_UP>;
 | 
						|
			gpios = <&gpio 127 GPIO_ACTIVE_HIGH>;
 | 
						|
		};
 | 
						|
	};
 | 
						|
 | 
						|
	/*
 | 
						|
	 * The EV3 has two built-in bi-color LEDs behind the buttons.
 | 
						|
	 */
 | 
						|
	leds {
 | 
						|
		compatible = "gpio-leds";
 | 
						|
 | 
						|
		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>;
 | 
						|
	};
 | 
						|
 | 
						|
	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 {
 | 
						|
		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 {
 | 
						|
		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 {
 | 
						|
		compatible = "lego,ev3-battery";
 | 
						|
		io-channels = <&adc 4>, <&adc 3>;
 | 
						|
		io-channel-names = "voltage", "current";
 | 
						|
		rechargeable-gpios = <&gpio 136 GPIO_ACTIVE_LOW>;
 | 
						|
	};
 | 
						|
 | 
						|
	bt_slow_clk: bt-clock {
 | 
						|
		pinctrl-names = "default";
 | 
						|
		pinctrl-0 = <&ecap2_pins>, <&bt_clock_bias>;
 | 
						|
		compatible = "pwm-clock";
 | 
						|
		#clock-cells = <0>;
 | 
						|
		clock-frequency = <32768>;
 | 
						|
		pwms = <&ecap2 0 30518 0>;
 | 
						|
	};
 | 
						|
 | 
						|
	/* ARM local RAM */
 | 
						|
	memory@ffff0000 {
 | 
						|
		compatible = "syscon", "simple-mfd";
 | 
						|
		reg = <0xffff0000 0x2000>; /* 8k */
 | 
						|
 | 
						|
		/*
 | 
						|
		 * The I2C bootloader looks for this magic value to either
 | 
						|
		 * boot normally or boot into a firmware update mode.
 | 
						|
		 */
 | 
						|
		reboot-mode {
 | 
						|
			compatible = "syscon-reboot-mode";
 | 
						|
			offset = <0x1ffc>;
 | 
						|
			mode-normal = <0x00000000>;
 | 
						|
			mode-loader = <0x5555aaaa>;
 | 
						|
		};
 | 
						|
	};
 | 
						|
};
 | 
						|
 | 
						|
&ref_clk {
 | 
						|
	clock-frequency = <24000000>;
 | 
						|
};
 | 
						|
 | 
						|
&pmx_core {
 | 
						|
	status = "okay";
 | 
						|
 | 
						|
	ev3_lcd_pins: pinmux_lcd {
 | 
						|
		pinctrl-single,bits = <
 | 
						|
			/* SIMO, CLK */
 | 
						|
			0x14 0x00100100 0x00f00f00
 | 
						|
		>;
 | 
						|
	};
 | 
						|
};
 | 
						|
 | 
						|
&pinconf {
 | 
						|
	status = "okay";
 | 
						|
 | 
						|
	/* Buttons have external pulldown resistors */
 | 
						|
	button_bias: button-bias-groups {
 | 
						|
		disable {
 | 
						|
			groups = "cp5", "cp24", "cp25", "cp28";
 | 
						|
			bias-disable;
 | 
						|
		};
 | 
						|
	};
 | 
						|
 | 
						|
	bt_clock_bias: bt-clock-bias-groups {
 | 
						|
		disable {
 | 
						|
			groups = "cp2";
 | 
						|
			bias-disable;
 | 
						|
		};
 | 
						|
	};
 | 
						|
 | 
						|
	bt_pic_bias: bt-pic-bias-groups {
 | 
						|
		disable {
 | 
						|
			groups = "cp20";
 | 
						|
			bias-disable;
 | 
						|
		};
 | 
						|
	};
 | 
						|
};
 | 
						|
 | 
						|
/* Input port 1 */
 | 
						|
&serial1 {
 | 
						|
	status = "okay";
 | 
						|
	pinctrl-names = "default";
 | 
						|
	pinctrl-0 = <&serial1_rxtx_pins>;
 | 
						|
};
 | 
						|
 | 
						|
&serial2 {
 | 
						|
	pinctrl-names = "default";
 | 
						|
	pinctrl-0 = <&serial2_rxtx_pins>, <&serial2_rtscts_pins>, <&bt_pic_bias>;
 | 
						|
	status = "okay";
 | 
						|
 | 
						|
	bluetooth {
 | 
						|
		compatible = "ti,cc2560";
 | 
						|
		clocks = <&bt_slow_clk>;
 | 
						|
		clock-names = "ext_clock";
 | 
						|
		enable-gpios = <&gpio 73 GPIO_ACTIVE_HIGH>;
 | 
						|
		max-speed = <2000000>;
 | 
						|
		nvmem-cells = <&bdaddr>;
 | 
						|
		nvmem-cell-names = "bd-address";
 | 
						|
	};
 | 
						|
};
 | 
						|
 | 
						|
&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", "atmel,24c128";
 | 
						|
		pagesize = <64>;
 | 
						|
		read-only;
 | 
						|
		reg = <0x50>;
 | 
						|
		#address-cells = <1>;
 | 
						|
		#size-cells = <1>;
 | 
						|
 | 
						|
		bdaddr: bdaddr@3f06 {
 | 
						|
			reg = <0x3f06 0x06>;
 | 
						|
		};
 | 
						|
	};
 | 
						|
};
 | 
						|
 | 
						|
&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>;
 | 
						|
};
 | 
						|
 | 
						|
&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>;
 | 
						|
	};
 | 
						|
};
 | 
						|
 | 
						|
&ecap2 {
 | 
						|
	status = "okay";
 | 
						|
};
 | 
						|
 | 
						|
&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;
 | 
						|
	};
 | 
						|
 | 
						|
	/* Don't impede Bluetooth clock signal */
 | 
						|
	bt_clock_en {
 | 
						|
		gpio-hog;
 | 
						|
		gpios = <5 GPIO_ACTIVE_HIGH>;
 | 
						|
		input;
 | 
						|
	};
 | 
						|
 | 
						|
	/*
 | 
						|
	 * There is a PIC microcontroller for interfacing with an Apple MFi
 | 
						|
	 * chip. This interferes with normal Bluetooth operation, so we need
 | 
						|
	 * to make sure it is turned off. Note: The publicly available
 | 
						|
	 * schematics from LEGO don't show that these pins are connected to
 | 
						|
	 * anything, but they are present in the source code from LEGO.
 | 
						|
	 */
 | 
						|
 | 
						|
	bt_pic_en {
 | 
						|
		gpio-hog;
 | 
						|
		gpios = <51 GPIO_ACTIVE_HIGH>;
 | 
						|
		output-low;
 | 
						|
	};
 | 
						|
 | 
						|
	bt_pic_rst {
 | 
						|
		gpio-hog;
 | 
						|
		gpios = <78 GPIO_ACTIVE_HIGH>;
 | 
						|
		output-high;
 | 
						|
	};
 | 
						|
 | 
						|
	bt_pic_cts {
 | 
						|
		gpio-hog;
 | 
						|
		gpios = <87 GPIO_ACTIVE_HIGH>;
 | 
						|
		input;
 | 
						|
	};
 | 
						|
};
 | 
						|
 | 
						|
&usb_phy {
 | 
						|
	status = "okay";
 | 
						|
};
 | 
						|
 | 
						|
&usb0 {
 | 
						|
	status = "okay";
 | 
						|
};
 | 
						|
 | 
						|
&usb1 {
 | 
						|
	status = "okay";
 | 
						|
	vbus-supply = <&vcc5v>;
 | 
						|
};
 |