Skip to content

Commit 7233090

Browse files
lumagvinodkoul
authored andcommitted
phy: qcom-qmp-usb: simplify clock handling
For the existing PHYs for new binding we are going to drop ref_clk_src clock and always use ref clock. Rather than introducing additional code to handle legacy vs current bindings (and clock names), use devm_clk_bulk_get_optional() when new bindings are used and devm_clk_bulk_get_all() when legacy bindings are in place. Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Link: https://lore.kernel.org/r/20230824211952.1397699-3-dmitry.baryshkov@linaro.org Signed-off-by: Vinod Koul <vkoul@kernel.org>
1 parent 15c8363 commit 7233090

1 file changed

Lines changed: 24 additions & 66 deletions

File tree

drivers/phy/qualcomm/phy-qcom-qmp-usb.c

Lines changed: 24 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1172,9 +1172,6 @@ struct qmp_phy_cfg {
11721172
const struct qmp_phy_init_tbl *pcs_usb_tbl;
11731173
int pcs_usb_tbl_num;
11741174

1175-
/* clock ids to be requested */
1176-
const char * const *clk_list;
1177-
int num_clks;
11781175
/* resets to be requested */
11791176
const char * const *reset_list;
11801177
int num_resets;
@@ -1208,6 +1205,7 @@ struct qmp_usb {
12081205

12091206
struct clk *pipe_clk;
12101207
struct clk_bulk_data *clks;
1208+
int num_clks;
12111209
struct reset_control_bulk_data *resets;
12121210
struct regulator_bulk_data *vregs;
12131211

@@ -1243,31 +1241,10 @@ static inline void qphy_clrbits(void __iomem *base, u32 offset, u32 val)
12431241
}
12441242

12451243
/* list of clocks required by phy */
1246-
static const char * const msm8996_phy_clk_l[] = {
1247-
"aux", "cfg_ahb", "ref",
1248-
};
1249-
1250-
static const char * const qmp_v3_phy_clk_l[] = {
1244+
static const char * const qmp_usb_phy_clk_l[] = {
12511245
"aux", "cfg_ahb", "ref", "com_aux",
12521246
};
12531247

1254-
static const char * const qmp_v4_phy_clk_l[] = {
1255-
"aux", "ref", "com_aux",
1256-
};
1257-
1258-
static const char * const qmp_v4_ref_phy_clk_l[] = {
1259-
"aux", "ref_clk_src", "ref", "com_aux",
1260-
};
1261-
1262-
/* usb3 phy on sdx55 doesn't have com_aux clock */
1263-
static const char * const qmp_v4_sdx55_usbphy_clk_l[] = {
1264-
"aux", "cfg_ahb", "ref"
1265-
};
1266-
1267-
static const char * const qcm2290_usb3phy_clk_l[] = {
1268-
"cfg_ahb", "ref", "com_aux",
1269-
};
1270-
12711248
/* list of resets */
12721249
static const char * const msm8996_usb3phy_reset_l[] = {
12731250
"phy", "common",
@@ -1319,8 +1296,6 @@ static const struct qmp_phy_cfg ipq8074_usb3phy_cfg = {
13191296
.rx_tbl_num = ARRAY_SIZE(ipq8074_usb3_rx_tbl),
13201297
.pcs_tbl = ipq8074_usb3_pcs_tbl,
13211298
.pcs_tbl_num = ARRAY_SIZE(ipq8074_usb3_pcs_tbl),
1322-
.clk_list = msm8996_phy_clk_l,
1323-
.num_clks = ARRAY_SIZE(msm8996_phy_clk_l),
13241299
.reset_list = msm8996_usb3phy_reset_l,
13251300
.num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
13261301
.vreg_list = qmp_phy_vreg_l,
@@ -1341,8 +1316,6 @@ static const struct qmp_phy_cfg ipq9574_usb3phy_cfg = {
13411316
.rx_tbl_num = ARRAY_SIZE(ipq9574_usb3_rx_tbl),
13421317
.pcs_tbl = ipq9574_usb3_pcs_tbl,
13431318
.pcs_tbl_num = ARRAY_SIZE(ipq9574_usb3_pcs_tbl),
1344-
.clk_list = msm8996_phy_clk_l,
1345-
.num_clks = ARRAY_SIZE(msm8996_phy_clk_l),
13461319
.reset_list = qcm2290_usb3phy_reset_l,
13471320
.num_resets = ARRAY_SIZE(qcm2290_usb3phy_reset_l),
13481321
.vreg_list = qmp_phy_vreg_l,
@@ -1361,8 +1334,6 @@ static const struct qmp_phy_cfg msm8996_usb3phy_cfg = {
13611334
.rx_tbl_num = ARRAY_SIZE(msm8996_usb3_rx_tbl),
13621335
.pcs_tbl = msm8996_usb3_pcs_tbl,
13631336
.pcs_tbl_num = ARRAY_SIZE(msm8996_usb3_pcs_tbl),
1364-
.clk_list = msm8996_phy_clk_l,
1365-
.num_clks = ARRAY_SIZE(msm8996_phy_clk_l),
13661337
.reset_list = msm8996_usb3phy_reset_l,
13671338
.num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
13681339
.vreg_list = qmp_phy_vreg_l,
@@ -1383,8 +1354,6 @@ static const struct qmp_phy_cfg sa8775p_usb3_uniphy_cfg = {
13831354
.rx_tbl_num = ARRAY_SIZE(sc8280xp_usb3_uniphy_rx_tbl),
13841355
.pcs_tbl = sa8775p_usb3_uniphy_pcs_tbl,
13851356
.pcs_tbl_num = ARRAY_SIZE(sa8775p_usb3_uniphy_pcs_tbl),
1386-
.clk_list = qmp_v4_phy_clk_l,
1387-
.num_clks = ARRAY_SIZE(qmp_v4_phy_clk_l),
13881357
.reset_list = qcm2290_usb3phy_reset_l,
13891358
.num_resets = ARRAY_SIZE(qcm2290_usb3phy_reset_l),
13901359
.vreg_list = qmp_phy_vreg_l,
@@ -1405,8 +1374,6 @@ static const struct qmp_phy_cfg sc8280xp_usb3_uniphy_cfg = {
14051374
.rx_tbl_num = ARRAY_SIZE(sc8280xp_usb3_uniphy_rx_tbl),
14061375
.pcs_tbl = sc8280xp_usb3_uniphy_pcs_tbl,
14071376
.pcs_tbl_num = ARRAY_SIZE(sc8280xp_usb3_uniphy_pcs_tbl),
1408-
.clk_list = qmp_v4_phy_clk_l,
1409-
.num_clks = ARRAY_SIZE(qmp_v4_phy_clk_l),
14101377
.reset_list = qcm2290_usb3phy_reset_l,
14111378
.num_resets = ARRAY_SIZE(qcm2290_usb3phy_reset_l),
14121379
.vreg_list = qmp_phy_vreg_l,
@@ -1425,8 +1392,6 @@ static const struct qmp_phy_cfg qmp_v3_usb3_uniphy_cfg = {
14251392
.rx_tbl_num = ARRAY_SIZE(qmp_v3_usb3_uniphy_rx_tbl),
14261393
.pcs_tbl = qmp_v3_usb3_uniphy_pcs_tbl,
14271394
.pcs_tbl_num = ARRAY_SIZE(qmp_v3_usb3_uniphy_pcs_tbl),
1428-
.clk_list = qmp_v3_phy_clk_l,
1429-
.num_clks = ARRAY_SIZE(qmp_v3_phy_clk_l),
14301395
.reset_list = msm8996_usb3phy_reset_l,
14311396
.num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
14321397
.vreg_list = qmp_phy_vreg_l,
@@ -1447,8 +1412,6 @@ static const struct qmp_phy_cfg msm8998_usb3phy_cfg = {
14471412
.rx_tbl_num = ARRAY_SIZE(msm8998_usb3_rx_tbl),
14481413
.pcs_tbl = msm8998_usb3_pcs_tbl,
14491414
.pcs_tbl_num = ARRAY_SIZE(msm8998_usb3_pcs_tbl),
1450-
.clk_list = msm8996_phy_clk_l,
1451-
.num_clks = ARRAY_SIZE(msm8996_phy_clk_l),
14521415
.reset_list = msm8996_usb3phy_reset_l,
14531416
.num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
14541417
.vreg_list = qmp_phy_vreg_l,
@@ -1469,8 +1432,6 @@ static const struct qmp_phy_cfg sm8150_usb3_uniphy_cfg = {
14691432
.pcs_tbl_num = ARRAY_SIZE(sm8150_usb3_uniphy_pcs_tbl),
14701433
.pcs_usb_tbl = sm8150_usb3_uniphy_pcs_usb_tbl,
14711434
.pcs_usb_tbl_num = ARRAY_SIZE(sm8150_usb3_uniphy_pcs_usb_tbl),
1472-
.clk_list = qmp_v4_ref_phy_clk_l,
1473-
.num_clks = ARRAY_SIZE(qmp_v4_ref_phy_clk_l),
14741435
.reset_list = msm8996_usb3phy_reset_l,
14751436
.num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
14761437
.vreg_list = qmp_phy_vreg_l,
@@ -1494,8 +1455,6 @@ static const struct qmp_phy_cfg sm8250_usb3_uniphy_cfg = {
14941455
.pcs_tbl_num = ARRAY_SIZE(sm8250_usb3_uniphy_pcs_tbl),
14951456
.pcs_usb_tbl = sm8250_usb3_uniphy_pcs_usb_tbl,
14961457
.pcs_usb_tbl_num = ARRAY_SIZE(sm8250_usb3_uniphy_pcs_usb_tbl),
1497-
.clk_list = qmp_v4_ref_phy_clk_l,
1498-
.num_clks = ARRAY_SIZE(qmp_v4_ref_phy_clk_l),
14991458
.reset_list = msm8996_usb3phy_reset_l,
15001459
.num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
15011460
.vreg_list = qmp_phy_vreg_l,
@@ -1519,8 +1478,6 @@ static const struct qmp_phy_cfg sdx55_usb3_uniphy_cfg = {
15191478
.pcs_tbl_num = ARRAY_SIZE(sm8250_usb3_uniphy_pcs_tbl),
15201479
.pcs_usb_tbl = sm8250_usb3_uniphy_pcs_usb_tbl,
15211480
.pcs_usb_tbl_num = ARRAY_SIZE(sm8250_usb3_uniphy_pcs_usb_tbl),
1522-
.clk_list = qmp_v4_sdx55_usbphy_clk_l,
1523-
.num_clks = ARRAY_SIZE(qmp_v4_sdx55_usbphy_clk_l),
15241481
.reset_list = msm8996_usb3phy_reset_l,
15251482
.num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
15261483
.vreg_list = qmp_phy_vreg_l,
@@ -1544,8 +1501,6 @@ static const struct qmp_phy_cfg sdx65_usb3_uniphy_cfg = {
15441501
.pcs_tbl_num = ARRAY_SIZE(sm8350_usb3_uniphy_pcs_tbl),
15451502
.pcs_usb_tbl = sm8350_usb3_uniphy_pcs_usb_tbl,
15461503
.pcs_usb_tbl_num = ARRAY_SIZE(sm8350_usb3_uniphy_pcs_usb_tbl),
1547-
.clk_list = qmp_v4_sdx55_usbphy_clk_l,
1548-
.num_clks = ARRAY_SIZE(qmp_v4_sdx55_usbphy_clk_l),
15491504
.reset_list = msm8996_usb3phy_reset_l,
15501505
.num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
15511506
.vreg_list = qmp_phy_vreg_l,
@@ -1569,8 +1524,6 @@ static const struct qmp_phy_cfg sm8350_usb3_uniphy_cfg = {
15691524
.pcs_tbl_num = ARRAY_SIZE(sm8350_usb3_uniphy_pcs_tbl),
15701525
.pcs_usb_tbl = sm8350_usb3_uniphy_pcs_usb_tbl,
15711526
.pcs_usb_tbl_num = ARRAY_SIZE(sm8350_usb3_uniphy_pcs_usb_tbl),
1572-
.clk_list = qmp_v4_ref_phy_clk_l,
1573-
.num_clks = ARRAY_SIZE(qmp_v4_ref_phy_clk_l),
15741527
.reset_list = msm8996_usb3phy_reset_l,
15751528
.num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
15761529
.vreg_list = qmp_phy_vreg_l,
@@ -1594,8 +1547,6 @@ static const struct qmp_phy_cfg qcm2290_usb3phy_cfg = {
15941547
.rx_tbl_num = ARRAY_SIZE(qcm2290_usb3_rx_tbl),
15951548
.pcs_tbl = qcm2290_usb3_pcs_tbl,
15961549
.pcs_tbl_num = ARRAY_SIZE(qcm2290_usb3_pcs_tbl),
1597-
.clk_list = qcm2290_usb3phy_clk_l,
1598-
.num_clks = ARRAY_SIZE(qcm2290_usb3phy_clk_l),
15991550
.reset_list = qcm2290_usb3phy_reset_l,
16001551
.num_resets = ARRAY_SIZE(qcm2290_usb3phy_reset_l),
16011552
.vreg_list = qmp_phy_vreg_l,
@@ -1666,7 +1617,7 @@ static int qmp_usb_init(struct phy *phy)
16661617
goto err_disable_regulators;
16671618
}
16681619

1669-
ret = clk_bulk_prepare_enable(cfg->num_clks, qmp->clks);
1620+
ret = clk_bulk_prepare_enable(qmp->num_clks, qmp->clks);
16701621
if (ret)
16711622
goto err_assert_reset;
16721623

@@ -1689,7 +1640,7 @@ static int qmp_usb_exit(struct phy *phy)
16891640

16901641
reset_control_bulk_assert(cfg->num_resets, qmp->resets);
16911642

1692-
clk_bulk_disable_unprepare(cfg->num_clks, qmp->clks);
1643+
clk_bulk_disable_unprepare(qmp->num_clks, qmp->clks);
16931644

16941645
regulator_bulk_disable(cfg->num_vregs, qmp->vregs);
16951646

@@ -1863,7 +1814,6 @@ static void qmp_usb_disable_autonomous_mode(struct qmp_usb *qmp)
18631814
static int __maybe_unused qmp_usb_runtime_suspend(struct device *dev)
18641815
{
18651816
struct qmp_usb *qmp = dev_get_drvdata(dev);
1866-
const struct qmp_phy_cfg *cfg = qmp->cfg;
18671817

18681818
dev_vdbg(dev, "Suspending QMP phy, mode:%d\n", qmp->mode);
18691819

@@ -1875,15 +1825,14 @@ static int __maybe_unused qmp_usb_runtime_suspend(struct device *dev)
18751825
qmp_usb_enable_autonomous_mode(qmp);
18761826

18771827
clk_disable_unprepare(qmp->pipe_clk);
1878-
clk_bulk_disable_unprepare(cfg->num_clks, qmp->clks);
1828+
clk_bulk_disable_unprepare(qmp->num_clks, qmp->clks);
18791829

18801830
return 0;
18811831
}
18821832

18831833
static int __maybe_unused qmp_usb_runtime_resume(struct device *dev)
18841834
{
18851835
struct qmp_usb *qmp = dev_get_drvdata(dev);
1886-
const struct qmp_phy_cfg *cfg = qmp->cfg;
18871836
int ret = 0;
18881837

18891838
dev_vdbg(dev, "Resuming QMP phy, mode:%d\n", qmp->mode);
@@ -1893,14 +1842,14 @@ static int __maybe_unused qmp_usb_runtime_resume(struct device *dev)
18931842
return 0;
18941843
}
18951844

1896-
ret = clk_bulk_prepare_enable(cfg->num_clks, qmp->clks);
1845+
ret = clk_bulk_prepare_enable(qmp->num_clks, qmp->clks);
18971846
if (ret)
18981847
return ret;
18991848

19001849
ret = clk_prepare_enable(qmp->pipe_clk);
19011850
if (ret) {
19021851
dev_err(dev, "pipe_clk enable failed, err=%d\n", ret);
1903-
clk_bulk_disable_unprepare(cfg->num_clks, qmp->clks);
1852+
clk_bulk_disable_unprepare(qmp->num_clks, qmp->clks);
19041853
return ret;
19051854
}
19061855

@@ -1955,19 +1904,20 @@ static int qmp_usb_reset_init(struct qmp_usb *qmp)
19551904

19561905
static int qmp_usb_clk_init(struct qmp_usb *qmp)
19571906
{
1958-
const struct qmp_phy_cfg *cfg = qmp->cfg;
19591907
struct device *dev = qmp->dev;
1960-
int num = cfg->num_clks;
1908+
int num = ARRAY_SIZE(qmp_usb_phy_clk_l);
19611909
int i;
19621910

19631911
qmp->clks = devm_kcalloc(dev, num, sizeof(*qmp->clks), GFP_KERNEL);
19641912
if (!qmp->clks)
19651913
return -ENOMEM;
19661914

19671915
for (i = 0; i < num; i++)
1968-
qmp->clks[i].id = cfg->clk_list[i];
1916+
qmp->clks[i].id = qmp_usb_phy_clk_l[i];
19691917

1970-
return devm_clk_bulk_get(dev, num, qmp->clks);
1918+
qmp->num_clks = num;
1919+
1920+
return devm_clk_bulk_get_optional(dev, num, qmp->clks);
19711921
}
19721922

19731923
static void phy_clk_release_provider(void *res)
@@ -2047,6 +1997,7 @@ static int qmp_usb_parse_dt_legacy(struct qmp_usb *qmp, struct device_node *np)
20471997
const struct qmp_phy_cfg *cfg = qmp->cfg;
20481998
struct device *dev = qmp->dev;
20491999
bool exclusive = true;
2000+
int ret;
20502001

20512002
qmp->serdes = devm_platform_ioremap_resource(pdev, 0);
20522003
if (IS_ERR(qmp->serdes))
@@ -2107,6 +2058,12 @@ static int qmp_usb_parse_dt_legacy(struct qmp_usb *qmp, struct device_node *np)
21072058
"failed to get pipe clock\n");
21082059
}
21092060

2061+
ret = devm_clk_bulk_get_all(qmp->dev, &qmp->clks);
2062+
if (ret < 0)
2063+
return ret;
2064+
2065+
qmp->num_clks = ret;
2066+
21102067
return 0;
21112068
}
21122069

@@ -2117,6 +2074,7 @@ static int qmp_usb_parse_dt(struct qmp_usb *qmp)
21172074
const struct qmp_usb_offsets *offs = cfg->offsets;
21182075
struct device *dev = qmp->dev;
21192076
void __iomem *base;
2077+
int ret;
21202078

21212079
if (!offs)
21222080
return -EINVAL;
@@ -2137,6 +2095,10 @@ static int qmp_usb_parse_dt(struct qmp_usb *qmp)
21372095
qmp->rx2 = base + offs->rx2;
21382096
}
21392097

2098+
ret = qmp_usb_clk_init(qmp);
2099+
if (ret)
2100+
return ret;
2101+
21402102
qmp->pipe_clk = devm_clk_get(dev, "pipe");
21412103
if (IS_ERR(qmp->pipe_clk)) {
21422104
return dev_err_probe(dev, PTR_ERR(qmp->pipe_clk),
@@ -2164,10 +2126,6 @@ static int qmp_usb_probe(struct platform_device *pdev)
21642126
if (!qmp->cfg)
21652127
return -EINVAL;
21662128

2167-
ret = qmp_usb_clk_init(qmp);
2168-
if (ret)
2169-
return ret;
2170-
21712129
ret = qmp_usb_reset_init(qmp);
21722130
if (ret)
21732131
return ret;

0 commit comments

Comments
 (0)