/* 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/ "skeleton.dtsi"

/ {
	qcom,spm@f9009000 {
		compatible = "qcom,spm-v2";
		#address-cells = <1>;
		#size-cells = <1>;
		reg = <0xf9009000 0x1000>;
		qcom,core-id = <0>;
		qcom,saw2-ver-reg = <0xfd0>;
		qcom,saw2-cfg = <0x101>;
		qcom,saw2-spm-dly= <0>;
		qcom,saw2-spm-ctl = <0x1>;
		qcom,saw2-spm-cmd-wfi = [04 03 04 0f];
		qcom,saw2-spm-cmd-spc = [34 04 44 14 24 54 03 54 44 14 04 24
		3e 0f];
		qcom,saw2-spm-cmd-pc = [34 04 44 14 24 54 07 54 44 14 04 24
		3e 0f];
	};

	qcom,lpm-resources {
		compatible = "qcom,lpm-resources";
		#address-cells = <1>;
		#size-cells = <0>;

		qcom,lpm-resources@0 {
			reg = <0x0>;
			qcom,name = "vdd-dig";
			qcom,resource-type = <0>;
			qcom,type = <0x616F646C>;       /* "ldoa" */
			qcom,id = <0x0A>;
			qcom,key = <0x6e726f63>;	/* "corn" */
			qcom,init-value = <5>;		/* Super Turbo */
		};

		qcom,lpm-resources@1 {
			reg = <0x1>;
			qcom,name = "vdd-mem";
			qcom,resource-type = <0>;
			qcom,type = <0x616F646C>;       /* "ldoa" */
			qcom,id = <0x0C>;
			qcom,key =  <0x7675>;		/* "uv" */
			qcom,init-value = <1050000>;	/* Super Turbo */
		};

		qcom,lpm-resources@2 {
			reg = <0x2>;
			qcom,name = "pxo";
			qcom,resource-type = <0>;
			qcom,type = <0x306b6c63>;	/* "clk0" */
			qcom,id = <0x00>;
			qcom,key = <0x62616e45>;	/* "Enab" */
			qcom,init-value = <1>;		/* On */
		};
	};

	qcom,lpm-levels {
		compatible = "qcom,lpm-levels";
		#address-cells = <1>;
		#size-cells = <0>;

		qcom,use-qtimer;

		qcom,lpm-level@0 {
			reg = <0x0>;
			qcom,mode = <0>;        /* MSM_PM_SLEEP_MODE_WAIT_FOR_INTERRUPT */
			qcom,xo = <1>;          /* ON */
			qcom,l2 = <3>;          /* ACTIVE */
			qcom,vdd-mem-upper-bound = <1050000>; /* SUPER TURBO */
			qcom,vdd-mem-lower-bound = <950000>; /* NORMAL */
			qcom,vdd-dig-upper-bound = <6>; /* SUPER TURBO */
			qcom,vdd-dig-lower-bound = <4>;  /* NORMAL */
			qcom,irqs-detectable;
			qcom.gpios-detectable;
			qcom,latency-us = <100>;
			qcom,ss-power = <8000>;
			qcom,energy-overhead = <100000>;
			qcom,time-overhead = <1>;
		};

		qcom,lpm-level@1 {
			reg = <0x1>;
			qcom,mode = <2>;        /* MSM_PM_SLEEP_MODE_STANDALONE_POWER_COLLAPSE */
			qcom,xo = <1>;          /* ON */
			qcom,l2 = <3>;          /* ACTIVE */
			qcom,vdd-mem-upper-bound = <1050000>; /* SUPER TURBO */
			qcom,vdd-mem-lower-bound = <950000>; /* NORMAL */
			qcom,vdd-dig-upper-bound = <6>; /* SUPER TURBO */
			qcom,vdd-dig-lower-bound = <4>;  /* NORMAL */
			qcom,irqs-detectable;
			qcom.gpios-detectable;
			qcom,latency-us = <2000>;
			qcom,ss-power = <5000>;
			qcom,energy-overhead = <60100000>;
			qcom,time-overhead = <3000>;
		};

		qcom,lpm-level@2 {
			reg = <0x2>;
			qcom,mode = <3>;        /* MSM_PM_SLEEP_MODE_POWER_COLLAPSE */
			qcom,xo = <1>;          /* ON */
			qcom,l2 = <1>;          /* GDHS */
			qcom,vdd-mem-upper-bound = <1050000>; /* SUPER TURBO */
			qcom,vdd-mem-lower-bound = <950000>; /* NORMAL */
			qcom,vdd-dig-upper-bound = <6>; /* SUPER TURBO */
			qcom,vdd-dig-lower-bound = <4>;  /* NORMAL */
			qcom,irqs-detectable;
			qcom.gpios-detectable;
			qcom,latency-us = <3500>;
			qcom,ss-power = <5000>;
			qcom,energy-overhead = <60350000>;
			qcom,time-overhead = <6300>;
		};

		qcom,lpm-level@3 {
			reg = <0x3>;
			qcom,mode = <3>;        /* MSM_PM_SLEEP_MODE_POWER_COLLAPSE */
			qcom,xo = <1>;          /* ON */
			qcom,l2 = <0>;          /* GDHS */
			qcom,vdd-mem-upper-bound = <1050000>; /* SUPER TURBO */
			qcom,vdd-mem-lower-bound = <950000>; /* SVS SOC */
			qcom,vdd-dig-upper-bound = <4>; /* NORMAL */
			qcom,vdd-dig-lower-bound = <3>;  /* SVS SOC */
			qcom,irqs-detectable;
			qcom.gpios-detectable;
			qcom,latency-us = <4500>;
			qcom,ss-power = <5000>;
			qcom,energy-overhead = <60350000>;
			qcom,time-overhead = <7300>;
		};

		qcom,lpm-level@4 {
			reg = <0x4>;
			qcom,mode= <3>;         /* MSM_PM_SLEEP_MODE_POWER_COLLAPSE */
			qcom,xo = <0>;          /* OFF */
			qcom,l2 = <0>;          /* OFF */
			qcom,vdd-mem-upper-bound = <1050000>; /* SUPER TURBO */
			qcom,vdd-mem-lower-bound = <950000>; /* NORMAL */
			qcom,vdd-dig-upper-bound = <6>; /* SUPER TURBO */
			qcom,vdd-dig-lower-bound = <4>;  /* NORMAL */
			qcom,irqs-detectable;
			qcom,latency-us = <6800>;
			qcom,ss-power = <2000>;
			qcom,energy-overhead = <71850000>;
			qcom,time-overhead = <13300>;
		};

		qcom,lpm-level@5 {
			reg = <0x5>;
			qcom,mode= <3>;         /* MSM_PM_SLEEP_MODE_POWER_COLLAPSE */
			qcom,xo = <0>;          /* OFF */
			qcom,l2 = <0>;          /* OFF */
			qcom,vdd-mem-upper-bound = <950000>; /* SVS SOC */
			qcom,vdd-mem-lower-bound = <675000>; /* RETENTION */
			qcom,vdd-dig-upper-bound = <3>; /* SVS SOC */
			qcom,vdd-dig-lower-bound = <1>; /* RETENTION */
			qcom,latency-us = <9800>;
			qcom,ss-power = <0>;
			qcom,energy-overhead = <76350000>;
			qcom,time-overhead = <28300>;
		};
	};

	qcom,pm-boot {
		compatible = "qcom,pm-boot";
		qcom,mode = <0>; /* MSM_PM_BOOT_CONFIG_TZ */
	};

	qcom,mpm@fc4281d0 {
		compatible = "qcom,mpm-v2";
		reg = <0xfc4281d0 0x1000>, /* MSM_RPM_MPM_BASE 4K */
		    <0xf9011008 0x4>;   /* MSM_APCS_GCC_BASE 4K */
		reg-names = "vmpm", "ipc";
		interrupts = <0 171 1>;

		qcom,ipc-bit-offset = <1>;

		qcom,gic-parent = <&intc>;
		qcom,gic-map = <47 172>, /* usb2_hsic_async_wakeup_irq */
			<62 222>, /* ee0_krait_hlos_spmi_periph_irq */
			<0xff 208>; /* summary_irq_kpss */

		qcom,gpio-parent = <&msmgpio>;
		qcom,gpio-map = <4  1>,
			<5  5>,
			<6  9>,
			<7  18>,
			<8  20>,
			<9  24>,
			<10  27>,
			<11  28>,
			<12  34>,
			<13  35>,
			<14  37>,
			<15  42>,
			<16  44>,
			<17  46>,
			<18  50>,
			<19  54>,
			<20  59>,
			<21  61>,
			<22  62>,
			<23  64>,
			<24  65>,
			<25  66>,
			<26  67>,
			<27  68>,
			<28  71>,
			<29  72>,
			<30  73>,
			<31  74>,
			<32  75>,
			<33  77>,
			<34  79>,
			<35  80>,
			<36  82>,
			<37  86>;
	};

	qcom,pm-8x60 {
		compatible = "qcom,pm-8x60";
		qcom,pc-mode = <2>; /*MSM_PC_TZ_L2_EXT */
		qcom,use-sync-timer;
	};

	qcom,rpm-stats@fc19dbd0 {
		compatible = "qcom,rpm-stats";
		reg = <0xfc19dbd0 0x1000>;
		reg-names = "phys_addr_base";
		qcom,sleep-stats-version = <2>;
	};
};
