Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2b7c4eae authored by Padmanabhan Komanduru's avatar Padmanabhan Komanduru Committed by Vinu Deokaran
Browse files

msm: mdss: add support to register secondary fb on DSI device



In the current implementation, DSI0/DSI1 device is always mapped
to frame buffer-0. For dual DSI configuration, we need to
register both the DSI devices to different frame buffers. Add driver
and dtsi support to register DSI device on primary/secondary
frame buffer at runtime based on the DSI configuration.

Change-Id: Iac872723711c5d0264088c4f3b53d1385fd9ffe0
Signed-off-by: default avatarPadmanabhan Komanduru <pkomandu@codeaurora.org>
Signed-off-by: default avatarVinu Deokaran <vinud@codeaurora.org>
Signed-off-by: default avatarSandeep Panda <spanda@codeaurora.org>
parent ebb52f20
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -81,8 +81,8 @@ Required properties:
					"mmss_misc_phys" - Register region for MMSS DSI clamps
- vdd-supply:				Phandle for vdd regulator device node.
- vddio-supply:				Phandle for vdd-io regulator device node.
- qcom,mdss-fb-map:			pHandle that specifies the framebuffer to which the
					interface is mapped.
- qcom,mdss-fb-map-prim:		pHandle that specifies the framebuffer to which the
					primary interface is mapped.
- qcom,mdss-mdp:			pHandle that specifies the mdss-mdp device.
- qcom,platform-regulator-settings:	An array of length 7 or 5 that specifies the PHY
					regulator settings. It use 5 bytes for 8996 pll.
@@ -97,6 +97,10 @@ Required properties:

Optional properties:
- label:		        	A string used to describe the controller used.
- qcom,mdss-fb-map:			pHandle that specifies the framebuffer to which the
					interface is mapped.
- qcom,mdss-fb-map-sec:			pHandle that specifies the framebuffer to which the
					secondary interface is mapped.
- qcom,platform-enable-gpio:		Specifies the panel lcd/display enable gpio.
- qcom,platform-reset-gpio:		Specifies the panel reset gpio.
- qcom,platform-te-gpio:		Specifies the gpio used for TE.
@@ -207,7 +211,7 @@ Example:

			vdd-supply = <&pm8226_l15>;
			vddio-supply = <&pm8226_l8>;
			qcom,mdss-fb-map = <&mdss_fb0>;
			qcom,mdss-fb-map-prim = <&mdss_fb0>;
			qcom,mdss-mdp = <&mdss_mdp>;

			qcom,dsi-pref-prim-pan = <&dsi_tosh_720_vid>;
+2 −2
Original line number Diff line number Diff line
@@ -221,6 +221,8 @@
		qcom,mmss-ulp-clamp-ctrl-offset = <0x20>;
		qcom,mmss-phyreset-ctrl-offset = <0x24>;

		qcom,mdss-fb-map-prim = <&mdss_fb0>;
		qcom,mdss-fb-map-sec = <&mdss_fb2>;
		qcom,core-supply-entries {
			#address-cells = <1>;
			#size-cells = <0>;
@@ -279,7 +281,6 @@
			qcom,mdss-mdp = <&mdss_mdp>;
			vdd-supply = <&pm8937_l17>;
			vddio-supply = <&pm8937_l6>;
			qcom,mdss-fb-map = <&mdss_fb0>;

			clocks = <&clock_gcc_mdss clk_gcc_mdss_byte0_clk>,
				<&clock_gcc_mdss clk_gcc_mdss_pclk0_clk>,
@@ -314,7 +315,6 @@
			qcom,mdss-mdp = <&mdss_mdp>;
			vdd-supply = <&pm8937_l17>;
			vddio-supply = <&pm8937_l6>;
			qcom,mdss-fb-map = <&mdss_fb2>;

			clocks = <&clock_gcc_mdss clk_gcc_mdss_byte1_clk>,
				<&clock_gcc_mdss clk_gcc_mdss_pclk1_clk>,
+1 −1
Original line number Diff line number Diff line
@@ -123,6 +123,7 @@
		hw-config = "single_dsi";
		#address-cells = <1>;
		#size-cells = <1>;
		qcom,mdss-fb-map-prim = <&mdss_fb0>;
		gdsc-supply = <&gdsc_mdss>;
		vdda-supply = <&pm8950_l2>;
		vddio-supply = <&pm8950_l6>;
@@ -190,7 +191,6 @@
			reg-names = "dsi_ctrl", "dsi_phy",
			      "dsi_phy_regulator", "mmss_misc_phys";

			qcom,mdss-fb-map = <&mdss_fb0>;
			qcom,mdss-mdp = <&mdss_mdp>;
			vdd-supply = <&pm8950_l17>;
			vddio-supply = <&pm8950_l6>;
+8 −2
Original line number Diff line number Diff line
@@ -279,6 +279,11 @@
			cell-index = <2>;
			compatible = "qcom,mdss-fb";
		};

		mdss_fb3: qcom,mdss_fb_secondary {
			cell-index = <3>;
			compatible = "qcom,mdss-fb";
		};
	};

	mdss_dsi: qcom,mdss_dsi@0 {
@@ -305,6 +310,9 @@

		qcom,mmss-ulp-clamp-ctrl-offset = <0x14>;

		qcom,mdss-fb-map-prim = <&mdss_fb0>;
		qcom,mdss-fb-map-sec = <&mdss_fb3>;

		clocks = <&clock_mmss clk_mdss_mdp_vote_clk>,
			 <&clock_mmss clk_mdss_ahb_clk>,
			 <&clock_mmss clk_mmss_misc_ahb_clk>,
@@ -375,7 +383,6 @@
			lab-supply = <&lab_regulator>;
			ibb-supply = <&ibb_regulator>;
			qcom,mdss-mdp = <&mdss_mdp>;
			qcom,mdss-fb-map = <&mdss_fb0>;

			clocks = <&clock_mmss clk_mdss_byte0_clk>,
				 <&clock_mmss clk_mdss_pclk0_clk>,
@@ -427,7 +434,6 @@
			lab-supply = <&lab_regulator>;
			ibb-supply = <&ibb_regulator>;
			qcom,mdss-mdp = <&mdss_mdp>;
			qcom,mdss-fb-map = <&mdss_fb0>;

			clocks = <&clock_mmss clk_mdss_byte1_clk>,
				 <&clock_mmss clk_mdss_pclk1_clk>,
+30 −0
Original line number Diff line number Diff line
@@ -2213,6 +2213,35 @@ int mdss_dsi_register_recovery_handler(struct mdss_dsi_ctrl_pdata *ctrl,
	return 0;
}

static struct device_node *mdss_dsi_get_fb_node_cb(struct platform_device *pdev)
{
	struct device_node *fb_node;
	struct platform_device *dsi_dev;
	struct mdss_dsi_ctrl_pdata *ctrl_pdata;

	if (pdev == NULL) {
		pr_err("%s: Invalid input data\n", __func__);
		return NULL;
	}

	ctrl_pdata = platform_get_drvdata(pdev);
	dsi_dev = of_find_device_by_node(pdev->dev.of_node->parent);
	if (!dsi_dev) {
		pr_err("Unable to find dsi master device: %s\n",
			pdev->dev.of_node->full_name);
		return NULL;
	}

	fb_node = of_parse_phandle(dsi_dev->dev.of_node,
			mdss_dsi_get_fb_name(ctrl_pdata), 0);
	if (!fb_node) {
		pr_err("Unable to find fb node for device: %s\n", pdev->name);
		return NULL;
	}

	return fb_node;
}

static int mdss_dsi_event_handler(struct mdss_panel_data *pdata,
				  int event, void *arg)
{
@@ -3652,6 +3681,7 @@ int dsi_panel_device_register(struct platform_device *ctrl_pdev,
	}

	ctrl_pdata->panel_data.event_handler = mdss_dsi_event_handler;
	ctrl_pdata->panel_data.get_fb_node = mdss_dsi_get_fb_node_cb;

	if (ctrl_pdata->status_mode == ESD_REG ||
			ctrl_pdata->status_mode == ESD_REG_NT35596)
Loading