Lines Matching +full:parent +full:- +full:clk

1 // SPDX-License-Identifier: GPL-2.0-only
7 #include <linux/clk.h>
8 #include <linux/clk-provider.h>
13 #include <linux/clk/tegra.h>
16 #include <linux/reset-controller.h>
21 #include "clk.h"
31 static struct clk **clks;
35 /* Handlers for SoC-specific reset lines */
121 return -EINVAL; in tegra_clk_rst_assert()
135 return -EINVAL; in tegra_clk_rst_deassert()
200 * All non-boot peripherals will be in reset state on resume. in tegra_clk_periph_resume()
201 * Wait for 5us of reset propagation delay before de-asserting in tegra_clk_periph_resume()
218 return -ENOMEM; in tegra_clk_periph_ctx_init()
223 struct clk ** __init tegra_clk_init(void __iomem *regs, int num, int banks) in tegra_clk_init()
238 clks = kcalloc(num, sizeof(struct clk *), GFP_KERNEL); in tegra_clk_init()
258 struct clk *clks[], int clk_max) in tegra_init_dup_clks()
260 struct clk *clk; in tegra_init_dup_clks() local
262 for (; dup_list->clk_id < clk_max; dup_list++) { in tegra_init_dup_clks()
263 clk = clks[dup_list->clk_id]; in tegra_init_dup_clks()
264 dup_list->lookup.clk = clk; in tegra_init_dup_clks()
265 clkdev_add(&dup_list->lookup); in tegra_init_dup_clks()
270 struct clk *clks[], int clk_max) in tegra_init_from_table()
272 struct clk *clk; in tegra_init_from_table() local
274 for (; tbl->clk_id < clk_max; tbl++) { in tegra_init_from_table()
275 clk = clks[tbl->clk_id]; in tegra_init_from_table()
276 if (IS_ERR_OR_NULL(clk)) { in tegra_init_from_table()
278 __func__, PTR_ERR(clk), tbl->clk_id); in tegra_init_from_table()
284 if (tbl->parent_id < clk_max) { in tegra_init_from_table()
285 struct clk *parent = clks[tbl->parent_id]; in tegra_init_from_table() local
286 if (clk_set_parent(clk, parent)) { in tegra_init_from_table()
287 pr_err("%s: Failed to set parent %s of %s\n", in tegra_init_from_table()
288 __func__, __clk_get_name(parent), in tegra_init_from_table()
289 __clk_get_name(clk)); in tegra_init_from_table()
294 if (tbl->rate) in tegra_init_from_table()
295 if (clk_set_rate(clk, tbl->rate)) { in tegra_init_from_table()
297 __func__, tbl->rate, in tegra_init_from_table()
298 __clk_get_name(clk)); in tegra_init_from_table()
302 if (tbl->state) in tegra_init_from_table()
303 if (clk_prepare_enable(clk)) { in tegra_init_from_table()
305 __clk_get_name(clk)); in tegra_init_from_table()
333 ("Tegra clk %d: register failed with %ld\n", in tegra_add_of_provider()
337 clks[i] = ERR_PTR(-EINVAL); in tegra_add_of_provider()
363 clk_register_clkdev(clks[dev_clks->dt_id], dev_clks->con_id, in tegra_register_devclks()
364 dev_clks->dev_id); in tegra_register_devclks()
369 "tegra-clk-debug"); in tegra_register_devclks()
373 struct clk ** __init tegra_lookup_dt_id(int clk_id, in tegra_lookup_dt_id()
387 node_name = kstrdup_and_replace(hw->init->name, '_', '-', GFP_KERNEL); in tegra_clk_get_of_node()
392 if (!strcmp(np->name, node_name)) in tegra_clk_get_of_node()
401 struct clk *tegra_clk_dev_register(struct clk_hw *hw) in tegra_clk_dev_register()
403 struct platform_device *pdev, *parent; in tegra_clk_dev_register() local
413 dev_name = kasprintf(GFP_KERNEL, "tegra_clk_%s", hw->init->name); in tegra_clk_dev_register()
417 parent = of_find_device_by_node(tegra_car_np); in tegra_clk_dev_register()
418 if (parent) { in tegra_clk_dev_register()
419 pdev = of_platform_device_create(np, dev_name, &parent->dev); in tegra_clk_dev_register()
420 put_device(&parent->dev); in tegra_clk_dev_register()
428 dev = &pdev->dev; in tegra_clk_dev_register()