Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

phy: mediatek: mipi: mt8183: use common helper to access registers

Use MediaTek phy's common helper to access registers, then we can remove
mipi-dsi's I/O helpers.

Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Link: https://lore.kernel.org/r/20220920090038.15133-18-chunfeng.yun@mediatek.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>

authored by

Chunfeng Yun and committed by
Vinod Koul
5f88a93b d36d69a5

+33 -33
+33 -33
drivers/phy/mediatek/phy-mtk-mipi-dsi-mt8183.c
··· 4 4 * Author: jitao.shi <jitao.shi@mediatek.com> 5 5 */ 6 6 7 + #include "phy-mtk-io.h" 7 8 #include "phy-mtk-mipi-dsi.h" 8 9 9 10 #define MIPITX_LANE_CON 0x000c ··· 47 46 static int mtk_mipi_tx_pll_enable(struct clk_hw *hw) 48 47 { 49 48 struct mtk_mipi_tx *mipi_tx = mtk_mipi_tx_from_clk_hw(hw); 49 + void __iomem *base = mipi_tx->regs; 50 50 unsigned int txdiv, txdiv0; 51 51 u64 pcw; 52 52 ··· 72 70 return -EINVAL; 73 71 } 74 72 75 - mtk_mipi_tx_clear_bits(mipi_tx, MIPITX_PLL_CON4, RG_DSI_PLL_IBIAS); 73 + mtk_phy_clear_bits(base + MIPITX_PLL_CON4, RG_DSI_PLL_IBIAS); 76 74 77 - mtk_mipi_tx_set_bits(mipi_tx, MIPITX_PLL_PWR, AD_DSI_PLL_SDM_PWR_ON); 78 - mtk_mipi_tx_clear_bits(mipi_tx, MIPITX_PLL_CON1, RG_DSI_PLL_EN); 75 + mtk_phy_set_bits(base + MIPITX_PLL_PWR, AD_DSI_PLL_SDM_PWR_ON); 76 + mtk_phy_clear_bits(base + MIPITX_PLL_CON1, RG_DSI_PLL_EN); 79 77 udelay(1); 80 - mtk_mipi_tx_clear_bits(mipi_tx, MIPITX_PLL_PWR, AD_DSI_PLL_SDM_ISO_EN); 78 + mtk_phy_clear_bits(base + MIPITX_PLL_PWR, AD_DSI_PLL_SDM_ISO_EN); 81 79 pcw = div_u64(((u64)mipi_tx->data_rate * txdiv) << 24, 26000000); 82 - writel(pcw, mipi_tx->regs + MIPITX_PLL_CON0); 83 - mtk_mipi_tx_update_bits(mipi_tx, MIPITX_PLL_CON1, RG_DSI_PLL_POSDIV, 84 - txdiv0 << 8); 85 - mtk_mipi_tx_set_bits(mipi_tx, MIPITX_PLL_CON1, RG_DSI_PLL_EN); 80 + writel(pcw, base + MIPITX_PLL_CON0); 81 + mtk_phy_update_field(base + MIPITX_PLL_CON1, RG_DSI_PLL_POSDIV, txdiv0); 82 + mtk_phy_set_bits(base + MIPITX_PLL_CON1, RG_DSI_PLL_EN); 86 83 87 84 return 0; 88 85 } ··· 89 88 static void mtk_mipi_tx_pll_disable(struct clk_hw *hw) 90 89 { 91 90 struct mtk_mipi_tx *mipi_tx = mtk_mipi_tx_from_clk_hw(hw); 91 + void __iomem *base = mipi_tx->regs; 92 92 93 - mtk_mipi_tx_clear_bits(mipi_tx, MIPITX_PLL_CON1, RG_DSI_PLL_EN); 93 + mtk_phy_clear_bits(base + MIPITX_PLL_CON1, RG_DSI_PLL_EN); 94 94 95 - mtk_mipi_tx_set_bits(mipi_tx, MIPITX_PLL_PWR, AD_DSI_PLL_SDM_ISO_EN); 96 - mtk_mipi_tx_clear_bits(mipi_tx, MIPITX_PLL_PWR, AD_DSI_PLL_SDM_PWR_ON); 95 + mtk_phy_set_bits(base + MIPITX_PLL_PWR, AD_DSI_PLL_SDM_ISO_EN); 96 + mtk_phy_clear_bits(base + MIPITX_PLL_PWR, AD_DSI_PLL_SDM_PWR_ON); 97 97 } 98 98 99 99 static long mtk_mipi_tx_pll_round_rate(struct clk_hw *hw, unsigned long rate, ··· 123 121 mipi_tx->rt_code[i] |= 0x10 << 5; 124 122 125 123 for (j = 0; j < 10; j++) 126 - mtk_mipi_tx_update_bits(mipi_tx, 124 + mtk_phy_update_bits(mipi_tx->regs + 127 125 MIPITX_D2P_RTCODE * (i + 1) + j * 4, 128 126 1, mipi_tx->rt_code[i] >> j & 1); 129 127 } ··· 132 130 static void mtk_mipi_tx_power_on_signal(struct phy *phy) 133 131 { 134 132 struct mtk_mipi_tx *mipi_tx = phy_get_drvdata(phy); 133 + void __iomem *base = mipi_tx->regs; 135 134 136 135 /* BG_LPF_EN / BG_CORE_EN */ 137 - writel(RG_DSI_PAD_TIEL_SEL | RG_DSI_BG_CORE_EN, 138 - mipi_tx->regs + MIPITX_LANE_CON); 136 + writel(RG_DSI_PAD_TIEL_SEL | RG_DSI_BG_CORE_EN, base + MIPITX_LANE_CON); 139 137 usleep_range(30, 100); 140 - writel(RG_DSI_BG_CORE_EN | RG_DSI_BG_LPF_EN, 141 - mipi_tx->regs + MIPITX_LANE_CON); 138 + writel(RG_DSI_BG_CORE_EN | RG_DSI_BG_LPF_EN, base + MIPITX_LANE_CON); 142 139 143 140 /* Switch OFF each Lane */ 144 - mtk_mipi_tx_clear_bits(mipi_tx, MIPITX_D0_SW_CTL_EN, DSI_SW_CTL_EN); 145 - mtk_mipi_tx_clear_bits(mipi_tx, MIPITX_D1_SW_CTL_EN, DSI_SW_CTL_EN); 146 - mtk_mipi_tx_clear_bits(mipi_tx, MIPITX_D2_SW_CTL_EN, DSI_SW_CTL_EN); 147 - mtk_mipi_tx_clear_bits(mipi_tx, MIPITX_D3_SW_CTL_EN, DSI_SW_CTL_EN); 148 - mtk_mipi_tx_clear_bits(mipi_tx, MIPITX_CK_SW_CTL_EN, DSI_SW_CTL_EN); 141 + mtk_phy_clear_bits(base + MIPITX_D0_SW_CTL_EN, DSI_SW_CTL_EN); 142 + mtk_phy_clear_bits(base + MIPITX_D1_SW_CTL_EN, DSI_SW_CTL_EN); 143 + mtk_phy_clear_bits(base + MIPITX_D2_SW_CTL_EN, DSI_SW_CTL_EN); 144 + mtk_phy_clear_bits(base + MIPITX_D3_SW_CTL_EN, DSI_SW_CTL_EN); 145 + mtk_phy_clear_bits(base + MIPITX_CK_SW_CTL_EN, DSI_SW_CTL_EN); 149 146 150 - mtk_mipi_tx_update_bits(mipi_tx, MIPITX_VOLTAGE_SEL, 151 - RG_DSI_HSTX_LDO_REF_SEL, 152 - (mipi_tx->mipitx_drive - 3000) / 200 << 6); 147 + mtk_phy_update_field(base + MIPITX_VOLTAGE_SEL, RG_DSI_HSTX_LDO_REF_SEL, 148 + (mipi_tx->mipitx_drive - 3000) / 200); 153 149 154 150 mtk_mipi_tx_config_calibration_data(mipi_tx); 155 151 156 - mtk_mipi_tx_set_bits(mipi_tx, MIPITX_CK_CKMODE_EN, DSI_CK_CKMODE_EN); 152 + mtk_phy_set_bits(base + MIPITX_CK_CKMODE_EN, DSI_CK_CKMODE_EN); 157 153 } 158 154 159 155 static void mtk_mipi_tx_power_off_signal(struct phy *phy) 160 156 { 161 157 struct mtk_mipi_tx *mipi_tx = phy_get_drvdata(phy); 158 + void __iomem *base = mipi_tx->regs; 162 159 163 160 /* Switch ON each Lane */ 164 - mtk_mipi_tx_set_bits(mipi_tx, MIPITX_D0_SW_CTL_EN, DSI_SW_CTL_EN); 165 - mtk_mipi_tx_set_bits(mipi_tx, MIPITX_D1_SW_CTL_EN, DSI_SW_CTL_EN); 166 - mtk_mipi_tx_set_bits(mipi_tx, MIPITX_D2_SW_CTL_EN, DSI_SW_CTL_EN); 167 - mtk_mipi_tx_set_bits(mipi_tx, MIPITX_D3_SW_CTL_EN, DSI_SW_CTL_EN); 168 - mtk_mipi_tx_set_bits(mipi_tx, MIPITX_CK_SW_CTL_EN, DSI_SW_CTL_EN); 161 + mtk_phy_set_bits(base + MIPITX_D0_SW_CTL_EN, DSI_SW_CTL_EN); 162 + mtk_phy_set_bits(base + MIPITX_D1_SW_CTL_EN, DSI_SW_CTL_EN); 163 + mtk_phy_set_bits(base + MIPITX_D2_SW_CTL_EN, DSI_SW_CTL_EN); 164 + mtk_phy_set_bits(base + MIPITX_D3_SW_CTL_EN, DSI_SW_CTL_EN); 165 + mtk_phy_set_bits(base + MIPITX_CK_SW_CTL_EN, DSI_SW_CTL_EN); 169 166 170 - writel(RG_DSI_PAD_TIEL_SEL | RG_DSI_BG_CORE_EN, 171 - mipi_tx->regs + MIPITX_LANE_CON); 172 - writel(RG_DSI_PAD_TIEL_SEL, mipi_tx->regs + MIPITX_LANE_CON); 167 + writel(RG_DSI_PAD_TIEL_SEL | RG_DSI_BG_CORE_EN, base + MIPITX_LANE_CON); 168 + writel(RG_DSI_PAD_TIEL_SEL, base + MIPITX_LANE_CON); 173 169 } 174 170 175 171 const struct mtk_mipitx_data mt8183_mipitx_data = {