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

phy: mediatek: mipi: mt8173: 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-16-chunfeng.yun@mediatek.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>

authored by

Chunfeng Yun and committed by
Vinod Koul
bd4ba730 993aa53e

+55 -62
+55 -62
drivers/phy/mediatek/phy-mtk-mipi-dsi-mt8173.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_DSI_CON 0x00 ··· 122 121 static int mtk_mipi_tx_pll_prepare(struct clk_hw *hw) 123 122 { 124 123 struct mtk_mipi_tx *mipi_tx = mtk_mipi_tx_from_clk_hw(hw); 124 + void __iomem *base = mipi_tx->regs; 125 125 u8 txdiv, txdiv0, txdiv1; 126 126 u64 pcw; 127 127 ··· 152 150 return -EINVAL; 153 151 } 154 152 155 - mtk_mipi_tx_update_bits(mipi_tx, MIPITX_DSI_BG_CON, 156 - RG_DSI_VOUT_MSK | 157 - RG_DSI_BG_CKEN | RG_DSI_BG_CORE_EN, 158 - FIELD_PREP(RG_DSI_V02_SEL, 4) | 159 - FIELD_PREP(RG_DSI_V032_SEL, 4) | 160 - FIELD_PREP(RG_DSI_V04_SEL, 4) | 161 - FIELD_PREP(RG_DSI_V072_SEL, 4) | 162 - FIELD_PREP(RG_DSI_V10_SEL, 4) | 163 - FIELD_PREP(RG_DSI_V12_SEL, 4) | 164 - RG_DSI_BG_CKEN | RG_DSI_BG_CORE_EN); 153 + mtk_phy_update_bits(base + MIPITX_DSI_BG_CON, 154 + RG_DSI_VOUT_MSK | RG_DSI_BG_CKEN | 155 + RG_DSI_BG_CORE_EN, 156 + FIELD_PREP(RG_DSI_V02_SEL, 4) | 157 + FIELD_PREP(RG_DSI_V032_SEL, 4) | 158 + FIELD_PREP(RG_DSI_V04_SEL, 4) | 159 + FIELD_PREP(RG_DSI_V072_SEL, 4) | 160 + FIELD_PREP(RG_DSI_V10_SEL, 4) | 161 + FIELD_PREP(RG_DSI_V12_SEL, 4) | 162 + RG_DSI_BG_CKEN | RG_DSI_BG_CORE_EN); 165 163 166 164 usleep_range(30, 100); 167 165 168 - mtk_mipi_tx_update_bits(mipi_tx, MIPITX_DSI_TOP_CON, 169 - RG_DSI_LNT_IMP_CAL_CODE | RG_DSI_LNT_HS_BIAS_EN, 170 - FIELD_PREP(RG_DSI_LNT_IMP_CAL_CODE, 8) | 171 - RG_DSI_LNT_HS_BIAS_EN); 166 + mtk_phy_update_bits(base + MIPITX_DSI_TOP_CON, 167 + RG_DSI_LNT_IMP_CAL_CODE | RG_DSI_LNT_HS_BIAS_EN, 168 + FIELD_PREP(RG_DSI_LNT_IMP_CAL_CODE, 8) | 169 + RG_DSI_LNT_HS_BIAS_EN); 172 170 173 - mtk_mipi_tx_set_bits(mipi_tx, MIPITX_DSI_CON, 174 - RG_DSI_CKG_LDOOUT_EN | RG_DSI_LDOCORE_EN); 171 + mtk_phy_set_bits(base + MIPITX_DSI_CON, 172 + RG_DSI_CKG_LDOOUT_EN | RG_DSI_LDOCORE_EN); 175 173 176 - mtk_mipi_tx_update_bits(mipi_tx, MIPITX_DSI_PLL_PWR, 177 - RG_DSI_MPPLL_SDM_PWR_ON | 178 - RG_DSI_MPPLL_SDM_ISO_EN, 179 - RG_DSI_MPPLL_SDM_PWR_ON); 174 + mtk_phy_update_bits(base + MIPITX_DSI_PLL_PWR, 175 + RG_DSI_MPPLL_SDM_PWR_ON | RG_DSI_MPPLL_SDM_ISO_EN, 176 + RG_DSI_MPPLL_SDM_PWR_ON); 180 177 181 - mtk_mipi_tx_clear_bits(mipi_tx, MIPITX_DSI_PLL_CON0, 182 - RG_DSI_MPPLL_PLL_EN); 178 + mtk_phy_clear_bits(base + MIPITX_DSI_PLL_CON0, RG_DSI_MPPLL_PLL_EN); 183 179 184 - mtk_mipi_tx_update_bits(mipi_tx, MIPITX_DSI_PLL_CON0, 185 - RG_DSI_MPPLL_TXDIV0 | RG_DSI_MPPLL_TXDIV1 | 186 - RG_DSI_MPPLL_PREDIV, 187 - FIELD_PREP(RG_DSI_MPPLL_TXDIV0, txdiv0) | 188 - FIELD_PREP(RG_DSI_MPPLL_TXDIV1, txdiv1)); 180 + mtk_phy_update_bits(base + MIPITX_DSI_PLL_CON0, 181 + RG_DSI_MPPLL_TXDIV0 | RG_DSI_MPPLL_TXDIV1 | 182 + RG_DSI_MPPLL_PREDIV, 183 + FIELD_PREP(RG_DSI_MPPLL_TXDIV0, txdiv0) | 184 + FIELD_PREP(RG_DSI_MPPLL_TXDIV1, txdiv1)); 189 185 190 186 /* 191 187 * PLL PCW config ··· 193 193 * Post DIV =4, so need data_Rate*4 194 194 * Ref_clk is 26MHz 195 195 */ 196 - pcw = div_u64(((u64)mipi_tx->data_rate * 2 * txdiv) << 24, 197 - 26000000); 198 - writel(pcw, mipi_tx->regs + MIPITX_DSI_PLL_CON2); 196 + pcw = div_u64(((u64)mipi_tx->data_rate * 2 * txdiv) << 24, 26000000); 197 + writel(pcw, base + MIPITX_DSI_PLL_CON2); 199 198 200 - mtk_mipi_tx_set_bits(mipi_tx, MIPITX_DSI_PLL_CON1, 201 - RG_DSI_MPPLL_SDM_FRA_EN); 199 + mtk_phy_set_bits(base + MIPITX_DSI_PLL_CON1, RG_DSI_MPPLL_SDM_FRA_EN); 202 200 203 - mtk_mipi_tx_set_bits(mipi_tx, MIPITX_DSI_PLL_CON0, RG_DSI_MPPLL_PLL_EN); 201 + mtk_phy_set_bits(base + MIPITX_DSI_PLL_CON0, RG_DSI_MPPLL_PLL_EN); 204 202 205 203 usleep_range(20, 100); 206 204 207 - mtk_mipi_tx_clear_bits(mipi_tx, MIPITX_DSI_PLL_CON1, 208 - RG_DSI_MPPLL_SDM_SSC_EN); 205 + mtk_phy_clear_bits(base + MIPITX_DSI_PLL_CON1, RG_DSI_MPPLL_SDM_SSC_EN); 209 206 210 - mtk_mipi_tx_update_bits(mipi_tx, MIPITX_DSI_PLL_TOP, 211 - RG_DSI_MPPLL_PRESERVE, 212 - mipi_tx->driver_data->mppll_preserve); 207 + mtk_phy_update_field(base + MIPITX_DSI_PLL_TOP, 208 + RG_DSI_MPPLL_PRESERVE, 209 + mipi_tx->driver_data->mppll_preserve); 213 210 214 211 return 0; 215 212 } ··· 214 217 static void mtk_mipi_tx_pll_unprepare(struct clk_hw *hw) 215 218 { 216 219 struct mtk_mipi_tx *mipi_tx = mtk_mipi_tx_from_clk_hw(hw); 220 + void __iomem *base = mipi_tx->regs; 217 221 218 222 dev_dbg(mipi_tx->dev, "unprepare\n"); 219 223 220 - mtk_mipi_tx_clear_bits(mipi_tx, MIPITX_DSI_PLL_CON0, 221 - RG_DSI_MPPLL_PLL_EN); 224 + mtk_phy_clear_bits(base + MIPITX_DSI_PLL_CON0, RG_DSI_MPPLL_PLL_EN); 222 225 223 - mtk_mipi_tx_update_bits(mipi_tx, MIPITX_DSI_PLL_TOP, 224 - RG_DSI_MPPLL_PRESERVE, 0); 226 + mtk_phy_clear_bits(base + MIPITX_DSI_PLL_TOP, RG_DSI_MPPLL_PRESERVE); 225 227 226 - mtk_mipi_tx_update_bits(mipi_tx, MIPITX_DSI_PLL_PWR, 227 - RG_DSI_MPPLL_SDM_ISO_EN | 228 - RG_DSI_MPPLL_SDM_PWR_ON, 229 - RG_DSI_MPPLL_SDM_ISO_EN); 228 + mtk_phy_update_bits(base + MIPITX_DSI_PLL_PWR, 229 + RG_DSI_MPPLL_SDM_ISO_EN | RG_DSI_MPPLL_SDM_PWR_ON, 230 + RG_DSI_MPPLL_SDM_ISO_EN); 230 231 231 - mtk_mipi_tx_clear_bits(mipi_tx, MIPITX_DSI_TOP_CON, 232 - RG_DSI_LNT_HS_BIAS_EN); 232 + mtk_phy_clear_bits(base + MIPITX_DSI_TOP_CON, RG_DSI_LNT_HS_BIAS_EN); 233 233 234 - mtk_mipi_tx_clear_bits(mipi_tx, MIPITX_DSI_CON, 235 - RG_DSI_CKG_LDOOUT_EN | RG_DSI_LDOCORE_EN); 234 + mtk_phy_clear_bits(base + MIPITX_DSI_CON, 235 + RG_DSI_CKG_LDOOUT_EN | RG_DSI_LDOCORE_EN); 236 236 237 - mtk_mipi_tx_clear_bits(mipi_tx, MIPITX_DSI_BG_CON, 238 - RG_DSI_BG_CKEN | RG_DSI_BG_CORE_EN); 237 + mtk_phy_clear_bits(base + MIPITX_DSI_BG_CON, 238 + RG_DSI_BG_CKEN | RG_DSI_BG_CORE_EN); 239 239 240 - mtk_mipi_tx_clear_bits(mipi_tx, MIPITX_DSI_PLL_CON0, 241 - RG_DSI_MPPLL_DIV_MSK); 240 + mtk_phy_clear_bits(base + MIPITX_DSI_PLL_CON0, RG_DSI_MPPLL_DIV_MSK); 242 241 } 243 242 244 243 static long mtk_mipi_tx_pll_round_rate(struct clk_hw *hw, unsigned long rate, ··· 258 265 259 266 for (reg = MIPITX_DSI_CLOCK_LANE; 260 267 reg <= MIPITX_DSI_DATA_LANE3; reg += 4) 261 - mtk_mipi_tx_set_bits(mipi_tx, reg, RG_DSI_LNTx_LDOOUT_EN); 268 + mtk_phy_set_bits(mipi_tx->regs + reg, RG_DSI_LNTx_LDOOUT_EN); 262 269 263 - mtk_mipi_tx_clear_bits(mipi_tx, MIPITX_DSI_TOP_CON, 264 - RG_DSI_PAD_TIE_LOW_EN); 270 + mtk_phy_clear_bits(mipi_tx->regs + MIPITX_DSI_TOP_CON, 271 + RG_DSI_PAD_TIE_LOW_EN); 265 272 } 266 273 267 274 static void mtk_mipi_tx_power_off_signal(struct phy *phy) ··· 269 276 struct mtk_mipi_tx *mipi_tx = phy_get_drvdata(phy); 270 277 u32 reg; 271 278 272 - mtk_mipi_tx_set_bits(mipi_tx, MIPITX_DSI_TOP_CON, 273 - RG_DSI_PAD_TIE_LOW_EN); 279 + mtk_phy_set_bits(mipi_tx->regs + MIPITX_DSI_TOP_CON, 280 + RG_DSI_PAD_TIE_LOW_EN); 274 281 275 282 for (reg = MIPITX_DSI_CLOCK_LANE; 276 283 reg <= MIPITX_DSI_DATA_LANE3; reg += 4) 277 - mtk_mipi_tx_clear_bits(mipi_tx, reg, RG_DSI_LNTx_LDOOUT_EN); 284 + mtk_phy_clear_bits(mipi_tx->regs + reg, RG_DSI_LNTx_LDOOUT_EN); 278 285 } 279 286 280 287 const struct mtk_mipitx_data mt2701_mipitx_data = { 281 - .mppll_preserve = (3 << 8), 288 + .mppll_preserve = 3, 282 289 .mipi_tx_clk_ops = &mtk_mipi_tx_pll_ops, 283 290 .mipi_tx_enable_signal = mtk_mipi_tx_power_on_signal, 284 291 .mipi_tx_disable_signal = mtk_mipi_tx_power_off_signal, 285 292 }; 286 293 287 294 const struct mtk_mipitx_data mt8173_mipitx_data = { 288 - .mppll_preserve = (0 << 8), 295 + .mppll_preserve = 0, 289 296 .mipi_tx_clk_ops = &mtk_mipi_tx_pll_ops, 290 297 .mipi_tx_enable_signal = mtk_mipi_tx_power_on_signal, 291 298 .mipi_tx_disable_signal = mtk_mipi_tx_power_off_signal,