Hi Frank, Am Mittwoch, 25. September 2024, 03:42:35 CEST schrieb frawang: > >> @@ -376,6 +378,7 @@ rockchip_usb2phy_clk480m_register(struct rockchip_usb2phy *rphy) > >> { > >> struct device_node *node = rphy->dev->of_node; > >> struct clk_init_data init; > >> + struct clk *refclk = of_clk_get_by_name(node, "phyclk"); > > Doesn't this create an imbalance - with the missing put? > > I think ideally just define clk_bulk_data structs for the > > 1-clock and 3-clock variant, attach that to the device-data > > and then use the regular devm_clk_bulk_get ? > > > > That way you can then retrieve the clock from that struct? > > How about keep the clk_bulk_data and num_clks member in rockchip_usb2phy > structs, and retrieve the clock by "clks.id" here? > Just like the following codes. > > @@ -378,8 +378,9 @@ rockchip_usb2phy_clk480m_register(struct > rockchip_usb2phy *rphy) > { > struct device_node *node = rphy->dev->of_node; > struct clk_init_data init; > - struct clk *refclk = of_clk_get_by_name(node, "phyclk"); > + struct clk *refclk = NULL; > const char *clk_name; > + int i; > int ret = 0; > > init.flags = 0; > @@ -389,6 +390,13 @@ rockchip_usb2phy_clk480m_register(struct > rockchip_usb2phy *rphy) > /* optional override of the clockname */ > of_property_read_string(node, "clock-output-names", &init.name); > > + for (i = 0; i < rphy->num_clks; i++) { > + if (!strncmp(rphy->clks[i].id, "phyclk", 6)) { > + refclk = rphy->clks[i].clk; > + break; > + } > + } > + this is exactly what I had in mind :-) Thanks Heiko