|
@@ -248,76 +248,85 @@ void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp,
|
|
|
{
|
|
|
u32 reg;
|
|
|
u32 phy_pd_addr = ANALOGIX_DP_PHY_PD;
|
|
|
+ u32 mask;
|
|
|
|
|
|
if (dp->plat_data && is_rockchip(dp->plat_data->dev_type))
|
|
|
phy_pd_addr = ANALOGIX_DP_PD;
|
|
|
|
|
|
switch (block) {
|
|
|
case AUX_BLOCK:
|
|
|
- if (enable) {
|
|
|
- reg = readl(dp->reg_base + phy_pd_addr);
|
|
|
- reg |= AUX_PD;
|
|
|
- writel(reg, dp->reg_base + phy_pd_addr);
|
|
|
- } else {
|
|
|
- reg = readl(dp->reg_base + phy_pd_addr);
|
|
|
- reg &= ~AUX_PD;
|
|
|
- writel(reg, dp->reg_base + phy_pd_addr);
|
|
|
- }
|
|
|
+ if (dp->plat_data && is_rockchip(dp->plat_data->dev_type))
|
|
|
+ mask = RK_AUX_PD;
|
|
|
+ else
|
|
|
+ mask = AUX_PD;
|
|
|
+
|
|
|
+ reg = readl(dp->reg_base + phy_pd_addr);
|
|
|
+ if (enable)
|
|
|
+ reg |= mask;
|
|
|
+ else
|
|
|
+ reg &= ~mask;
|
|
|
+ writel(reg, dp->reg_base + phy_pd_addr);
|
|
|
break;
|
|
|
case CH0_BLOCK:
|
|
|
- if (enable) {
|
|
|
- reg = readl(dp->reg_base + phy_pd_addr);
|
|
|
- reg |= CH0_PD;
|
|
|
- writel(reg, dp->reg_base + phy_pd_addr);
|
|
|
- } else {
|
|
|
- reg = readl(dp->reg_base + phy_pd_addr);
|
|
|
- reg &= ~CH0_PD;
|
|
|
- writel(reg, dp->reg_base + phy_pd_addr);
|
|
|
- }
|
|
|
+ mask = CH0_PD;
|
|
|
+ reg = readl(dp->reg_base + phy_pd_addr);
|
|
|
+
|
|
|
+ if (enable)
|
|
|
+ reg |= mask;
|
|
|
+ else
|
|
|
+ reg &= ~mask;
|
|
|
+ writel(reg, dp->reg_base + phy_pd_addr);
|
|
|
break;
|
|
|
case CH1_BLOCK:
|
|
|
- if (enable) {
|
|
|
- reg = readl(dp->reg_base + phy_pd_addr);
|
|
|
- reg |= CH1_PD;
|
|
|
- writel(reg, dp->reg_base + phy_pd_addr);
|
|
|
- } else {
|
|
|
- reg = readl(dp->reg_base + phy_pd_addr);
|
|
|
- reg &= ~CH1_PD;
|
|
|
- writel(reg, dp->reg_base + phy_pd_addr);
|
|
|
- }
|
|
|
+ mask = CH1_PD;
|
|
|
+ reg = readl(dp->reg_base + phy_pd_addr);
|
|
|
+
|
|
|
+ if (enable)
|
|
|
+ reg |= mask;
|
|
|
+ else
|
|
|
+ reg &= ~mask;
|
|
|
+ writel(reg, dp->reg_base + phy_pd_addr);
|
|
|
break;
|
|
|
case CH2_BLOCK:
|
|
|
- if (enable) {
|
|
|
- reg = readl(dp->reg_base + phy_pd_addr);
|
|
|
- reg |= CH2_PD;
|
|
|
- writel(reg, dp->reg_base + phy_pd_addr);
|
|
|
- } else {
|
|
|
- reg = readl(dp->reg_base + phy_pd_addr);
|
|
|
- reg &= ~CH2_PD;
|
|
|
- writel(reg, dp->reg_base + phy_pd_addr);
|
|
|
- }
|
|
|
+ mask = CH2_PD;
|
|
|
+ reg = readl(dp->reg_base + phy_pd_addr);
|
|
|
+
|
|
|
+ if (enable)
|
|
|
+ reg |= mask;
|
|
|
+ else
|
|
|
+ reg &= ~mask;
|
|
|
+ writel(reg, dp->reg_base + phy_pd_addr);
|
|
|
break;
|
|
|
case CH3_BLOCK:
|
|
|
- if (enable) {
|
|
|
- reg = readl(dp->reg_base + phy_pd_addr);
|
|
|
- reg |= CH3_PD;
|
|
|
- writel(reg, dp->reg_base + phy_pd_addr);
|
|
|
- } else {
|
|
|
- reg = readl(dp->reg_base + phy_pd_addr);
|
|
|
- reg &= ~CH3_PD;
|
|
|
- writel(reg, dp->reg_base + phy_pd_addr);
|
|
|
- }
|
|
|
+ mask = CH3_PD;
|
|
|
+ reg = readl(dp->reg_base + phy_pd_addr);
|
|
|
+
|
|
|
+ if (enable)
|
|
|
+ reg |= mask;
|
|
|
+ else
|
|
|
+ reg &= ~mask;
|
|
|
+ writel(reg, dp->reg_base + phy_pd_addr);
|
|
|
break;
|
|
|
case ANALOG_TOTAL:
|
|
|
- if (enable) {
|
|
|
- reg = readl(dp->reg_base + phy_pd_addr);
|
|
|
- reg |= DP_PHY_PD;
|
|
|
- writel(reg, dp->reg_base + phy_pd_addr);
|
|
|
- } else {
|
|
|
- reg = readl(dp->reg_base + phy_pd_addr);
|
|
|
- reg &= ~DP_PHY_PD;
|
|
|
- writel(reg, dp->reg_base + phy_pd_addr);
|
|
|
- }
|
|
|
+ /*
|
|
|
+ * There is no bit named DP_PHY_PD, so We used DP_INC_BG
|
|
|
+ * to power off everything instead of DP_PHY_PD in
|
|
|
+ * Rockchip
|
|
|
+ */
|
|
|
+ if (dp->plat_data && is_rockchip(dp->plat_data->dev_type))
|
|
|
+ mask = DP_INC_BG;
|
|
|
+ else
|
|
|
+ mask = DP_PHY_PD;
|
|
|
+
|
|
|
+ reg = readl(dp->reg_base + phy_pd_addr);
|
|
|
+ if (enable)
|
|
|
+ reg |= mask;
|
|
|
+ else
|
|
|
+ reg &= ~mask;
|
|
|
+
|
|
|
+ writel(reg, dp->reg_base + phy_pd_addr);
|
|
|
+ if (dp->plat_data && is_rockchip(dp->plat_data->dev_type))
|
|
|
+ usleep_range(10, 15);
|
|
|
break;
|
|
|
case POWER_ALL:
|
|
|
if (enable) {
|