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

Commit e7c43685 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "drm/msm/dp: add support for USB3 DP PHY combo reset"

parents 88dd7ad6 b6117bd6
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ DP Controller: Required properties:
			"dp_mmss_cc" - Display Clock Control memory region.
			"qfprom_physical" - QFPROM Phys memory region.
			"dp_pll" - USB3 DP combo PLL memory region.
			"usb3_dp_com" - USB3 DP PHY combo memory region.
			"hdcp_physical" - DP HDCP memory region.
- cell-index:           Specifies the controller instance.
- clocks:               Clocks required for Display Port operation.
+2 −1
Original line number Diff line number Diff line
@@ -430,10 +430,11 @@
			<0xaf02000 0x1a0>,
			<0x780000 0x621c>,
			<0x88ea030 0x10>,
			<0x88e8000 0x20>,
			<0x0aee1000 0x034>;
		reg-names = "dp_ctrl", "dp_phy", "dp_ln_tx0", "dp_ln_tx1",
			"dp_mmss_cc", "qfprom_physical", "dp_pll",
			"hdcp_physical";
			"usb3_dp_com", "hdcp_physical";

		interrupt-parent = <&mdss_mdp>;
		interrupts = <12 0>;
+38 −0
Original line number Diff line number Diff line
@@ -493,6 +493,43 @@ static void dp_catalog_ctrl_set_pattern(struct dp_catalog_ctrl *ctrl,
		pr_err("set link_train=%d failed\n", pattern);
}

static void dp_catalog_ctrl_usb_reset(struct dp_catalog_ctrl *ctrl, bool flip)
{
	struct dp_catalog_private *catalog;
	void __iomem *base;

	if (!ctrl) {
		pr_err("invalid input\n");
		return;
	}

	dp_catalog_get_priv(ctrl);

	base = catalog->io->usb3_dp_com.base;

	dp_write(base + USB3_DP_COM_RESET_OVRD_CTRL, 0x0a);
	dp_write(base + USB3_DP_COM_PHY_MODE_CTRL, 0x02);
	dp_write(base + USB3_DP_COM_SW_RESET, 0x01);
	/* make sure usb3 com phy software reset is done */
	wmb();

	if (!flip) /* CC1 */
		dp_write(base + USB3_DP_COM_TYPEC_CTRL, 0x02);
	else /* CC2 */
		dp_write(base + USB3_DP_COM_TYPEC_CTRL, 0x03);

	dp_write(base + USB3_DP_COM_SWI_CTRL, 0x00);
	dp_write(base + USB3_DP_COM_SW_RESET, 0x00);
	/* make sure the software reset is done */
	wmb();

	dp_write(base + USB3_DP_COM_POWER_DOWN_CTRL, 0x01);
	dp_write(base + USB3_DP_COM_RESET_OVRD_CTRL, 0x00);
	/* make sure phy is brought out of reset */
	wmb();

}

static void dp_catalog_ctrl_reset(struct dp_catalog_ctrl *ctrl)
{
	u32 sw_reset;
@@ -937,6 +974,7 @@ struct dp_catalog *dp_catalog_get(struct device *dev, struct dp_io *io)
		.config_msa     = dp_catalog_ctrl_config_msa,
		.set_pattern    = dp_catalog_ctrl_set_pattern,
		.reset          = dp_catalog_ctrl_reset,
		.usb_reset      = dp_catalog_ctrl_usb_reset,
		.mainlink_ready = dp_catalog_ctrl_mainlink_ready,
		.enable_irq     = dp_catalog_ctrl_enable_irq,
		.hpd_config     = dp_catalog_ctrl_hpd_config,
+1 −0
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ struct dp_catalog_ctrl {
				u32 stream_rate_khz, bool fixed_nvid);
	void (*set_pattern)(struct dp_catalog_ctrl *ctrl, u32 pattern);
	void (*reset)(struct dp_catalog_ctrl *ctrl);
	void (*usb_reset)(struct dp_catalog_ctrl *ctrl, bool flip);
	bool (*mainlink_ready)(struct dp_catalog_ctrl *ctrl);
	void (*enable_irq)(struct dp_catalog_ctrl *ctrl, bool enable);
	void (*hpd_config)(struct dp_catalog_ctrl *ctrl, bool enable);
+1 −0
Original line number Diff line number Diff line
@@ -1093,6 +1093,7 @@ static int dp_ctrl_host_init(struct dp_ctrl *dp_ctrl, bool flip)
	ctrl->orientation = flip;
	catalog = ctrl->catalog;

	catalog->usb_reset(ctrl->catalog, flip);
	catalog->reset(ctrl->catalog);
	catalog->phy_reset(ctrl->catalog);
	catalog->enable_irq(ctrl->catalog, true);
Loading