1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright (C) 2019 DENX Software Engineering
4  * Lukasz Majewski, DENX Software Engineering, lukma@denx.de
5  */
6 
7 #include <common.h>
8 #include <clk-uclass.h>
9 #include <log.h>
10 #include <dm/device.h>
11 #include <dm/uclass.h>
12 #include <dm/lists.h>
13 #include <dm/device-internal.h>
14 #include <clk.h>
15 
clk_register(struct clk * clk,const char * drv_name,const char * name,const char * parent_name)16 int clk_register(struct clk *clk, const char *drv_name,
17 		 const char *name, const char *parent_name)
18 {
19 	struct udevice *parent;
20 	struct driver *drv;
21 	int ret;
22 
23 	ret = uclass_get_device_by_name(UCLASS_CLK, parent_name, &parent);
24 	if (ret) {
25 		printf("%s: failed to get %s device (parent of %s)\n",
26 		       __func__, parent_name, name);
27 	} else {
28 		debug("%s: name: %s parent: %s [0x%p]\n", __func__, name,
29 		      parent->name, parent);
30 	}
31 
32 	drv = lists_driver_lookup_name(drv_name);
33 	if (!drv) {
34 		printf("%s: %s is not a valid driver name\n",
35 		       __func__, drv_name);
36 		return -ENOENT;
37 	}
38 
39 	ret = device_bind(parent, drv, name, NULL, ofnode_null(), &clk->dev);
40 	if (ret) {
41 		printf("%s: CLK: %s driver bind error [%d]!\n", __func__, name,
42 		       ret);
43 		return ret;
44 	}
45 
46 	clk->enable_count = 0;
47 
48 	/* Store back pointer to clk from udevice */
49 	/* FIXME: This is not allowed...should be allocated by driver model */
50 	dev_set_uclass_priv(clk->dev, clk);
51 
52 	return 0;
53 }
54 
clk_generic_get_rate(struct clk * clk)55 ulong clk_generic_get_rate(struct clk *clk)
56 {
57 	return clk_get_parent_rate(clk);
58 }
59 
clk_hw_get_name(const struct clk * hw)60 const char *clk_hw_get_name(const struct clk *hw)
61 {
62 	assert(hw);
63 	assert(hw->dev);
64 
65 	return hw->dev->name;
66 }
67 
clk_dev_binded(struct clk * clk)68 bool clk_dev_binded(struct clk *clk)
69 {
70 	if (clk->dev && (dev_get_flags(clk->dev) & DM_FLAG_BOUND))
71 		return true;
72 
73 	return false;
74 }
75