/*
 * Copyright (c) 2015-2019, 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/gpio/gpio.h>
#include <dt-bindings/clock/msm-clocks-8953.h>
#include "msm8953-camera-sensor-mtp.dtsi"

&blsp1_uart0 {
	status = "ok";
	pinctrl-names = "default";
	pinctrl-0 = <&uart_console_active>;
};

&pm8953_gpios {
	nfc_clk {
		nfc_clk_default: nfc_clk_default {
			pins = "gpio2";
			function = "normal";
			input-enable;
			power-source = <1>;
		};
	};
};

&i2c_5 { /* BLSP2 QUP1 (NFC) */
	#address-cells = <1>;
	#size-cells = <0>;

	status = "ok";
	nq@28 {
		compatible = "qcom,nq-nci";
		reg = <0x28>;
		qcom,nq-irq = <&tlmm 17 0x00>;
		qcom,nq-ven = <&tlmm 16 0x00>;
		qcom,nq-firm = <&tlmm 62 0x00>;
		qcom,nq-clkreq = <&pm8953_gpios 2 0x00>;
/*<<2019-01-29-Michael Lin-[FairPhone][NFC]Reassign ESE Enable gpio in case of collision*/
		qcom,nq-esepwr = <&tlmm 134 0x00>;
/*>>2019-01-29-Michael Lin-[FairPhone][NFC]Reassign ESE Enable gpio in case of collision*/
		interrupt-parent = <&tlmm>;
		qcom,clk-src = "BBCLK2";
		interrupts = <17 0>;
		interrupt-names = "nfc_irq";
		pinctrl-names = "nfc_active", "nfc_suspend";
		pinctrl-0 = <&nfc_int_active &nfc_disable_active
						&nfc_clk_default>;
		pinctrl-1 = <&nfc_int_suspend &nfc_disable_suspend>;
		clocks = <&clock_gcc clk_bb_clk2_pin>;
		clock-names = "ref_clk";
	};
};

//[FairPhone][Audio][jinjia]=2018.11.21=smart amp porting. -s
&i2c_6 { /* BLSP2 QUP2 (smart amp) */
	    status = "ok";
	    /* AWINIC AW8898 Smart PA */
	    aw8898_smartpa@34{
	        compatible = "awinic,aw8898_smartpa";
	        reg = <0x34>;
	        reset-gpio = <&tlmm 21 0>;
	        irq-gpio = <&tlmm 20 0>;
	        status = "okay";
	    };
	    /* AWINIC AW8898 Smart PA End */

	    tas2557@4c {
		sound-dai-cells = <1>;
		compatible = "ti,tas2557";
		reg = <0x4c>;
		ti,cdc-reset-gpio = <&tlmm 21 0>;
		ti,irq-gpio = <&tlmm 20 0>;
		ti,i2s-bits = <16>;
		ti,bypass-tmax = <0>;
		status = "ok";
	    };
};
//[FairPhone][Audio][jinjia]=2018.11.21=smart amp porting. -e

&sdhc_1 {
	/* device core power supply */
	vdd-supply = <&pm8953_l8>;
	qcom,vdd-voltage-level = <2900000 2900000>;
	qcom,vdd-current-level = <200 570000>;

	/* device communication power supply */
	vdd-io-supply = <&pm8953_l5>;
	qcom,vdd-io-always-on;
	qcom,vdd-io-lpm-sup;
	qcom,vdd-io-voltage-level = <1800000 1800000>;
	qcom,vdd-io-current-level = <200 325000>;

	pinctrl-names = "active", "sleep";
	pinctrl-0 = <&sdc1_clk_on &sdc1_cmd_on &sdc1_data_on  &sdc1_rclk_on>;
	pinctrl-1 = <&sdc1_clk_off &sdc1_cmd_off &sdc1_data_off &sdc1_rclk_off>;

	qcom,clk-rates = <400000 20000000 25000000 50000000 100000000 192000000
								384000000>;
	qcom,nonremovable;
	qcom,bus-speed-mode = "HS400_1p8v", "HS200_1p8v", "DDR_1p8v";

	status = "ok";
};

&sdhc_2 {
	/* device core power supply */
	vdd-supply = <&pm8953_l11>;
	qcom,vdd-voltage-level = <2950000 2950000>;
	qcom,vdd-current-level = <15000 800000>;

	/* device communication power supply */
	vdd-io-supply = <&pm8953_l12>;
	qcom,vdd-io-voltage-level = <1800000 2950000>;
	qcom,vdd-io-current-level = <200 22000>;

	pinctrl-names = "active", "sleep";
	pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on>;
	pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off>;

	#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 &tlmm 133 0>;
	interrupt-names = "hc_irq", "pwr_irq", "status_irq";
	cd-gpios = <&tlmm 133 0x1>;

	qcom,clk-rates = <400000 20000000 25000000 50000000 100000000
								200000000>;
	qcom,bus-speed-mode = "SDR12", "SDR25", "SDR50", "DDR50", "SDR104";

	status = "ok";
};

#include "msm8953-mdss-panels.dtsi"

&mdss_mdp {
	qcom,mdss-pref-prim-intf = "dsi";
};

&mdss_dsi {
	hw-config = "single_dsi";
};

/*[Arima_8901][Jialong] lcm driver porting begin*/
&mdss_dsi0 {
	#if 1
	//[Arima][8901][JialongJhan] Command mode 20190516 Start
	qcom,dsi-pref-prim-pan = <&dsi_djn_hx83112b_1080p_cmd>;
	//qcom,dsi-pref-prim-pan = <&dsi_hx83112b_truly_1080p_video>;
	//[Arima][8901][JialongJhan] Command mode 20190516 End
	#else
	qcom,dsi-pref-prim-pan = <&dsi_truly_1080_vid>;
	#endif
	pinctrl-names = "mdss_default", "mdss_sleep";
	pinctrl-0 = <&mdss_dsi_active &mdss_te_active>;
	pinctrl-1 = <&mdss_dsi_suspend &mdss_te_suspend>;

	qcom,platform-te-gpio = <&tlmm 24 0>;
	qcom,platform-reset-gpio = <&tlmm 61 0>;
	qcom,platform-bklight-en-gpio = <&tlmm 96 0>;
	//not config yet...
	//qcom,platform-id-gpio = <&tlmm 59 0>;
};
/*[Arima_8901][Jialong] lcm driver porting end*/

&mdss_dsi1 {
	status = "disabled";
	qcom,dsi-pref-prim-pan = <&dsi_adv7533_1080p>;
	pinctrl-names = "mdss_default", "mdss_sleep";
	pinctrl-0 = <&mdss_dsi_active &mdss_te_active>;
	pinctrl-1 = <&mdss_dsi_suspend &mdss_te_suspend>;

	qcom,pluggable;
	qcom,platform-te-gpio = <&tlmm 24 0>;
	qcom,platform-reset-gpio = <&tlmm 61 0>;
	qcom,platform-bklight-en-gpio = <&tlmm 59 0>;
};

/*[Arima_8901][Jialong] lcm driver porting begin*/
&dsi_hx83112b_truly_1080p_video {
	qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_dcs";
	qcom,mdss-dsi-bl-min-level = <1>;
	qcom,mdss-dsi-bl-max-level = <4095>;
	qcom,panel-supply-entries = <&dsi_panel_pwr_supply>;
};

&dsi_djn_hx83112b_1080p_cmd {
	qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_dcs";
	qcom,mdss-dsi-bl-min-level = <1>;
	qcom,mdss-dsi-bl-max-level = <4095>;
	qcom,panel-supply-entries = <&dsi_panel_pwr_supply>;
};
/*[Arima_8901][Jialong] lcm driver porting end*/

&dsi_truly_1080_vid {
	qcom,panel-supply-entries = <&dsi_panel_pwr_supply>;
	qcom,mdss-dsi-pan-enable-dynamic-fps;
	qcom,mdss-dsi-min-refresh-rate = <48>;
	qcom,mdss-dsi-max-refresh-rate = <60>;
	qcom,mdss-dsi-pan-fps-update = "dfps_immediate_porch_mode_vfp";
};

&dsi_hx8399c_truly_vid {
	qcom,panel-supply-entries = <&dsi_panel_pwr_supply>;
	qcom,mdss-dsi-pan-enable-dynamic-fps;
	qcom,mdss-dsi-pan-fps-update = "dfps_immediate_porch_mode_vfp";
};

&dsi_truly_1080_cmd {
	qcom,panel-supply-entries = <&dsi_panel_pwr_supply>;
	qcom,ulps-enabled;
	qcom,partial-update-enabled;
	qcom,panel-roi-alignment = <2 2 4 2 1080 2>;
};

&soc {
	gpio_keys {
		compatible = "gpio-keys";
		input-name = "gpio-keys";
		pinctrl-names = "default";
		pinctrl-0 = <&gpio_key_active>;

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

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

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

&thermal_zones {
	case-therm-step {
		status = "disabled";
	};

	quiet-therm-step {
		status = "disabled";
	};
};
