diff options
author | Dong Aisheng <aisheng.dong@nxp.com> | 2017-09-07 15:10:50 +0800 |
---|---|---|
committer | Jason Liu <jason.hui.liu@nxp.com> | 2019-02-12 10:30:34 +0800 |
commit | 369665ba7a6a3dd3a1da4ead69473778c1bcd073 (patch) | |
tree | 7a5e623a89e3e90d6c28a5a5a0125f7d643cd7e1 /drivers/clk | |
parent | e3a8852641dc6e2bda2aea7a317be1ec7cb027eb (diff) |
MLK-17491-39 clk: imx: remove private clk-frac-divider
Kernel already supports fractional divider and we switched to it.
See: drivers/clk/clk-fractional-divider.c
So no need keep our private clk-frac-divider copy now which functions
the same, delete it.
Cc: Anson Huang <Anson.Huang@nxp.com>
Reviewed-by: Bai Ping <ping.bai@nxp.com>
Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
Diffstat (limited to 'drivers/clk')
-rw-r--r-- | drivers/clk/imx/Makefile | 1 | ||||
-rw-r--r-- | drivers/clk/imx/clk-frac-divider.c | 96 |
2 files changed, 0 insertions, 97 deletions
diff --git a/drivers/clk/imx/Makefile b/drivers/clk/imx/Makefile index 0970623a7e26..2b14c3d9a3c9 100644 --- a/drivers/clk/imx/Makefile +++ b/drivers/clk/imx/Makefile @@ -14,7 +14,6 @@ obj-$(CONFIG_ARM) += \ clk-pfd.o \ clk-gate-exclusive.o \ clk-composite.o \ - clk-frac-divider.o \ clk-pllv4.o \ clk-pllv5.o \ clk-pfdv2.o diff --git a/drivers/clk/imx/clk-frac-divider.c b/drivers/clk/imx/clk-frac-divider.c deleted file mode 100644 index 0850ba2e26e5..000000000000 --- a/drivers/clk/imx/clk-frac-divider.c +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (C) 2016 Freescale Semiconductor, Inc. - * - * Based on driver/clk/clk-fractional-divider.c - * - * The code contained herein is licensed under the GNU General Public - * License. You may obtain a copy of the GNU General Public License - * Version 2 or later at the following locations: - * - * http://www.opensource.org/licenses/gpl-license.html - * http://www.gnu.org/copyleft/gpl.html - */ - -#include <linux/bitops.h> -#include <linux/clk-provider.h> -#include <linux/err.h> -#include <linux/io.h> -#include <linux/slab.h> -#include <linux/rational.h> - -#include "clk.h" - -#define to_clk_frac_divider(_hw) container_of(_hw, struct clk_frac_divider, hw) - -static unsigned long clk_frac_divider_recalc_rate(struct clk_hw *hw, - unsigned long parent_rate) -{ - struct clk_frac_divider *fd = to_clk_frac_divider(hw); - u32 val, m, n; - u64 ret; - - val = readl_relaxed(fd->reg); - - m = (val & fd->mmask) >> fd->mshift; - n = (val & fd->nmask) >> fd->nshift; - - ret = (u64)parent_rate * (m + 1); - do_div(ret, n + 1); - - return ret; -} - -static long clk_frac_divider_round_rate(struct clk_hw *hw, unsigned long rate, - unsigned long *parent_rate) -{ - struct clk_frac_divider *fd = to_clk_frac_divider(hw); - unsigned long scale; - unsigned long m, n; - u64 ret; - - if (!rate || rate >= *parent_rate) - return *parent_rate; - - scale = fls_long(*parent_rate / rate - 1); - if (scale > 4) - rate <<= scale - fd->nwidth; - - rational_best_approximation(rate, *parent_rate, - GENMASK(fd->mwidth - 1, 0), GENMASK(fd->nwidth - 1, 0), - &m, &n); - - ret = (u64)*parent_rate * m; - do_div(ret, n); - - return ret; -} - -static int clk_frac_divider_set_rate(struct clk_hw *hw, unsigned long rate, - unsigned long parent_rate) -{ - struct clk_frac_divider *fd = to_clk_frac_divider(hw); - unsigned long m, n; - u32 val; - - rational_best_approximation(rate, parent_rate, - GENMASK(fd->mwidth - 1, 0), GENMASK(fd->nwidth - 1, 0), - &m, &n); - m = m - 1; - n = n - 1; - if (m && !n) - return -EINVAL; - - val = readl_relaxed(fd->reg); - val &= ~(fd->mmask | fd->nmask); - val |= (m << fd->mshift) | (n << fd->nshift); - writel_relaxed(val, fd->reg); - - return 0; -} - -const struct clk_ops clk_frac_divider_ops = { - .recalc_rate = clk_frac_divider_recalc_rate, - .round_rate = clk_frac_divider_round_rate, - .set_rate = clk_frac_divider_set_rate, -}; -EXPORT_SYMBOL_GPL(clk_frac_divider_ops); |