Cc: Rob, devicetree ML On 31.05.2020 01:57, Chanwoo Choi wrote: > On Sat, May 30, 2020 at 1:33 AM Sylwester Nawrocki > <s.nawrocki@xxxxxxxxxxx> wrote: >> >> This patch adds registration of a child platform device for the exynos >> interconnect driver. It is assumed that the interconnect provider will >> only be needed when #interconnect-cells property is present in the bus >> DT node, hence the child device will be created only when such a property >> is present. >> >> Signed-off-by: Sylwester Nawrocki <s.nawrocki@xxxxxxxxxxx> >> >> Changes for v5: >> - new patch. >> --- >> drivers/devfreq/exynos-bus.c | 17 +++++++++++++++++ >> 1 file changed, 17 insertions(+) >> >> diff --git a/drivers/devfreq/exynos-bus.c b/drivers/devfreq/exynos-bus.c >> index 8fa8eb5..856e37d 100644 >> --- a/drivers/devfreq/exynos-bus.c >> +++ b/drivers/devfreq/exynos-bus.c >> @@ -24,6 +24,7 @@ >> >> struct exynos_bus { >> struct device *dev; >> + struct platform_device *icc_pdev; >> >> struct devfreq *devfreq; >> struct devfreq_event_dev **edev; >> @@ -156,6 +157,8 @@ static void exynos_bus_exit(struct device *dev) >> if (ret < 0) >> dev_warn(dev, "failed to disable the devfreq-event devices\n"); >> >> + platform_device_unregister(bus->icc_pdev); >> + >> dev_pm_opp_of_remove_table(dev); >> clk_disable_unprepare(bus->clk); >> if (bus->opp_table) { >> @@ -168,6 +171,8 @@ static void exynos_bus_passive_exit(struct device *dev) >> { >> struct exynos_bus *bus = dev_get_drvdata(dev); >> >> + platform_device_unregister(bus->icc_pdev); >> + >> dev_pm_opp_of_remove_table(dev); >> clk_disable_unprepare(bus->clk); >> } >> @@ -431,6 +436,18 @@ static int exynos_bus_probe(struct platform_device *pdev) >> if (ret < 0) >> goto err; >> >> + /* Create child platform device for the interconnect provider */ >> + if (of_get_property(dev->of_node, "#interconnect-cells", NULL)) { >> + bus->icc_pdev = platform_device_register_data( >> + dev, "exynos-generic-icc", >> + PLATFORM_DEVID_AUTO, NULL, 0); >> + >> + if (IS_ERR(bus->icc_pdev)) { >> + ret = PTR_ERR(bus->icc_pdev); >> + goto err; >> + } >> + } >> + >> max_state = bus->devfreq->profile->max_state; >> min_freq = (bus->devfreq->profile->freq_table[0] / 1000); >> max_freq = (bus->devfreq->profile->freq_table[max_state - 1] / 1000); >> -- >> 2.7.4 >> > > It looks like very similar like the registering the interconnect > device of imx-bus.c > and I already reviewed and agreed this approach. > > Acked-by: Chanwoo Choi <cw00.choi@xxxxxxxxxxx> > > nitpick: IMHO, I think that 'exynos-icc' is proper and simple without > 'generic' word. > If we need to add new icc compatible int the future, we will add > 'exynosXXXX-icc' new compatible. > But, I'm not forcing it. just opinion. Anyway, I agree this approach. Thanks for review. I will change the name to exynos-icc in next version, as I commented at other patch, it is not part of any DT binding, it is just for device/driver matching between devfreq and interconnect. -- Thanks, Sylwester