[U-Boot] [PATCH v5 09/18] dm: clk: Define clk_get_parent_rate() for clk operations

2019-07-20 Thread sbabic
> This commit adds the clk_get_parent_rate() function, which is responsible
> for getting the rate of parent clock.
> Unfortunately, u-boot's DM support for getting parent is different
> (the parent relationship is in udevice) than the one in Common Clock
> Framework [CCF] in Linux.
> To alleviate this problem - the clk_get_parent_rate() function has been
> introduced to clk-uclass.c.
> Signed-off-by: Lukasz Majewski 
> Reviewed-by: Peng Fan 

Applied to u-boot-imx, master, thanks !

Best regards,
Stefano Babic

-- 
=
DENX Software Engineering GmbH,  Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sba...@denx.de
=

___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


[U-Boot] [PATCH v5 09/18] dm: clk: Define clk_get_parent_rate() for clk operations

2019-06-24 Thread Lukasz Majewski
This commit adds the clk_get_parent_rate() function, which is responsible
for getting the rate of parent clock.
Unfortunately, u-boot's DM support for getting parent is different
(the parent relationship is in udevice) than the one in Common Clock
Framework [CCF] in Linux.

To alleviate this problem - the clk_get_parent_rate() function has been
introduced to clk-uclass.c.

Signed-off-by: Lukasz Majewski 
Reviewed-by: Peng Fan 

---

Changes in v6: None
Changes in v5:
- Replace ulong with long long (to accommodate large freqs and return
  errors)

Changes in v4: None
Changes in v3:
- The rate information is now cached into struct clk field
- The clk_get_parent() is used to get pointer to the parent struct clk

 drivers/clk/clk-uclass.c | 22 ++
 include/clk.h|  9 +
 2 files changed, 31 insertions(+)

diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c
index 4346c61eea..899b2dda6f 100644
--- a/drivers/clk/clk-uclass.c
+++ b/drivers/clk/clk-uclass.c
@@ -395,6 +395,28 @@ struct clk *clk_get_parent(struct clk *clk)
return pclk;
 }
 
+long long clk_get_parent_rate(struct clk *clk)
+{
+   const struct clk_ops *ops;
+   struct clk *pclk;
+
+   debug("%s(clk=%p)\n", __func__, clk);
+
+   pclk = clk_get_parent(clk);
+   if (IS_ERR(pclk))
+   return -ENODEV;
+
+   ops = clk_dev_ops(pclk->dev);
+   if (!ops->get_rate)
+   return -ENOSYS;
+
+   /* Read the 'rate' if not already set */
+   if (!pclk->rate)
+   pclk->rate = clk_get_rate(pclk);
+
+   return pclk->rate;
+}
+
 ulong clk_set_rate(struct clk *clk, ulong rate)
 {
const struct clk_ops *ops = clk_dev_ops(clk->dev);
diff --git a/include/clk.h b/include/clk.h
index e20641ee98..7b2ff8ebe6 100644
--- a/include/clk.h
+++ b/include/clk.h
@@ -268,6 +268,15 @@ ulong clk_get_rate(struct clk *clk);
 struct clk *clk_get_parent(struct clk *clk);
 
 /**
+ * clk_get_parent_rate() - Get parent of current clock rate.
+ *
+ * @clk:   A clock struct that was previously successfully requested by
+ * clk_request/get_by_*().
+ * @return clock rate in Hz, or -ve error code.
+ */
+long long clk_get_parent_rate(struct clk *clk);
+
+/**
  * clk_set_rate() - Set current clock rate.
  *
  * @clk:   A clock struct that was previously successfully requested by
-- 
2.11.0

___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot