|  | /* | 
|  | * Copyright 2016 Linaro Ltd | 
|  | * | 
|  | * Permission is hereby granted, free of charge, to any person obtaining a copy | 
|  | * of this software and associated documentation files (the "Software"), to deal | 
|  | * in the Software without restriction, including without limitation the rights | 
|  | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | 
|  | * copies of the Software, and to permit persons to whom the Software is | 
|  | * furnished to do so, subject to the following conditions: | 
|  | * | 
|  | * The above copyright notice and this permission notice shall be included in | 
|  | * all copies or substantial portions of the Software. | 
|  | * | 
|  | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | 
|  | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 
|  | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | 
|  | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | 
|  | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | 
|  | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | 
|  | * THE SOFTWARE. | 
|  | */ | 
|  |  | 
|  | #include <dt-bindings/input/input.h> | 
|  | #include <dt-bindings/gpio/gpio.h> | 
|  | #include <dt-bindings/pinctrl/qcom,pmic-gpio.h> | 
|  | #include <dt-bindings/pinctrl/qcom,pmic-mpp.h> | 
|  | #include "qcom-msm8660.dtsi" | 
|  |  | 
|  | / { | 
|  | model = "Qualcomm APQ8060 Dragonboard"; | 
|  | compatible = "qcom,apq8060-dragonboard", "qcom,msm8660"; | 
|  |  | 
|  | aliases { | 
|  | serial0 = &gsbi12_serial; | 
|  | }; | 
|  |  | 
|  | chosen { | 
|  | stdout-path = "serial0:115200n8"; | 
|  | }; | 
|  |  | 
|  | regulators { | 
|  | compatible = "simple-bus"; | 
|  |  | 
|  | /* Main power of the board: 3.7V */ | 
|  | vph: regulator-fixed { | 
|  | compatible = "regulator-fixed"; | 
|  | regulator-min-microvolt = <3700000>; | 
|  | regulator-max-microvolt = <3700000>; | 
|  | regulator-name = "VPH"; | 
|  | regulator-type = "voltage"; | 
|  | regulator-always-on; | 
|  | regulator-boot-on; | 
|  | }; | 
|  |  | 
|  | /* GPIO controlled ethernet power regulator */ | 
|  | dragon_veth: xc622a331mrg { | 
|  | compatible = "regulator-fixed"; | 
|  | regulator-name = "XC6222A331MR-G"; | 
|  | regulator-min-microvolt = <3300000>; | 
|  | regulator-max-microvolt = <3300000>; | 
|  | vin-supply = <&vph>; | 
|  | gpio = <&pm8058_gpio 40 GPIO_ACTIVE_HIGH>; | 
|  | enable-active-high; | 
|  | pinctrl-names = "default"; | 
|  | pinctrl-0 = <&dragon_veth_gpios>; | 
|  | regulator-always-on; | 
|  | }; | 
|  |  | 
|  | /* VDDvario fixed regulator */ | 
|  | dragon_vario: nds332p { | 
|  | compatible = "regulator-fixed"; | 
|  | regulator-name = "NDS332P"; | 
|  | regulator-min-microvolt = <1800000>; | 
|  | regulator-max-microvolt = <1800000>; | 
|  | vin-supply = <&pm8058_s3>; | 
|  | }; | 
|  |  | 
|  | /* This is a levelshifter for SDCC5 */ | 
|  | dragon_vio_txb: txb0104rgyr { | 
|  | compatible = "regulator-fixed"; | 
|  | regulator-name = "Dragon SDCC levelshifter"; | 
|  | vin-supply = <&pm8058_l14>; | 
|  | regulator-always-on; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | /* | 
|  | * Capella CM3605 light and proximity sensor mounted directly | 
|  | * on the sensor board. | 
|  | */ | 
|  | cm3605 { | 
|  | compatible = "capella,cm3605"; | 
|  | vdd-supply = <&pm8058_l14>; // 2.85V | 
|  | aset-gpios = <&pm8058_gpio 35 GPIO_ACTIVE_LOW>; | 
|  | capella,aset-resistance-ohms = <100000>; | 
|  | /* Trig on both edges - getting close or far away */ | 
|  | interrupts-extended = <&pm8058_gpio 34 IRQ_TYPE_EDGE_BOTH>; | 
|  | /* MPP05 analog input to the XOADC */ | 
|  | io-channels = <&xoadc 0x00 0x05>; | 
|  | io-channel-names = "aout"; | 
|  | pinctrl-names = "default"; | 
|  | pinctrl-0 = <&dragon_cm3605_gpios>, <&dragon_cm3605_mpps>; | 
|  | }; | 
|  |  | 
|  | soc { | 
|  | pinctrl@800000 { | 
|  | /* eMMMC pins, all 8 data lines connected */ | 
|  | dragon_sdcc1_pins: sdcc1 { | 
|  | mux { | 
|  | pins = "gpio159", "gpio160", "gpio161", | 
|  | "gpio162", "gpio163", "gpio164", | 
|  | "gpio165", "gpio166", "gpio167", | 
|  | "gpio168"; | 
|  | function = "sdc1"; | 
|  | }; | 
|  | clk { | 
|  | pins = "gpio167"; /* SDC1 CLK */ | 
|  | drive-strength = <16>; | 
|  | bias-disable; | 
|  | }; | 
|  | cmd { | 
|  | pins = "gpio168"; /* SDC1 CMD */ | 
|  | drive-strength = <10>; | 
|  | bias-pull-up; | 
|  | }; | 
|  | data { | 
|  | /* SDC1 D0 to D7 */ | 
|  | pins = "gpio159", "gpio160", "gpio161", "gpio162", | 
|  | "gpio163", "gpio164", "gpio165", "gpio166"; | 
|  | drive-strength = <10>; | 
|  | bias-pull-up; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | /* | 
|  | * The SDCC3 pins are hardcoded (non-muxable) but need some pin | 
|  | * configuration. | 
|  | */ | 
|  | dragon_sdcc3_pins: sdcc3 { | 
|  | clk { | 
|  | pins = "sdc3_clk"; | 
|  | drive-strength = <8>; | 
|  | bias-disable; | 
|  | }; | 
|  | cmd { | 
|  | pins = "sdc3_cmd"; | 
|  | drive-strength = <8>; | 
|  | bias-pull-up; | 
|  | }; | 
|  | data { | 
|  | pins = "sdc3_data"; | 
|  | drive-strength = <8>; | 
|  | bias-pull-up; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | /* Second SD card slot pins */ | 
|  | dragon_sdcc5_pins: sdcc5 { | 
|  | mux { | 
|  | pins = "gpio95", "gpio96", "gpio97", | 
|  | "gpio98", "gpio99", "gpio100"; | 
|  | function = "sdc5"; | 
|  | }; | 
|  | clk { | 
|  | pins = "gpio97"; /* SDC5 CLK */ | 
|  | drive-strength = <16>; | 
|  | bias-disable; | 
|  | }; | 
|  | cmd { | 
|  | pins = "gpio95"; /* SDC5 CMD */ | 
|  | drive-strength = <10>; | 
|  | bias-pull-up; | 
|  | }; | 
|  | data { | 
|  | /* SDC5 D0 to D3 */ | 
|  | pins = "gpio96", "gpio98", "gpio99", "gpio100"; | 
|  | drive-strength = <10>; | 
|  | bias-pull-up; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | dragon_gsbi8_i2c_pins: gsbi8_i2c { | 
|  | mux { | 
|  | pins = "gpio64", "gpio65"; | 
|  | function = "gsbi8"; | 
|  | }; | 
|  | pinconf { | 
|  | pins = "gpio64", "gpio65"; | 
|  | drive-strength = <16>; | 
|  | /* These have external pull-up 2.2kOhm to 1.8V */ | 
|  | bias-disable; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | dragon_gsbi12_i2c_pins: gsbi12_i2c { | 
|  | mux { | 
|  | pins = "gpio115", "gpio116"; | 
|  | function = "gsbi12"; | 
|  | }; | 
|  | pinconf { | 
|  | pins = "gpio115", "gpio116"; | 
|  | drive-strength = <16>; | 
|  | /* These have external pull-up 4.7kOhm to 1.8V */ | 
|  | bias-disable; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | /* Primary serial port uart 0 pins */ | 
|  | dragon_gsbi12_serial_pins: gsbi12_serial { | 
|  | mux { | 
|  | pins = "gpio117", "gpio118"; | 
|  | function = "gsbi12"; | 
|  | }; | 
|  | tx { | 
|  | pins = "gpio117"; | 
|  | drive-strength = <8>; | 
|  | bias-disable; | 
|  | }; | 
|  | rx { | 
|  | pins = "gpio118"; | 
|  | drive-strength = <2>; | 
|  | bias-pull-up; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | dragon_ebi2_pins: ebi2 { | 
|  | /* | 
|  | * Pins used by EBI2 on the Dragonboard, actually only | 
|  | * CS2 is used by a real peripheral. CS0 is just | 
|  | * routed to a test point. | 
|  | */ | 
|  | mux0 { | 
|  | pins = | 
|  | /* "gpio39", CS1A_N this is not good to mux */ | 
|  | "gpio40", /* CS2A_N */ | 
|  | "gpio134"; /* CS0_N testpoint TP29 */ | 
|  | function = "ebi2cs"; | 
|  | }; | 
|  | mux1 { | 
|  | pins = | 
|  | /* EBI2_ADDR_7 downto EBI2_ADDR_0 address bus */ | 
|  | "gpio123", "gpio124", "gpio125", "gpio126", | 
|  | "gpio127", "gpio128", "gpio129", "gpio130", | 
|  | /* EBI2_DATA_15 downto EBI2_DATA_0 data bus */ | 
|  | "gpio135", "gpio136", "gpio137", "gpio138", | 
|  | "gpio139", "gpio140", "gpio141", "gpio142", | 
|  | "gpio143", "gpio144", "gpio145", "gpio146", | 
|  | "gpio147", "gpio148", "gpio149", "gpio150", | 
|  | "gpio151", /* EBI2_OE_N */ | 
|  | "gpio153", /* EBI2_ADV */ | 
|  | "gpio157"; /* EBI2_WE_N */ | 
|  | function = "ebi2"; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | /* Interrupt line for the KXSD9 accelerometer */ | 
|  | dragon_kxsd9_gpios: kxsd9 { | 
|  | irq { | 
|  | pins = "gpio57"; /* IRQ line */ | 
|  | bias-pull-up; | 
|  | }; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | qcom,ssbi@500000 { | 
|  | pmic@0 { | 
|  | keypad@148 { | 
|  | linux,keymap = < | 
|  | MATRIX_KEY(0, 0, KEY_MENU) | 
|  | MATRIX_KEY(0, 2, KEY_1) | 
|  | MATRIX_KEY(0, 3, KEY_4) | 
|  | MATRIX_KEY(0, 4, KEY_7) | 
|  | MATRIX_KEY(1, 0, KEY_UP) | 
|  | MATRIX_KEY(1, 1, KEY_LEFT) | 
|  | MATRIX_KEY(1, 2, KEY_DOWN) | 
|  | MATRIX_KEY(1, 3, KEY_5) | 
|  | MATRIX_KEY(1, 3, KEY_8) | 
|  | MATRIX_KEY(2, 0, KEY_HOME) | 
|  | MATRIX_KEY(2, 1, KEY_REPLY) | 
|  | MATRIX_KEY(2, 2, KEY_2) | 
|  | MATRIX_KEY(2, 3, KEY_6) | 
|  | MATRIX_KEY(3, 0, KEY_VOLUMEUP) | 
|  | MATRIX_KEY(3, 1, KEY_RIGHT) | 
|  | MATRIX_KEY(3, 2, KEY_3) | 
|  | MATRIX_KEY(3, 3, KEY_9) | 
|  | MATRIX_KEY(3, 4, KEY_SWITCHVIDEOMODE) | 
|  | MATRIX_KEY(4, 0, KEY_VOLUMEDOWN) | 
|  | MATRIX_KEY(4, 1, KEY_BACK) | 
|  | MATRIX_KEY(4, 2, KEY_CAMERA) | 
|  | MATRIX_KEY(4, 3, KEY_KBDILLUMTOGGLE) | 
|  | >; | 
|  | keypad,num-rows = <6>; | 
|  | keypad,num-columns = <5>; | 
|  | }; | 
|  |  | 
|  | gpio@150 { | 
|  | dragon_ethernet_gpios: ethernet-gpios { | 
|  | pinconf { | 
|  | pins = "gpio7"; | 
|  | function = "normal"; | 
|  | input-enable; | 
|  | bias-disable; | 
|  | power-source = <PM8058_GPIO_S3>; | 
|  | }; | 
|  | }; | 
|  | dragon_bmp085_gpios: bmp085-gpios { | 
|  | pinconf { | 
|  | pins = "gpio16"; | 
|  | function = "normal"; | 
|  | input-enable; | 
|  | bias-disable; | 
|  | power-source = <PM8058_GPIO_S3>; | 
|  | }; | 
|  | }; | 
|  | dragon_mpu3050_gpios: mpu3050-gpios { | 
|  | pinconf { | 
|  | pins = "gpio17"; | 
|  | function = "normal"; | 
|  | input-enable; | 
|  | bias-disable; | 
|  | power-source = <PM8058_GPIO_S3>; | 
|  | }; | 
|  | }; | 
|  | dragon_sdcc3_gpios: sdcc3-gpios { | 
|  | pinconf { | 
|  | pins = "gpio22"; | 
|  | function = "normal"; | 
|  | input-enable; | 
|  | bias-disable; | 
|  | power-source = <PM8058_GPIO_S3>; | 
|  | }; | 
|  | }; | 
|  | dragon_sdcc5_gpios: sdcc5-gpios { | 
|  | pinconf { | 
|  | pins = "gpio26"; | 
|  | function = "normal"; | 
|  | input-enable; | 
|  | bias-pull-up; | 
|  | qcom,pull-up-strength = <PMIC_GPIO_PULL_UP_30>; | 
|  | power-source = <PM8058_GPIO_S3>; | 
|  | }; | 
|  | }; | 
|  | dragon_ak8975_gpios: ak8975-gpios { | 
|  | pinconf { | 
|  | pins = "gpio33"; | 
|  | function = "normal"; | 
|  | input-enable; | 
|  | bias-disable; | 
|  | power-source = <PM8058_GPIO_S3>; | 
|  | }; | 
|  | }; | 
|  | dragon_cm3605_gpios: cm3605-gpios { | 
|  | /* Pin 34 connected to the proxy IRQ */ | 
|  | pinconf_gpio34 { | 
|  | pins = "gpio34"; | 
|  | function = "normal"; | 
|  | input-enable; | 
|  | bias-disable; | 
|  | power-source = <PM8058_GPIO_S3>; | 
|  | }; | 
|  | /* Pin 35 connected to ASET */ | 
|  | pinconf_gpio35 { | 
|  | pins = "gpio35"; | 
|  | function = "normal"; | 
|  | output-high; | 
|  | bias-disable; | 
|  | power-source = <PM8058_GPIO_S3>; | 
|  | }; | 
|  | }; | 
|  | dragon_veth_gpios: veth-gpios { | 
|  | pinconf { | 
|  | pins = "gpio40"; | 
|  | function = "normal"; | 
|  | bias-disable; | 
|  | drive-push-pull; | 
|  | }; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | mpps@50 { | 
|  | dragon_cm3605_mpps: cm3605-mpps { | 
|  | pinconf { | 
|  | pins = "mpp5"; | 
|  | function = "analog"; | 
|  | input-enable; | 
|  | bias-high-impedance; | 
|  | /* Let's use channel 5 */ | 
|  | qcom,amux-route = <PMIC_MPP_AMUX_ROUTE_CH5>; | 
|  | power-source = <PM8058_GPIO_S3>; | 
|  | }; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | xoadc@197 { | 
|  | /* Reference voltage 2.2 V */ | 
|  | xoadc-ref-supply = <&pm8058_l18>; | 
|  |  | 
|  | /* Board-specific channels */ | 
|  | mpp5@5 { | 
|  | /* Connected to AOUT of ALS sensor */ | 
|  | reg = <0x00 0x05>; | 
|  | }; | 
|  | mpp6@6 { | 
|  | /* Connected to test point TP43 */ | 
|  | reg = <0x00 0x06>; | 
|  | }; | 
|  | mpp7@7 { | 
|  | /* Connected to battery thermistor */ | 
|  | reg = <0x00 0x07>; | 
|  | }; | 
|  | mpp8@8 { | 
|  | /* Connected to battery ID detector */ | 
|  | reg = <0x00 0x08>; | 
|  | }; | 
|  | mpp9@9 { | 
|  | /* Connected to XO thermistor */ | 
|  | reg = <0x00 0x09>; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | led@48 { | 
|  | /* | 
|  | * The keypad LED @0x48 is routed to | 
|  | * the sensor board where it is | 
|  | * connected to an infrared LED | 
|  | * SFH4650 (60mW, @850nm) next to the | 
|  | * ambient light and proximity sensor | 
|  | * Capella Microsystems CM3605. | 
|  | */ | 
|  | compatible = "qcom,pm8058-keypad-led"; | 
|  | reg = <0x48>; | 
|  | label = "pm8058:infrared:proximitysensor"; | 
|  | default-state = "off"; | 
|  | linux,default-trigger = "cm3605"; | 
|  | }; | 
|  | led@131 { | 
|  | compatible = "qcom,pm8058-led"; | 
|  | reg = <0x131>; | 
|  | label = "pm8058:red"; | 
|  | default-state = "off"; | 
|  | }; | 
|  | led@132 { | 
|  | /* | 
|  | * This is actually green too on my | 
|  | * board, but documented as yellow. | 
|  | */ | 
|  | compatible = "qcom,pm8058-led"; | 
|  | reg = <0x132>; | 
|  | label = "pm8058:yellow"; | 
|  | default-state = "off"; | 
|  | linux,default-trigger = "mmc0"; | 
|  | }; | 
|  | led@133 { | 
|  | compatible = "qcom,pm8058-led"; | 
|  | reg = <0x133>; | 
|  | label = "pm8058:green"; | 
|  | default-state = "on"; | 
|  | linux,default-trigger = "heartbeat"; | 
|  | }; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | gsbi@19800000 { | 
|  | status = "ok"; | 
|  | qcom,mode = <GSBI_PROT_I2C>; | 
|  |  | 
|  | i2c@19880000 { | 
|  | status = "ok"; | 
|  | pinctrl-names = "default"; | 
|  | pinctrl-0 = <&dragon_gsbi8_i2c_pins>; | 
|  |  | 
|  | eeprom@52 { | 
|  | /* A 16KiB Platform ID EEPROM on the CPU carrier board */ | 
|  | compatible = "atmel,24c128"; | 
|  | reg = <0x52>; | 
|  | vcc-supply = <&pm8058_s3>; | 
|  | pagesize = <64>; | 
|  | }; | 
|  | wm8903: wm8903@1a { | 
|  | /* This Woolfson Micro device has an unrouted interrupt line */ | 
|  | compatible = "wlf,wm8903"; | 
|  | reg = <0x1a>; | 
|  |  | 
|  | AVDD-supply = <&pm8058_l16>; | 
|  | CPVDD-supply = <&pm8058_l16>; | 
|  | DBVDD-supply = <&pm8058_s3>; | 
|  | DCVDD-supply = <&pm8058_l0>; | 
|  |  | 
|  | gpio-controller; | 
|  | #gpio-cells = <2>; | 
|  |  | 
|  | micdet-cfg = <0>; | 
|  | micdet-delay = <100>; | 
|  | gpio-cfg = <0xffffffff 0xffffffff 0 0xffffffff 0xffffffff>; | 
|  | }; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | gsbi@19c00000 { | 
|  | status = "ok"; | 
|  | qcom,mode = <GSBI_PROT_I2C_UART>; | 
|  |  | 
|  | serial@19c40000 { | 
|  | status = "ok"; | 
|  | pinctrl-names = "default"; | 
|  | pinctrl-0 = <&dragon_gsbi12_serial_pins>; | 
|  | }; | 
|  |  | 
|  | i2c@19c80000 { | 
|  | status = "ok"; | 
|  | pinctrl-names = "default"; | 
|  | pinctrl-0 = <&dragon_gsbi12_i2c_pins>; | 
|  |  | 
|  | ak8975@c { | 
|  | compatible = "asahi-kasei,ak8975"; | 
|  | reg = <0x0c>; | 
|  | interrupt-parent = <&pm8058_gpio>; | 
|  | interrupts = <33 IRQ_TYPE_EDGE_RISING>; | 
|  | pinctrl-names = "default"; | 
|  | pinctrl-0 = <&dragon_ak8975_gpios>; | 
|  | vid-supply = <&pm8058_lvs0>; // 1.8V | 
|  | vdd-supply = <&pm8058_l14>; // 2.85V | 
|  | }; | 
|  | bmp085@77 { | 
|  | compatible = "bosch,bmp085"; | 
|  | reg = <0x77>; | 
|  | interrupt-parent = <&pm8058_gpio>; | 
|  | interrupts = <16 IRQ_TYPE_EDGE_RISING>; | 
|  | reset-gpios = <&tlmm 86 GPIO_ACTIVE_LOW>; | 
|  | pinctrl-names = "default"; | 
|  | pinctrl-0 = <&dragon_bmp085_gpios>; | 
|  | vddd-supply = <&pm8058_lvs0>; // 1.8V | 
|  | vdda-supply = <&pm8058_l14>; // 2.85V | 
|  | }; | 
|  | mpu3050@68 { | 
|  | compatible = "invensense,mpu3050"; | 
|  | reg = <0x68>; | 
|  | /* | 
|  | * GPIO17 is pulled high by a 10k | 
|  | * resistor to VLOGIC so needs to be | 
|  | * active low/falling edge. | 
|  | */ | 
|  | interrupts-extended = <&pm8058_gpio 17 IRQ_TYPE_EDGE_FALLING>; | 
|  | pinctrl-names = "default"; | 
|  | pinctrl-0 = <&dragon_mpu3050_gpios>; | 
|  | vlogic-supply = <&pm8058_lvs0>; // 1.8V | 
|  | vdd-supply = <&pm8058_l14>; // 2.85V | 
|  |  | 
|  | /* | 
|  | * The MPU-3050 acts as a hub for the | 
|  | * accelerometer. | 
|  | */ | 
|  | i2c-gate { | 
|  | #address-cells = <1>; | 
|  | #size-cells = <0>; | 
|  |  | 
|  | kxsd9@18 { | 
|  | compatible = "kionix,kxsd9"; | 
|  | reg = <0x18>; | 
|  | interrupt-parent = <&tlmm>; | 
|  | interrupts = <57 IRQ_TYPE_EDGE_FALLING>; | 
|  | pinctrl-names = "default"; | 
|  | pinctrl-0 = <&dragon_kxsd9_gpios>; | 
|  | iovdd-supply = <&pm8058_lvs0>; // 1.8V | 
|  | vdd-supply = <&pm8058_l14>; // 2.85V | 
|  | }; | 
|  | }; | 
|  | }; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | external-bus@1a100000 { | 
|  | /* The EBI2 will instantiate first, then populate its children */ | 
|  | status = "ok"; | 
|  | pinctrl-names = "default"; | 
|  | pinctrl-0 = <&dragon_ebi2_pins>; | 
|  |  | 
|  | /* | 
|  | * An on-board SMSC LAN9221 chip for "debug ethernet", | 
|  | * which is actually just an ordinary ethernet on the | 
|  | * EBI2. This has a 25MHz chrystal next to it, so no | 
|  | * clocking is needed. | 
|  | */ | 
|  | ethernet-ebi2@2,0 { | 
|  | compatible = "smsc,lan9221", "smsc,lan9115"; | 
|  | reg = <2 0x0 0x100>; | 
|  | /* | 
|  | * The second interrupt is the PME interrupt | 
|  | * for network wakeup, connected to the TLMM. | 
|  | */ | 
|  | interrupts-extended = <&pm8058_gpio 7 IRQ_TYPE_EDGE_FALLING>, | 
|  | <&tlmm 29 IRQ_TYPE_EDGE_RISING>; | 
|  | reset-gpios = <&tlmm 30 GPIO_ACTIVE_LOW>; | 
|  | vdd33a-supply = <&dragon_veth>; | 
|  | vddvario-supply = <&dragon_vario>; | 
|  | pinctrl-names = "default"; | 
|  | pinctrl-0 = <&dragon_ethernet_gpios>; | 
|  | phy-mode = "mii"; | 
|  | reg-io-width = <2>; | 
|  | smsc,force-external-phy; | 
|  | /* IRQ on edge falling = active low */ | 
|  | smsc,irq-active-low; | 
|  | smsc,irq-push-pull; | 
|  |  | 
|  | /* | 
|  | * SLOW chipselect config | 
|  | * Delay 9 cycles (140ns@64MHz) between SMSC | 
|  | * LAN9221 Ethernet controller reads and writes | 
|  | * on CS2. | 
|  | */ | 
|  | qcom,xmem-recovery-cycles = <0>; | 
|  | qcom,xmem-write-hold-cycles = <3>; | 
|  | qcom,xmem-write-delta-cycles = <31>; | 
|  | qcom,xmem-read-delta-cycles = <28>; | 
|  | qcom,xmem-write-wait-cycles = <9>; | 
|  | qcom,xmem-read-wait-cycles = <9>; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | rpm@104000 { | 
|  | /* | 
|  | * Set up of the PMIC RPM regulators for this board | 
|  | * PM8901 supplies "preliminary regulators" whatever | 
|  | * that means | 
|  | */ | 
|  | pm8901-regulators { | 
|  | vdd_l0-supply = <&pm8901_s4>; | 
|  | vdd_l1-supply = <&vph>; | 
|  | vdd_l2-supply = <&vph>; | 
|  | vdd_l3-supply = <&vph>; | 
|  | vdd_l4-supply = <&vph>; | 
|  | vdd_l5-supply = <&vph>; | 
|  | vdd_l6-supply = <&vph>; | 
|  | /* vdd_s0-supply, vdd_s1-supply: SAW regulators */ | 
|  | vdd_s2-supply = <&vph>; | 
|  | vdd_s3-supply = <&vph>; | 
|  | vdd_s4-supply = <&vph>; | 
|  | lvs0_in-supply = <&pm8058_s3>; | 
|  | lvs1_in-supply = <&pm8901_s4>; | 
|  | lvs2_in-supply = <&pm8058_l0>; | 
|  | lvs3_in-supply = <&pm8058_s2>; | 
|  | mvs_in-supply = <&pm8058_s3>; | 
|  |  | 
|  | l0 { | 
|  | regulator-min-microvolt = <1200000>; | 
|  | regulator-max-microvolt = <1200000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l1 { | 
|  | regulator-min-microvolt = <3300000>; | 
|  | regulator-max-microvolt = <3300000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l2 { | 
|  | regulator-min-microvolt = <2850000>; | 
|  | regulator-max-microvolt = <3300000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l3 { | 
|  | regulator-min-microvolt = <3300000>; | 
|  | regulator-max-microvolt = <3300000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l4 { | 
|  | regulator-min-microvolt = <2600000>; | 
|  | regulator-max-microvolt = <2600000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l5 { | 
|  | regulator-min-microvolt = <2850000>; | 
|  | regulator-max-microvolt = <2850000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l6 { | 
|  | regulator-min-microvolt = <2200000>; | 
|  | regulator-max-microvolt = <2200000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  |  | 
|  | /* s0 and s1 are SAW regulators controlled over SPM */ | 
|  | s2 { | 
|  | regulator-min-microvolt = <1300000>; | 
|  | regulator-max-microvolt = <1300000>; | 
|  | qcom,switch-mode-frequency = <1600000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | s3 { | 
|  | regulator-min-microvolt = <1100000>; | 
|  | regulator-max-microvolt = <1100000>; | 
|  | qcom,switch-mode-frequency = <1600000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | s4 { | 
|  | regulator-min-microvolt = <1225000>; | 
|  | regulator-max-microvolt = <1225000>; | 
|  | qcom,switch-mode-frequency = <1600000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  |  | 
|  | /* LVS0 thru 3 and mvs0 are just switches */ | 
|  | lvs0 { | 
|  | regulator-always-on; | 
|  | }; | 
|  | lvs1 { }; | 
|  | lvs2 { }; | 
|  | lvs3 { }; | 
|  | mvs0 {}; | 
|  |  | 
|  | }; | 
|  |  | 
|  | pm8058-regulators { | 
|  | vdd_l0_l1_lvs-supply = <&pm8058_s3>; | 
|  | vdd_l2_l11_l12-supply = <&vph>; | 
|  | vdd_l3_l4_l5-supply = <&vph>; | 
|  | vdd_l6_l7-supply = <&vph>; | 
|  | vdd_l8-supply = <&vph>; | 
|  | vdd_l9-supply = <&vph>; | 
|  | vdd_l10-supply = <&vph>; | 
|  | vdd_l13_l16-supply = <&pm8058_s4>; | 
|  | vdd_l14_l15-supply = <&vph>; | 
|  | vdd_l17_l18-supply = <&vph>; | 
|  | vdd_l19_l20-supply = <&vph>; | 
|  | vdd_l21-supply = <&pm8058_s3>; | 
|  | vdd_l22-supply = <&pm8058_s3>; | 
|  | vdd_l23_l24_l25-supply = <&pm8058_s3>; | 
|  | vdd_s0-supply = <&vph>; | 
|  | vdd_s1-supply = <&vph>; | 
|  | vdd_s2-supply = <&vph>; | 
|  | vdd_s3-supply = <&vph>; | 
|  | vdd_s4-supply = <&vph>; | 
|  | vdd_ncp-supply = <&vph>; | 
|  |  | 
|  | l0 { | 
|  | regulator-min-microvolt = <1200000>; | 
|  | regulator-max-microvolt = <1200000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l1 { | 
|  | regulator-min-microvolt = <1200000>; | 
|  | regulator-max-microvolt = <1200000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l2 { | 
|  | regulator-min-microvolt = <1800000>; | 
|  | regulator-max-microvolt = <2600000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l3 { | 
|  | regulator-min-microvolt = <1800000>; | 
|  | regulator-max-microvolt = <1800000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l4 { | 
|  | regulator-min-microvolt = <2850000>; | 
|  | regulator-max-microvolt = <2850000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l5 { | 
|  | regulator-min-microvolt = <2850000>; | 
|  | regulator-max-microvolt = <2850000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l6 { | 
|  | regulator-min-microvolt = <3000000>; | 
|  | regulator-max-microvolt = <3600000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l7 { | 
|  | regulator-min-microvolt = <1800000>; | 
|  | regulator-max-microvolt = <1800000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l8 { | 
|  | regulator-min-microvolt = <2900000>; | 
|  | regulator-max-microvolt = <3050000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l9 { | 
|  | regulator-min-microvolt = <1800000>; | 
|  | regulator-max-microvolt = <1800000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l10 { | 
|  | regulator-min-microvolt = <2600000>; | 
|  | regulator-max-microvolt = <2600000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l11 { | 
|  | regulator-min-microvolt = <1500000>; | 
|  | regulator-max-microvolt = <1500000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l12 { | 
|  | regulator-min-microvolt = <2900000>; | 
|  | regulator-max-microvolt = <2900000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l13 { | 
|  | regulator-min-microvolt = <2050000>; | 
|  | regulator-max-microvolt = <2050000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l14 { | 
|  | regulator-min-microvolt = <2850000>; | 
|  | regulator-max-microvolt = <2850000>; | 
|  | }; | 
|  | l15 { | 
|  | regulator-min-microvolt = <2850000>; | 
|  | regulator-max-microvolt = <2850000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l16 { | 
|  | regulator-min-microvolt = <1800000>; | 
|  | regulator-max-microvolt = <1800000>; | 
|  | bias-pull-down; | 
|  | regulator-always-on; | 
|  | }; | 
|  | l17 { | 
|  | // 1.5V according to schematic | 
|  | regulator-min-microvolt = <2600000>; | 
|  | regulator-max-microvolt = <2600000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l18 { | 
|  | regulator-min-microvolt = <2200000>; | 
|  | regulator-max-microvolt = <2200000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l19 { | 
|  | regulator-min-microvolt = <2500000>; | 
|  | regulator-max-microvolt = <2500000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l20 { | 
|  | regulator-min-microvolt = <1800000>; | 
|  | regulator-max-microvolt = <1800000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l21 { | 
|  | // 1.1 V according to schematic | 
|  | regulator-min-microvolt = <1200000>; | 
|  | regulator-max-microvolt = <1200000>; | 
|  | bias-pull-down; | 
|  | regulator-always-on; | 
|  | }; | 
|  | l22 { | 
|  | // 1.2 V according to schematic | 
|  | regulator-min-microvolt = <1150000>; | 
|  | regulator-max-microvolt = <1150000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l23 { | 
|  | // Unused | 
|  | regulator-min-microvolt = <1200000>; | 
|  | regulator-max-microvolt = <1200000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l24 { | 
|  | // Unused | 
|  | regulator-min-microvolt = <1200000>; | 
|  | regulator-max-microvolt = <1200000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | l25 { | 
|  | regulator-min-microvolt = <1200000>; | 
|  | regulator-max-microvolt = <1200000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  |  | 
|  | s0 { | 
|  | // regulator-min-microvolt = <500000>; | 
|  | // regulator-max-microvolt = <1325000>; | 
|  | regulator-min-microvolt = <1100000>; | 
|  | regulator-max-microvolt = <1100000>; | 
|  | qcom,switch-mode-frequency = <1600000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | s1 { | 
|  | // regulator-min-microvolt = <500000>; | 
|  | // regulator-max-microvolt = <1250000>; | 
|  | regulator-min-microvolt = <1100000>; | 
|  | regulator-max-microvolt = <1100000>; | 
|  | qcom,switch-mode-frequency = <1600000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | s2 { | 
|  | // 1.3 V according to schematic | 
|  | regulator-min-microvolt = <1200000>; | 
|  | regulator-max-microvolt = <1400000>; | 
|  | qcom,switch-mode-frequency = <1600000>; | 
|  | bias-pull-down; | 
|  | }; | 
|  | s3 { | 
|  | regulator-min-microvolt = <1800000>; | 
|  | regulator-max-microvolt = <1800000>; | 
|  | qcom,switch-mode-frequency = <1600000>; | 
|  | regulator-always-on; | 
|  | bias-pull-down; | 
|  | }; | 
|  | s4 { | 
|  | regulator-min-microvolt = <2200000>; | 
|  | regulator-max-microvolt = <2200000>; | 
|  | qcom,switch-mode-frequency = <1600000>; | 
|  | regulator-always-on; | 
|  | bias-pull-down; | 
|  | }; | 
|  |  | 
|  | /* LVS0 and LVS1 are just switches */ | 
|  | lvs0 { | 
|  | bias-pull-down; | 
|  | }; | 
|  | lvs1 { | 
|  | bias-pull-down; | 
|  | }; | 
|  |  | 
|  | ncp { | 
|  | regulator-min-microvolt = <1800000>; | 
|  | regulator-max-microvolt = <1800000>; | 
|  | qcom,switch-mode-frequency = <1600000>; | 
|  | }; | 
|  | }; | 
|  | }; | 
|  | amba { | 
|  | /* Internal 3.69 GiB eMMC */ | 
|  | sdcc@12400000 { | 
|  | status = "okay"; | 
|  | pinctrl-names = "default"; | 
|  | pinctrl-0 = <&dragon_sdcc1_pins>; | 
|  | vmmc-supply = <&pm8901_l5>; | 
|  | vqmmc-supply = <&pm8901_lvs0>; | 
|  | }; | 
|  |  | 
|  | /* External micro SD card, directly connected, pulled up to 2.85 V */ | 
|  | sdcc@12180000 { | 
|  | status = "okay"; | 
|  | /* Enable SSBI GPIO 22 as input, use for card detect */ | 
|  | pinctrl-names = "default"; | 
|  | pinctrl-0 = <&dragon_sdcc3_pins>, <&dragon_sdcc3_gpios>; | 
|  | cd-gpios = <&pm8058_gpio 22 GPIO_ACTIVE_LOW>; | 
|  | wp-gpios = <&tlmm 110 GPIO_ACTIVE_HIGH>; | 
|  | vmmc-supply = <&pm8058_l14>; | 
|  | }; | 
|  |  | 
|  | /* | 
|  | * Second external micro SD card, using two TXB104RGYR levelshifters | 
|  | * to lift from 1.8 V to 2.85 V | 
|  | */ | 
|  | sdcc@12200000 { | 
|  | status = "okay"; | 
|  | /* Enable SSBI GPIO 26 as input, use for card detect */ | 
|  | pinctrl-names = "default"; | 
|  | pinctrl-0 = <&dragon_sdcc5_pins>, <&dragon_sdcc5_gpios>; | 
|  | cd-gpios = <&pm8058_gpio 26 GPIO_ACTIVE_LOW>; | 
|  | wp-gpios = <&tlmm 106 GPIO_ACTIVE_HIGH>; | 
|  | vmmc-supply = <&pm8058_l14>; | 
|  | vqmmc-supply = <&dragon_vio_txb>; | 
|  | }; | 
|  | }; | 
|  | }; | 
|  | }; |