The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/device-tree/src/arm/da850-lego-ev3.dts

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 // SPDX-License-Identifier: GPL-2.0-only
    2 /*
    3  * Device tree for LEGO MINDSTORMS EV3
    4  *
    5  * Copyright (C) 2017 David Lechner <david@lechnology.com>
    6  */
    7 
    8 /dts-v1/;
    9 #include <dt-bindings/gpio/gpio.h>
   10 #include <dt-bindings/input/linux-event-codes.h>
   11 #include <dt-bindings/pwm/pwm.h>
   12 
   13 #include "da850.dtsi"
   14 
   15 / {
   16         compatible = "lego,ev3", "ti,da850";
   17         model = "LEGO MINDSTORMS EV3";
   18 
   19         aliases {
   20                 serial1 = &serial1;
   21         };
   22 
   23         memory@c0000000 {
   24                 device_type = "memory";
   25                 reg = <0xc0000000 0x04000000>;
   26         };
   27 
   28         /*
   29          * The buttons on the EV3 are mapped to keyboard keys.
   30          */
   31         gpio_keys {
   32                 compatible = "gpio-keys";
   33                 label = "EV3 Brick Buttons";
   34                 pinctrl-names = "default";
   35                 pinctrl-0 = <&button_bias>;
   36 
   37                 center {
   38                         label = "Center";
   39                         linux,code = <KEY_ENTER>;
   40                         gpios = <&gpio 29 GPIO_ACTIVE_HIGH>;
   41                 };
   42 
   43                 left {
   44                         label = "Left";
   45                         linux,code = <KEY_LEFT>;
   46                         gpios = <&gpio 102 GPIO_ACTIVE_HIGH>;
   47                 };
   48 
   49                 back {
   50                         label = "Back";
   51                         linux,code = <KEY_BACKSPACE>;
   52                         gpios = <&gpio 106 GPIO_ACTIVE_HIGH>;
   53                 };
   54 
   55                 right {
   56                         label = "Right";
   57                         linux,code = <KEY_RIGHT>;
   58                         gpios = <&gpio 124 GPIO_ACTIVE_HIGH>;
   59                 };
   60 
   61                 down {
   62                         label = "Down";
   63                         linux,code = <KEY_DOWN>;
   64                         gpios = <&gpio 126 GPIO_ACTIVE_HIGH>;
   65                 };
   66 
   67                 up {
   68                         label = "Up";
   69                         linux,code = <KEY_UP>;
   70                         gpios = <&gpio 127 GPIO_ACTIVE_HIGH>;
   71                 };
   72         };
   73 
   74         /*
   75          * The EV3 has two built-in bi-color LEDs behind the buttons.
   76          */
   77         leds {
   78                 compatible = "gpio-leds";
   79 
   80                 left_green {
   81                         label = "led0:green:brick-status";
   82                         /* GP6[13] */
   83                         gpios = <&gpio 103 GPIO_ACTIVE_HIGH>;
   84                         linux,default-trigger = "default-on";
   85                 };
   86 
   87                 right_red {
   88                         label = "led1:red:brick-status";
   89                         /* GP6[7] */
   90                         gpios = <&gpio 108 GPIO_ACTIVE_HIGH>;
   91                         linux,default-trigger = "default-on";
   92                 };
   93 
   94                 left_red {
   95                         label = "led0:red:brick-status";
   96                         /* GP6[12] */
   97                         gpios = <&gpio 109 GPIO_ACTIVE_HIGH>;
   98                         linux,default-trigger = "default-on";
   99                 };
  100 
  101                 right_green {
  102                         label = "led1:green:brick-status";
  103                         /* GP6[14] */
  104                         gpios = <&gpio 110 GPIO_ACTIVE_HIGH>;
  105                         linux,default-trigger = "default-on";
  106                 };
  107         };
  108 
  109         /*
  110          * The EV3 is powered down by turning off the main 5V supply.
  111          */
  112         gpio-poweroff {
  113                 compatible = "gpio-poweroff";
  114                 gpios = <&gpio 107 GPIO_ACTIVE_LOW>;
  115         };
  116 
  117         sound {
  118                 compatible = "pwm-beeper";
  119                 pinctrl-names = "default";
  120                 pinctrl-0 = <&ehrpwm0b_pins>;
  121                 pwms = <&ehrpwm0 1 1000000 0>;
  122                 amp-supply = <&amp>;
  123         };
  124 
  125         cvdd: regulator0 {
  126                 compatible = "regulator-fixed";
  127                 regulator-name = "cvdd";
  128                 regulator-min-microvolt = <1200000>;
  129                 regulator-max-microvolt = <1200000>;
  130                 regulator-always-on;
  131                 regulator-boot-on;
  132         };
  133 
  134         /*
  135          * This is a 5V current limiting regulator that is shared by USB,
  136          * the sensor (input) ports, the motor (output) ports and the A/DC.
  137          */
  138         vcc5v: regulator1 {
  139                 compatible = "regulator-fixed";
  140                 regulator-name = "vcc5v";
  141                 regulator-min-microvolt = <5000000>;
  142                 regulator-max-microvolt = <5000000>;
  143                 gpio = <&gpio 101 0>;
  144                 over-current-gpios = <&gpio 99 GPIO_ACTIVE_LOW>;
  145                 enable-active-high;
  146                 regulator-boot-on;
  147         };
  148 
  149         /*
  150          * This is a simple voltage divider on VCC5V to provide a 2.5V
  151          * reference signal to the ADC.
  152          */
  153         adc_ref: regulator2 {
  154                 compatible = "regulator-fixed";
  155                 regulator-name = "adc ref";
  156                 regulator-min-microvolt = <2500000>;
  157                 regulator-max-microvolt = <2500000>;
  158                 regulator-boot-on;
  159                 vin-supply = <&vcc5v>;
  160         };
  161 
  162         /*
  163          * This is the amplifier for the speaker.
  164          */
  165         amp: regulator3 {
  166                 compatible = "regulator-fixed";
  167                 regulator-name = "amp";
  168                 gpio = <&gpio 111 GPIO_ACTIVE_HIGH>;
  169                 enable-active-high;
  170         };
  171 
  172         /*
  173          * The EV3 can use 6-AA batteries or a rechargeable Li-ion battery pack.
  174          */
  175         battery {
  176                 compatible = "lego,ev3-battery";
  177                 io-channels = <&adc 4>, <&adc 3>;
  178                 io-channel-names = "voltage", "current";
  179                 rechargeable-gpios = <&gpio 136 GPIO_ACTIVE_LOW>;
  180         };
  181 
  182         bt_slow_clk: bt-clock {
  183                 pinctrl-names = "default";
  184                 pinctrl-0 = <&ecap2_pins>, <&bt_clock_bias>;
  185                 compatible = "pwm-clock";
  186                 #clock-cells = <0>;
  187                 clock-frequency = <32768>;
  188                 pwms = <&ecap2 0 30518 0>;
  189         };
  190 
  191         /* ARM local RAM */
  192         memory@ffff0000 {
  193                 compatible = "syscon", "simple-mfd";
  194                 reg = <0xffff0000 0x2000>; /* 8k */
  195 
  196                 /*
  197                  * The I2C bootloader looks for this magic value to either
  198                  * boot normally or boot into a firmware update mode.
  199                  */
  200                 reboot-mode {
  201                         compatible = "syscon-reboot-mode";
  202                         offset = <0x1ffc>;
  203                         mode-normal = <0x00000000>;
  204                         mode-loader = <0x5555aaaa>;
  205                 };
  206         };
  207 };
  208 
  209 &ref_clk {
  210         clock-frequency = <24000000>;
  211 };
  212 
  213 &cpu {
  214         cpu-supply = <&cvdd>;
  215 };
  216 
  217 /* since we have a fixed regulator, we can't run at these points */
  218 &opp_100 {
  219         status = "disabled";
  220 };
  221 
  222 &opp_200 {
  223         status = "disabled";
  224 };
  225 
  226 /*
  227  * The SoC is actually the 456MHz version, but because of the fixed regulator
  228  * This is the fastest we can go.
  229  */
  230 &opp_375 {
  231         status = "okay";
  232 };
  233 
  234 &pmx_core {
  235         status = "okay";
  236 
  237         ev3_lcd_pins: pinmux_lcd {
  238                 pinctrl-single,bits = <
  239                         /* SIMO, CLK */
  240                         0x14 0x00100100 0x00f00f00
  241                 >;
  242         };
  243 };
  244 
  245 &pinconf {
  246         status = "okay";
  247 
  248         /* Buttons have external pulldown resistors */
  249         button_bias: button-bias-groups {
  250                 disable {
  251                         groups = "cp5", "cp24", "cp25", "cp28";
  252                         bias-disable;
  253                 };
  254         };
  255 
  256         bt_clock_bias: bt-clock-bias-groups {
  257                 disable {
  258                         groups = "cp2";
  259                         bias-disable;
  260                 };
  261         };
  262 
  263         bt_pic_bias: bt-pic-bias-groups {
  264                 disable {
  265                         groups = "cp20";
  266                         bias-disable;
  267                 };
  268         };
  269 };
  270 
  271 /* Input port 1 */
  272 &serial1 {
  273         status = "okay";
  274         pinctrl-names = "default";
  275         pinctrl-0 = <&serial1_rxtx_pins>;
  276 };
  277 
  278 &serial2 {
  279         pinctrl-names = "default";
  280         pinctrl-0 = <&serial2_rxtx_pins>, <&serial2_rtscts_pins>, <&bt_pic_bias>;
  281         status = "okay";
  282 
  283         bluetooth {
  284                 compatible = "ti,cc2560";
  285                 clocks = <&bt_slow_clk>;
  286                 clock-names = "ext_clock";
  287                 enable-gpios = <&gpio 73 GPIO_ACTIVE_HIGH>;
  288                 max-speed = <2000000>;
  289                 nvmem-cells = <&bdaddr>;
  290                 nvmem-cell-names = "bd-address";
  291         };
  292 };
  293 
  294 &rtc0 {
  295         status = "okay";
  296 };
  297 
  298 &i2c0 {
  299         status = "okay";
  300         clock-frequency = <400000>;
  301         pinctrl-names = "default";
  302         pinctrl-0 = <&i2c0_pins>;
  303 
  304         /*
  305          * EEPROM contains the first stage bootloader, HW ID and Bluetooth MAC.
  306          */
  307         eeprom@50 {
  308                 compatible = "microchip,24c128", "atmel,24c128";
  309                 pagesize = <64>;
  310                 read-only;
  311                 reg = <0x50>;
  312                 #address-cells = <1>;
  313                 #size-cells = <1>;
  314 
  315                 bdaddr: bdaddr@3f06 {
  316                         reg = <0x3f06 0x06>;
  317                 };
  318         };
  319 };
  320 
  321 &wdt {
  322         status = "okay";
  323 };
  324 
  325 &mmc0 {
  326         status = "okay";
  327         max-frequency = <50000000>;
  328         bus-width = <4>;
  329         cd-gpios = <&gpio 94 GPIO_ACTIVE_LOW>;
  330         pinctrl-names = "default";
  331         pinctrl-0 = <&mmc0_pins>;
  332 };
  333 
  334 &spi0 {
  335         status = "okay";
  336         pinctrl-names = "default";
  337         pinctrl-0 = <&spi0_pins>, <&spi0_cs0_pin>, <&spi0_cs3_pin>;
  338 
  339         flash@0 {
  340                 compatible = "n25q128a13", "jedec,spi-nor";
  341                 reg = <0>;
  342                 spi-max-frequency = <50000000>;
  343                 ti,spi-wdelay = <8>;
  344 
  345                 /* Partitions are based on the official firmware from LEGO */
  346                 partitions {
  347                         compatible = "fixed-partitions";
  348                         #address-cells = <1>;
  349                         #size-cells = <1>;
  350 
  351                         partition@0 {
  352                                 label = "U-Boot";
  353                                 reg = <0 0x40000>;
  354                         };
  355 
  356                         partition@40000 {
  357                                 label = "U-Boot Env";
  358                                 reg = <0x40000 0x10000>;
  359                         };
  360 
  361                         partition@50000 {
  362                                 label = "Kernel";
  363                                 reg = <0x50000 0x200000>;
  364                         };
  365 
  366                         partition@250000 {
  367                                 label = "Filesystem";
  368                                 reg = <0x250000 0xa50000>;
  369                         };
  370 
  371                         partition@cb0000 {
  372                                 label = "Storage";
  373                                 reg = <0xcb0000 0x2f0000>;
  374                         };
  375                 };
  376         };
  377 
  378         adc: adc@3 {
  379                 compatible = "ti,ads7957";
  380                 reg = <3>;
  381                 #io-channel-cells = <1>;
  382                 spi-max-frequency = <1000000>;
  383                 ti,spi-wdelay = <63>;
  384                 vref-supply = <&adc_ref>;
  385         };
  386 };
  387 
  388 &spi1 {
  389         status = "okay";
  390         pinctrl-0 = <&ev3_lcd_pins>;
  391         pinctrl-names = "default";
  392         cs-gpios = <&gpio 44 GPIO_ACTIVE_LOW>;
  393 
  394         display@0{
  395                 compatible = "lego,ev3-lcd";
  396                 reg = <0>;
  397                 spi-max-frequency = <10000000>;
  398                 a0-gpios = <&gpio 43 GPIO_ACTIVE_HIGH>;
  399                 reset-gpios = <&gpio 80 GPIO_ACTIVE_HIGH>;
  400         };
  401 };
  402 
  403 &ecap2 {
  404         status = "okay";
  405 };
  406 
  407 &ehrpwm0 {
  408         status = "okay";
  409 };
  410 
  411 &gpio {
  412         status = "okay";
  413 
  414         /* Don't pull down battery voltage adc io channel */
  415         batt_volt_en {
  416                 gpio-hog;
  417                 gpios = <6 GPIO_ACTIVE_HIGH>;
  418                 output-high;
  419         };
  420 
  421         /* Don't impede Bluetooth clock signal */
  422         bt_clock_en {
  423                 gpio-hog;
  424                 gpios = <5 GPIO_ACTIVE_HIGH>;
  425                 input;
  426         };
  427 
  428         /*
  429          * There is a PIC microcontroller for interfacing with an Apple MFi
  430          * chip. This interferes with normal Bluetooth operation, so we need
  431          * to make sure it is turned off. Note: The publicly available
  432          * schematics from LEGO don't show that these pins are connected to
  433          * anything, but they are present in the source code from LEGO.
  434          */
  435 
  436         bt_pic_en {
  437                 gpio-hog;
  438                 gpios = <51 GPIO_ACTIVE_HIGH>;
  439                 output-low;
  440         };
  441 
  442         bt_pic_rst {
  443                 gpio-hog;
  444                 gpios = <78 GPIO_ACTIVE_HIGH>;
  445                 output-high;
  446         };
  447 
  448         bt_pic_cts {
  449                 gpio-hog;
  450                 gpios = <87 GPIO_ACTIVE_HIGH>;
  451                 input;
  452         };
  453 };
  454 
  455 &usb_phy {
  456         status = "okay";
  457 };
  458 
  459 &usb0 {
  460         status = "okay";
  461 };
  462 
  463 &usb1 {
  464         status = "okay";
  465         vbus-supply = <&vcc5v>;
  466 };

Cache object: 268fb7592f93a3798bf61792dedb8618


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.