F: arch/arm/boot/dts/sunplus-sp7021*.dts*
F: arch/arm/configs/sp7021_*defconfig
F: arch/arm/mach-sunplus/
++ ++F: drivers/clk/clk-sp7021.c
F: drivers/irqchip/irq-sp7021-intc.c
F: drivers/reset/reset-sunplus.c
F: include/dt-bindings/clock/sunplus,sp7021-clkc.h
M: Seth Forshee <sforshee@kernel.org>
L: linux-fsdevel@vger.kernel.org
S: Maintained
----T: git://git.kernel.org/pub/scm/linux/kernel/git/vfs/idmapping.git
++++T: git git://git.kernel.org/pub/scm/linux/kernel/git/vfs/idmapping.git
F: Documentation/filesystems/idmappings.rst
----F: tools/testing/selftests/mount_setattr/
F: include/linux/mnt_idmapping.*
++++F: tools/testing/selftests/mount_setattr/
IDT VersaClock 5 CLOCK DRIVER
M: Luca Ceresoli <luca@lucaceresoli.net>
L: linux-clk@vger.kernel.org
S: Maintained
F: Documentation/devicetree/bindings/clock/loongson,ls2k-clk.yaml
+++ +F: drivers/clk/clk-loongson2.c
F: include/dt-bindings/clock/loongson,ls2k-clk.h
LSILOGIC MPT FUSION DRIVERS (FC/SAS/SPI)
S: Maintained
F: arch/mips/include/asm/mach-loongson32/
F: arch/mips/loongson32/
--- -F: drivers/*/*/*loongson1*
F: drivers/*/*loongson1*
MIPS/LOONGSON2EF ARCHITECTURE
R: Jiri Olsa <jolsa@kernel.org>
R: Namhyung Kim <namhyung@kernel.org>
R: Ian Rogers <irogers@google.com>
++++R: Adrian Hunter <adrian.hunter@intel.com>
L: linux-perf-users@vger.kernel.org
L: linux-kernel@vger.kernel.org
S: Supported
W: http://wiki.laptop.org/go/DCON
F: drivers/staging/olpc_dcon/
----STAGING - REALTEK RTL8188EU DRIVERS
----M: Larry Finger <Larry.Finger@lwfinger.net>
----M: Phillip Potter <phil@philpotter.co.uk>
----R: Pavel Skripkin <paskripkin@gmail.com>
----S: Supported
----F: drivers/staging/r8188eu/
----
STAGING - REALTEK RTL8712U DRIVERS
M: Larry Finger <Larry.Finger@lwfinger.net>
M: Florian Schilhabel <florian.c.schilhabel@googlemail.com>.
This driver supports the clocking features of the Cirrus Logic
Lochnagar audio development board.
+++ +config COMMON_CLK_LOONGSON2
+++ + bool "Clock driver for Loongson-2 SoC"
+++ + depends on LOONGARCH || COMPILE_TEST
+++ + help
+++ + This driver provides support for clock controller on Loongson-2 SoC.
+++ + The clock controller can generates and supplies clock to various
+++ + peripherals within the SoC.
+++ + Say Y here to support Loongson-2 SoC clock driver.
+++ +
config COMMON_CLK_NXP
def_bool COMMON_CLK && (ARCH_LPC18XX || ARCH_LPC32XX)
select REGMAP_MMIO if ARCH_LPC32XX
This driver supports the Renesas 9-series PCIe clock generator
models 9FGV/9DBV/9DMV/9FGL/9DML/9QXL/9SQ.
++++config COMMON_CLK_SI521XX
++++ tristate "Clock driver for SkyWorks Si521xx PCIe clock generators"
++++ depends on I2C
++++ depends on OF
++++ select REGMAP_I2C
++++ help
++++ This driver supports the SkyWorks Si521xx PCIe clock generator
++++ models Si52144/Si52146/Si52147.
++++
config COMMON_CLK_VC5
tristate "Clock driver for IDT VersaClock 5,6 devices"
depends on I2C
help
Support for the Canaan Kendryte K210 RISC-V SoC clocks.
++ ++config COMMON_CLK_SP7021
++ ++ tristate "Clock driver for Sunplus SP7021 SoC"
++ ++ depends on SOC_SP7021 || COMPILE_TEST
++ ++ default SOC_SP7021
++ ++ help
++ ++ This driver supports the Sunplus SP7021 SoC clocks.
++ ++ It implements SP7021 PLLs/gate.
++ ++ Not all features of the PLL are currently supported
++ ++ by the driver.
++ ++
source "drivers/clk/actions/Kconfig"
source "drivers/clk/analogbits/Kconfig"
source "drivers/clk/baikal-t1/Kconfig"
obj-$(CONFIG_LMK04832) += clk-lmk04832.o
obj-$(CONFIG_COMMON_CLK_LAN966X) += clk-lan966x.o
obj-$(CONFIG_COMMON_CLK_LOCHNAGAR) += clk-lochnagar.o
+++ +obj-$(CONFIG_MACH_LOONGSON32) += clk-loongson1.o
+++ +obj-$(CONFIG_COMMON_CLK_LOONGSON2) += clk-loongson2.o
obj-$(CONFIG_COMMON_CLK_MAX77686) += clk-max77686.o
obj-$(CONFIG_COMMON_CLK_MAX9485) += clk-max9485.o
obj-$(CONFIG_ARCH_MILBEAUT_M10V) += clk-milbeaut.o
obj-$(CONFIG_COMMON_CLK_SI514) += clk-si514.o
obj-$(CONFIG_COMMON_CLK_SI544) += clk-si544.o
obj-$(CONFIG_COMMON_CLK_SI570) += clk-si570.o
++ ++obj-$(CONFIG_COMMON_CLK_SP7021) += clk-sp7021.o
obj-$(CONFIG_COMMON_CLK_STM32F) += clk-stm32f4.o
obj-$(CONFIG_COMMON_CLK_STM32H7) += clk-stm32h7.o
obj-$(CONFIG_COMMON_CLK_STM32MP157) += clk-stm32mp1.o
obj-$(CONFIG_CLK_TWL6040) += clk-twl6040.o
obj-$(CONFIG_ARCH_VT8500) += clk-vt8500.o
obj-$(CONFIG_COMMON_CLK_RS9_PCIE) += clk-renesas-pcie.o
++++obj-$(CONFIG_COMMON_CLK_SI521XX) += clk-si521xx.o
obj-$(CONFIG_COMMON_CLK_VC5) += clk-versaclock5.o
obj-$(CONFIG_COMMON_CLK_VC7) += clk-versaclock7.o
obj-$(CONFIG_COMMON_CLK_WM831X) += clk-wm831x.o
obj-y += ingenic/
obj-$(CONFIG_ARCH_K3) += keystone/
obj-$(CONFIG_ARCH_KEYSTONE) += keystone/
--- -obj-$(CONFIG_MACH_LOONGSON32) += loongson1/
obj-y += mediatek/
obj-$(CONFIG_ARCH_MESON) += meson/
obj-y += microchip/
base = of_iomap(node, 0);
if (!base) {
pr_err("%s(): ioremap failed\n", __func__);
---- return;
++++ goto out_node_put;
}
num_clocks = of_clk_get_parent_count(node);
if (!num_clocks) {
pr_err("%s(): failed to get clocks property\n", __func__);
---- return;
++++ goto err;
}
for (i = 0; i < num_clocks; i++) {
pllfh->state.ssc_rate = ssc_rate;
pllfh->state.base = base;
}
++++
++++out_node_put:
++++ of_node_put(node);
++++ return;
++++err:
++++ iounmap(base);
++++ goto out_node_put;
}
+ +++EXPORT_SYMBOL_GPL(fhctl_parse_dt);
- ---static void pllfh_init(struct mtk_fh *fh, struct mtk_pllfh_data *pllfh_data)
+ +++static int pllfh_init(struct mtk_fh *fh, struct mtk_pllfh_data *pllfh_data)
{
struct fh_pll_regs *regs = &fh->regs;
const struct fhctl_offset *offset;
void __iomem *base = pllfh_data->state.base;
void __iomem *fhx_base = base + pllfh_data->data.fhx_offset;
- --- offset = fhctl_get_offset_table();
+ +++ offset = fhctl_get_offset_table(pllfh_data->data.fh_ver);
+ +++ if (IS_ERR(offset))
+ +++ return PTR_ERR(offset);
regs->reg_hp_en = base + offset->offset_hp_en;
regs->reg_clk_con = base + offset->offset_clk_con;
fh->lock = &pllfh_lock;
fh->ops = fhctl_get_ops();
+ +++
+ +++ return 0;
}
static bool fhctl_is_supported_and_enabled(const struct mtk_pllfh_data *pllfh)
{
struct clk_hw *hw;
struct mtk_fh *fh;
+ +++ int ret;
fh = kzalloc(sizeof(*fh), GFP_KERNEL);
if (!fh)
return ERR_PTR(-ENOMEM);
- --- pllfh_init(fh, pllfh_data);
+ +++ ret = pllfh_init(fh, pllfh_data);
+ +++ if (ret) {
+ +++ hw = ERR_PTR(ret);
+ +++ goto out;
+ +++ }
hw = mtk_clk_register_pll_ops(&fh->clk_pll, pll_data, base,
&mtk_pllfh_ops);
+ +++ if (IS_ERR(hw))
+ +++ goto out;
+ +++
+ +++ fhctl_hw_init(fh);
+ +++
+ +++out:
if (IS_ERR(hw))
kfree(fh);
- --- else
- --- fhctl_hw_init(fh);
return hw;
}
return PTR_ERR(hw);
}
+ +++EXPORT_SYMBOL_GPL(mtk_clk_register_pllfhs);
void mtk_clk_unregister_pllfhs(const struct mtk_pll_data *plls, int num_plls,
struct mtk_pllfh_data *pllfhs, int num_fhs,
iounmap(base);
}
+ +++EXPORT_SYMBOL_GPL(mtk_clk_unregister_pllfhs);