/*
 * 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>;
			};
		};
	};
};
