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

Commit aa64dad6 authored by Sriharsha Allenki's avatar Sriharsha Allenki
Browse files

usb: phy: Add the interrupt programming sequence for HS PHY



Add the programming sequence to enable, disable and
clear PHY HV interrupts that are triggered on HS wakeup
events.

Change-Id: I2c323d24e86885ccb39407794e372eecc15405a5
Signed-off-by: default avatarSriharsha Allenki <sallenki@codeaurora.org>
parent 431ec402
Loading
Loading
Loading
Loading
+24 −6
Original line number Diff line number Diff line
@@ -368,9 +368,18 @@ static void msm_snps_hsphy_enable_hv_interrupts(struct msm_snps_hsphy *phy)
	u32 val;

	dev_dbg(phy->phy.dev, "%s\n", __func__);
	val = readl_relaxed(USB_PHY_CSR_PHY_CTRL3);
	val |= CLAMP_MPM_DPSE_DMSE_EN_N;
	writeb_relaxed(val, USB_PHY_CSR_PHY_CTRL3);
	/* Clear any existing interrupts before enabling the interrupts */
	val = readl_relaxed(USB2_PHY_USB_PHY_INTERRUPT_CLEAR0);
	val |= USB2_PHY_USB_PHY_DPDM_CLEAR_MASK;
	writeb_relaxed(val, USB2_PHY_USB_PHY_INTERRUPT_CLEAR0);

	writeb_relaxed(0x00, USB2_PHY_USB_PHY_IRQ_CMD);
	usleep_range(200, 220);
	writeb_relaxed(0x01, USB2_PHY_USB_PHY_IRQ_CMD);

	val = readl_relaxed(USB2_PHY_USB_PHY_INTERRUPT_MASK0);
	val |= USB2_PHY_USB_PHY_DPDM_0_1_MASK;
	writeb_relaxed(val, USB2_PHY_USB_PHY_INTERRUPT_MASK0);
}

static void msm_snps_hsphy_disable_hv_interrupts(struct msm_snps_hsphy *phy)
@@ -378,9 +387,18 @@ static void msm_snps_hsphy_disable_hv_interrupts(struct msm_snps_hsphy *phy)
	u32 val;

	dev_dbg(phy->phy.dev, "%s\n", __func__);
	val = readl_relaxed(USB_PHY_CSR_PHY_CTRL3);
	val &= ~CLAMP_MPM_DPSE_DMSE_EN_N;
	writeb_relaxed(val, USB_PHY_CSR_PHY_CTRL3);
	val = readl_relaxed(USB2_PHY_USB_PHY_INTERRUPT_MASK0);
	val &= ~USB2_PHY_USB_PHY_DPDM_CLEAR_MASK;
	writeb_relaxed(val, USB2_PHY_USB_PHY_INTERRUPT_MASK0);

	/* Clear any pending interrupts */
	val = readl_relaxed(USB2_PHY_USB_PHY_INTERRUPT_CLEAR0);
	val |= USB2_PHY_USB_PHY_DPDM_CLEAR_MASK;
	writeb_relaxed(val, USB2_PHY_USB_PHY_INTERRUPT_CLEAR0);

	writeb_relaxed(0x00, USB2_PHY_USB_PHY_IRQ_CMD);
	usleep_range(200, 220);
	writeb_relaxed(0x01, USB2_PHY_USB_PHY_IRQ_CMD);
}

static int msm_snps_hsphy_set_suspend(struct usb_phy *uphy, int suspend)
+5 −0
Original line number Diff line number Diff line
@@ -90,8 +90,13 @@
#define USB2_PHY_USB_PHY_INTERRUPT_SRC_STATUS (MSM_USB_PHY_CSR_BASE + 0x05C)

#define USB2_PHY_USB_PHY_INTERRUPT_CLEAR0 (MSM_USB_PHY_CSR_BASE + 0x0DC)
#define USB2_PHY_USB_PHY_DPDM_CLEAR_MASK	0x1E

#define USB2_PHY_USB_PHY_INTERRUPT_CLEAR1 (MSM_USB_PHY_CSR_BASE + 0x0E0)

#define USB2_PHY_USB_PHY_INTERRUPT_MASK0 (MSM_USB_PHY_CSR_BASE + 0x0D4)
#define USB2_PHY_USB_PHY_DPDM_0_1_MASK		0x0A

#define USB2_PHY_USB_PHY_INTERRUPT_MASK1 (MSM_USB_PHY_CSR_BASE + 0x0D8)

#define USB_PHY_IDDIG_1_0 BIT(7)