blob: 4b8872cc8bf935393550c2f6b04c7d0ba50ae0c1 [file] [log] [blame]
/*
* 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 "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;
};
};
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"; /* SDC5 CLK */
drive-strength = <16>;
bias-disable;
};
cmd {
pins = "gpio168"; /* SDC5 CMD */
drive-strength = <10>;
bias-pull-up;
};
data {
/* SDC5 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_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";
};
};
};
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_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_veth_gpios: veth-gpios {
pinconf {
pins = "gpio40";
function = "normal";
bias-disable;
drive-push-pull;
};
};
};
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";
};
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@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@0c {
compatible = "asahi-kasei,ak8975";
reg = <0x0c>;
/* GPIO33 has interrupt 224 on the PM8058 */
interrupt-parent = <&pm8058_gpio>;
interrupts = <224 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>;
/* GPIO16 has interrupt 207 on the PM8058 */
interrupt-parent = <&pm8058_gpio>;
interrupts = <207 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
};
};
};
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>;
/*
* GPIO7 has interrupt 198 on the PM8058
* The second interrupt is the PME interrupt
* for network wakeup, connected to the TLMM.
*/
interrupts-extended = <&pmicintc 198 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>;
};
};
};
};