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

soc: mediatek: avoid using fixed spm power status defines

Use variables to replace fixed defines since the offset
of the status of spm power might be different for some chips

Signed-off-by: Mars Cheng <mars.cheng@mediatek.com>
Signed-off-by: Kevin-CW Chen <kevin-cw.chen@mediatek.com>
Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>

authored by

Mars Cheng and committed by
Matthias Brugger
f1be4c4e 2ea659a9

+27 -6
+27 -6
drivers/soc/mediatek/mtk-scpsys.c
··· 107 107 struct regulator *supply; 108 108 }; 109 109 110 + struct scp_ctrl_reg { 111 + int pwr_sta_offs; 112 + int pwr_sta2nd_offs; 113 + }; 114 + 110 115 struct scp { 111 116 struct scp_domain *domains; 112 117 struct genpd_onecell_data pd_data; 113 118 struct device *dev; 114 119 void __iomem *base; 115 120 struct regmap *infracfg; 121 + struct scp_ctrl_reg ctrl_reg; 116 122 }; 117 123 118 124 static int scpsys_domain_is_on(struct scp_domain *scpd) 119 125 { 120 126 struct scp *scp = scpd->scp; 121 127 122 - u32 status = readl(scp->base + SPM_PWR_STATUS) & scpd->data->sta_mask; 123 - u32 status2 = readl(scp->base + SPM_PWR_STATUS_2ND) & 124 - scpd->data->sta_mask; 128 + u32 status = readl(scp->base + scp->ctrl_reg.pwr_sta_offs) & 129 + scpd->data->sta_mask; 130 + u32 status2 = readl(scp->base + scp->ctrl_reg.pwr_sta2nd_offs) & 131 + scpd->data->sta_mask; 125 132 126 133 /* 127 134 * A domain is on when both status bits are set. If only one is set ··· 353 346 } 354 347 355 348 static struct scp *init_scp(struct platform_device *pdev, 356 - const struct scp_domain_data *scp_domain_data, int num) 349 + const struct scp_domain_data *scp_domain_data, int num, 350 + struct scp_ctrl_reg *scp_ctrl_reg) 357 351 { 358 352 struct genpd_onecell_data *pd_data; 359 353 struct resource *res; ··· 365 357 scp = devm_kzalloc(&pdev->dev, sizeof(*scp), GFP_KERNEL); 366 358 if (!scp) 367 359 return ERR_PTR(-ENOMEM); 360 + 361 + scp->ctrl_reg.pwr_sta_offs = scp_ctrl_reg->pwr_sta_offs; 362 + scp->ctrl_reg.pwr_sta2nd_offs = scp_ctrl_reg->pwr_sta2nd_offs; 368 363 369 364 scp->dev = &pdev->dev; 370 365 ··· 567 556 static int __init scpsys_probe_mt2701(struct platform_device *pdev) 568 557 { 569 558 struct scp *scp; 559 + struct scp_ctrl_reg scp_reg; 570 560 571 - scp = init_scp(pdev, scp_domain_data_mt2701, NUM_DOMAINS_MT2701); 561 + scp_reg.pwr_sta_offs = SPM_PWR_STATUS; 562 + scp_reg.pwr_sta2nd_offs = SPM_PWR_STATUS_2ND; 563 + 564 + scp = init_scp(pdev, scp_domain_data_mt2701, NUM_DOMAINS_MT2701, 565 + &scp_reg); 572 566 if (IS_ERR(scp)) 573 567 return PTR_ERR(scp); 574 568 ··· 683 667 struct scp *scp; 684 668 struct genpd_onecell_data *pd_data; 685 669 int ret; 670 + struct scp_ctrl_reg scp_reg; 686 671 687 - scp = init_scp(pdev, scp_domain_data_mt8173, NUM_DOMAINS_MT8173); 672 + scp_reg.pwr_sta_offs = SPM_PWR_STATUS; 673 + scp_reg.pwr_sta2nd_offs = SPM_PWR_STATUS_2ND; 674 + 675 + scp = init_scp(pdev, scp_domain_data_mt8173, NUM_DOMAINS_MT8173, 676 + &scp_reg); 688 677 if (IS_ERR(scp)) 689 678 return PTR_ERR(scp); 690 679