Message ID | 20181113173912.27643-1-d-gerlach@ti.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v3] cpufreq: ti-cpufreq: Only register platform_device when supported | expand |
On Tue, Nov 13, 2018 at 11:39:12AM -0600, Dave Gerlach wrote: > Currently the ti-cpufreq driver blindly registers a 'ti-cpufreq' to force > the driver to probe on any platforms where the driver is built in. > However, this should only happen on platforms that actually can make use > of the driver. There is already functionality in place to match the > SoC compatible so let's factor this out into a separate call and > make sure we find a match before creating the ti-cpufreq platform device. > > Reviewed-by: Johan Hovold <johan@kernel.org> > Signed-off-by: Dave Gerlach <d-gerlach@ti.com> > --- > v2->v3: Use platform_device_register_resndata to pass match data to probe to > to avoid matching again in probe. > > v2: https://patchwork.kernel.org/patch/10574535/ > > static int ti_cpufreq_init(void) > { > - platform_device_register_simple("ti-cpufreq", -1, NULL, 0); > + const struct of_device_id *match; > + > + /* Check to ensure we are on a compatible platform */ > + match = ti_cpufreq_match_node(); > + if (match) > + platform_device_register_resndata(NULL, "ti-cpufreq", -1, NULL, > + 0, match, > + sizeof(*match)); platform_device_register_data()? > return 0; > } > module_init(ti_cpufreq_init); Johan
On 11/13/2018 11:58 AM, Johan Hovold wrote: > On Tue, Nov 13, 2018 at 11:39:12AM -0600, Dave Gerlach wrote: >> Currently the ti-cpufreq driver blindly registers a 'ti-cpufreq' to force >> the driver to probe on any platforms where the driver is built in. >> However, this should only happen on platforms that actually can make use >> of the driver. There is already functionality in place to match the >> SoC compatible so let's factor this out into a separate call and >> make sure we find a match before creating the ti-cpufreq platform device. >> >> Reviewed-by: Johan Hovold <johan@kernel.org> >> Signed-off-by: Dave Gerlach <d-gerlach@ti.com> >> --- >> v2->v3: Use platform_device_register_resndata to pass match data to probe to >> to avoid matching again in probe. >> >> v2: https://patchwork.kernel.org/patch/10574535/ >> > >> static int ti_cpufreq_init(void) >> { >> - platform_device_register_simple("ti-cpufreq", -1, NULL, 0); >> + const struct of_device_id *match; >> + >> + /* Check to ensure we are on a compatible platform */ >> + match = ti_cpufreq_match_node(); >> + if (match) >> + platform_device_register_resndata(NULL, "ti-cpufreq", -1, NULL, >> + 0, match, >> + sizeof(*match)); > > platform_device_register_data()? Whoops yeah that's a bit more concise, v4 incoming. Regards, Dave > >> return 0; >> } >> module_init(ti_cpufreq_init); > > Johan >
diff --git a/drivers/cpufreq/ti-cpufreq.c b/drivers/cpufreq/ti-cpufreq.c index 3f0e2a14895a..2f97a4b38bad 100644 --- a/drivers/cpufreq/ti-cpufreq.c +++ b/drivers/cpufreq/ti-cpufreq.c @@ -201,19 +201,28 @@ static const struct of_device_id ti_cpufreq_of_match[] = { {}, }; +static const struct of_device_id *ti_cpufreq_match_node(void) +{ + struct device_node *np; + const struct of_device_id *match; + + np = of_find_node_by_path("/"); + match = of_match_node(ti_cpufreq_of_match, np); + of_node_put(np); + + return match; +} + static int ti_cpufreq_probe(struct platform_device *pdev) { u32 version[VERSION_COUNT]; - struct device_node *np; const struct of_device_id *match; struct opp_table *ti_opp_table; struct ti_cpufreq_data *opp_data; const char * const reg_names[] = {"vdd", "vbb"}; int ret; - np = of_find_node_by_path("/"); - match = of_match_node(ti_cpufreq_of_match, np); - of_node_put(np); + match = dev_get_platdata(&pdev->dev); if (!match) return -ENODEV; @@ -290,7 +299,15 @@ static int ti_cpufreq_probe(struct platform_device *pdev) static int ti_cpufreq_init(void) { - platform_device_register_simple("ti-cpufreq", -1, NULL, 0); + const struct of_device_id *match; + + /* Check to ensure we are on a compatible platform */ + match = ti_cpufreq_match_node(); + if (match) + platform_device_register_resndata(NULL, "ti-cpufreq", -1, NULL, + 0, match, + sizeof(*match)); + return 0; } module_init(ti_cpufreq_init);