| // 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" | 
 |  | 
 | / { | 
 | 	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 { | 
 | 			/* eMMC 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_gsbi3_i2c_pins: gsbi3_i2c { | 
 | 				mux { | 
 | 					pins = "gpio43", "gpio44"; | 
 | 					function = "gsbi3"; | 
 | 				}; | 
 | 				pinconf { | 
 | 					pins = "gpio43", "gpio44"; | 
 | 					drive-strength = <8>; | 
 | 					/* These have external pull-up 2.2kOhm to 1.8V */ | 
 | 					bias-disable; | 
 | 				}; | 
 | 			}; | 
 |  | 
 | 			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; | 
 | 				}; | 
 | 			}; | 
 |  | 
 | 			dragon_tma340_gpios: tma340 { | 
 | 				reset { | 
 | 					/* RESET line, TS_ATTN, WAKE_CTP */ | 
 | 					pins = "gpio58"; | 
 | 					function = "gpio"; | 
 | 					drive-strength = <6>; | 
 | 					bias-disable; | 
 | 				}; | 
 | 				irq { | 
 | 					pins = "gpio61"; /* IRQ line */ | 
 | 					function = "gpio"; | 
 | 					drive-strength = <2>; | 
 | 					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-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; | 
 | 						}; | 
 | 					}; | 
 | 				}; | 
 |  | 
 | 				mpps@50 { | 
 | 					dragon_cm3605_mpps: cm3605-mpps-state { | 
 | 						mpp5 { | 
 | 							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"; | 
 | 					color = <LED_COLOR_ID_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"; | 
 | 					color = <LED_COLOR_ID_YELLOW>; | 
 | 					default-state = "off"; | 
 | 					linux,default-trigger = "mmc0"; | 
 | 				}; | 
 | 				led@133 { | 
 | 					compatible = "qcom,pm8058-led"; | 
 | 					reg = <0x133>; | 
 | 					label = "pm8058:green"; | 
 | 					function = LED_FUNCTION_HEARTBEAT; | 
 | 					color = <LED_COLOR_ID_GREEN>; | 
 | 					default-state = "on"; | 
 | 					linux,default-trigger = "heartbeat"; | 
 | 				}; | 
 | 			}; | 
 | 		}; | 
 |  | 
 | 		gsbi@16200000 { | 
 | 			qcom,mode = <GSBI_PROT_I2C>; | 
 | 			status = "okay"; | 
 |  | 
 | 			gsbi3_i2c: i2c@16280000 { | 
 | 				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>; | 
 | 				}; | 
 | 			}; | 
 | 		}; | 
 |  | 
 | 		gsbi@19800000 { | 
 | 			status = "okay"; | 
 | 			qcom,mode = <GSBI_PROT_I2C>; | 
 |  | 
 | 			i2c@19880000 { | 
 | 				status = "okay"; | 
 | 				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 = "okay"; | 
 | 			qcom,mode = <GSBI_PROT_I2C_UART>; | 
 |  | 
 | 			serial@19c40000 { | 
 | 				status = "okay"; | 
 | 				pinctrl-names = "default"; | 
 | 				pinctrl-0 = <&dragon_gsbi12_serial_pins>; | 
 | 			}; | 
 |  | 
 | 			i2c@19c80000 { | 
 | 				status = "okay"; | 
 | 				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 = "okay"; | 
 | 			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@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>; | 
 | 			}; | 
 | 		}; | 
 |  | 
 | 		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 { | 
 | 					/* TMA340 requires strictly 3.3V */ | 
 | 					regulator-min-microvolt = <3300000>; | 
 | 					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 mvs are just switches */ | 
 | 				lvs0 { | 
 | 					regulator-always-on; | 
 | 				}; | 
 | 				lvs1 { }; | 
 | 				lvs2 { }; | 
 | 				lvs3 { }; | 
 | 				mvs { }; | 
 |  | 
 | 			}; | 
 |  | 
 | 			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 */ | 
 | 			mmc@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 */ | 
 | 			mmc@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 | 
 | 			 */ | 
 | 			mmc@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>; | 
 | 			}; | 
 | 		}; | 
 | 	}; | 
 | }; |