@@ -268,6 +268,17 @@ static const struct pmc_clk_init_data tegra_pmc_clks_data[] = {
268268 },
269269};
270270
271+ struct tegra_pmc_core_pd {
272+ struct generic_pm_domain genpd ;
273+ struct tegra_pmc * pmc ;
274+ };
275+
276+ static inline struct tegra_pmc_core_pd *
277+ to_core_pd (struct generic_pm_domain * genpd )
278+ {
279+ return container_of (genpd , struct tegra_pmc_core_pd , genpd );
280+ }
281+
271282struct tegra_powergate {
272283 struct generic_pm_domain genpd ;
273284 struct tegra_pmc * pmc ;
@@ -1387,6 +1398,8 @@ static int
13871398tegra_pmc_core_pd_set_performance_state (struct generic_pm_domain * genpd ,
13881399 unsigned int level )
13891400{
1401+ struct tegra_pmc_core_pd * pd = to_core_pd (genpd );
1402+ struct tegra_pmc * pmc = pd -> pmc ;
13901403 struct dev_pm_opp * opp ;
13911404 int err ;
13921405
@@ -1414,30 +1427,31 @@ tegra_pmc_core_pd_set_performance_state(struct generic_pm_domain *genpd,
14141427
14151428static int tegra_pmc_core_pd_add (struct tegra_pmc * pmc , struct device_node * np )
14161429{
1417- struct generic_pm_domain * genpd ;
14181430 const char * rname [] = { "core" , NULL };
1431+ struct tegra_pmc_core_pd * pd ;
14191432 int err ;
14201433
1421- genpd = devm_kzalloc (pmc -> dev , sizeof (* genpd ), GFP_KERNEL );
1422- if (!genpd )
1434+ pd = devm_kzalloc (pmc -> dev , sizeof (* pd ), GFP_KERNEL );
1435+ if (!pd )
14231436 return - ENOMEM ;
14241437
1425- genpd -> name = "core" ;
1426- genpd -> flags = GENPD_FLAG_NO_SYNC_STATE ;
1427- genpd -> set_performance_state = tegra_pmc_core_pd_set_performance_state ;
1438+ pd -> genpd .name = "core" ;
1439+ pd -> genpd .flags = GENPD_FLAG_NO_SYNC_STATE ;
1440+ pd -> genpd .set_performance_state = tegra_pmc_core_pd_set_performance_state ;
1441+ pd -> pmc = pmc ;
14281442
14291443 err = devm_pm_opp_set_regulators (pmc -> dev , rname );
14301444 if (err )
14311445 return dev_err_probe (pmc -> dev , err ,
14321446 "failed to set core OPP regulator\n" );
14331447
1434- err = pm_genpd_init (genpd , NULL , false);
1448+ err = pm_genpd_init (& pd -> genpd , NULL , false);
14351449 if (err ) {
14361450 dev_err (pmc -> dev , "failed to init core genpd: %d\n" , err );
14371451 return err ;
14381452 }
14391453
1440- err = of_genpd_add_provider_simple (np , genpd );
1454+ err = of_genpd_add_provider_simple (np , & pd -> genpd );
14411455 if (err ) {
14421456 dev_err (pmc -> dev , "failed to add core genpd: %d\n" , err );
14431457 goto remove_genpd ;
@@ -1446,7 +1460,7 @@ static int tegra_pmc_core_pd_add(struct tegra_pmc *pmc, struct device_node *np)
14461460 return 0 ;
14471461
14481462remove_genpd :
1449- pm_genpd_remove (genpd );
1463+ pm_genpd_remove (& pd -> genpd );
14501464
14511465 return err ;
14521466}
@@ -1509,7 +1523,7 @@ static void tegra_powergate_remove(struct generic_pm_domain *genpd)
15091523
15101524 kfree (pg -> clks );
15111525
1512- set_bit (pg -> id , pmc -> powergates_available );
1526+ set_bit (pg -> id , pg -> pmc -> powergates_available );
15131527
15141528 kfree (pg );
15151529}
0 commit comments