All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anup Patel <Anup.Patel@wdc.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v3 07/12] clk: Add fixed-factor clock driver
Date: Wed, 23 Jan 2019 04:25:57 +0000	[thread overview]
Message-ID: <20190123042442.106038-8-anup.patel@wdc.com> (raw)
In-Reply-To: <20190123042442.106038-1-anup.patel@wdc.com>

This patch adds fixed-factor clock driver which derives clock
rate by dividing (div) and multiplying (mult) fixed factors
to a parent clock.

Signed-off-by: Atish Patra <atish.patra@wdc.com>
Signed-off-by: Anup Patel <anup.patel@wdc.com>
---
 drivers/clk/Makefile           |  4 +-
 drivers/clk/clk_fixed_factor.c | 72 ++++++++++++++++++++++++++++++++++
 2 files changed, 75 insertions(+), 1 deletion(-)
 create mode 100644 drivers/clk/clk_fixed_factor.c

diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile
index 2f4446568c..fa59259ea3 100644
--- a/drivers/clk/Makefile
+++ b/drivers/clk/Makefile
@@ -4,7 +4,9 @@
 # Wolfgang Denk, DENX Software Engineering, wd at denx.de.
 #
 
-obj-$(CONFIG_$(SPL_TPL_)CLK) += clk-uclass.o clk_fixed_rate.o
+obj-$(CONFIG_$(SPL_TPL_)CLK) += clk-uclass.o
+obj-$(CONFIG_$(SPL_TPL_)CLK) += clk_fixed_rate.o
+obj-$(CONFIG_$(SPL_TPL_)CLK) += clk_fixed_factor.o
 
 obj-y += imx/
 obj-y += tegra/
diff --git a/drivers/clk/clk_fixed_factor.c b/drivers/clk/clk_fixed_factor.c
new file mode 100644
index 0000000000..f2630248c2
--- /dev/null
+++ b/drivers/clk/clk_fixed_factor.c
@@ -0,0 +1,72 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (c) 2019 Western Digital Corporation or its affiliates.
+ *
+ * Author: Anup Patel <anup.patel@wdc.com>
+ */
+
+#include <common.h>
+#include <clk-uclass.h>
+#include <div64.h>
+#include <dm.h>
+
+struct clk_fixed_factor {
+	struct clk parent;
+	unsigned int div;
+	unsigned int mult;
+};
+
+#define to_clk_fixed_factor(dev)	\
+	((struct clk_fixed_factor *)dev_get_platdata(dev))
+
+static ulong clk_fixed_factor_get_rate(struct clk *clk)
+{
+	int ret;
+	struct clk_fixed_factor *ff = to_clk_fixed_factor(clk->dev);
+
+	if (clk->id != 0)
+		return -EINVAL;
+
+	ret = clk_get_rate(&ff->parent);
+	if (IS_ERR_VALUE(ret))
+		return ret;
+
+	do_div(ret, ff->div);
+
+	return ret * ff->mult;
+}
+
+const struct clk_ops clk_fixed_factor_ops = {
+	.get_rate = clk_fixed_factor_get_rate,
+};
+
+static int clk_fixed_factor_ofdata_to_platdata(struct udevice *dev)
+{
+	int err;
+	struct clk_fixed_factor *ff = to_clk_fixed_factor(dev);
+
+	err = clk_get_by_index(dev, 0, &ff->parent);
+	if (err)
+		return err;
+
+	ff->div = dev_read_u32_default(dev, "clock-div", 1);
+	ff->mult = dev_read_u32_default(dev, "clock-mult", 1);
+
+	return 0;
+}
+
+static const struct udevice_id clk_fixed_factor_match[] = {
+	{
+		.compatible = "fixed-factor-clock",
+	},
+	{ /* sentinel */ }
+};
+
+U_BOOT_DRIVER(clk_fixed_factor) = {
+	.name = "fixed_factor_clock",
+	.id = UCLASS_CLK,
+	.of_match = clk_fixed_factor_match,
+	.ofdata_to_platdata = clk_fixed_factor_ofdata_to_platdata,
+	.platdata_auto_alloc_size = sizeof(struct clk_fixed_factor),
+	.ops = &clk_fixed_factor_ops,
+};
-- 
2.17.1

  parent reply	other threads:[~2019-01-23  4:25 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-23  4:25 [U-Boot] [PATCH v3 00/12] SiFive FU540 Support Anup Patel
2019-01-23  4:25 ` [U-Boot] [PATCH v3 01/12] riscv: Rename cpu/qemu to cpu/generic Anup Patel
2019-01-23  4:25 ` [U-Boot] [PATCH v3 02/12] riscv: Add asm/dma-mapping.h for DMA mappings Anup Patel
2019-01-23  4:25 ` [U-Boot] [PATCH v3 03/12] riscv: generic: Ensure that U-Boot runs within 4GB for 64bit systems Anup Patel
2019-01-23  4:25 ` [U-Boot] [PATCH v3 04/12] net: macb: Fix clk API usage for RISC-V systems Anup Patel
2019-01-23 13:57   ` Joe Hershberger
2019-01-23 15:40     ` Anup Patel
2019-01-23  4:25 ` [U-Boot] [PATCH v3 05/12] net: macb: Fix GEM hardware detection Anup Patel
2019-01-23 13:55   ` Joe Hershberger
2019-01-23  4:25 ` [U-Boot] [PATCH v3 06/12] clk: Add SiFive FU540 PRCI clock driver Anup Patel
2019-01-23  4:25 ` Anup Patel [this message]
2019-01-23  4:26 ` [U-Boot] [PATCH v3 08/12] drivers: serial_sifive: Fix baud rate calculation Anup Patel
2019-01-23  4:26 ` [U-Boot] [PATCH v3 09/12] drivers: serial_sifive: Skip baudrate config if no input clock Anup Patel
2019-01-23  4:26 ` [U-Boot] [PATCH v3 10/12] cpu: Bind timer driver for boot hart Anup Patel
2019-01-23  4:26 ` [U-Boot] [PATCH v3 11/12] riscv: Add SiFive FU540 board support Anup Patel
2019-01-23  4:26 ` [U-Boot] [PATCH v3 12/12] doc: Add a readme guide for SiFive FU540 Anup Patel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190123042442.106038-8-anup.patel@wdc.com \
    --to=anup.patel@wdc.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.