Lines Matching refs:data

232 static void ccu_div_set_data(struct ccu_div_data *data)
234 struct device_node *np = data->np;
237 axi_data = data;
239 sys_data = data;
256 static struct ccu_div *ccu_div_find_desc(struct ccu_div_data *data,
261 for (idx = 0; idx < data->divs_num; ++idx) {
262 if (data->divs_info[idx].id == clk_id)
263 return data->divs[idx];
271 struct ccu_div_data *data;
274 data = kzalloc(sizeof(*data), GFP_KERNEL);
275 if (!data)
278 data->np = np;
280 data->divs_num = ARRAY_SIZE(axi_info);
281 data->divs_info = axi_info;
283 data->divs_num = ARRAY_SIZE(sys_info);
284 data->divs_info = sys_info;
292 data->divs = kcalloc(data->divs_num, sizeof(*data->divs), GFP_KERNEL);
293 if (!data->divs) {
298 return data;
301 kfree(data);
306 static void ccu_div_free_data(struct ccu_div_data *data)
308 kfree(data->divs);
310 kfree(data);
313 static int ccu_div_find_sys_regs(struct ccu_div_data *data)
315 data->sys_regs = syscon_node_to_regmap(data->np->parent);
316 if (IS_ERR(data->sys_regs)) {
318 of_node_full_name(data->np));
319 return PTR_ERR(data->sys_regs);
328 struct ccu_div_data *data = priv;
333 div = ccu_div_find_desc(data, clk_id);
344 static int ccu_div_clk_register(struct ccu_div_data *data, bool defer)
348 for (idx = 0; idx < data->divs_num; ++idx) {
349 const struct ccu_div_info *info = &data->divs_info[idx];
353 if (!data->divs[idx])
354 data->divs[idx] = ERR_PTR(-EPROBE_DEFER);
362 init.np = data->np;
369 init.sys_regs = data->sys_regs;
373 init.sys_regs = data->sys_regs;
377 init.sys_regs = data->sys_regs;
382 data->divs[idx] = ccu_div_hw_register(&init);
383 if (IS_ERR(data->divs[idx])) {
384 ret = PTR_ERR(data->divs[idx]);
395 if (!!(data->divs_info[idx].features & CCU_DIV_BASIC) ^ defer)
398 ccu_div_hw_unregister(data->divs[idx]);
404 static void ccu_div_clk_unregister(struct ccu_div_data *data, bool defer)
409 for (idx = 0; idx < data->divs_num; ++idx) {
410 if (!!(data->divs_info[idx].features & CCU_DIV_BASIC) ^ defer)
413 ccu_div_hw_unregister(data->divs[idx]);
417 static int ccu_div_of_register(struct ccu_div_data *data)
421 ret = of_clk_add_hw_provider(data->np, ccu_div_of_clk_hw_get, data);
424 of_node_full_name(data->np));
430 static int ccu_div_rst_register(struct ccu_div_data *data)
434 init.sys_regs = data->sys_regs;
435 init.np = data->np;
437 data->rsts = ccu_rst_hw_register(&init);
438 if (IS_ERR(data->rsts)) {
440 of_node_full_name(data->np));
441 return PTR_ERR(data->rsts);
449 struct ccu_div_data *data;
452 data = ccu_div_get_data(dev_of_node(&pdev->dev));
453 if (!data)
456 ret = ccu_div_clk_register(data, false);
460 ret = ccu_div_rst_register(data);
467 ccu_div_clk_unregister(data, false);
490 struct ccu_div_data *data;
493 data = ccu_div_create_data(np);
494 if (IS_ERR(data))
497 ret = ccu_div_find_sys_regs(data);
501 ret = ccu_div_clk_register(data, true);
505 ret = ccu_div_of_register(data);
509 ccu_div_set_data(data);
514 ccu_div_clk_unregister(data, true);
517 ccu_div_free_data(data);