Quoting Wen He (2019-08-19 19:24:25) > > > > > > > > + > > > > > +static int plldig_clk_probe(struct platform_device *pdev) { > > > > > + struct clk_plldig *data; > > > > > + struct resource *mem; > > > > > + const char *parent_name; > > > > > + struct clk_init_data init = {}; > > > > > + struct device *dev = &pdev->dev; > > > > > + int ret; > > > > > + > > > > > + data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); > > > > > + if (!data) > > > > > + return -ENOMEM; > > > > > + > > > > > + mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); > > > > > + data->regs = devm_ioremap_resource(dev, mem); > > > > > + if (IS_ERR(data->regs)) > > > > > + return PTR_ERR(data->regs); > > > > > + > > > > > + init.name = dev->of_node->name; > > > > > + init.ops = &plldig_clk_ops; > > > > > + parent_name = of_clk_get_parent_name(dev->of_node, 0); > > > > > + init.parent_names = &parent_name; > > > > > > > > Can you use the new way of specifying clk parents with the > > > > parent_data member of clk_init? > > > > > > Of course, but I don't understand why need recommend to use this member? > > > Is that the member parent_names will be discard in future? > > > > > > Here are definition of the clk-provider.h > > > /* Only one of the following three should be assigned */ > > > const char * const *parent_names; > > > const struct clk_parent_data *parent_data; > > > const struct clk_hw **parent_hws; > > > > > > For PLLDIG, it only has one parent. > > > > Yes. Can you use clk_parent_data array and specify a DT index of 0 and some > > name that would go into "clock-names" in the .fw_name member? > > OK, but .fw_name used for to registering clk, current it registered with fixed clk in dts . > I think should be specify a DT index of 0 and specify the unique name for .name member. > > I found have two ways to specify: > 1. declare clk_parent_data variable parent_data, and initialization with clk_init_data, like this: > > parent_data.name = of_clk_get_parent_name(dev->of_node, 0); This isn't preferred because of_clk_get_parent_name() is DT specific and relies on the parent clk being registered before calling the function so that we can figure out the globally unique name. > parent_data.index = 0; > > init.name = dev->of_node->name; > init.ops = &plldig_clk_ops; > init.parent_data = &parent_data; > init.num_parents = 1; > > 2. Or use a static const array for here? And put the unique name and index like this. > static const struct clk_parent_data parent_data[] = { > {.name = "phy_27m", .index = 0}, > }; > > After then initialization with macro CLK_HW_INIT_PARENTS_DATA? Yes use option #2. But, don't even specify a .name if this is new code because .name is a fallback mechanism that is supposed to be used if you're migrating code from an older DT to a newer DT. I don't think that's happening here.