summaryrefslogtreecommitdiffstats
path: root/drivers/clk
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/clk')
-rw-r--r--drivers/clk/Kconfig9
-rw-r--r--drivers/clk/Makefile1
-rw-r--r--drivers/clk/clk-regmap.c (renamed from drivers/clk/meson/clk-regmap.c)2
-rw-r--r--drivers/clk/meson/Kconfig8
-rw-r--r--drivers/clk/meson/Makefile1
-rw-r--r--drivers/clk/meson/axg-aoclk.c2
-rw-r--r--drivers/clk/meson/clk-regmap.h113
-rw-r--r--drivers/clk/meson/clkc.h2
-rw-r--r--drivers/clk/meson/gxbb-aoclk.c2
-rw-r--r--drivers/clk/meson/gxbb.c2
-rw-r--r--drivers/clk/meson/meson-aoclk.c2
-rw-r--r--drivers/clk/meson/meson-aoclk.h2
-rw-r--r--drivers/clk/meson/meson8b.c2
13 files changed, 20 insertions, 128 deletions
diff --git a/drivers/clk/Kconfig b/drivers/clk/Kconfig
index 81cdb4eaca07f..be2f4cfc05bb5 100644
--- a/drivers/clk/Kconfig
+++ b/drivers/clk/Kconfig
@@ -22,6 +22,15 @@ config COMMON_CLK
menu "Common Clock Framework"
depends on COMMON_CLK
+config COMMON_CLK_REGMAP
+ bool
+ select REGMAP
+ help
+ This is a wrapper API around the common clock framework, so
+ you can use the common clock framework on devices supporting
+ only the regmap interface. This is useful for external devices
+ such as several I2C devices which has complex clock structures too.
+
config COMMON_CLK_WM831X
tristate "Clock driver for WM831x/2x PMICs"
depends on MFD_WM831X
diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile
index 72be7a38cff1e..0bcfc94ed4875 100644
--- a/drivers/clk/Makefile
+++ b/drivers/clk/Makefile
@@ -12,6 +12,7 @@ obj-$(CONFIG_COMMON_CLK) += clk-mux.o
obj-$(CONFIG_COMMON_CLK) += clk-composite.o
obj-$(CONFIG_COMMON_CLK) += clk-fractional-divider.o
obj-$(CONFIG_COMMON_CLK) += clk-gpio.o
+obj-$(CONFIG_COMMON_CLK_REGMAP) += clk-regmap.o
ifeq ($(CONFIG_OF), y)
obj-$(CONFIG_COMMON_CLK) += clk-conf.o
endif
diff --git a/drivers/clk/meson/clk-regmap.c b/drivers/clk/clk-regmap.c
index 305ee307c003b..aabdf81c3eeb2 100644
--- a/drivers/clk/meson/clk-regmap.c
+++ b/drivers/clk/clk-regmap.c
@@ -4,7 +4,7 @@
* Author: Jerome Brunet <jbrunet@baylibre.com>
*/
-#include "clk-regmap.h"
+#include <linux/clk-regmap.h>
static int clk_regmap_gate_endisable(struct clk_hw *hw, int enable)
{
diff --git a/drivers/clk/meson/Kconfig b/drivers/clk/meson/Kconfig
index efaa70f682b45..9c7f3042c933c 100644
--- a/drivers/clk/meson/Kconfig
+++ b/drivers/clk/meson/Kconfig
@@ -1,7 +1,7 @@
config COMMON_CLK_AMLOGIC
bool
depends on ARCH_MESON || COMPILE_TEST
- select COMMON_CLK_REGMAP_MESON
+ select COMMON_CLK_REGMAP
config COMMON_CLK_AMLOGIC_AUDIO
bool
@@ -12,13 +12,9 @@ config COMMON_CLK_MESON_AO
bool
depends on OF
depends on ARCH_MESON || COMPILE_TEST
- select COMMON_CLK_REGMAP_MESON
+ select COMMON_CLK_REGMAP
select RESET_CONTROLLER
-config COMMON_CLK_REGMAP_MESON
- bool
- select REGMAP
-
config COMMON_CLK_MESON8B
bool
select COMMON_CLK_AMLOGIC
diff --git a/drivers/clk/meson/Makefile b/drivers/clk/meson/Makefile
index 72ec8c40d848d..5e18738d0accb 100644
--- a/drivers/clk/meson/Makefile
+++ b/drivers/clk/meson/Makefile
@@ -9,4 +9,3 @@ obj-$(CONFIG_COMMON_CLK_MESON8B) += meson8b.o
obj-$(CONFIG_COMMON_CLK_GXBB) += gxbb.o gxbb-aoclk.o gxbb-aoclk-32k.o
obj-$(CONFIG_COMMON_CLK_AXG) += axg.o axg-aoclk.o
obj-$(CONFIG_COMMON_CLK_AXG_AUDIO) += axg-audio.o
-obj-$(CONFIG_COMMON_CLK_REGMAP_MESON) += clk-regmap.o
diff --git a/drivers/clk/meson/axg-aoclk.c b/drivers/clk/meson/axg-aoclk.c
index 29e0885423871..f91898e9472f0 100644
--- a/drivers/clk/meson/axg-aoclk.c
+++ b/drivers/clk/meson/axg-aoclk.c
@@ -9,10 +9,10 @@
* Author: Qiufang Dai <qiufang.dai@amlogic.com>
*/
#include <linux/clk-provider.h>
+#include <linux/clk-regmap.h>
#include <linux/platform_device.h>
#include <linux/reset-controller.h>
#include <linux/mfd/syscon.h>
-#include "clk-regmap.h"
#include "meson-aoclk.h"
#include "axg-aoclk.h"
diff --git a/drivers/clk/meson/clk-regmap.h b/drivers/clk/meson/clk-regmap.h
deleted file mode 100644
index ed2d4348dbe28..0000000000000
--- a/drivers/clk/meson/clk-regmap.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * Copyright (c) 2018 BayLibre, SAS.
- * Author: Jerome Brunet <jbrunet@baylibre.com>
- */
-
-#ifndef __CLK_REGMAP_H
-#define __CLK_REGMAP_H
-
-#include <linux/clk-provider.h>
-#include <linux/regmap.h>
-
-/**
- * struct clk_regmap - regmap backed clock
- *
- * @hw: handle between common and hardware-specific interfaces
- * @map: pointer to the regmap structure controlling the clock
- * @data: data specific to the clock type
- *
- * Clock which is controlled by regmap backed registers. The actual type of
- * of the clock is controlled by the clock_ops and data.
- */
-struct clk_regmap {
- struct clk_hw hw;
- struct regmap *map;
- void *data;
-};
-
-#define to_clk_regmap(_hw) container_of(_hw, struct clk_regmap, hw)
-
-/**
- * struct clk_regmap_gate_data - regmap backed gate specific data
- *
- * @offset: offset of the register controlling gate
- * @bit_idx: single bit controlling gate
- * @flags: hardware-specific flags
- *
- * Flags:
- * Same as clk_gate except CLK_GATE_HIWORD_MASK which is ignored
- */
-struct clk_regmap_gate_data {
- unsigned int offset;
- u8 bit_idx;
- u8 flags;
-};
-
-static inline struct clk_regmap_gate_data *
-clk_get_regmap_gate_data(struct clk_regmap *clk)
-{
- return (struct clk_regmap_gate_data *)clk->data;
-}
-
-extern const struct clk_ops clk_regmap_gate_ops;
-
-/**
- * struct clk_regmap_div_data - regmap backed adjustable divider specific data
- *
- * @offset: offset of the register controlling the divider
- * @shift: shift to the divider bit field
- * @width: width of the divider bit field
- * @table: array of value/divider pairs, last entry should have div = 0
- *
- * Flags:
- * Same as clk_divider except CLK_DIVIDER_HIWORD_MASK which is ignored
- */
-struct clk_regmap_div_data {
- unsigned int offset;
- u8 shift;
- u8 width;
- u8 flags;
- const struct clk_div_table *table;
-};
-
-static inline struct clk_regmap_div_data *
-clk_get_regmap_div_data(struct clk_regmap *clk)
-{
- return (struct clk_regmap_div_data *)clk->data;
-}
-
-extern const struct clk_ops clk_regmap_divider_ops;
-extern const struct clk_ops clk_regmap_divider_ro_ops;
-
-/**
- * struct clk_regmap_mux_data - regmap backed multiplexer clock specific data
- *
- * @hw: handle between common and hardware-specific interfaces
- * @offset: offset of theregister controlling multiplexer
- * @table: array of parent indexed register values
- * @shift: shift to multiplexer bit field
- * @mask: mask of mutliplexer bit field
- * @flags: hardware-specific flags
- *
- * Flags:
- * Same as clk_divider except CLK_MUX_HIWORD_MASK which is ignored
- */
-struct clk_regmap_mux_data {
- unsigned int offset;
- u32 *table;
- u32 mask;
- u8 shift;
- u8 flags;
-};
-
-static inline struct clk_regmap_mux_data *
-clk_get_regmap_mux_data(struct clk_regmap *clk)
-{
- return (struct clk_regmap_mux_data *)clk->data;
-}
-
-extern const struct clk_ops clk_regmap_mux_ops;
-extern const struct clk_ops clk_regmap_mux_ro_ops;
-
-#endif /* __CLK_REGMAP_H */
diff --git a/drivers/clk/meson/clkc.h b/drivers/clk/meson/clkc.h
index 6b96d55c047d6..92fb237dccce9 100644
--- a/drivers/clk/meson/clkc.h
+++ b/drivers/clk/meson/clkc.h
@@ -8,7 +8,7 @@
#define __CLKC_H
#include <linux/clk-provider.h>
-#include "clk-regmap.h"
+#include <linux/clk-regmap.h>
#define PMASK(width) GENMASK(width - 1, 0)
#define SETPMASK(width, shift) GENMASK(shift + width - 1, shift)
diff --git a/drivers/clk/meson/gxbb-aoclk.c b/drivers/clk/meson/gxbb-aoclk.c
index 42ed61d3c3fba..5283d0491acbb 100644
--- a/drivers/clk/meson/gxbb-aoclk.c
+++ b/drivers/clk/meson/gxbb-aoclk.c
@@ -3,9 +3,9 @@
* Copyright (c) 2016 BayLibre, SAS.
* Author: Neil Armstrong <narmstrong@baylibre.com>
*/
+#include <linux/clk-regmap.h>
#include <linux/platform_device.h>
#include <linux/mfd/syscon.h>
-#include "clk-regmap.h"
#include "meson-aoclk.h"
#include "gxbb-aoclk.h"
diff --git a/drivers/clk/meson/gxbb.c b/drivers/clk/meson/gxbb.c
index 9309cfaaa464e..8db60e0570945 100644
--- a/drivers/clk/meson/gxbb.c
+++ b/drivers/clk/meson/gxbb.c
@@ -6,6 +6,7 @@
#include <linux/clk.h>
#include <linux/clk-provider.h>
+#include <linux/clk-regmap.h>
#include <linux/init.h>
#include <linux/of_device.h>
#include <linux/mfd/syscon.h>
@@ -14,7 +15,6 @@
#include "clkc.h"
#include "gxbb.h"
-#include "clk-regmap.h"
static DEFINE_SPINLOCK(meson_clk_lock);
diff --git a/drivers/clk/meson/meson-aoclk.c b/drivers/clk/meson/meson-aoclk.c
index f965845917e34..ccf0390912e4e 100644
--- a/drivers/clk/meson/meson-aoclk.c
+++ b/drivers/clk/meson/meson-aoclk.c
@@ -10,11 +10,11 @@
* Author: Yixun Lan <yixun.lan@amlogic.com>
*/
+#include <linux/clk-regmap.h>
#include <linux/platform_device.h>
#include <linux/reset-controller.h>
#include <linux/mfd/syscon.h>
#include <linux/of_device.h>
-#include "clk-regmap.h"
#include "meson-aoclk.h"
static int meson_aoclk_do_reset(struct reset_controller_dev *rcdev,
diff --git a/drivers/clk/meson/meson-aoclk.h b/drivers/clk/meson/meson-aoclk.h
index ab2819e889228..3051da204eb13 100644
--- a/drivers/clk/meson/meson-aoclk.h
+++ b/drivers/clk/meson/meson-aoclk.h
@@ -11,9 +11,9 @@
#ifndef __MESON_AOCLK_H__
#define __MESON_AOCLK_H__
+#include <linux/clk-regmap.h>
#include <linux/platform_device.h>
#include <linux/reset-controller.h>
-#include "clk-regmap.h"
struct meson_aoclk_data {
const unsigned int reset_reg;
diff --git a/drivers/clk/meson/meson8b.c b/drivers/clk/meson/meson8b.c
index 346b9e165b7a9..3a5c66eeff23b 100644
--- a/drivers/clk/meson/meson8b.c
+++ b/drivers/clk/meson/meson8b.c
@@ -9,6 +9,7 @@
#include <linux/clk.h>
#include <linux/clk-provider.h>
+#include <linux/clk-regmap.h>
#include <linux/init.h>
#include <linux/of_address.h>
#include <linux/reset-controller.h>
@@ -17,7 +18,6 @@
#include "clkc.h"
#include "meson8b.h"
-#include "clk-regmap.h"
static DEFINE_SPINLOCK(meson_clk_lock);