omap: Add devicetree for Gumstix Pepper board
PATCH 1/1 omap: Add devicetree for Gumstix Pepper board
This adds the Gumstix Pepper[1] single-board computer based on the TI AM335x processor. Schematics are available [2].
[1] https://store.gumstix.com/index.php/products/344/
[2] https://pubs.gumstix.com/boards/PEPPER/
--- MAINTAINERS | 6 + arch/arm/boot/dts/Makefile | 3 +- arch/arm/boot/dts/am335x-pepper.dts | 661 ++++++++++++++++++++++++++++++++++++ 3 files changed, 669 insertions(+), 1 deletion(-) create mode 100644 arch/arm/boot/dts/am335x-pepper.dts
MAINTAINERS +6 -0
@@ -6427,6 +6427,12 @@ L: linux-omap at vger.kernel.org S: Maintained F: arch/arm/boot/dts/am335x-nano.dts +OMAP/GUMSTIX PEPPER MACHINE SUPPORT +M: Ash Charles <[email protected]> +L: linux-omap at vger.kernel.org +S: Maintained +F: arch/arm/boot/dts/am335x-pepper.dts + OMFS FILESYSTEM M: Bob Copeland <[email protected]> L: linux-karma-devel at lists.sourceforge.net
arch/arm/boot/dts/Makefile +2 -1
@@ -277,7 +277,8 @@ dtb-$(CONFIG_SOC_AM33XX) += am335x-base0033.dtb \ am335x-boneblack.dtb \ am335x-evm.dtb \ am335x-evmsk.dtb \ - am335x-nano.dtb + am335x-nano.dtb \ + am335x-pepper.dtb dtb-$(CONFIG_ARCH_OMAP4) += omap4-duovero-parlor.dtb \ omap4-panda.dtb \ omap4-panda-a4.dtb \
arch/arm/boot/dts/am335x-pepper.dts new file +661 -0
661 lines not on this page · raw message
Signature · 1 line
1.8.3.2
PATCH 1/1 omap: Add devicetree for Gumstix Pepper board
Hi Ash,
Quoted 19 lines · Ash Charles
This adds the Gumstix Pepper[1] single-board computer based on the TI AM335x processor. Schematics are available [2].
[1] https://store.gumstix.com/index.php/products/344/
[2] https://pubs.gumstix.com/boards/PEPPER/Signed-off-by Ash Charles <[email protected]>--- MAINTAINERS | 6 + arch/arm/boot/dts/Makefile | 3 +- arch/arm/boot/dts/am335x-pepper.dts | 661 ++++++++++++++++++++++++++++++++++++ 3 files changed, 669 insertions(+), 1 deletion(-) create mode 100644 arch/arm/boot/dts/am335x-pepper.dtsMAINTAINERS +0
-0
MAINTAINERS L: linux-omap at vger.kernel.org · line 6435
Quoted 9 lines
MAINTAINERS +6
-0@@ -6427,6 +6427,12 @@ L: linux-omap at vger.kernel.org S: Maintained F: arch/arm/boot/dts/am335x-nano.dts +OMAP/GUMSTIX PEPPER MACHINE SUPPORT +M: Ash Charles <[email protected]> +L: linux-omap at vger.kernel.org +S: Maintained +F: arch/arm/boot/dts/am335x-pepper.dts +
It is not very common to add oneself as the maintainer of a single .dts file. I could only found the am335x-nano.dts with such a way of doing. Usually get_maintainer.pl will also take into account the commit author and properly handle this case.
Quoted 43 lines
MAINTAINERS +0
-0OMFS FILESYSTEM M: Bob Copeland <[email protected]> L: linux-karma-devel at lists.sourceforge.netarch/arm/boot/dts/Makefile +2
-1@@ -277,7 +277,8 @@ dtb-$(CONFIG_SOC_AM33XX) += am335x-base0033.dtb \ am335x-boneblack.dtb \ am335x-evm.dtb \ am335x-evmsk.dtb \ - am335x-nano.dtb + am335x-nano.dtb \ + am335x-pepper.dtb dtb-$(CONFIG_ARCH_OMAP4) += omap4-duovero-parlor.dtb \ omap4-panda.dtb \ omap4-panda-a4.dtb \arch/arm/boot/dts/am335x-pepper.dts new file +20
-0@@ -0,0 +1,661 @@ +/* + * Copyright (C) 2014 Gumstix, Inc. - https://www.gumstix.com/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +/dts-v1/; + +#include "am33xx.dtsi" + +/ { + model = "Gumstix Pepper"; + compatible = "gumstix,am335x-pepper", "ti,am33xx"; + + cpus { + cpu at 0 { + cpu0-supply = <&dcdc3_reg>; + }; + };
arch/arm/boot/dts/am335x-pepper.dts line 30
Quoted 10 lines
arch/arm/boot/dts/am335x-pepper.dts new file +10
-0+ + memory { + device_type = "memory"; + reg = <0x80000000 0x20000000>; /* 512 MB */ + }; + + buttons: user_buttons { + compatible = "gpio-keys"; + }; +
For all the boards that I have seen, all the properties of a new node are declared at the same place, where you put some of them at the end. I have not a strong opinion on this, but I find it a bit more difficult to read.
Quoted 65 lines
arch/arm/boot/dts/am335x-pepper.dts new file +65
-0+ leds: user_leds { + compatible = "gpio-leds"; + }; + + panel: lcd_panel { + compatible = "ti,tilcdc,panel"; + }; + + sound: sound_iface { + compatible = "ti,da830-evm-audio"; + }; + + vbat: fixedregulator at 0 { + compatible = "regulator-fixed"; + }; + + v3v3c_reg: fixedregulator at 1 { + compatible = "regulator-fixed"; + }; + + vdd5_reg: fixedregulator at 2 { + compatible = "regulator-fixed"; + }; +}; + +/* I2C Busses */ +&i2c0 { + status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <&i2c0_pins>; + + clock-frequency = <400000>; + + tps: tps at 24 { + reg = <0x24>; + }; + + eeprom: eeprom at 50 { + compatible = "at,24c256"; + reg = <0x50>; + }; + + audio_codec: tlv320aic3106 at 1b { + compatible = "ti,tlv320aic3106"; + reg = <0x1b>; + }; + + accel: lis331dlh at 1d { + compatible = "st,lis3lv02d"; + reg = <0x1d>; + }; +}; + +&i2c1 { + status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <&i2c1_pins>; + clock-frequency = <400000>; +}; + +&am33xx_pinmux { + i2c0_pins: pinmux_i2c0 { + pinctrl-single,pins = < + 0x188 (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c0_sda.i2c0_sda */ + 0x18c (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c0_scl.i2c0_scl */
arch/arm/boot/dts/am335x-pepper.dts line 105
Quoted 10 lines
arch/arm/boot/dts/am335x-pepper.dts new file +10
-0+ >; + }; + i2c1_pins: pinmux_i2c1 { + pinctrl-single,pins = < + 0x10C (PIN_INPUT_PULLUP | MUX_MODE3) /* mii1_crs,i2c1_sda */ + 0x110 (PIN_INPUT_PULLUP | MUX_MODE3) /* mii1_rxerr,i2c1_scl */ + >; + }; +}; +
Splitting the pinmux is also unusual, but in this case I found it more readable.
Quoted 16 lines
arch/arm/boot/dts/am335x-pepper.dts new file +16
-0+/* Accelerometer */ +&accel { + pinctrl-names = "default"; + pinctrl-0 = <&accel_pins>; + + Vdd-supply = <&ldo3_reg>; + Vdd_IO-supply = <&ldo3_reg>; + st,irq1-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 = <92>; + st,max-limit-x = <14>;
arch/arm/boot/dts/am335x-pepper.dts line 131
Quoted 10 lines
arch/arm/boot/dts/am335x-pepper.dts new file +10
-0+ st,min-limit-y = <14>; + st,max-limit-y = <92>; + st,min-limit-z = <92>; + st,max-limit-z = <14>; +}; + +&am33xx_pinmux { + accel_pins: pinmux_accel { + pinctrl-single,pins = < + 0x98 (PIN_INPUT_PULLUP | MUX_MODE7) /* gpmc_wen.gpio2_4 */
The INT pin of the LIS33 chip seems to be push-pull, thus enabling the pullup on the SoC side will increase the current consumption when held down.
Quoted 42 lines
arch/arm/boot/dts/am335x-pepper.dts new file +42
-0+ >; + }; +}; + +/* Audio */ +&audio_codec { + status = "okay"; + + gpio-reset = <&gpio1 16 GPIO_ACTIVE_LOW>; + AVDD-supply = <&ldo3_reg>; + IOVDD-supply = <&ldo3_reg>; + DRVDD-supply = <&ldo3_reg>; + DVDD-supply = <&dcdc1_reg>; +}; + +&sound { + ti,model = "AM335x-EVM"; + ti,audio-codec = <&audio_codec>; + ti,mcasp-controller = <&mcasp0>; + ti,codec-clock-rate = <12000000>; + ti,audio-routing = + "Headphone Jack", "HPLOUT", + "Headphone Jack", "HPROUT", + "LINE1L", "Line In"; +}; + +&mcasp0 { + status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <&audio_pins>; + + op-mode = <0>; /* MCASP_ISS_MODE */ + tdm-slots = <2>; + serial-dir = < + 1 2 0 0 + 0 0 0 0 + 0 0 0 0 + 0 0 0 0 + >; + tx-num-evt = <1>; + rx-num-evt = <1>; +};
arch/arm/boot/dts/am335x-pepper.dts line 183
Quoted 10 lines
arch/arm/boot/dts/am335x-pepper.dts new file +10
-0+ +&am33xx_pinmux { + audio_pins: pinmux_audio { + pinctrl-single,pins = < + 0x1AC (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp0_ahcklx.mcasp0_ahclkx */ + 0x194 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp0_fsx.mcasp0_fsx */ + 0x190 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp0_aclkx.mcasp0_aclkx */ + 0x198 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp0_axr0.mcasp0_axr0 */ + 0x1A8 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp0_axr1.mcasp0_axr1 */ + 0x40 (PIN_OUTPUT_PULLUP | MUX_MODE7) /* gpmc_a0.gpio1_16 */
You already have an external pullup in your design, so this one seems superfluous.
Quoted 291 lines
arch/arm/boot/dts/am335x-pepper.dts new file +291
-0+ >; + }; +}; + +/* Display: 24-bit LCD Screen */ +&panel { + status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <&lcd_pins>; + panel-info { + ac-bias = <255>; + ac-bias-intrpt = <0>; + dma-burst-sz = <16>; + bpp = <32>; + fdd = <0x80>; + sync-edge = <0>; + sync-ctrl = <1>; + raster-order = <0>; + fifo-th = <0>; + }; + display-timings { + native-mode = <&timing0>; + timing0: 480x272 { + clock-frequency = <18400000>; + hactive = <480>; + vactive = <272>; + hfront-porch = <8>; + hback-porch = <4>; + hsync-len = <41>; + vfront-porch = <4>; + vback-porch = <2>; + vsync-len = <10>; + hsync-active = <1>; + vsync-active = <1>; + }; + }; +}; + +&lcdc { + status = "okay"; +}; + +&am33xx_pinmux { + lcd_pins: pinmux_lcd { + pinctrl-single,pins = < + 0xa0 (PIN_OUTPUT | MUX_MODE0) /* lcd_data0.lcd_data0 */ + 0xa4 (PIN_OUTPUT | MUX_MODE0) /* lcd_data1.lcd_data1 */ + 0xa8 (PIN_OUTPUT | MUX_MODE0) /* lcd_data2.lcd_data2 */ + 0xac (PIN_OUTPUT | MUX_MODE0) /* lcd_data3.lcd_data3 */ + 0xb0 (PIN_OUTPUT | MUX_MODE0) /* lcd_data4.lcd_data4 */ + 0xb4 (PIN_OUTPUT | MUX_MODE0) /* lcd_data5.lcd_data5 */ + 0xb8 (PIN_OUTPUT | MUX_MODE0) /* lcd_data6.lcd_data6 */ + 0xbc (PIN_OUTPUT | MUX_MODE0) /* lcd_data7.lcd_data7 */ + 0xc0 (PIN_OUTPUT | MUX_MODE0) /* lcd_data8.lcd_data8 */ + 0xc4 (PIN_OUTPUT | MUX_MODE0) /* lcd_data9.lcd_data9 */ + 0xc8 (PIN_OUTPUT | MUX_MODE0) /* lcd_data10.lcd_data10 */ + 0xcc (PIN_OUTPUT | MUX_MODE0) /* lcd_data11.lcd_data11 */ + 0xd0 (PIN_OUTPUT | MUX_MODE0) /* lcd_data12.lcd_data12 */ + 0xd4 (PIN_OUTPUT | MUX_MODE0) /* lcd_data13.lcd_data13 */ + 0xd8 (PIN_OUTPUT | MUX_MODE0) /* lcd_data14.lcd_data14 */ + 0xdc (PIN_OUTPUT | MUX_MODE0) /* lcd_data15.lcd_data15 */ + 0x20 (PIN_OUTPUT | MUX_MODE1) /* gpmc_ad8.lcd_data16 */ + 0x24 (PIN_OUTPUT | MUX_MODE1) /* gpmc_ad9.lcd_data17 */ + 0x28 (PIN_OUTPUT | MUX_MODE1) /* gpmc_ad10.lcd_data18 */ + 0x2c (PIN_OUTPUT | MUX_MODE1) /* gpmc_ad11.lcd_data19 */ + 0x30 (PIN_OUTPUT | MUX_MODE1) /* gpmc_ad12.lcd_data20 */ + 0x34 (PIN_OUTPUT | MUX_MODE1) /* gpmc_ad13.lcd_data21 */ + 0x38 (PIN_OUTPUT | MUX_MODE1) /* gpmc_ad14.lcd_data22 */ + 0x3c (PIN_OUTPUT | MUX_MODE1) /* gpmc_ad15.lcd_data23 */ + 0xe0 (PIN_OUTPUT | MUX_MODE0) /* lcd_vsync.lcd_vsync */ + 0xe4 (PIN_OUTPUT | MUX_MODE0) /* lcd_hsync.lcd_hsync */ + 0xe8 (PIN_OUTPUT | MUX_MODE0) /* lcd_pclk.lcd_pclk */ + 0xec (PIN_OUTPUT | MUX_MODE0) /* lcd_ac_bias_en.lcd_ac_bias_en */ + /* Display Enable */ + 0x6c (PIN_OUTPUT_PULLUP | MUX_MODE7) /* gpmc_a11.gpio1_27 */ + >; + }; +}; + +/* Ethernet */ +&cpsw_emac0 { + status = "okay"; + phy_id = <&davinci_mdio>, <0>; + phy-mode = "rgmii"; +}; + +&cpsw_emac1 { + status = "okay"; + phy_id = <&davinci_mdio>, <1>; + phy-mode = "rgmii"; +}; + +&davinci_mdio { + status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <&mdio_pins>; +}; + +&mac { + status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <ðernet_pins>; +}; + + +&am33xx_pinmux { + ethernet_pins: pinmux_ethernet { + pinctrl-single,pins = < + 0x114 (PIN_OUTPUT_PULLDOWN | MUX_MODE2) /* mii1_txen.rgmii1_tctl */ + 0x118 (PIN_INPUT_PULLUP | MUX_MODE2) /* mii1_rxdv.rgmii1_rctl */ + 0x11c (PIN_OUTPUT_PULLDOWN | MUX_MODE2) /* mii1_txd3.rgmii1_td3 */ + 0x120 (PIN_OUTPUT_PULLDOWN | MUX_MODE2) /* mii1_txd2.rgmii1_td2 */ + 0x124 (PIN_OUTPUT_PULLDOWN | MUX_MODE2) /* mii1_txd1.rgmii1_td1 */ + 0x128 (PIN_OUTPUT_PULLDOWN | MUX_MODE2) /* mii1_txd0.rgmii1_td0 */ + 0x12c (PIN_INPUT_PULLUP | MUX_MODE2) /* mii1_txclk.rgmii1_tclk */ + 0x130 (PIN_INPUT_PULLUP | MUX_MODE2) /* mii1_rxclk.rgmii1_rclk */ + 0x134 (PIN_INPUT_PULLUP | MUX_MODE2) /* mii1_rxd3.rgmii1_rxd3 */ + 0x138 (PIN_INPUT_PULLUP | MUX_MODE2) /* mii1_rxd2.rgmii1_rxd2 */ + 0x13c (PIN_INPUT_PULLUP | MUX_MODE2) /* mii1_rxd1.rgmii1_rxd1 */ + 0x140 (PIN_INPUT_PULLUP | MUX_MODE2) /* mii1_rxd0.rgmii1_rxd0 */ + /* ethernet interrupt */ + 0x144 (PIN_INPUT_PULLUP | MUX_MODE7) /* rmii2_refclk.gpio0_29 */ + /* ethernet PHY nReset */ + 0x108 (PIN_OUTPUT_PULLUP | MUX_MODE7) /* mii1_col.gpio3_0 */ + >; + }; + + mdio_pins: pinmux_mdio { + pinctrl-single,pins = < + 0x148 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0) /* mdio_data.mdio_data */ + 0x14c (PIN_OUTPUT_PULLUP | MUX_MODE0) /* mdio_clk.mdio_clk */ + >; + }; +}; + +/* MMC */ +&mmc1 { + /* Bootable SD card slot */ + status = "okay"; + vmmc-supply = <&ldo3_reg>; + bus-width = <4>; + pinctrl-names = "default"; + pinctrl-0 = <&sd_pins>; + cd-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>; +}; + +&mmc2 { + /* eMMC (not populated) on MMC #2 */ + status = "disabled"; + pinctrl-names = "default"; + pinctrl-0 = <&emmc_pins>; + vmmc-supply = <&ldo3_reg>; + bus-width = <8>; + ti,non-removable; +}; + +&edma { + /* Map eDMA MMC2 Events from Crossbar */ + ti,edma-xbar-event-map = /bits/ 16 <1 12 + 2 13>; +}; + + +&mmc3 { + /* Wifi & Bluetooth on MMC #3 */ + status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <&wireless_pins>; + vmmmc-supply = <&v3v3c_reg>; + bus-width = <4>; + ti,non-removable; + dmas = <&edma 12 + &edma 13>; + dma-names = "tx", "rx"; +}; + + +&am33xx_pinmux { + sd_pins: pinmux_sd_card { + pinctrl-single,pins = < + 0xf0 (PIN_INPUT_PULLUP | MUX_MODE0) /* mmc0_dat0.mmc0_dat0 */ + 0xf4 (PIN_INPUT_PULLUP | MUX_MODE0) /* mmc0_dat1.mmc0_dat1 */ + 0xf8 (PIN_INPUT_PULLUP | MUX_MODE0) /* mmc0_dat2.mmc0_dat2 */ + 0xfc (PIN_INPUT_PULLUP | MUX_MODE0) /* mmc0_dat3.mmc0_dat3 */ + 0x100 (PIN_INPUT_PULLUP | MUX_MODE0) /* mmc0_clk.mmc0_clk */ + 0x104 (PIN_INPUT_PULLUP | MUX_MODE0) /* mmc0_cmd.mmc0_cmd */ + 0x160 (PIN_INPUT | MUX_MODE7) /* spi0_cs1.gpio0_6 */ + >; + }; + emmc_pins: pinmux_emmc { + pinctrl-single,pins = < + 0x80 (PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_csn1.mmc1_clk */ + 0x84 (PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_csn2.mmc1_cmd */ + 0x00 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad0.mmc1_dat0 */ + 0x04 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad1.mmc1_dat1 */ + 0x08 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad2.mmc1_dat2 */ + 0x0c (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad3.mmc1_dat3 */ + 0x10 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad4.mmc1_dat4 */ + 0x14 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad5.mmc1_dat5 */ + 0x18 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad6.mmc1_dat6 */ + 0x1c (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad7.mmc1_dat7 */ + /* EMMC nReset */ + 0x74 (PIN_OUTPUT_PULLUP | MUX_MODE7) /* gpmc_wpn.gpio0_31 */ + >; + }; + wireless_pins: pinmux_wireless { + pinctrl-single,pins = < + 0x44 (PIN_INPUT_PULLUP | MUX_MODE3) /* gpmc_a1.mmc2_dat0 */ + 0x48 (PIN_INPUT_PULLUP | MUX_MODE3) /* gpmc_a2.mmc2_dat1 */ + 0x4c (PIN_INPUT_PULLUP | MUX_MODE3) /* gpmc_a3.mmc2_dat2 */ + 0x78 (PIN_INPUT_PULLUP | MUX_MODE3) /* gpmc_ben1.mmc2_dat3 */ + 0x88 (PIN_INPUT_PULLUP | MUX_MODE3) /* gpmc_csn3.mmc2_cmd */ + 0x8c (PIN_INPUT_PULLUP | MUX_MODE3) /* gpmc_clk.mmc1_clk */ + /* WLAN nReset */ + 0x60 (PIN_OUTPUT_PULLUP | MUX_MODE7) /* gpmc_a8.gpio1_24 */ + /* WLAN nPower down */ + 0x70 (PIN_OUTPUT_PULLUP | MUX_MODE7) /* gpmc_wait0.gpio0_30 */ + /* 32kHz Clock */ + 0x1b4 (PIN_OUTPUT_PULLDOWN | MUX_MODE3) /* xdma_event_intr1.clkout2 */ + >; + }; +}; + +/* Power */ +&vbat { + regulator-name = "vbat"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on; +}; + +&v3v3c_reg { + regulator-name = "v3v3c_reg"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + vin-supply = <&vbat>; + regulator-always-on; +}; + +&vdd5_reg { + regulator-name = "vdd5_reg"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on; + vin-supply = <&vbat>; +}; + +/include/ "tps65217.dtsi" + +&tps { + backlight { + isel = <1>; /* ISET1 */ + fdim = <200>; /* TPS65217_BL_FDIM_200HZ */ + default-brightness = <80>; + }; + + regulators { + dcdc1_reg: regulator at 0 { + /* VDD_1V8 system supply */ + regulator-always-on; + }; + + dcdc2_reg: regulator at 1 { + /* VDD_CORE voltage limits 0.95V - 1.26V with +/-4% tolerance */ + regulator-name = "vdd_core"; + regulator-min-microvolt = <925000>; + regulator-max-microvolt = <1325000>; + regulator-boot-on; + regulator-always-on; + }; + + dcdc3_reg: regulator at 2 { + /* VDD_MPU voltage limits 0.95V - 1.1V with +/-4% tolerance */ + regulator-name = "vdd_mpu"; + regulator-min-microvolt = <925000>; + regulator-max-microvolt = <1150000>; + regulator-boot-on; + regulator-always-on; + }; + + ldo1_reg: regulator at 3 { + /* VRTC 1.8V always-on supply */ + regulator-always-on; + }; + + ldo2_reg: regulator at 4 { + /* 3.3V rail */ + regulator-always-on; + }; + + ldo3_reg: regulator at 5 {
arch/arm/boot/dts/am335x-pepper.dts line 484
Quoted 10 lines
arch/arm/boot/dts/am335x-pepper.dts new file +10
-0+ /* VDD_3V3A 3.3V rail */ + regulator-always-on; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + }; + + ldo4_reg: regulator at 6 { + /* VDD_3V3B 3.3V rail */ + regulator-always-on; + };
Why are all the regulators always on? Most of them should be managed automatically if you have correct dependencies, shouldn't they?
Quoted 132 lines
arch/arm/boot/dts/am335x-pepper.dts new file +132
-0+ }; +}; + +/* SPI Busses */ +&spi0 { + status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <&spi0_pins>; +}; + +&am33xx_pinmux { + spi0_pins: pinmux_spi0 { + pinctrl-single,pins = < + 0x150 (PIN_INPUT_PULLUP | MUX_MODE0) /* spi0_sclk.spi0_sclk */ + 0x15C (PIN_INPUT_PULLUP | MUX_MODE0) /* spi0_cs0.spi0_cs0 */ + 0x154 (PIN_INPUT_PULLUP | MUX_MODE0) /* spi0_d0.spi0_d0 */ + 0x158 (PIN_INPUT_PULLUP | MUX_MODE0) /* spi0_d1.spi0_d1 */ + >; + }; +}; + +/* Touch Screen */ +&tscadc { + status = "okay"; + tsc { + ti,wires = <4>; + ti,x-plate-resistance = <200>; + ti,coordinate-readouts = <5>; + ti,wire-config = <0x00 0x11 0x22 0x33>; + }; + + adc { + ti,adc-channels = <4 5 6 7>; + }; +}; + +/* UARTs */ +&uart0 { + /* Serial Console */ + status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <&uart0_pins>; +}; + +&uart1 { + /* Broken out to J6 header */ + status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <&uart1_pins>; +}; + +&am33xx_pinmux { + uart0_pins: pinmux_uart0 { + pinctrl-single,pins = < + 0x170 (PIN_INPUT_PULLUP | MUX_MODE0) /* uart0_rxd.uart0_rxd */ + 0x174 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* uart0_txd.uart0_txd */ + >; + }; + uart1_pins: pinmux_uart1 { + pinctrl-single,pins = < + 0x178 (PIN_INPUT_PULLUP | MUX_MODE0) /* uart1_ctsn.uart1_ctsn */ + 0x17C (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* uart1_rtsn.uart1_rtsn */ + 0x180 (PIN_INPUT_PULLUP | MUX_MODE0) /* uart1_rxd.uart1_rxd */ + 0x184 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* uart1_txd.uart1_txd */ + >; + }; +}; + +/* USB */ +&usb { + status = "okay"; + + pinctrl-names = "default"; + pinctrl-0 = <&usb_pins>; +}; + +&usb_ctrl_mod { + status = "okay"; +}; + +&usb0_phy { + status = "okay"; +}; + +&usb1_phy { + status = "okay"; +}; + +&usb0 { + status = "okay"; + dr_mode = "host"; +}; + +&usb1 { + status = "okay"; + dr_mode = "host"; +}; + +&cppi41dma { + status = "okay"; +}; + +&am33xx_pinmux { + usb_pins: pinmux_usb { + pinctrl-single,pins = < + /* USB0 Over-Current (active low) */ + 0x64 (PIN_INPUT | MUX_MODE7) /* gpmc_a9.gpio1_25 */ + /* USB1 Over-Current (active low) */ + 0x68 (PIN_INPUT | MUX_MODE7) /* gpmc_a10.gpio1_26 */ + >; + }; +}; + +/* User IO */ +&leds { + pinctrl-names = "default"; + pinctrl-0 = <&user_leds_pins>; + + led at 0 { + label = "pepper:user0:blue"; + gpios = <&gpio1 20 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "none"; + default-state = "off"; + }; + + led at 1 { + label = "pepper:user1:red"; + gpios = <&gpio1 21 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "none"; + default-state = "off"; + }; +};
arch/arm/boot/dts/am335x-pepper.dts line 626
Quoted 10 lines
arch/arm/boot/dts/am335x-pepper.dts new file +10
-0+ +&buttons { + pinctrl-names = "default"; + pinctrl-0 = <&user_buttons_pins>; + #address-cells = <1>; + #size-cells = <0>; + + button at 0 { + label = "home"; + linux,code = <102>;
You can use the key codes defined in <dt-bindings/input/input.h>.
arch/arm/boot/dts/am335x-pepper.dts line 633
Quoted 7 lines
arch/arm/boot/dts/am335x-pepper.dts new file +7
-0+ gpios = <&gpio1 22 GPIO_ACTIVE_LOW>; + gpio-key,wakeup; + }; + + button at 1 { + label = "menu"; + linux,code = <139>;
KEY_MENU
arch/arm/boot/dts/am335x-pepper.dts line 640
Quoted 7 lines
arch/arm/boot/dts/am335x-pepper.dts new file +7
-0+ gpios = <&gpio1 23 GPIO_ACTIVE_LOW>; + gpio-key,wakeup; + }; + + buttons at 2 { + label = "power"; + linux,code = <116>;
KEY_POWER
arch/arm/boot/dts/am335x-pepper.dts line 650
Quoted 10 lines
arch/arm/boot/dts/am335x-pepper.dts new file +10
-0+ gpios = <&gpio0 7 GPIO_ACTIVE_LOW>; + gpio-key,wakeup; + }; +}; + +&am33xx_pinmux { + user_leds_pins: pinmux_user_leds { + pinctrl-single,pins = < + 0x50 (PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* gpmc_a4.gpio1_20 */ + 0x54 (PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* gpmc_a5.gpio1_21 */
Why enabling the pulldown on an output gpio? You will increase the power consumption when driving high.
arch/arm/boot/dts/am335x-pepper.dts line 661
Quoted 12 lines
arch/arm/boot/dts/am335x-pepper.dts new file +11
-0+ >; + }; + + user_buttons_pins: pinmux_user_buttons { + pinctrl-single,pins = < + 0x58 (PIN_INPUT_PULLUP | MUX_MODE7) /* gpmc_a6.gpio1_22 */ + 0x5C (PIN_INPUT_PULLUP | MUX_MODE7) /* gpmc_a7.gpio1_21 */ + 0x164 (PIN_INPUT_PULLUP | MUX_MODE7) /* gpmc_a8.gpio0_7 */ + >; + }; +};
Regards,
Florian
PATCH 1/1 omap: Add devicetree for Gumstix Pepper board
Quoted 4 lines · Florian Vaussard
It is not very common to add oneself as the maintainer of a single .dts file. I could only found the
am335x-nano.dtswith such a way of doing. Usually get_maintainer.pl will also take into account the commit author and properly handle this case.
Okay--I'll remove this. Ironically, I was looking at the nano to make sure I'd done everything I needed to ;-).
...
Quoted 4 lines
For all the boards that I have seen, all the properties of a new node are declared at the same place, where you put some of them at the end. I have not a strong opinion on this, but I find it a bit more difficult to read.
...
Quoted 2 lines
Splitting the pinmux is also unusual, but in this case I found it more readable.
My goal both by moving the properties and the pinmux was to separate out chunks of functionality into discrete sections. It makes it easy to resolve an issue with a specific board feature (e.g. LEDs) or adapt for a new board version as the pinmux and any node properties are grouped together.
I recognize this is something of a personal bias though so I can certainly re-organize if this is stylistically bad.
...
Quoted 7 lines
arch/arm/boot/dts/am335x-pepper.dts line 131
Quoted 4 lines
+&am33xx_pinmux {
arch/arm/boot/dts/am335x-pepper.dts new file +3
-0+ accel_pins: pinmux_accel { + pinctrl-single,pins = < + 0x98 (PIN_INPUT_PULLUP | MUX_MODE7) /* gpmc_wen.gpio2_4 */The INT pin of the LIS33 chip seems to be push-pull, thus enabling the pullup on the SoC side will increase the current consumption when held down.
Good catch.
...
Quoted 10 lines
arch/arm/boot/dts/am335x-pepper.dts line 183
Quoted 9 lines
+&am33xx_pinmux {
arch/arm/boot/dts/am335x-pepper.dts new file +8
-0+ audio_pins: pinmux_audio { + pinctrl-single,pins = < + 0x1AC (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp0_ahcklx.mcasp0_ahclkx */ + 0x194 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp0_fsx.mcasp0_fsx */ + 0x190 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp0_aclkx.mcasp0_aclkx */ + 0x198 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp0_axr0.mcasp0_axr0 */ + 0x1A8 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp0_axr1.mcasp0_axr1 */ + 0x40 (PIN_OUTPUT_PULLUP | MUX_MODE7) /* gpmc_a0.gpio1_16 */
Quoted 2 lines
You already have an external pullup in your design, so this one seems superfluous.
You're correct. Changed.
...
Quoted 6 lines
arch/arm/boot/dts/am335x-pepper.dts line 412
Quoted 6 lines
arch/arm/boot/dts/am335x-pepper.dts new file +6
-0+/* Power */ +&vbat { + regulator-name = "vbat"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on;
removed regulator-always-on
Quoted 8 lines
arch/arm/boot/dts/am335x-pepper.dts line 420
Quoted 8 lines
arch/arm/boot/dts/am335x-pepper.dts new file +8
-0+}; + +&v3v3c_reg { + regulator-name = "v3v3c_reg"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + vin-supply = <&vbat>; + regulator-always-on;
removed regulator-always-on
Quoted 7 lines
arch/arm/boot/dts/am335x-pepper.dts line 427
Quoted 7 lines
arch/arm/boot/dts/am335x-pepper.dts new file +7
-0+}; + +&vdd5_reg { + regulator-name = "vdd5_reg"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on;
removed regulator-always-on
Quoted 8 lines
Quoted 8 lines
arch/arm/boot/dts/am335x-pepper.dts new file +8
-0+ vin-supply = <&vbat>; +}; + +/include/ "tps65217.dtsi" + +&tps { + backlight { + isel = <1>; /* ISET1 */
Quoted 8 lines
arch/arm/boot/dts/am335x-pepper.dts line 443
Quoted 8 lines
arch/arm/boot/dts/am335x-pepper.dts new file +8
-0+ fdim = <200>; /* TPS65217_BL_FDIM_200HZ */ + default-brightness = <80>; + }; + + regulators { + dcdc1_reg: regulator at 0 { + /* VDD_1V8 system supply */ + regulator-always-on;
removed regulator-always-on
Quoted 9 lines
arch/arm/boot/dts/am335x-pepper.dts line 452
Quoted 9 lines
arch/arm/boot/dts/am335x-pepper.dts new file +9
-0+ }; + + dcdc2_reg: regulator at 1 { + /* VDD_CORE voltage limits 0.95V - 1.26V with +/-4% tolerance */ + regulator-name = "vdd_core"; + regulator-min-microvolt = <925000>; + regulator-max-microvolt = <1325000>; + regulator-boot-on; + regulator-always-on;
removed regulator-always-on
Quoted 9 lines
arch/arm/boot/dts/am335x-pepper.dts line 461
Quoted 9 lines
arch/arm/boot/dts/am335x-pepper.dts new file +9
-0+ }; + + dcdc3_reg: regulator at 2 { + /* VDD_MPU voltage limits 0.95V - 1.1V with +/-4% tolerance */ + regulator-name = "vdd_mpu"; + regulator-min-microvolt = <925000>; + regulator-max-microvolt = <1150000>; + regulator-boot-on; + regulator-always-on;
removed regulator-always-on
Quoted 5 lines
arch/arm/boot/dts/am335x-pepper.dts line 466
Quoted 5 lines
arch/arm/boot/dts/am335x-pepper.dts new file +5
-0+ }; + + ldo1_reg: regulator at 3 { + /* VRTC 1.8V always-on supply */ + regulator-always-on;
This is the backup supply shouldn't be switched off.
Quoted 5 lines
arch/arm/boot/dts/am335x-pepper.dts line 471
Quoted 5 lines
arch/arm/boot/dts/am335x-pepper.dts new file +5
-0+ }; + + ldo2_reg: regulator at 4 { + /* 3.3V rail */ + regulator-always-on;
removed regulator-always-on
Quoted 5 lines
arch/arm/boot/dts/am335x-pepper.dts line 476
Quoted 5 lines
arch/arm/boot/dts/am335x-pepper.dts new file +5
-0+ }; + + ldo3_reg: regulator at 5 { + /* VDD_3V3A 3.3V rail */ + regulator-always-on;
removed regulator-always-on
Quoted 7 lines
arch/arm/boot/dts/am335x-pepper.dts line 483
Quoted 7 lines
arch/arm/boot/dts/am335x-pepper.dts new file +7
-0+ regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + }; + + ldo4_reg: regulator at 6 { + /* VDD_3V3B 3.3V rail */ + regulator-always-on;
removed regulator-always-on
Quoted 4 lines
Quoted 1 line
+ };
Why are all the regulators always on? Most of them should be managed automatically if you have correct dependencies, shouldn't they?
A little cargo-cult I fear. I've removed as noted above.
...
Quoted 1 line
You can use the key codes defined in <
dt-bindings/input/input.h>.
Ah--cool. Will do.
Quoted 21 lines
arch/arm/boot/dts/am335x-pepper.dts line 633
Quoted 8 lines
arch/arm/boot/dts/am335x-pepper.dts new file +7
-0+ gpios = <&gpio1 22 GPIO_ACTIVE_LOW>; + gpio-key,wakeup; + }; + + button at 1 { + label = "menu"; + linux,code = <139>;
KEY_MENUarch/arm/boot/dts/am335x-pepper.dts line 640
Quoted 7 lines
arch/arm/boot/dts/am335x-pepper.dts new file +7
-0+ gpios = <&gpio1 23 GPIO_ACTIVE_LOW>; + gpio-key,wakeup; + }; + + buttons at 2 { + label = "power"; + linux,code = <116>;
KEY_POWER
Quoted 13 lines
arch/arm/boot/dts/am335x-pepper.dts line 650
Quoted 10 lines
arch/arm/boot/dts/am335x-pepper.dts new file +10
-0+ gpios = <&gpio0 7 GPIO_ACTIVE_LOW>; + gpio-key,wakeup; + }; +}; + +&am33xx_pinmux { + user_leds_pins: pinmux_user_leds { + pinctrl-single,pins = < + 0x50 (PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* gpmc_a4.gpio1_20 */ + 0x54 (PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* gpmc_a5.gpio1_21 */Why enabling the pulldown on an output gpio? You will increase the power consumption when driving high.
These work fine as simple outputs.
Thanks for your careful review Florian. Much appreciated.
--Ash
PATCH v2 1/1 omap: Add devicetree for Gumstix Pepper board
This adds the Gumstix Pepper[1] single-board computer based on the TI AM335x processor. Schematics are available [2].
[1] https://store.gumstix.com/index.php/products/344/
[2] https://pubs.gumstix.com/boards/PEPPER/
--- arch/arm/boot/dts/Makefile | 3 +- arch/arm/boot/dts/am335x-pepper.dts | 653 ++++++++++++++++++++++++++++++++++++ 2 files changed, 655 insertions(+), 1 deletion(-) create mode 100644 arch/arm/boot/dts/am335x-pepper.dts
arch/arm/boot/dts/Makefile +2 -1
@@ -277,7 +277,8 @@ dtb-$(CONFIG_SOC_AM33XX) += am335x-base0033.dtb \ am335x-boneblack.dtb \ am335x-evm.dtb \ am335x-evmsk.dtb \ - am335x-nano.dtb + am335x-nano.dtb \ + am335x-pepper.dtb dtb-$(CONFIG_ARCH_OMAP4) += omap4-duovero-parlor.dtb \ omap4-panda.dtb \ omap4-panda-a4.dtb \
arch/arm/boot/dts/am335x-pepper.dts new file +653 -0
653 lines not on this page · raw message
Signature · 1 line
1.8.3.2
PATCH v2 1/1 omap: Add devicetree for Gumstix Pepper board
Quoted 5 lines · Ash Charles
This adds the Gumstix Pepper[1] single-board computer based on the TI AM335x processor. Schematics are available [2].
[1] https://store.gumstix.com/index.php/products/344/
[2] https://pubs.gumstix.com/boards/PEPPER/
Applying into omap-for-v3.17/dt thanks.
Regards,
Tony