/* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
 * only version 2 as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

/include/ "dsi-panel-toshiba-720p-video.dtsi"
/include/ "dsi-panel-orise-720p-video.dtsi"
/include/ "msm8974-leds.dtsi"
/include/ "msm8974-camera-sensor-cdp-mtp.dtsi"

/ {
	serial@f991e000 {
		status = "ok";
	};

	qcom,mdss_dsi_toshiba_720p_video {
		status = "ok";
		qcom,cont-splash-enabled;
	};

	qcom,mdss_dsi_orise_720p_video {
		status = "disable";
	};

	qcom,hdmi_tx@fd922100 {
		status = "ok";
	};

	i2c@f9924000 {
		atmel_mxt_ts@4a {
			compatible = "atmel,mxt-ts";
			reg = <0x4a>;
			interrupt-parent = <&msmgpio>;
			interrupts = <61 0x2>;
			vdd_ana-supply = <&pm8941_l18>;
			vcc_i2c-supply = <&pm8941_lvs1>;
			atmel,reset-gpio = <&msmgpio 60 0x00>;
			atmel,irq-gpio = <&msmgpio 61 0x00>;
			atmel,panel-coords = <0  0 760 1424>;
			atmel,display-coords = <0 0 720 1280>;
			atmel,i2c-pull-up;
			atmel,no-force-update;
			atmel,cfg_1 {
				atmel,family-id = <0x82>;
				atmel,variant-id = <0x19>;
				atmel,version = <0x10>;
				atmel,build = <0xaa>;
				atmel,config = [
					/* Object 6, Instance = 0 */
					00 00 00 00 00 00
					/* Object 38, Instance = 0 */
					15 01 00 03 0A 0C 00 00
					/* Object 7, Instance = 0 */
					20 08 32 03
					/* Object 8, Instance = 0 */
					0F 00 0A 0A 00 00 0A 0A 00 00
					/* Object 9, Instance = 0 */
					83 00 00 18 0E 00 70 46 02 01
					00 0A 03 31 04 05 0A 0A 90 05
					F8 02 05 F1 F1 0F 00 00 08 2D
					12 06 00 00 00 01
					/* Object 15, Instance = 0 */
					00 00 00 00 00 00 00 00 00 00
					00
					/* Object 18, Instance = 0 */
					00 00
					/* Object 19, Instance = 0 */
					00 00 00 00 00 00
					/* Object 23, Instance = 0 */
					00 00 00 00 00 00 00 00 00 00
					00 00 00 00 00
					/* Object 25, Instance = 0 */
					00 00 00 00 00 00 00 00 00 00
					00 00 00 00 00
					/* Object 40, Instance = 0 */
					00 00 00 00 00
					/* Object 42, Instance = 0 */
					33 1E 19 10 80 00 00 00 FF 00
					/* Object 46, Instance = 0 */
					00 00 10 10 00 00 03 00 00 01
					/* Object 47, Instance = 0 */
					08 0A 28 0A 02 0A 00 8C 00 20
					00 00 00
					/* Object 55, Instance = 0 */
					00 00 00 00 00 00
					/* Object 56, Instance = 0 */
					00 00 00 18 05 05 05 05 05 05
					05 05 05 05 05 05 05 05 05 05
					05 05 05 05 05 05 05 05 00 00
					00 00 00 00 00 00 00 00 00 00
					00 00
					/* Object 57, Instance = 0 */
					00 00 00
					/* Object 61, Instance = 0 */
					00 00 00 00 00
					/* Object 62, Instance = 0 */
					01 2A 00 16 00 00 00 00 0B 01
					02 03 04 08 00 00 08 10 18 05
					00 0A 05 05 50 14 19 34 1A 7F
					00 00 00 00 00 00 00 00 00 30
					05 02 00 01 00 05 00 00 00 00
					00 00 00 00
					];
			};
		};
	};

	gen-vkeys {
		compatible = "qcom,gen-vkeys";
		label = "atmel_mxt_ts";
		qcom,disp-maxx = <720>;
		qcom,disp-maxy = <1280>;
		qcom,panel-maxx = <760>;
		qcom,panel-maxy = <1424>;
		qcom,key-codes = <158 139 102 217>;
	};

	i2c@f9967000 {
		isa1200@48 {
			status = "okay";
			reg = <0x48>;
			vcc_i2c-supply = <&pm8941_s3>;
			compatible = "imagis,isa1200";
			label = "vibrator";
			imagis,chip-en;
			imagis,smart-en;
			imagis,need-pwm-clk;
			imagis,ext-clk-en;
			imagis,hap-en-gpio = <&msmgpio 86 0x00>;
			imagis,max-timeout = <15000>;
			imagis,pwm-div = <256>;
			imagis,mode-ctrl = <2>;
			imagis,regulator {
				regulator-name = "vcc_i2c";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <1800000>;
				regulator-max-microamp = <9360>;
			};
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		input-name = "gpio-keys";

		camera_snapshot {
			label = "camera_snapshot";
			gpios = <&pm8941_gpios 3 0x1>;
			linux,input-type = <1>;
			linux,code = <0x2fe>;
			gpio-key,wakeup;
			debounce-interval = <15>;
		};

		camera_focus {
			label = "camera_focus";
			gpios = <&pm8941_gpios 4 0x1>;
			linux,input-type = <1>;
			linux,code = <0x210>;
			gpio-key,wakeup;
			debounce-interval = <15>;
		};

		vol_up {
			label = "volume_up";
			gpios = <&pm8941_gpios 5 0x1>;
			linux,input-type = <1>;
			linux,code = <115>;
			gpio-key,wakeup;
			debounce-interval = <15>;
		};
	};

	spi@f9923000 {
		ethernet-switch@2 {
			compatible = "micrel,ks8851";
			reg = <2>;
			interrupt-parent = <&msmgpio>;
			interrupts = <94 0>;
			spi-max-frequency = <4800000>;
			rst-gpio = <&pm8941_mpps 6 0>;
			vdd-io-supply = <&spi_eth_vreg>;
			vdd-phy-supply = <&spi_eth_vreg>;
		};
	};

	sound {
		qcom,model = "msm8974-taiko-cdp-snd-card";
		qcom,hdmi-audio-rx;
	};

	usb2_otg_sw: regulator-tpd4s214 {
		compatible = "regulator-fixed";
		regulator-name = "usb2_otg_sw";
		gpio = <&pm8941_gpios 18 0>;
		parent-supply = <&pm8941_boost>;
		startup-delay-us = <17000>;
		enable-active-high;
	};

        hsic@f9a00000 {
                compatible = "qcom,hsic-host";
                reg = <0xf9a00000 0x400>;
                interrupts = <0 136 0>, <0 148 0>;
                interrupt-names = "core_irq", "async_irq";
                HSIC_VDDCX-supply = <&pm8841_s2>;
                HSIC_GDSC-supply = <&gdsc_usb_hsic>;
                hsic,strobe-gpio = <&msmgpio 144 0x00>;
                hsic,data-gpio = <&msmgpio 145 0x00>;
                hsic,resume-gpio = <&msmgpio 80 0x00>;
                hsic,ignore-cal-pad-config;
                hsic,strobe-pad-offset = <0x2050>;
                hsic,data-pad-offset = <0x2054>;
        };

};

&spmi_bus {
	qcom,pm8941@1 {
		qcom,leds@d800 {
			status = "okay";
			qcom,wled_0 {
				label = "wled";
				linux,name = "wled:backlight";
				linux,default-trigger = "bkl-trigger";
				qcom,cs-out-en;
				qcom,op-fdbck;
				qcom,default-state = "on";
				qcom,max-current = <25>;
				qcom,ctrl-delay-us = <0>;
				qcom,boost-curr-lim = <3>;
				qcom,cp-sel = <0>;
				qcom,switch-freq = <2>;
				qcom,ovp-val = <2>;
				qcom,num-strings = <1>;
				qcom,id = <0>;
			};
		};

		qcom,leds@d900 {
			status = "disabled";
		};

		qcom,leds@da00 {
			status = "disabled";
		};

		qcom,leds@db00 {
			status = "disabled";
		};

		qcom,leds@dc00 {
			status = "disabled";
		};

		qcom,leds@dd00 {
			status = "disabled";
		};

		qcom,leds@de00 {
			status = "disabled";
		};

		qcom,leds@df00 {
			status = "disabled";
		};

		qcom,leds@e000 {
			status = "disabled";
		};

		qcom,leds@e100 {
			status = "disabled";
		};
	};
};

&sdcc2 {
	#address-cells = <0>;
	interrupt-parent = <&sdcc2>;
	interrupts = <0 1 2>;
	#interrupt-cells = <1>;
	interrupt-map-mask = <0xffffffff>;
	interrupt-map = <0 &intc 0 125 0
			1 &intc 0 220 0
			2 &msmgpio 62 0x3>;
	interrupt-names = "core_irq", "bam_irq", "status_irq";
	cd-gpios = <&msmgpio 62 0x1>;
	wp-gpios = <&pm8941_gpios 29 0x1>;
};

&sdhc_1 {
	vdd-supply = <&pm8941_l20>;
	vdd-io-supply = <&pm8941_s3>;

	qcom,vdd-voltage-level = <2950000 2950000>;
	qcom,vdd-current-level = <800 500000>;

	qcom,vdd-io-always-on;
	qcom,vdd-io-voltage-level = <1800000 1800000>;
	qcom,vdd-io-current-level = <250 154000>;

	qcom,pad-pull-on = <0x0 0x3 0x3>; /* no-pull, pull-up, pull-up */
	qcom,pad-pull-off = <0x0 0x3 0x3>; /* no-pull, pull-up, pull-up */
	qcom,pad-drv-on = <0x7 0x4 0x4>; /* 16mA, 10mA, 10mA */
	qcom,pad-drv-off = <0x0 0x0 0x0>; /* 2mA, 2mA, 2mA */

	qcom,nonremovable;
};

&sdhc_2 {
	#address-cells = <0>;
	interrupt-parent = <&sdhc_2>;
	interrupts = <0 1 2>;
	#interrupt-cells = <1>;
	interrupt-map-mask = <0xffffffff>;
	interrupt-map = <0 &intc 0 125 0
			1 &intc 0 221 0
			2 &msmgpio 62 0x3>;
	interrupt-names = "hc_irq", "pwr_irq", "status_irq";
	cd-gpios = <&msmgpio 62 0x1>;

	vdd-supply = <&pm8941_l21>;
	vdd-io-supply = <&pm8941_l13>;

	qcom,vdd-voltage-level = <2950000 2950000>;
	qcom,vdd-current-level = <9000 800000>;

	qcom,vdd-io-always-on;
	qcom,vdd-io-lpm-sup;
	qcom,vdd-io-voltage-level = <1800000 2950000>;
	qcom,vdd-io-current-level = <6 22000>;

	qcom,pad-pull-on = <0x0 0x3 0x3>; /* no-pull, pull-up, pull-up */
	qcom,pad-pull-off = <0x0 0x3 0x3>; /* no-pull, pull-up, pull-up */
	qcom,pad-drv-on = <0x7 0x4 0x4>; /* 16mA, 10mA, 10mA */
	qcom,pad-drv-off = <0x0 0x0 0x0>; /* 2mA, 2mA, 2mA */
};

&uart7 {
	status = "ok";
	qcom,tx-gpio = <&msmgpio 41 0x00>;
	qcom,rx-gpio = <&msmgpio 42 0x00>;
	qcom,cts-gpio = <&msmgpio 43 0x00>;
	qcom,rfr-gpio = <&msmgpio 44 0x00>;
};

&usb3 {
	qcom,otg-capability;
};

&pm8941_chg {
	status = "ok";

	qcom,chg-chgr@1000 {
		status = "ok";
	};

	qcom,chg-buck@1100 {
		status = "ok";
	};

	qcom,chg-usb-chgpth@1300 {
		status = "ok";
	};

	qcom,chg-dc-chgpth@1400 {
		status = "ok";
	};

	qcom,chg-boost@1500 {
		status = "ok";
	};

	qcom,chg-misc@1600 {
		status = "ok";
	};
};

&pm8941_gpios {
	gpio@c000 { /* GPIO 1 */
	};

	gpio@c100 { /* GPIO 2 */
	};

	gpio@c200 { /* GPIO 3 */
		qcom,mode = <0>;
		qcom,pull = <0>;
		qcom,vin-sel = <2>;
		qcom,src-sel = <0>;
	};

	gpio@c300 { /* GPIO 4 */
		qcom,mode = <0>;
		qcom,pull = <0>;
		qcom,vin-sel = <2>;
		qcom,src-sel = <0>;
	};

	gpio@c400 { /* GPIO 5 */
		qcom,mode = <0>;
		qcom,pull = <0>;
		qcom,vin-sel = <2>;
		qcom,src-sel = <0>;
	};

	gpio@c500 { /* GPIO 6 */
	};

	gpio@c600 { /* GPIO 7 */
	};

	gpio@c700 { /* GPIO 8 */
	};

	gpio@c800 { /* GPIO 9 */
	};

	gpio@c900 { /* GPIO 10 */
	};

	gpio@ca00 { /* GPIO 11 */
	};

	gpio@cb00 { /* GPIO 12 */
	};

	gpio@cc00 { /* GPIO 13 */
	};

	gpio@cd00 { /* GPIO 14 */
	};

	gpio@ce00 { /* GPIO 15 */
		qcom,mode = <1>;
		qcom,output-type = <0>;
		qcom,pull = <5>;
		qcom,vin-sel = <2>;
		qcom,out-strength = <3>;
		qcom,src-sel = <2>;
		qcom,master-en = <1>;
	};

	gpio@cf00 { /* GPIO 16 */
		qcom,mode = <1>;
		qcom,output-type = <0>;
		qcom,pull = <2>;
		qcom,vin-sel = <2>;
		qcom,out-strength = <2>;
		qcom,src-sel = <2>;
		qcom,master-en = <1>;
	};

	gpio@d000 { /* GPIO 17 */
	};

	gpio@d100 { /* GPIO 18 */
		/* usb2_otg_sw regulator enable */
		qcom,mode = <1>;		/* Digital output */
		qcom,output-type = <0>;		/* CMOS logic */
		qcom,invert = <0>; 		/* Output low initially */
		qcom,vin-sel = <2>; 		/* PM8941 S3 = 1.8 V */
		qcom,src-sel = <0>; 		/* Constant */
		qcom,out-strength = <2>;	/* Medium drive strength */
		qcom,master-en = <1>;		/* Enable GPIO */
	};

	gpio@d200 { /* GPIO 19 */
		qcom,mode = <1>;		/* QPNP_PIN_MODE_DIG_OUT */
		qcom,output-type = <0>;		/* QPNP_PIN_OUT_BUF_CMOS */
		qcom,pull = <5>;		/* QPNP_PIN_PULL_NO */
		qcom,vin-sel = <2>;		/* QPNP_PIN_VIN2 */
		qcom,out-strength = <2>;	/* QPNP_PIN_OUT_STRENGTH_MED */
		qcom,src-sel = <0>;		/* QPNP_PIN_SEL_FUNC_CONSTANT */
		qcom,master-en = <1>;
	};

	gpio@d300 { /* GPIO 20 */
	};

	gpio@d400 { /* GPIO 21 */
	};

	gpio@d500 { /* GPIO 22 */
	};

	gpio@d600 { /* GPIO 23 */
	};

	gpio@d700 { /* GPIO 24 */
	};

	gpio@d800 { /* GPIO 25 */
	};

	gpio@d900 { /* GPIO 26 */
	};

	gpio@da00 { /* GPIO 27 */
	};

	gpio@db00 { /* GPIO 28 */
	};

	gpio@dc00 { /* GPIO 29 */
		qcom,pull = <0>; /* set to default pull */
		qcom,master-en = <1>;
		qcom,vin-sel = <2>; /* select 1.8 V source */
	};

	gpio@dd00 { /* GPIO 30 */
	};

	gpio@de00 { /* GPIO 31 */
	};

	gpio@df00 { /* GPIO 32 */
	};

	gpio@e000 { /* GPIO 33 */
	};

	gpio@e100 { /* GPIO 34 */
	};

	gpio@e200 { /* GPIO 35 */
	};

	gpio@e300 { /* GPIO 36 */
	};
};

&pm8941_mpps {

	mpp@a000 { /* MPP 1 */
	};

	mpp@a100 { /* MPP 2 */
	};

	mpp@a200 { /* MPP 3 */
	};

	mpp@a300 { /* MPP 4 */
	};

	mpp@a400 { /* MPP 5 */
		/* SPI_ETH config */
		qcom,mode = <1>; /* DIG_OUT */
		qcom,output-type = <0>; /* CMOS */
		qcom,vin-sel = <2>; /* PM8941_S3 1.8V > 1.6V */
		qcom,src-sel = <0>; /* CONSTANT */
		qcom,master-en = <1>; /* ENABLE MPP */
	};

	mpp@a500 { /* MPP 6 */
		/* SPI_ETH_RST config */
		qcom,mode = <1>; /* DIG_OUT */
		qcom,output-type = <0>; /* CMOS */
		qcom,vin-sel = <2>; /* PM8941_S3 1.8V > 1.6V */
		qcom,src-sel = <0>; /* CONSTANT */
		qcom,master-en = <1>; /* ENABLE MPP */
	};

	mpp@a600 { /* MPP 7 */
	};

	mpp@a700 { /* MPP 8 */
	};
};

&pm8841_mpps {

	mpp@a000 { /* MPP 1 */
	};

	mpp@a100 { /* MPP 2 */
	};

	mpp@a200 { /* MPP 3 */
	};

	mpp@a300 { /* MPP 4 */
	};
};

&slim_msm {
	taiko_codec {
		qcom,cdc-micbias1-ext-cap;
		qcom,cdc-micbias3-ext-cap;
		qcom,cdc-micbias4-ext-cap;
	};
};
