/* Copyright (c) 2016-2017, 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 <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/spmi/spmi.h>
#include <dt-bindings/msm/power-on.h>

&spmi_bus {
	qcom,pm660l@2 {
		compatible = "qcom,spmi-pmic";
		reg = <0x2 SPMI_USID>;
		#address-cells = <2>;
		#size-cells = <0>;

		pm660l_revid: qcom,revid@100 {
			compatible = "qcom,qpnp-revid";
			reg = <0x100 0x100>;
		};

		pm660l_pbs: qcom,pbs@7300 {
			compatible = "qcom,qpnp-pbs";
			reg = <0x7300 0x100>;
		};

		qcom,power-on@800 {
			compatible = "qcom,qpnp-power-on";
			reg = <0x800 0x100>;
			qcom,secondary-pon-reset;
			qcom,hard-reset-poweroff-type =
				<PON_POWER_OFF_SHUTDOWN>;
		};

		qcom,temp-alarm@2400 {
			compatible = "qcom,qpnp-temp-alarm";
			reg = <0x2400 0x100>;
			interrupts = <0x2 0x24 0x0 IRQ_TYPE_EDGE_RISING>;
			label = "pm660l_tz";
		};

		pm660l_gpios: pinctrl@c000 {
			compatible = "qcom,spmi-gpio";
			reg = <0xc000 0xc00>;
			interrupts = <0x2 0xc0 0 IRQ_TYPE_NONE>,
					<0x2 0xc2 0 IRQ_TYPE_NONE>,
					<0x2 0xc3 0 IRQ_TYPE_NONE>,
					<0x2 0xc4 0 IRQ_TYPE_NONE>,
					<0x2 0xc5 0 IRQ_TYPE_NONE>,
					<0x2 0xc6 0 IRQ_TYPE_NONE>,
					<0x2 0xc7 0 IRQ_TYPE_NONE>,
					<0x2 0xc8 0 IRQ_TYPE_NONE>,
					<0x2 0xca 0 IRQ_TYPE_NONE>,
					<0x2 0xcb 0 IRQ_TYPE_NONE>;
			interrupt-names = "pm660l_gpio1", "pm660l_gpio3",
					"pm660l_gpio4", "pm660l_gpio5",
					"pm660l_gpio6", "pm660l_gpio7",
					"pm660l_gpio8", "pm660l_gpio9",
					"pm660l_gpio11", "pm660l_gpio12";
			gpio-controller;
			#gpio-cells = <2>;
			qcom,gpios-disallowed = <2 10>;
		};
	};

	pm660l_3: qcom,pm660l@3 {
		compatible ="qcom,spmi-pmic";
		reg = <0x3 SPMI_USID>;
		#address-cells = <2>;
		#size-cells = <0>;

		pm660l_pwm_1: pwm@b100 {
			compatible = "qcom,qpnp-pwm";
			reg = <0xb100 0x100>,
			      <0xb042 0x7e>;
			reg-names = "qpnp-lpg-channel-base",
					"qpnp-lpg-lut-base";
			qcom,channel-id = <1>;
			qcom,lpg-lut-size = <0x7e>;
			qcom,supported-sizes = <6>, <9>;
			qcom,ramp-index = <0>;
			#pwm-cells = <2>;
		};

		pm660l_pwm_2: pwm@b200 {
			compatible = "qcom,qpnp-pwm";
			reg = <0xb200 0x100>,
			      <0xb042 0x7e>;
			reg-names = "qpnp-lpg-channel-base",
					 "qpnp-lpg-lut-base";
			qcom,channel-id = <2>;
			qcom,lpg-lut-size = <0x7e>;
			qcom,supported-sizes = <6>, <9>;
			qcom,ramp-index = <1>;
			#pwm-cells = <2>;
		};

		pm660l_pwm_3: pwm@b300 {
			compatible = "qcom,qpnp-pwm";
			reg = <0xb300 0x100>,
			      <0xb042 0x7e>;
			reg-names = "qpnp-lpg-channel-base",
					 "qpnp-lpg-lut-base";
			qcom,channel-id = <3>;
			qcom,lpg-lut-size = <0x7e>;
			qcom,supported-sizes = <6>, <9>;
			qcom,ramp-index = <2>;
			#pwm-cells = <2>;
			qcom,period = <6000000>;

			qcom,lpg {
				label = "lpg";
				cell-index = <0>;
				qcom,duty-percents =
					<0x01 0x0a 0x14 0x1e 0x28 0x32 0x3c
					0x46 0x50 0x5a 0x64
					0x64 0x5a 0x50 0x46 0x3c 0x32 0x28 0x1e
					0x14 0x0a 0x01>;
			};
		};

		pm660l_pwm_4: pwm@b400 {
			compatible = "qcom,qpnp-pwm";
			reg = <0xb400 0x100>,
			      <0xb042 0x7e>;
			reg-names = "qpnp-lpg-channel-base",
					 "qpnp-lpg-lut-base";
			qcom,channel-id = <4>;
			qcom,lpg-lut-size = <0x7e>;
			qcom,supported-sizes = <6>, <9>;
			qcom,ramp-index = <3>;
			#pwm-cells = <2>;
			status = "disabled";
		};

		qcom,leds@d000 {
			compatible = "qcom,leds-qpnp";
			reg = <0xd000 0x100>;
			label = "rgb";

			red_led: qcom,rgb_0 {
				label = "rgb";
				qcom,id = <3>;
				qcom,mode = "pwm";
				pwms = <&pm660l_pwm_3 0 0>;
				qcom,pwm-us = <1000>;
				qcom,max-current = <12>;
				qcom,default-state = "off";
				linux,name = "red";
				qcom,start-idx = <0>;
				qcom,idx-len = <22>;
				qcom,duty-pcts =
					[01 0a 14 1e 28 32 3c 46 50 5a 64
					64 5a 50 46 3c 32 28 1e 14 0a 01];
				qcom,use-blink;
			};

			green_led: qcom,rgb_1 {
				label = "rgb";
				qcom,id = <4>;
				qcom,mode = "pwm";
				pwms = <&pm660l_pwm_2 0 0>;
				qcom,pwm-us = <1000>;
				qcom,max-current = <12>;
				qcom,default-state = "off";
				linux,name = "green";
			};

			blue_led: qcom,rgb_2 {
				label = "rgb";
				qcom,id = <5>;
				qcom,mode = "pwm";
				pwms = <&pm660l_pwm_1 0 0>;
				qcom,pwm-us = <1000>;
				qcom,max-current = <12>;
				qcom,default-state = "off";
				linux,name = "blue";
			};
		};

		flash_led: qcom,leds@d300 {
			compatible = "qcom,qpnp-flash-led-v2";
			reg = <0xd300 0x100>;
			label = "flash";
			interrupts = <0x3 0xd3 0x0 IRQ_TYPE_EDGE_RISING>,
					<0x3 0xd3 0x3 IRQ_TYPE_EDGE_RISING>,
					<0x3 0xd3 0x4 IRQ_TYPE_EDGE_RISING>;
			interrupt-names = "led-fault-irq",
					"all-ramp-down-done-irq",
					"all-ramp-up-done-irq";
			qcom,hdrm-auto-mode;
			qcom,short-circuit-det;
			qcom,open-circuit-det;
			qcom,vph-droop-det;
			qcom,thermal-derate-en;
			qcom,thermal-derate-current = <200 500 1000>;
			qcom,isc-delay = <192>;
			qcom,pmic-revid = <&pm660l_revid>;

			pm660l_flash0: qcom,flash_0 {
				label = "flash";
				qcom,led-name = "led:flash_0";
				qcom,max-current = <1500>;
				qcom,default-led-trigger = "flash0_trigger";
				qcom,id = <0>;
				qcom,current-ma = <1000>;
				qcom,duration-ms = <1280>;
				qcom,ires-ua = <12500>;
				qcom,hdrm-voltage-mv = <325>;
				qcom,hdrm-vol-hi-lo-win-mv = <100>;
			};

			pm660l_flash1: qcom,flash_1 {
				label = "flash";
				qcom,led-name = "led:flash_1";
				qcom,max-current = <1500>;
				qcom,default-led-trigger = "flash1_trigger";
				qcom,id = <1>;
				qcom,current-ma = <1000>;
				qcom,duration-ms = <1280>;
				qcom,ires-ua = <12500>;
				qcom,hdrm-voltage-mv = <325>;
				qcom,hdrm-vol-hi-lo-win-mv = <100>;
			};

			pm660l_flash2: qcom,flash_2 {
				label = "flash";
				qcom,led-name = "led:flash_2";
				qcom,max-current = <750>;
				qcom,default-led-trigger = "flash2_trigger";
				qcom,id = <2>;
				qcom,current-ma = <500>;
				qcom,duration-ms = <1280>;
				qcom,ires-ua = <12500>;
				qcom,hdrm-voltage-mv = <325>;
				qcom,hdrm-vol-hi-lo-win-mv = <100>;
			};

			pm660l_torch0: qcom,torch_0 {
				label = "torch";
				qcom,led-name = "led:torch_0";
				qcom,max-current = <500>;
				qcom,default-led-trigger = "torch0_trigger";
				qcom,id = <0>;
				qcom,current-ma = <300>;
				qcom,ires-ua = <12500>;
				qcom,hdrm-voltage-mv = <325>;
				qcom,hdrm-vol-hi-lo-win-mv = <100>;
			};

			pm660l_torch1: qcom,torch_1 {
				label = "torch";
				qcom,led-name = "led:torch_1";
				qcom,max-current = <500>;
				qcom,default-led-trigger = "torch1_trigger";
				qcom,id = <1>;
				qcom,current-ma = <300>;
				qcom,ires-ua = <12500>;
				qcom,hdrm-voltage-mv = <325>;
				qcom,hdrm-vol-hi-lo-win-mv = <100>;
			};

			pm660l_torch2: qcom,torch_2 {
				label = "torch";
				qcom,led-name = "led:torch_2";
				qcom,max-current = <500>;
				qcom,default-led-trigger = "torch2_trigger";
				qcom,id = <2>;
				qcom,current-ma = <300>;
				qcom,ires-ua = <12500>;
				qcom,hdrm-voltage-mv = <325>;
				qcom,hdrm-vol-hi-lo-win-mv = <100>;
			};

			pm660l_switch0: qcom,led_switch_0 {
				label = "switch";
				qcom,led-name = "led:switch_0";
				qcom,led-mask = <3>;
				qcom,default-led-trigger = "switch0_trigger";
			};

			pm660l_switch1: qcom,led_switch_1 {
				label = "switch";
				qcom,led-name = "led:switch_1";
				qcom,led-mask = <4>;
				qcom,default-led-trigger = "switch1_trigger";
			};
		};
	};
};
