/*
 * 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";
	};
};

&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";
	};
};
