Lines Matching full:sclk

222 static int scmi_clk_ops_init(struct device *dev, struct scmi_clk *sclk,  in scmi_clk_ops_init()  argument
230 .num_parents = sclk->info->num_parents, in scmi_clk_ops_init()
232 .name = sclk->info->name, in scmi_clk_ops_init()
233 .parent_data = sclk->parent_data, in scmi_clk_ops_init()
236 sclk->hw.init = &init; in scmi_clk_ops_init()
237 ret = devm_clk_hw_register(dev, &sclk->hw); in scmi_clk_ops_init()
241 if (sclk->info->rate_discrete) { in scmi_clk_ops_init()
242 int num_rates = sclk->info->list.num_rates; in scmi_clk_ops_init()
247 min_rate = sclk->info->list.rates[0]; in scmi_clk_ops_init()
248 max_rate = sclk->info->list.rates[num_rates - 1]; in scmi_clk_ops_init()
250 min_rate = sclk->info->range.min_rate; in scmi_clk_ops_init()
251 max_rate = sclk->info->range.max_rate; in scmi_clk_ops_init()
254 clk_hw_set_rate_range(&sclk->hw, min_rate, max_rate); in scmi_clk_ops_init()
324 * @sclk: A reference to an SCMI clock descriptor
348 scmi_clk_ops_select(struct scmi_clk *sclk, bool atomic_capable, in scmi_clk_ops_select() argument
352 const struct scmi_clock_info *ci = sclk->info; in scmi_clk_ops_select()
385 ops = scmi_clk_ops_alloc(sclk->dev, feats_key); in scmi_clk_ops_select()
434 struct scmi_clk *sclk; in scmi_clocks_probe() local
437 sclk = devm_kzalloc(dev, sizeof(*sclk), GFP_KERNEL); in scmi_clocks_probe()
438 if (!sclk) in scmi_clocks_probe()
441 sclk->info = scmi_proto_clk_ops->info_get(ph, idx); in scmi_clocks_probe()
442 if (!sclk->info) { in scmi_clocks_probe()
444 devm_kfree(dev, sclk); in scmi_clocks_probe()
448 sclk->id = idx; in scmi_clocks_probe()
449 sclk->ph = ph; in scmi_clocks_probe()
450 sclk->dev = dev; in scmi_clocks_probe()
458 scmi_ops = scmi_clk_ops_select(sclk, transport_is_atomic, in scmi_clocks_probe()
466 if (sclk->info->num_parents > 0) { in scmi_clocks_probe()
467 sclk->parent_data = devm_kcalloc(dev, sclk->info->num_parents, in scmi_clocks_probe()
468 sizeof(*sclk->parent_data), GFP_KERNEL); in scmi_clocks_probe()
469 if (!sclk->parent_data) in scmi_clocks_probe()
472 for (int i = 0; i < sclk->info->num_parents; i++) { in scmi_clocks_probe()
473 sclk->parent_data[i].index = sclk->info->parents[i]; in scmi_clocks_probe()
474 sclk->parent_data[i].hw = hws[sclk->info->parents[i]]; in scmi_clocks_probe()
478 err = scmi_clk_ops_init(dev, sclk, scmi_ops); in scmi_clocks_probe()
481 devm_kfree(dev, sclk->parent_data); in scmi_clocks_probe()
482 devm_kfree(dev, sclk); in scmi_clocks_probe()
486 sclk->info->name, in scmi_clocks_probe()
488 hws[idx] = &sclk->hw; in scmi_clocks_probe()