am335x 设备树解析

am335x-evmsk.dts解析

1、节点名称 是一个“<名称>[@<设备地址>]”形式的名字,[]中的名字不是必需的。如果节点描述的设备有一个地址就应该加上单元地址,并且该地址在reg属性中列出。同级节点的名称必须是唯一的,但只要地址不同多个节点也可以使用一样的名称。
例如:memory@80000000
vbat: fixedregulator0 节点前的冒号之前的是标签,只出现在DTS文件中,而不会出现在DTB文件里。而靠近大括号的字符串为目录名
2、系统中每个设备都表示为一个设备树节点,并且它一定要有compatible属性,因为这将作为驱动和设备(设备节点)的匹配依据。
3、compatible属性决定了系统使用哪个驱动来和设备绑定。他是一个字符串列表,格式为"<制造商>,<型号>",其余字符串则表示为其他与之兼容的设备。
例如:compatible = “ti,am335x-evmsk”, “ti,am33xx”;

本文以am335x开发板的设备树为例进行解析,参考了程昌南老师的《ARM Linux入门与实践一书》,在此表示感谢。设备树源文件在目录 arch/arm/boot/dts/am335x-evmsk.dts
 

#include "am33xx.dtsi"        /* 包含am33xx系列处理器公用的部分 */
#include <dt-bindings/pwm/pwm.h>
#include <dt-bindings/interrupt-controller/irq.h>

/ {                            /* 跟节点 */
    model = "TI AM335x EVM-SK";                        /* 板级名称 */
    compatible = "ti,am335x-evmsk", "ti,am33xx";    /* Linux通过根节点下的 compatible 属性即可判断它启动的是什么机器,此处定义为TI的am335x-evmsk,兼容TI的am33xx系列 */

    cpus {                                    /* 描述CPU的个数和类别,该板为单核,只有一个CPU */
        cpu@0 {                                /* CPU0 */
            cpu0-supply = <&vdd1_reg>;        /* 指定了CPU的供电电源,vdd1_reg会在下面单独定义 */
        };
    };

    memory@80000000 {                        /* 定义了内存的地址和大小 节点名称,形式是: <名称>[@<设备地址>] */
        device_type = "memory";                /* device_type属性用来表示设备类型,用字符串表示 */
        reg = <0x80000000 0x10000000>;         /* 基地址=0x80000000,大小=0x10000000=256MB */
    };

    chosen {
        stdout-path = &uart0;                /* 指定标准输入输出设备,使用串口0作为输出,串口0在下面有定义 */
    };

    vbat: fixedregulator0 {                    /* 固定电压调节器0,输入电源vbat。参考板子原理图VBAT为外部输入电源给电源管理芯片TPS65910A3供电 */
        compatible = "regulator-fixed";        /* compatible属性是用来匹配驱动的,类型是字符串数组,每个字符串表示一种设备的类型 */
        regulator-name = "vbat";            /* 名称 */
        regulator-min-microvolt = <5000000>;/* 固定电压值5V */
        regulator-max-microvolt = <5000000>;
        regulator-boot-on;                    /* 默认上电boot就打开ON */
    };

    lis3_reg: fixedregulator1 {                /* 固定电压调节器1,加速度计LIS331DLH供电电源 */
        compatible = "regulator-fixed";        /* 节点前的冒号之前的是标签,只出现在DTS文件中,而不会出现在DTB文件里。而靠近大括号的字符串为目录名 */
        regulator-name = "lis3_reg";
        regulator-boot-on;
    };

    wl12xx_vmmc: fixedregulator2 {            /* 固定电压调节器2,wl12xx_vmmc */
        pinctrl-names = "default";            /* pinctrl-names属性,有default、sleep、idle和init */
        pinctrl-0 = <&wl12xx_gpio>;            /* GPIO引脚复用 */
        compatible = "regulator-fixed";        /* 匹配的驱动 */
        regulator-name = "vwl1271";
        regulator-min-microvolt = <1800000>;/* 固定电压1.8V */
        regulator-max-microvolt = <1800000>;
        gpio = <&gpio1 29 0>;                /* GPIO1_29 最后一个1表示低电平有效,0表示高电平有效 */
        startup-delay-us = <70000>;
        enable-active-high;                    /* 高电平有效 */
    };

    vtt_fixed: fixedregulator3 {            /* 固定电压调节器3,vtt_fixed */
        compatible = "regulator-fixed";
        regulator-name = "vtt";
        regulator-min-microvolt = <1500000>;/* 固定电压1.5V */
        regulator-max-microvolt = <1500000>;
        gpio = <&gpio0 7 GPIO_ACTIVE_HIGH>;    /* GPIO0_7 */
        regulator-always-on;
        regulator-boot-on;
        enable-active-high;
    };

    leds {
        pinctrl-names = "default";
        pinctrl-0 = <&user_leds_s0>;            /* 引脚复用,对应pinctrl-names中的default */

        compatible = "gpio-leds";                /* 匹配的驱动 */

        led1 {                                    
            label = "evmsk:green:usr0";            /* 用户自定义LED */
            gpios = <&gpio1 4 GPIO_ACTIVE_HIGH>;/* GPIO1_4,高电平有效,查原理图可知 */
            default-state = "off";                /* 默认状态为灭 */
        };

        led2 {
            label = "evmsk:green:usr1";
            gpios = <&gpio1 5 GPIO_ACTIVE_HIGH>;
            default-state = "off";
        };

        led3 {
            label = "evmsk:green:mmc0";            /* mmc0指示灯 */
            gpios = <&gpio1 6 GPIO_ACTIVE_HIGH>;
            linux,default-trigger = "mmc0";
            default-state = "off";
        };

        led4 {
            label = "evmsk:green:heartbeat";    /* 心跳指示灯 */
            gpios = <&gpio1 7 GPIO_ACTIVE_HIGH>;
            linux,default-trigger = "heartbeat";
            default-state = "off";
        };
    };

    gpio_buttons: gpio_buttons0 {
        compatible = "gpio-keys";
        #address-cells = <1>;        /* 用来描述子节点中reg属性中address的多少 */
        #size-cells = <0>;            /* 用来描述子节点中reg属性中地址长度的多少 */

        switch1 {
            label = "button0";
            linux,code = <0x100>;    /* 一个address-cells,首地址为0x100 */
            gpios = <&gpio2 3 GPIO_ACTIVE_HIGH>;
        };

        switch2 {
            label = "button1";
            linux,code = <0x101>;
            gpios = <&gpio2 2 GPIO_ACTIVE_HIGH>;
        };

        switch3 {
            label = "button2";
            linux,code = <0x102>;
            gpios = <&gpio0 30 GPIO_ACTIVE_HIGH>;
            wakeup-source;
        };

        switch4 {
            label = "button3";
            linux,code = <0x103>;
            gpios = <&gpio2 5 GPIO_ACTIVE_HIGH>;
        };
    };

    lcd_bl: backlight {                                        /* lcd背光电源PWM控制输出 */
        compatible = "pwm-backlight";
        pwms = <&ecap2 0 50000 PWM_POLARITY_INVERTED>;        /*  */
        brightness-levels = <0 58 61 66 75 90 125 170 255>;    /* 0-255,共9个level */
        default-brightness-level = <8>;                        /* 默认level */
    };

    sound {        /* 声卡 */
        compatible = "simple-audio-card";
        simple-audio-card,name = "AM335x-EVMSK";
        simple-audio-card,widgets =
            "Headphone", "Headphone Jack";
        simple-audio-card,routing =
            "Headphone Jack",    "HPLOUT",
            "Headphone Jack",    "HPROUT";
        simple-audio-card,format = "dsp_b";
        simple-audio-card,bitclock-master = <&sound_master>;
        simple-audio-card,frame-master = <&sound_master>;
        simple-audio-card,bitclock-inversion;

        simple-audio-card,cpu {
            sound-dai = <&mcasp1>;
        };

        sound_master: simple-audio-card,codec {
            sound-dai = <&tlv320aic3106>;
            system-clock-frequency = <24000000>;
        };
    };

    panel {                                    /* LCD */
        compatible = "ti,tilcdc,panel";        /* 匹配的驱动 */
        pinctrl-names = "default", "sleep";
        pinctrl-0 = <&lcd_pins_default>;    /* 对应pinctrl-names中的default */
        pinctrl-1 = <&lcd_pins_sleep>;        /* 对应pinctrl-names中的sleep   */
        backlight = <&lcd_bl>;                /* 背光电源 */
        status = "okay";
        panel-info {                        /* LCD硬件配置信息 */
            ac-bias        = <255>;            /* 偏置电压,该数代表使用多少个电压参考点来驱动LCD */
            ac-bias-intrpt    = <0>;            /*  */
            dma-burst-sz    = <16>;            /* DMA传输请求时 */
            bpp        = <32>;                    /* 颜色分辨率 */
            fdd        = <0x80>;                /* FIFO DMA Request Delay */
            sync-edge    = <0>;                /* LCD_HSYNC脉冲和LCD_VSYNC脉冲下降沿有效 */
            sync-ctrl    = <1>;                /* 允许配置同步脉冲上升沿还是下降沿有效,即配置sync-edge有效 */
            raster-order    = <0>;            /* 行扫顺序 */
            fifo-th        = <0>;                /* FIFO阈值 */
        };
        display-timings {                    /* LCD时序 */
            480x272 {                        /* LCD分辨率 */
                hactive        = <480>;        /* 水平(行)方向有效像素点数 */
                vactive        = <272>;        /* 垂直(场)方向有效像素点数 */
                hback-porch    = <43>;            /* 水平方向后肩消影时间 */
                hfront-porch    = <8>;        /* 水平方向前肩消影时间 */
                hsync-len    = <4>;            /* 水平同步的长度 */
                vback-porch    = <12>;            /* 垂直方向后肩消影时间 */
                vfront-porch    = <4>;        /* 垂直方向前肩消影时间 */
                vsync-len    = <10>;            /* 垂直同步的长度 */
                clock-frequency = <9000000>;/* 像素时钟频率 */
                hsync-active    = <0>;        /* 水平方向同步的有效像素点 */
                vsync-active    = <0>;        /* 垂直方向同步的有效像素点 */
            };
        };
    };
};            /* 根节点结束 */

&am33xx_pinmux {    /* 引脚复用配置信息 */
    pinctrl-names = "default";
    pinctrl-0 = <&gpio_keys_s0 &clkout2_pin &ddr3_vtt_toggle>;

    ddr3_vtt_toggle: ddr3_vtt_toggle {
        pinctrl-single,pins = <
            0x164 (PIN_OUTPUT | MUX_MODE7)    /* ecap0_in_pwm0_out.gpio0_7 */
        >;
    };    /* 芯片引脚的复用使用pinctrl-single,pins这个驱动。格式是pinctrl-single,pins = <offset, function> */
        /* 内核解析该属性后根据offset和function配置对应的寄存器,为GPIO引脚配置为指定的复用功能 */
        
    lcd_pins_default: lcd_pins_default {    /* 默认状态下,LCD相关的多功能复用引脚的功能设置为LCD */
        pinctrl-single,pins = <
            AM33XX_IOPAD(0x820, PIN_OUTPUT | MUX_MODE1)    /* gpmc_ad8.lcd_data23 */
            AM33XX_IOPAD(0x824, PIN_OUTPUT | MUX_MODE1)    /* gpmc_ad9.lcd_data22 */
            AM33XX_IOPAD(0x828, PIN_OUTPUT | MUX_MODE1)    /* gpmc_ad10.lcd_data21 */
            AM33XX_IOPAD(0x82c, PIN_OUTPUT | MUX_MODE1)    /* gpmc_ad11.lcd_data20 */
            AM33XX_IOPAD(0x830, PIN_OUTPUT | MUX_MODE1)    /* gpmc_ad12.lcd_data19 */
            AM33XX_IOPAD(0x834, PIN_OUTPUT | MUX_MODE1)    /* gpmc_ad13.lcd_data18 */
            AM33XX_IOPAD(0x838, PIN_OUTPUT | MUX_MODE1)    /* gpmc_ad14.lcd_data17 */
            AM33XX_IOPAD(0x83c, PIN_OUTPUT | MUX_MODE1)    /* gpmc_ad15.lcd_data16 */
            AM33XX_IOPAD(0x8a0, PIN_OUTPUT | MUX_MODE0)    /* lcd_data0.lcd_data0 */
            AM33XX_IOPAD(0x8a4, PIN_OUTPUT | MUX_MODE0)    /* lcd_data1.lcd_data1 */
            AM33XX_IOPAD(0x8a8, PIN_OUTPUT | MUX_MODE0)    /* lcd_data2.lcd_data2 */
            AM33XX_IOPAD(0x8ac, PIN_OUTPUT | MUX_MODE0)    /* lcd_data3.lcd_data3 */
            AM33XX_IOPAD(0x8b0, PIN_OUTPUT | MUX_MODE0)    /* lcd_data4.lcd_data4 */
            AM33XX_IOPAD(0x8b4, PIN_OUTPUT | MUX_MODE0)    /* lcd_data5.lcd_data5 */
            AM33XX_IOPAD(0x8b8, PIN_OUTPUT | MUX_MODE0)    /* lcd_data6.lcd_data6 */
            AM33XX_IOPAD(0x8bc, PIN_OUTPUT | MUX_MODE0)    /* lcd_data7.lcd_data7 */
            AM33XX_IOPAD(0x8c0, PIN_OUTPUT | MUX_MODE0)    /* lcd_data8.lcd_data8 */
            AM33XX_IOPAD(0x8c4, PIN_OUTPUT | MUX_MODE0)    /* lcd_data9.lcd_data9 */
            AM33XX_IOPAD(0x8c8, PIN_OUTPUT | MUX_MODE0)    /* lcd_data10.lcd_data10 */
            AM33XX_IOPAD(0x8cc, PIN_OUTPUT | MUX_MODE0)    /* lcd_data11.lcd_data11 */
            AM33XX_IOPAD(0x8d0, PIN_OUTPUT | MUX_MODE0)    /* lcd_data12.lcd_data12 */
            AM33XX_IOPAD(0x8d4, PIN_OUTPUT | MUX_MODE0)    /* lcd_data13.lcd_data13 */
            AM33XX_IOPAD(0x8d8, PIN_OUTPUT | MUX_MODE0)    /* lcd_data14.lcd_data14 */
            AM33XX_IOPAD(0x8dc, PIN_OUTPUT | MUX_MODE0)    /* lcd_data15.lcd_data15 */
            AM33XX_IOPAD(0x8e0, PIN_OUTPUT | MUX_MODE0)    /* lcd_vsync.lcd_vsync */
            AM33XX_IOPAD(0x8e4, PIN_OUTPUT | MUX_MODE0)    /* lcd_hsync.lcd_hsync */
            AM33XX_IOPAD(0x8e8, PIN_OUTPUT | MUX_MODE0)    /* lcd_pclk.lcd_pclk */
            AM33XX_IOPAD(0x8ec, PIN_OUTPUT | MUX_MODE0)    /* lcd_ac_bias_en.lcd_ac_bias_en */
        >;
    };

    lcd_pins_sleep: lcd_pins_sleep {    /* 待机休眠下,LCD相关的多功能复用引脚的功能设置为GPIO输入 */
        pinctrl-single,pins = <
            AM33XX_IOPAD(0x820, PIN_INPUT_PULLDOWN | MUX_MODE7)    /* gpmc_ad8.lcd_data23   */
            AM33XX_IOPAD(0x824, PIN_INPUT_PULLDOWN | MUX_MODE7)    /* gpmc_ad9.lcd_data22   */
            AM33XX_IOPAD(0x828, PIN_INPUT_PULLDOWN | MUX_MODE7)    /* gpmc_ad10.lcd_data21  */
            AM33XX_IOPAD(0x82c, PIN_INPUT_PULLDOWN | MUX_MODE7)    /* gpmc_ad11.lcd_data20  */
            AM33XX_IOPAD(0x830, PIN_INPUT_PULLDOWN | MUX_MODE7)    /* gpmc_ad12.lcd_data19  */
            AM33XX_IOPAD(0x834, PIN_INPUT_PULLDOWN | MUX_MODE7)    /* gpmc_ad13.lcd_data18  */
            AM33XX_IOPAD(0x838, PIN_INPUT_PULLDOWN | MUX_MODE7)    /* gpmc_ad14.lcd_data17  */
            AM33XX_IOPAD(0x83c, PIN_INPUT_PULLDOWN | MUX_MODE7)    /* gpmc_ad15.lcd_data16  */
            AM33XX_IOPAD(0x8a0, PULL_DISABLE | MUX_MODE7)        /* lcd_data0.lcd_data0   */
            AM33XX_IOPAD(0x8a4, PULL_DISABLE | MUX_MODE7)        /* lcd_data1.lcd_data1   */
            AM33XX_IOPAD(0x8a8, PULL_DISABLE | MUX_MODE7)        /* lcd_data2.lcd_data2   */
            AM33XX_IOPAD(0x8ac, PULL_DISABLE | MUX_MODE7)        /* lcd_data3.lcd_data3   */
            AM33XX_IOPAD(0x8b0, PULL_DISABLE | MUX_MODE7)        /* lcd_data4.lcd_data4   */
            AM33XX_IOPAD(0x8b4, PULL_DISABLE | MUX_MODE7)        /* lcd_data5.lcd_data5   */
            AM33XX_IOPAD(0x8b8, PULL_DISABLE | MUX_MODE7)        /* lcd_data6.lcd_data6   */
            AM33XX_IOPAD(0x8bc, PULL_DISABLE | MUX_MODE7)        /* lcd_data7.lcd_data7   */
            AM33XX_IOPAD(0x8c0, PULL_DISABLE | MUX_MODE7)        /* lcd_data8.lcd_data8   */
            AM33XX_IOPAD(0x8c4, PULL_DISABLE | MUX_MODE7)        /* lcd_data9.lcd_data9   */
            AM33XX_IOPAD(0x8c8, PULL_DISABLE | MUX_MODE7)        /* lcd_data10.lcd_data10 */
            AM33XX_IOPAD(0x8cc, PULL_DISABLE | MUX_MODE7)        /* lcd_data11.lcd_data11 */
            AM33XX_IOPAD(0x8d0, PULL_DISABLE | MUX_MODE7)        /* lcd_data12.lcd_data12 */
            AM33XX_IOPAD(0x8d4, PULL_DISABLE | MUX_MODE7)        /* lcd_data13.lcd_data13 */
            AM33XX_IOPAD(0x8d8, PULL_DISABLE | MUX_MODE7)        /* lcd_data14.lcd_data14 */
            AM33XX_IOPAD(0x8dc, PULL_DISABLE | MUX_MODE7)        /* lcd_data15.lcd_data15 */
            AM33XX_IOPAD(0x8e0, PIN_INPUT_PULLDOWN | MUX_MODE7)    /* lcd_vsync.lcd_vsync      */
            AM33XX_IOPAD(0x8e4, PIN_INPUT_PULLDOWN | MUX_MODE7)    /* lcd_hsync.lcd_hsync   */
            AM33XX_IOPAD(0x8e8, PIN_INPUT_PULLDOWN | MUX_MODE7)    /* lcd_pclk.lcd_pclk     */
            AM33XX_IOPAD(0x8ec, PIN_INPUT_PULLDOWN | MUX_MODE7)    /* lcd_ac_bias_en.lcd_ac_bias_en */
        >;
    };


    user_leds_s0: user_leds_s0 {    /* 默认LED引脚配置成GPIO输出且上拉 */
        pinctrl-single,pins = <
            AM33XX_IOPAD(0x810, PIN_OUTPUT_PULLDOWN | MUX_MODE7)/* gpmc_ad4.gpio1_4 */
            AM33XX_IOPAD(0x814, PIN_OUTPUT_PULLDOWN | MUX_MODE7)/* gpmc_ad5.gpio1_5 */
            AM33XX_IOPAD(0x818, PIN_OUTPUT_PULLDOWN | MUX_MODE7)/* gpmc_ad6.gpio1_6 */
            AM33XX_IOPAD(0x81c, PIN_OUTPUT_PULLDOWN | MUX_MODE7)/* gpmc_ad7.gpio1_7 */
        >;
    };

    gpio_keys_s0: gpio_keys_s0 {    /* 默认按键引脚配置为输入 */
        pinctrl-single,pins = <
            AM33XX_IOPAD(0x894, PIN_INPUT_PULLDOWN | MUX_MODE7)    /* gpmc_oen_ren.gpio2_3  */
            AM33XX_IOPAD(0x890, PIN_INPUT_PULLDOWN | MUX_MODE7)    /* gpmc_advn_ale.gpio2_2 */
            AM33XX_IOPAD(0x870, PIN_INPUT_PULLDOWN | MUX_MODE7)    /* gpmc_wait0.gpio0_30   */
            AM33XX_IOPAD(0x89c, PIN_INPUT_PULLDOWN | MUX_MODE7)    /* gpmc_ben0_cle.gpio2_5 */
        >;
    };

    i2c0_pins: pinmux_i2c0_pins {    /* I2c0引脚 */
        pinctrl-single,pins = <
            AM33XX_IOPAD(0x988, PIN_INPUT_PULLUP | MUX_MODE0)    /* i2c0_sda.i2c0_sda */
            AM33XX_IOPAD(0x98c, PIN_INPUT_PULLUP | MUX_MODE0)    /* i2c0_scl.i2c0_scl */
        >;
    };

    uart0_pins: pinmux_uart0_pins {    /* UART0引脚 */
        pinctrl-single,pins = <
            AM33XX_IOPAD(0x970, PIN_INPUT_PULLUP | MUX_MODE0)    /* uart0_rxd.uart0_rxd */
            AM33XX_IOPAD(0x974, PIN_OUTPUT_PULLDOWN | MUX_MODE0)/* uart0_txd.uart0_txd */
        >;
    };

    clkout2_pin: pinmux_clkout2_pin {
        pinctrl-single,pins = <
            AM33XX_IOPAD(0x9b4, PIN_OUTPUT_PULLDOWN | MUX_MODE3)/* xdma_event_intr1.clkout2 */
        >;
    };

    ecap2_pins: backlight_pins {    /* LCD背光电源调节引脚 */
        pinctrl-single,pins = <
            AM33XX_IOPAD(0x99c, MUX_MODE4)    /* mcasp0_ahclkr.ecap2_in_pwm2_out */
        >;
    };

    cpsw_default: cpsw_default {    /* 以太网接口 */
        pinctrl-single,pins = <
            /* Slave 1 */
            AM33XX_IOPAD(0x914, PIN_OUTPUT_PULLDOWN | MUX_MODE2)    /* mii1_txen.rgmii1_tctl  */
            AM33XX_IOPAD(0x918, PIN_INPUT_PULLDOWN  | MUX_MODE2)    /* mii1_rxdv.rgmii1_rctl  */
            AM33XX_IOPAD(0x91c, PIN_OUTPUT_PULLDOWN | MUX_MODE2)    /* mii1_txd3.rgmii1_td3   */
            AM33XX_IOPAD(0x920, PIN_OUTPUT_PULLDOWN | MUX_MODE2)    /* mii1_txd2.rgmii1_td2   */
            AM33XX_IOPAD(0x924, PIN_OUTPUT_PULLDOWN | MUX_MODE2)    /* mii1_txd1.rgmii1_td1   */
            AM33XX_IOPAD(0x928, PIN_OUTPUT_PULLDOWN | MUX_MODE2)    /* mii1_txd0.rgmii1_td0   */
            AM33XX_IOPAD(0x92c, PIN_OUTPUT_PULLDOWN | MUX_MODE2)    /* mii1_txclk.rgmii1_tclk */
            AM33XX_IOPAD(0x930, PIN_INPUT_PULLDOWN  | MUX_MODE2)    /* mii1_rxclk.rgmii1_rclk */
            AM33XX_IOPAD(0x934, PIN_INPUT_PULLDOWN  | MUX_MODE2)    /* mii1_rxd3.rgmii1_rd3   */
            AM33XX_IOPAD(0x938, PIN_INPUT_PULLDOWN  | MUX_MODE2)    /* mii1_rxd2.rgmii1_rd2   */
            AM33XX_IOPAD(0x93c, PIN_INPUT_PULLDOWN  | MUX_MODE2)    /* mii1_rxd1.rgmii1_rd1   */
            AM33XX_IOPAD(0x940, PIN_INPUT_PULLDOWN  | MUX_MODE2)    /* mii1_rxd0.rgmii1_rd0   */

            /* Slave 2 */
            AM33XX_IOPAD(0x840, PIN_OUTPUT_PULLDOWN | MUX_MODE2)    /* gpmc_a0.rgmii2_tctl */
            AM33XX_IOPAD(0x844, PIN_INPUT_PULLDOWN  | MUX_MODE2)    /* gpmc_a1.rgmii2_rctl */
            AM33XX_IOPAD(0x848, PIN_OUTPUT_PULLDOWN | MUX_MODE2)    /* gpmc_a2.rgmii2_td3  */
            AM33XX_IOPAD(0x84c, PIN_OUTPUT_PULLDOWN | MUX_MODE2)    /* gpmc_a3.rgmii2_td2  */
            AM33XX_IOPAD(0x850, PIN_OUTPUT_PULLDOWN | MUX_MODE2)    /* gpmc_a4.rgmii2_td1  */
            AM33XX_IOPAD(0x854, PIN_OUTPUT_PULLDOWN | MUX_MODE2)    /* gpmc_a5.rgmii2_td0  */
            AM33XX_IOPAD(0x858, PIN_OUTPUT_PULLDOWN | MUX_MODE2)    /* gpmc_a6.rgmii2_tclk */
            AM33XX_IOPAD(0x85c, PIN_INPUT_PULLDOWN  | MUX_MODE2)    /* gpmc_a7.rgmii2_rclk */
            AM33XX_IOPAD(0x860, PIN_INPUT_PULLDOWN  | MUX_MODE2)    /* gpmc_a8.rgmii2_rd3  */
            AM33XX_IOPAD(0x864, PIN_INPUT_PULLDOWN  | MUX_MODE2)    /* gpmc_a9.rgmii2_rd2  */
            AM33XX_IOPAD(0x868, PIN_INPUT_PULLDOWN  | MUX_MODE2)    /* gpmc_a10.rgmii2_rd1 */
            AM33XX_IOPAD(0x86c, PIN_INPUT_PULLDOWN  | MUX_MODE2)    /* gpmc_a11.rgmii2_rd0 */
        >;
    };

    cpsw_sleep: cpsw_sleep {        /* 待机休眠状态下,双千兆以太网接口配制成GPIO输入 */
        pinctrl-single,pins = <
            /* Slave 1 reset value */
            AM33XX_IOPAD(0x914, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x918, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x91c, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x920, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x924, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x928, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x92c, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x930, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x934, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x938, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x93c, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x940, PIN_INPUT_PULLDOWN | MUX_MODE7)

            /* Slave 2 reset value*/
            AM33XX_IOPAD(0x840, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x844, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x848, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x84c, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x850, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x854, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x858, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x85c, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x860, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x864, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x868, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x86c, PIN_INPUT_PULLDOWN | MUX_MODE7)
        >;
    };

    davinci_mdio_default: davinci_mdio_default {
        pinctrl-single,pins = <
            /* MDIO */
            AM33XX_IOPAD(0x948, PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0)/* mdio_data.mdio_data */
            AM33XX_IOPAD(0x94c, PIN_OUTPUT_PULLUP | MUX_MODE0)                 /* mdio_clk.mdio_clk   */
        >;
    };

    davinci_mdio_sleep: davinci_mdio_sleep {
        pinctrl-single,pins = <
            /* MDIO reset value */
            AM33XX_IOPAD(0x948, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x94c, PIN_INPUT_PULLDOWN | MUX_MODE7)
        >;
    };

    mmc1_pins: pinmux_mmc1_pins {    /* MIcroSD写保护检测输入引脚配置 */
        pinctrl-single,pins = <
            AM33XX_IOPAD(0x960, PIN_INPUT | MUX_MODE7)             /* spi0_cs1.gpio0_6    */
            AM33XX_IOPAD(0x8fc, PIN_INPUT_PULLUP | MUX_MODE0)    /* mmc0_dat0.mmc0_dat0 */
            AM33XX_IOPAD(0x8f8, PIN_INPUT_PULLUP | MUX_MODE0)    /* mmc0_dat1.mmc0_dat1 */
            AM33XX_IOPAD(0x8f4, PIN_INPUT_PULLUP | MUX_MODE0)    /* mmc0_dat2.mmc0_dat2 */
            AM33XX_IOPAD(0x8f0, PIN_INPUT_PULLUP | MUX_MODE0)    /* mmc0_dat3.mmc0_dat3 */
            AM33XX_IOPAD(0x904, PIN_INPUT_PULLUP | MUX_MODE0)    /* mmc0_cmd.mmc0_cmd   */
            AM33XX_IOPAD(0x900, PIN_INPUT_PULLUP | MUX_MODE0)    /* mmc0_clk.mmc0_clk   */
            AM33XX_IOPAD(0x9a0, PIN_INPUT | MUX_MODE4)            /* mcasp0_aclkr.mmc0_sdwp */
        >;
    };

    mcasp1_pins: mcasp1_pins {
        pinctrl-single,pins = <
            AM33XX_IOPAD(0x90c, PIN_INPUT_PULLDOWN | MUX_MODE4) /* mii1_crs.mcasp1_aclkx */
            AM33XX_IOPAD(0x910, PIN_INPUT_PULLDOWN | MUX_MODE4) /* mii1_rxerr.mcasp1_fsx */
            AM33XX_IOPAD(0x908, PIN_OUTPUT_PULLDOWN| MUX_MODE4) /* mii1_col.mcasp1_axr2 */
            AM33XX_IOPAD(0x944, PIN_INPUT_PULLDOWN | MUX_MODE4) /* rmii1_ref_clk.mcasp1_axr3 */
        >;
    };

    mcasp1_pins_sleep: mcasp1_pins_sleep {
        pinctrl-single,pins = <
            AM33XX_IOPAD(0x90c, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x910, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x908, PIN_INPUT_PULLDOWN | MUX_MODE7)
            AM33XX_IOPAD(0x944, PIN_INPUT_PULLDOWN | MUX_MODE7)
        >;
    };

    mmc2_pins: pinmux_mmc2_pins {    /* WLAN接口 */
        pinctrl-single,pins = <
            AM33XX_IOPAD(0x874, PIN_INPUT_PULLUP | MUX_MODE7) /* gpmc_wpn.gpio0_31  */
            AM33XX_IOPAD(0x880, PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_csn1.mmc1_clk */
            AM33XX_IOPAD(0x884, PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_csn2.mmc1_cmd */
            AM33XX_IOPAD(0x800, PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad0.mmc1_dat0 */
            AM33XX_IOPAD(0x804, PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad1.mmc1_dat1 */
            AM33XX_IOPAD(0x808, PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad2.mmc1_dat2 */
            AM33XX_IOPAD(0x80c, PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad3.mmc1_dat3 */
        >;
    };

    wl12xx_gpio: pinmux_wl12xx_gpio {    /* WLAN_EN */
        pinctrl-single,pins = <
            AM33XX_IOPAD(0x87c, PIN_OUTPUT_PULLUP | MUX_MODE7) /* gpmc_csn0.gpio1_29 */
        >;
    };
};    /* 引脚复用配置结束 */

&uart0 {
    pinctrl-names = "default";
    pinctrl-0 = <&uart0_pins>;    /* UART0引脚复用配置,指向之前的uart0_pins */

    status = "okay";
};

&i2c0 {
    pinctrl-names = "default";
    pinctrl-0 = <&i2c0_pins>;

    status = "okay";
    clock-frequency = <400000>;    /* I2C0时钟频率 */

    tps: tps@2d {                /* 电源管理芯片 TPS65910A3 */
        reg = <0x2d>;            /* TPS65910A3芯片I2C接口器件地址 */
    };
    
    mpu6050: mpu6050@68 {
        compatible = "ti,mpu6050";
        reg = <0x68>;
    };

    mpu6050_1: mpu6050_1@69 {
        compatible = "ti,mpu6050_1";
        reg = <0x69>;
    };

    lis331dlh: lis331dlh@18 {            /* 加速度计 LIS331DLH */
        compatible = "st,lis331dlh", "st,lis3lv02d";
        reg = <0x18>;                    /* LIS331DLH 芯片I2C接口器件地址 */
        Vdd-supply = <&lis3_reg>;        /* 指定了加速度计的供电电源 */
        Vdd_IO-supply = <&lis3_reg>;

        st,click-single-x;
        st,click-single-y;
        st,click-single-z;
        st,click-thresh-x = <10>;
        st,click-thresh-y = <10>;
        st,click-thresh-z = <10>;
        st,irq1-click;
        st,irq2-click;
        st,wakeup-x-lo;
        st,wakeup-x-hi;
        st,wakeup-y-lo;
        st,wakeup-y-hi;
        st,wakeup-z-lo;
        st,wakeup-z-hi;
        st,min-limit-x = <120>;
        st,min-limit-y = <120>;
        st,min-limit-z = <140>;
        st,max-limit-x = <550>;
        st,max-limit-y = <550>;
        st,max-limit-z = <750>;
    };

    tlv320aic3106: tlv320aic3106@1b {    /* 音频编解码器 TLV320AIC3106 */
        #sound-dai-cells = <0>;
        compatible = "ti,tlv320aic3106";/* 音频驱动 */
        reg = <0x1b>;                    /* TLV320AIC3106 芯片I2C接口器件地址 */
        status = "okay";

        /* Regulators */
        AVDD-supply = <&vaux2_reg>;
        IOVDD-supply = <&vaux2_reg>;
        DRVDD-supply = <&vaux2_reg>;
        DVDD-supply = <&vbat>;
    };
};

&usb {
    status = "okay";
};

&usb_ctrl_mod {
    status = "okay";
};

&usb0_phy {
    status = "okay";
};

&usb1_phy {
    status = "okay";
};

&usb0 {
    status = "okay";
};

&usb1 {
    status = "okay";
    dr_mode = "host";
};

&cppi41dma  {
    status = "okay";
};

&epwmss2 {    /* PWM2 LCD背光调节输出 */
    status = "okay";

    ecap2: ecap@48304100 {
        status = "okay";
        pinctrl-names = "default";
        pinctrl-0 = <&ecap2_pins>;
    };
};

&wkup_m3_ipc {
    ti,needs-vtt-toggle;
    ti,vtt-gpio-pin = <7>;
    ti,scale-data-fw = "am335x-evm-scale-data.bin";
};

#include "tps65910.dtsi"

&tps {        /* 电源管理芯片 TPS65910A3 */
    vcc1-supply = <&vbat>;
    vcc2-supply = <&vbat>;
    vcc3-supply = <&vbat>;
    vcc4-supply = <&vbat>;
    vcc5-supply = <&vbat>;
    vcc6-supply = <&vbat>;
    vcc7-supply = <&vbat>;    /* vcc1~vcc7的电源输入都由vbat提供 */
    vccio-supply = <&vbat>;

    regulators {
        vrtc_reg: regulator@0 {
            regulator-always-on;
        };

        vio_reg: regulator@1 {
            regulator-always-on;
        };

        vdd1_reg: regulator@2 {
            /* VDD_MPU voltage limits 0.95V - 1.26V with +/-4% tolerance */
            regulator-name = "vdd_mpu";
            regulator-min-microvolt = <912500>;
            regulator-max-microvolt = <1351500>;
            regulator-boot-on;
            regulator-always-on;
        };

        vdd2_reg: regulator@3 {
            /* VDD_CORE voltage limits 0.95V - 1.1V with +/-4% tolerance */
            regulator-name = "vdd_core";
            regulator-min-microvolt = <912500>;
            regulator-max-microvolt = <1150000>;
            regulator-boot-on;
            regulator-always-on;
        };

        vdd3_reg: regulator@4 {
            regulator-always-on;
        };

        vdig1_reg: regulator@5 {
            regulator-always-on;
        };

        vdig2_reg: regulator@6 {
            regulator-always-on;
        };

        vpll_reg: regulator@7 {
            regulator-always-on;
        };

        vdac_reg: regulator@8 {
            regulator-always-on;
        };

        vaux1_reg: regulator@9 {
            regulator-always-on;
        };

        vaux2_reg: regulator@10 {
            regulator-always-on;
        };

        vaux33_reg: regulator@11 {
            regulator-always-on;
        };

        vmmc_reg: regulator@12 {
            regulator-min-microvolt = <1800000>;
            regulator-max-microvolt = <3300000>;
            regulator-always-on;
        };
    };
};

&mac {
    pinctrl-names = "default", "sleep";
    pinctrl-0 = <&cpsw_default>;
    pinctrl-1 = <&cpsw_sleep>;
    dual_emac = <1>;
    status = "okay";
};

&davinci_mdio {
    pinctrl-names = "default", "sleep";
    pinctrl-0 = <&davinci_mdio_default>;
    pinctrl-1 = <&davinci_mdio_sleep>;
    status = "okay";
};

&cpsw_emac0 {
    phy_id = <&davinci_mdio>, <0>;
    phy-mode = "rgmii-txid";
    dual_emac_res_vlan = <1>;
};

&cpsw_emac1 {
    phy_id = <&davinci_mdio>, <1>;
    phy-mode = "rgmii-txid";
    dual_emac_res_vlan = <2>;
};

&mmc1 {
    status = "okay";
    vmmc-supply = <&vmmc_reg>;
    bus-width = <4>;
    pinctrl-names = "default";
    pinctrl-0 = <&mmc1_pins>;
    cd-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
};

&sham {
    status = "okay";
};

&aes {
    status = "okay";
};

&gpio0 {
    ti,no-reset-on-init;
};

&mmc2 {
    status = "okay";
    vmmc-supply = <&wl12xx_vmmc>;
    ti,non-removable;
    bus-width = <4>;
    cap-power-off-card;
    keep-power-in-suspend;
    pinctrl-names = "default";
    pinctrl-0 = <&mmc2_pins>;

    #address-cells = <1>;
    #size-cells = <0>;
    wlcore: wlcore@2 {
        compatible = "ti,wl1271";
        reg = <2>;
        interrupt-parent = <&gpio0>;
        interrupts = <31 IRQ_TYPE_LEVEL_HIGH>; /* gpio 31 */
        ref-clock-frequency = <38400000>;
    };
};

&mcasp1 {
    #sound-dai-cells = <0>;
    pinctrl-names = "default", "sleep";
    pinctrl-0 = <&mcasp1_pins>;
    pinctrl-1 = <&mcasp1_pins_sleep>;

    status = "okay";

    op-mode = <0>;          /* MCASP_IIS_MODE */
    tdm-slots = <2>;
    /* 4 serializers */
    serial-dir = <  /* 0: INACTIVE, 1: TX, 2: RX */
        0 0 1 2
    >;
    tx-num-evt = <32>;
    rx-num-evt = <32>;
};

&tscadc {
    status = "okay";
    tsc {
        ti,wires = <4>;
        ti,x-plate-resistance = <200>;
        ti,coordinate-readouts = <5>;
        ti,wire-config = <0x00 0x11 0x22 0x33>;
    };
};

&lcdc {
    status = "okay";

    blue-and-red-wiring = "crossed";
};

&sgx {
    status = "okay";
};

&rtc {
    clocks = <&clk_32768_ck>, <&clkdiv32k_ick>;
    clock-names = "ext-clk", "int-clk";
};

&pruss_soc_bus {
    status = "okay";

    pruss: pruss@0 {
        status = "okay";
    };
};

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值