| // SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) | 
 | #include <dt-bindings/input/input.h> | 
 | #include <dt-bindings/gpio/gpio.h> | 
 | #include <dt-bindings/leds/common.h> | 
 | #include <dt-bindings/pinctrl/qcom,pmic-gpio.h> | 
 | #include <dt-bindings/pinctrl/qcom,pmic-mpp.h> | 
 | #include "qcom-msm8660.dtsi" | 
 | #include "pm8058.dtsi" | 
 |  | 
 | / { | 
 | 	model = "Qualcomm APQ8060 Dragonboard"; | 
 | 	compatible = "qcom,apq8060-dragonboard", "qcom,msm8660"; | 
 |  | 
 | 	aliases { | 
 | 		serial0 = &gsbi12_serial; | 
 | 	}; | 
 |  | 
 | 	chosen { | 
 | 		stdout-path = "serial0:115200n8"; | 
 | 	}; | 
 |  | 
 | 	/* 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-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 = <&pm8058_xoadc 0x00 0x05>; | 
 | 		io-channel-names = "aout"; | 
 | 		pinctrl-names = "default"; | 
 | 		pinctrl-0 = <&dragon_cm3605_gpios>, <&dragon_cm3605_mpps>; | 
 | 	}; | 
 | }; | 
 |  | 
 | &ebi2 { | 
 | 	/* The EBI2 will instantiate first, then populate its children */ | 
 | 	pinctrl-names = "default"; | 
 | 	pinctrl-0 = <&dragon_ebi2_pins>; | 
 | 	status = "okay"; | 
 |  | 
 | 	/* | 
 | 	 * 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@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; | 
 | 		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>; | 
 | 	}; | 
 | }; | 
 |  | 
 | &gsbi3 { | 
 | 	qcom,mode = <GSBI_PROT_I2C>; | 
 | 	status = "okay"; | 
 | }; | 
 |  | 
 | &gsbi3_i2c { | 
 | 	pinctrl-names = "default"; | 
 | 	pinctrl-0 = <&dragon_gsbi3_i2c_pins>; | 
 | 	status = "okay"; | 
 |  | 
 | 	touchscreen@24 { | 
 | 		compatible = "cypress,cy8ctma340"; | 
 | 		reg = <0x24>; | 
 | 		/* Certainly we can do at least 400 kHz */ | 
 | 		clock-frequency = <400000>; | 
 | 		/* IRQ on GPIO61 called /CTP_INT */ | 
 | 		interrupt-parent = <&tlmm>; | 
 | 		interrupts = <61 IRQ_TYPE_EDGE_FALLING>; | 
 | 		/* | 
 | 		 * The I2C bus is using a PCA9306 level translator from L16A | 
 | 		 * to L2B so these two voltages are needed and L16A is | 
 | 		 * kind of the IO voltage, however L16Aisn't really fed to | 
 | 		 * the TMA340, which relies entirely on L2B (PM8901 L2). | 
 | 		 */ | 
 | 		vcpin-supply = <&pm8058_l16>; | 
 | 		vdd-supply = <&pm8901_l2>; | 
 | 		/* GPIO58, called WAKE_CTP */ | 
 | 		reset-gpios = <&tlmm 58 GPIO_ACTIVE_LOW>; | 
 | 		touchscreen-size-x = <480>; | 
 | 		touchscreen-size-y = <800>; | 
 | 		active-interval-ms = <0>; | 
 | 		touch-timeout-ms = <255>; | 
 | 		lowpower-interval-ms = <10>; | 
 | 		bootloader-key = /bits/ 8 <0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07>; | 
 | 		pinctrl-names = "default"; | 
 | 		pinctrl-0 = <&dragon_tma340_gpios>; | 
 | 	}; | 
 | }; | 
 |  | 
 | &gsbi8 { | 
 | 	qcom,mode = <GSBI_PROT_I2C>; | 
 | 	status = "okay"; | 
 | }; | 
 |  | 
 | &gsbi8_i2c { | 
 | 	pinctrl-names = "default"; | 
 | 	pinctrl-0 = <&dragon_gsbi8_i2c_pins>; | 
 | 	status = "okay"; | 
 |  | 
 | 	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>; | 
 | 	}; | 
 | }; | 
 |  | 
 | &gsbi12 { | 
 | 	qcom,mode = <GSBI_PROT_I2C_UART>; | 
 | 	status = "okay"; | 
 | }; | 
 |  | 
 | &gsbi12_serial { | 
 | 	pinctrl-names = "default"; | 
 | 	pinctrl-0 = <&dragon_gsbi12_serial_pins>; | 
 | 	status = "okay"; | 
 | }; | 
 |  | 
 | &gsbi12_i2c { | 
 | 	pinctrl-names = "default"; | 
 | 	pinctrl-0 = <&dragon_gsbi12_i2c_pins>; | 
 | 	status = "okay"; | 
 |  | 
 | 	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 | 
 | 			}; | 
 | 		}; | 
 | 	}; | 
 | }; | 
 |  | 
 | &pm8058 { | 
 | 	interrupts-extended = <&tlmm 88 IRQ_TYPE_LEVEL_LOW>; | 
 | }; | 
 |  | 
 | &pm8058_gpio { | 
 | 	dragon_ethernet_gpios: ethernet-state { | 
 | 		pinconf { | 
 | 			pins = "gpio7"; | 
 | 			function = "normal"; | 
 | 			input-enable; | 
 | 			bias-disable; | 
 | 			power-source = <PM8058_GPIO_S3>; | 
 | 		}; | 
 | 	}; | 
 | 	dragon_bmp085_gpios: bmp085-state { | 
 | 		pinconf { | 
 | 			pins = "gpio16"; | 
 | 			function = "normal"; | 
 | 			input-enable; | 
 | 			bias-disable; | 
 | 			power-source = <PM8058_GPIO_S3>; | 
 | 		}; | 
 | 	}; | 
 | 	dragon_mpu3050_gpios: mpu3050-state { | 
 | 		pinconf { | 
 | 			pins = "gpio17"; | 
 | 			function = "normal"; | 
 | 			input-enable; | 
 | 			bias-disable; | 
 | 			power-source = <PM8058_GPIO_S3>; | 
 | 		}; | 
 | 	}; | 
 | 	dragon_sdcc3_gpios: sdcc3-state { | 
 | 		pinconf { | 
 | 			pins = "gpio22"; | 
 | 			function = "normal"; | 
 | 			input-enable; | 
 | 			bias-disable; | 
 | 			power-source = <PM8058_GPIO_S3>; | 
 | 		}; | 
 | 	}; | 
 | 	dragon_sdcc5_gpios: sdcc5-state { | 
 | 		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-state { | 
 | 		pinconf { | 
 | 			pins = "gpio33"; | 
 | 			function = "normal"; | 
 | 			input-enable; | 
 | 			bias-disable; | 
 | 			power-source = <PM8058_GPIO_S3>; | 
 | 		}; | 
 | 	}; | 
 | 	dragon_cm3605_gpios: cm3605-state { | 
 | 		/* Pin 34 connected to the proxy IRQ */ | 
 | 		gpio34-pins { | 
 | 			pins = "gpio34"; | 
 | 			function = "normal"; | 
 | 			input-enable; | 
 | 			bias-disable; | 
 | 			power-source = <PM8058_GPIO_S3>; | 
 | 		}; | 
 | 		/* Pin 35 connected to ASET */ | 
 | 		gpio35-pins { | 
 | 			pins = "gpio35"; | 
 | 			function = "normal"; | 
 | 			output-high; | 
 | 			bias-disable; | 
 | 			power-source = <PM8058_GPIO_S3>; | 
 | 		}; | 
 | 	}; | 
 | 	dragon_veth_gpios: veth-state { | 
 | 		pinconf { | 
 | 			pins = "gpio40"; | 
 | 			function = "normal"; | 
 | 			bias-disable; | 
 | 			drive-push-pull; | 
 | 		}; | 
 | 	}; | 
 | }; | 
 |  | 
 | &pm8058_keypad { | 
 | 	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>; | 
 | }; | 
 |  | 
 | &pm8058_led48 { | 
 | 	/* | 
 | 	 * 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. | 
 | 	 */ | 
 | 	label = "pm8058:infrared:proximitysensor"; | 
 | 	default-state = "off"; | 
 | 	linux,default-trigger = "cm3605"; | 
 | 	status = "okay"; | 
 | }; | 
 |  | 
 | &pm8058_led131 { | 
 | 	label = "pm8058:red"; | 
 | 	color = <LED_COLOR_ID_RED>; | 
 | 	default-state = "off"; | 
 | 	status = "okay"; | 
 | }; | 
 |  | 
 | &pm8058_led132 { | 
 | 	/* | 
 | 	 * This is actually green too on my | 
 | 	 * board, but documented as yellow. | 
 | 	 */ | 
 | 	label = "pm8058:yellow"; | 
 | 	color = <LED_COLOR_ID_YELLOW>; | 
 | 	default-state = "off"; | 
 | 	linux,default-trigger = "mmc0"; | 
 | 	status = "okay"; | 
 | }; | 
 |  | 
 | &pm8058_led133 { | 
 | 	label = "pm8058:green"; | 
 | 	function = LED_FUNCTION_HEARTBEAT; | 
 | 	color = <LED_COLOR_ID_GREEN>; | 
 | 	default-state = "on"; | 
 | 	linux,default-trigger = "heartbeat"; | 
 | 	status = "okay"; | 
 | }; | 
 |  | 
 | &pm8058_mpps { | 
 | 	dragon_cm3605_mpps: cm3605-mpps-state { | 
 | 		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>; | 
 | 	}; | 
 | }; | 
 |  | 
 | &rpm { | 
 | 	/* | 
 | 	 * Set up of the PMIC RPM regulators for this board | 
 | 	 * PM8901 supplies "preliminary regulators" whatever | 
 | 	 * that means | 
 | 	 */ | 
 | 	regulators-0 { | 
 | 		compatible = "qcom,rpm-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>; | 
 |  | 
 | 		pm8901_l0: l0 { | 
 | 			regulator-min-microvolt = <1200000>; | 
 | 			regulator-max-microvolt = <1200000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8901_l1: l1 { | 
 | 			regulator-min-microvolt = <3300000>; | 
 | 			regulator-max-microvolt = <3300000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8901_l2: l2 { | 
 | 			/* TMA340 requires strictly 3.3V */ | 
 | 			regulator-min-microvolt = <3300000>; | 
 | 			regulator-max-microvolt = <3300000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8901_l3: l3 { | 
 | 			regulator-min-microvolt = <3300000>; | 
 | 			regulator-max-microvolt = <3300000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8901_l4: l4 { | 
 | 			regulator-min-microvolt = <2600000>; | 
 | 			regulator-max-microvolt = <2600000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8901_l5: l5 { | 
 | 			regulator-min-microvolt = <2850000>; | 
 | 			regulator-max-microvolt = <2850000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8901_l6: l6 { | 
 | 			regulator-min-microvolt = <2200000>; | 
 | 			regulator-max-microvolt = <2200000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		/* s0 and s1 are SAW regulators controlled over SPM */ | 
 | 		pm8901_s2: s2 { | 
 | 			regulator-min-microvolt = <1300000>; | 
 | 			regulator-max-microvolt = <1300000>; | 
 | 			qcom,switch-mode-frequency = <1600000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 | 		pm8901_s3: s3 { | 
 | 			regulator-min-microvolt = <1100000>; | 
 | 			regulator-max-microvolt = <1100000>; | 
 | 			qcom,switch-mode-frequency = <1600000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 | 		pm8901_s4: s4 { | 
 | 			regulator-min-microvolt = <1225000>; | 
 | 			regulator-max-microvolt = <1225000>; | 
 | 			qcom,switch-mode-frequency = <1600000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		/* LVS0 thru 3 and mvs are just switches */ | 
 | 		pm8901_lvs0: lvs0 { | 
 | 			regulator-always-on; | 
 | 		}; | 
 |  | 
 | 		pm8901_lvs1: lvs1 { }; | 
 |  | 
 | 		pm8901_lvs2: lvs2 { }; | 
 |  | 
 | 		pm8901_lvs3: lvs3 { }; | 
 |  | 
 | 		pm8901_mvs: mvs { }; | 
 | 	}; | 
 |  | 
 | 	regulators-1 { | 
 | 		compatible = "qcom,rpm-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>; | 
 |  | 
 | 		pm8058_l0: l0 { | 
 | 			regulator-min-microvolt = <1200000>; | 
 | 			regulator-max-microvolt = <1200000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_l1: l1 { | 
 | 			regulator-min-microvolt = <1200000>; | 
 | 			regulator-max-microvolt = <1200000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_l2: l2 { | 
 | 			regulator-min-microvolt = <1800000>; | 
 | 			regulator-max-microvolt = <2600000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_l3: l3 { | 
 | 			regulator-min-microvolt = <1800000>; | 
 | 			regulator-max-microvolt = <1800000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_l4: l4 { | 
 | 			regulator-min-microvolt = <2850000>; | 
 | 			regulator-max-microvolt = <2850000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_l5: l5 { | 
 | 			regulator-min-microvolt = <2850000>; | 
 | 			regulator-max-microvolt = <2850000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_l6: l6 { | 
 | 			regulator-min-microvolt = <3000000>; | 
 | 			regulator-max-microvolt = <3600000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_l7: l7 { | 
 | 			regulator-min-microvolt = <1800000>; | 
 | 			regulator-max-microvolt = <1800000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_l8: l8 { | 
 | 			regulator-min-microvolt = <2900000>; | 
 | 			regulator-max-microvolt = <3050000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_l9: l9 { | 
 | 			regulator-min-microvolt = <1800000>; | 
 | 			regulator-max-microvolt = <1800000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_l10: l10 { | 
 | 			regulator-min-microvolt = <2600000>; | 
 | 			regulator-max-microvolt = <2600000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_l11: l11 { | 
 | 			regulator-min-microvolt = <1500000>; | 
 | 			regulator-max-microvolt = <1500000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_l12: l12 { | 
 | 			regulator-min-microvolt = <2900000>; | 
 | 			regulator-max-microvolt = <2900000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_l13: l13 { | 
 | 			regulator-min-microvolt = <2050000>; | 
 | 			regulator-max-microvolt = <2050000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_l14: l14 { | 
 | 			regulator-min-microvolt = <2850000>; | 
 | 			regulator-max-microvolt = <2850000>; | 
 | 		}; | 
 |  | 
 | 		pm8058_l15: l15 { | 
 | 			regulator-min-microvolt = <2850000>; | 
 | 			regulator-max-microvolt = <2850000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_l16: l16 { | 
 | 			regulator-min-microvolt = <1800000>; | 
 | 			regulator-max-microvolt = <1800000>; | 
 | 			bias-pull-down; | 
 | 			regulator-always-on; | 
 | 		}; | 
 |  | 
 | 		pm8058_l17: l17 { | 
 | 			// 1.5V according to schematic | 
 | 			regulator-min-microvolt = <2600000>; | 
 | 			regulator-max-microvolt = <2600000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_l18: l18 { | 
 | 			regulator-min-microvolt = <2200000>; | 
 | 			regulator-max-microvolt = <2200000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_l19: l19 { | 
 | 			regulator-min-microvolt = <2500000>; | 
 | 			regulator-max-microvolt = <2500000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_l20: l20 { | 
 | 			regulator-min-microvolt = <1800000>; | 
 | 			regulator-max-microvolt = <1800000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_l21: l21 { | 
 | 			// 1.1 V according to schematic | 
 | 			regulator-min-microvolt = <1200000>; | 
 | 			regulator-max-microvolt = <1200000>; | 
 | 			bias-pull-down; | 
 | 			regulator-always-on; | 
 | 		}; | 
 |  | 
 | 		pm8058_l22: l22 { | 
 | 			// 1.2 V according to schematic | 
 | 			regulator-min-microvolt = <1150000>; | 
 | 			regulator-max-microvolt = <1150000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_l23: l23 { | 
 | 			// Unused | 
 | 			regulator-min-microvolt = <1200000>; | 
 | 			regulator-max-microvolt = <1200000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_l24: l24 { | 
 | 			// Unused | 
 | 			regulator-min-microvolt = <1200000>; | 
 | 			regulator-max-microvolt = <1200000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_l25: l25 { | 
 | 			regulator-min-microvolt = <1200000>; | 
 | 			regulator-max-microvolt = <1200000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_s0: 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; | 
 | 		}; | 
 |  | 
 | 		pm8058_s1: 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; | 
 | 		}; | 
 |  | 
 | 		pm8058_s2: s2 { | 
 | 			// 1.3 V according to schematic | 
 | 			regulator-min-microvolt = <1200000>; | 
 | 			regulator-max-microvolt = <1400000>; | 
 | 			qcom,switch-mode-frequency = <1600000>; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_s3: s3 { | 
 | 			regulator-min-microvolt = <1800000>; | 
 | 			regulator-max-microvolt = <1800000>; | 
 | 			qcom,switch-mode-frequency = <1600000>; | 
 | 			regulator-always-on; | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_s4: 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 */ | 
 | 		pm8058_lvs0: lvs0 { | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_lvs1: lvs1 { | 
 | 			bias-pull-down; | 
 | 		}; | 
 |  | 
 | 		pm8058_ncp: ncp { | 
 | 			regulator-min-microvolt = <1800000>; | 
 | 			regulator-max-microvolt = <1800000>; | 
 | 			qcom,switch-mode-frequency = <1600000>; | 
 | 		}; | 
 | 	}; | 
 | }; | 
 |  | 
 | /* Internal 3.69 GiB eMMC */ | 
 | &sdcc1 { | 
 | 	pinctrl-names = "default"; | 
 | 	pinctrl-0 = <&dragon_sdcc1_pins>; | 
 | 	vmmc-supply = <&pm8901_l5>; | 
 | 	vqmmc-supply = <&pm8901_lvs0>; | 
 | 	status = "okay"; | 
 | }; | 
 |  | 
 | /* External micro SD card, directly connected, pulled up to 2.85 V */ | 
 | &sdcc3 { | 
 | 	/* 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>; | 
 | 	status = "okay"; | 
 | }; | 
 |  | 
 | /* | 
 |  * Second external micro SD card, using two TXB104RGYR levelshifters | 
 |  * to lift from 1.8 V to 2.85 V | 
 |  */ | 
 | &sdcc5 { | 
 | 	/* 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>; | 
 | 	status = "okay"; | 
 | }; | 
 |  | 
 | &tlmm { | 
 | 	/* eMMC pins, all 8 data lines connected */ | 
 | 	dragon_sdcc1_pins: sdcc1-state { | 
 | 		clk-pins { | 
 | 			pins = "gpio167"; /* SDC1 CLK */ | 
 | 			function = "sdc1"; | 
 | 			drive-strength = <16>; | 
 | 			bias-disable; | 
 | 		}; | 
 | 		cmd-pins { | 
 | 			pins = "gpio168"; /* SDC1 CMD */ | 
 | 			function = "sdc1"; | 
 | 			drive-strength = <10>; | 
 | 			bias-pull-up; | 
 | 		}; | 
 | 		data-pins { | 
 | 			/* SDC1 D0 to D7 */ | 
 | 			pins = "gpio159", "gpio160", "gpio161", "gpio162", | 
 | 			     "gpio163", "gpio164", "gpio165", "gpio166"; | 
 | 			function = "sdc1"; | 
 | 			drive-strength = <10>; | 
 | 			bias-pull-up; | 
 | 		}; | 
 | 	}; | 
 |  | 
 | 	/* | 
 | 	 * The SDCC3 pins are hardcoded (non-muxable) but need some pin | 
 | 	 * configuration. | 
 | 	 */ | 
 | 	dragon_sdcc3_pins: sdcc3-state { | 
 | 		clk-pins { | 
 | 			pins = "sdc3_clk"; | 
 | 			drive-strength = <8>; | 
 | 			bias-disable; | 
 | 		}; | 
 | 		cmd-pins { | 
 | 			pins = "sdc3_cmd"; | 
 | 			drive-strength = <8>; | 
 | 			bias-pull-up; | 
 | 		}; | 
 | 		data-pins { | 
 | 			pins = "sdc3_data"; | 
 | 			drive-strength = <8>; | 
 | 			bias-pull-up; | 
 | 		}; | 
 | 	}; | 
 |  | 
 | 	/* Second SD card slot pins */ | 
 | 	dragon_sdcc5_pins: sdcc5-state { | 
 | 		clk-pins { | 
 | 			pins = "gpio97"; /* SDC5 CLK */ | 
 | 			function = "sdc5"; | 
 | 			drive-strength = <16>; | 
 | 			bias-disable; | 
 | 		}; | 
 | 		cmd-pins { | 
 | 			pins = "gpio95"; /* SDC5 CMD */ | 
 | 			function = "sdc5"; | 
 | 			drive-strength = <10>; | 
 | 			bias-pull-up; | 
 | 		}; | 
 | 		data-pins { | 
 | 			/* SDC5 D0 to D3 */ | 
 | 			pins = "gpio96", "gpio98", "gpio99", "gpio100"; | 
 | 			function = "sdc5"; | 
 | 			drive-strength = <10>; | 
 | 			bias-pull-up; | 
 | 		}; | 
 | 	}; | 
 |  | 
 | 	dragon_gsbi3_i2c_pins: gsbi3-i2c-state { | 
 | 		pins = "gpio43", "gpio44"; | 
 | 		function = "gsbi3"; | 
 | 		drive-strength = <8>; | 
 | 		/* These have external pull-up 2.2kOhm to 1.8V */ | 
 | 		bias-disable; | 
 | 	}; | 
 |  | 
 | 	dragon_gsbi8_i2c_pins: gsbi8-i2c-state { | 
 | 		pins = "gpio64", "gpio65"; | 
 | 		function = "gsbi8"; | 
 | 		drive-strength = <16>; | 
 | 		/* These have external pull-up 2.2kOhm to 1.8V */ | 
 | 		bias-disable; | 
 | 	}; | 
 |  | 
 | 	dragon_gsbi12_i2c_pins: gsbi12-i2c-state { | 
 | 		pins = "gpio115", "gpio116"; | 
 | 		function = "gsbi12"; | 
 | 		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-state { | 
 | 		tx-pins { | 
 | 			pins = "gpio117"; | 
 | 			function = "gsbi12"; | 
 | 			drive-strength = <8>; | 
 | 			bias-disable; | 
 | 		}; | 
 | 		rx-pins { | 
 | 			pins = "gpio118"; | 
 | 			function = "gsbi12"; | 
 | 			drive-strength = <2>; | 
 | 			bias-pull-up; | 
 | 		}; | 
 | 	}; | 
 |  | 
 | 	dragon_ebi2_pins: ebi2-state { | 
 | 		/* | 
 | 		 * 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 { | 
 | 			pins = | 
 | 			    /* "gpio39", CS1A_N this is not good to mux */ | 
 | 			    "gpio40", /* CS2A_N */ | 
 | 			    "gpio134"; /* CS0_N testpoint TP29 */ | 
 | 			function = "ebi2cs"; | 
 | 		}; | 
 | 		mux1-pins { | 
 | 			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-state { | 
 | 		pins = "gpio57"; /* IRQ line */ | 
 | 		function = "gpio"; | 
 | 		bias-pull-up; | 
 | 	}; | 
 |  | 
 | 	dragon_tma340_gpios: tma340-state { | 
 | 		reset-pins { | 
 | 			/* RESET line, TS_ATTN, WAKE_CTP */ | 
 | 			pins = "gpio58"; | 
 | 			function = "gpio"; | 
 | 			drive-strength = <6>; | 
 | 			bias-disable; | 
 | 		}; | 
 | 		irq-pins { | 
 | 			pins = "gpio61"; /* IRQ line */ | 
 | 			function = "gpio"; | 
 | 			drive-strength = <2>; | 
 | 			bias-pull-up; | 
 | 		}; | 
 | 	}; | 
 | }; | 
 |  | 
 | &pm8058_xoadc { | 
 | 	/* Reference voltage 2.2 V */ | 
 | 	xoadc-ref-supply = <&pm8058_l18>; | 
 |  | 
 | 	/* Board-specific channels */ | 
 | 	adc-channel@5 { | 
 | 		/* Connected to AOUT of ALS sensor */ | 
 | 		reg = <0x00 0x05>; | 
 | 	}; | 
 |  | 
 | 	adc-channel@6 { | 
 | 		/* Connected to test point TP43 */ | 
 | 		reg = <0x00 0x06>; | 
 | 	}; | 
 |  | 
 | 	adc-channel@7 { | 
 | 		/* Connected to battery thermistor */ | 
 | 		reg = <0x00 0x07>; | 
 | 	}; | 
 |  | 
 | 	adc-channel@8 { | 
 | 		/* Connected to battery ID detector */ | 
 | 		reg = <0x00 0x08>; | 
 | 	}; | 
 |  | 
 | 	adc-channel@9 { | 
 | 		/* Connected to XO thermistor */ | 
 | 		reg = <0x00 0x09>; | 
 | 	}; | 
 | }; |