@@ -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 */
12721249static 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)
18631814static 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
18831833static 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
19561905static 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
19731923static 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