From fdd012e27b813982ea01588c52ad62354973427b Mon Sep 17 00:00:00 2001 From: Dong Aisheng Date: Thu, 7 Sep 2017 15:10:50 +0800 Subject: [PATCH] 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 Reviewed-by: Bai Ping Signed-off-by: Dong Aisheng --- drivers/clk/imx/Makefile | 1 - drivers/clk/imx/clk-frac-divider.c | 96 ------------------------------ 2 files changed, 97 deletions(-) delete mode 100644 drivers/clk/imx/clk-frac-divider.c diff --git a/drivers/clk/imx/Makefile b/drivers/clk/imx/Makefile index 45889b73736e..0239f7667544 100644 --- a/drivers/clk/imx/Makefile +++ b/drivers/clk/imx/Makefile @@ -12,7 +12,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 -#include -#include -#include -#include -#include - -#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); -- 2.17.1