[PATCH 5/5] clk: imx: Add blk-ctl driver for i.MX8MM
Marek Vasut
marex at denx.de
Sat Oct 3 18:45:55 EDT 2020
The i.MX8MM platform also has a BLK_CTL, however it is not documented
in the documentation at all. Enable the generic blk_ctl driver so the
IP can be controlled the same way as on MX8MP, and add the clock and
reset entries for MX8MM.
Signed-off-by: Marek Vasut <marex at denx.de>
Cc: Abel Vesa <abel.vesa at nxp.com>
Cc: Dong Aisheng <aisheng.dong at nxp.com>
Cc: Fabio Estevam <festevam at gmail.com>
Cc: Guido Günther <agx at sigxcpu.org>
Cc: Lucas Stach <l.stach at pengutronix.de>
Cc: NXP Linux Team <linux-imx at nxp.com>
Cc: Shawn Guo <shawnguo at kernel.org>
---
drivers/clk/imx/Makefile | 2 +-
drivers/clk/imx/clk-blk-ctl-imx8mm.c | 66 ++++++++++++++++++++++++++++
2 files changed, 67 insertions(+), 1 deletion(-)
create mode 100644 drivers/clk/imx/clk-blk-ctl-imx8mm.c
diff --git a/drivers/clk/imx/Makefile b/drivers/clk/imx/Makefile
index 6e70e6821727..5e7cc7ec29b6 100644
--- a/drivers/clk/imx/Makefile
+++ b/drivers/clk/imx/Makefile
@@ -25,7 +25,7 @@ obj-$(CONFIG_MXC_CLK_SCU) += \
clk-scu.o \
clk-lpcg-scu.o
-obj-$(CONFIG_CLK_IMX8MM) += clk-imx8mm.o
+obj-$(CONFIG_CLK_IMX8MM) += clk-imx8mm.o clk-blk-ctl.o clk-blk-ctl-imx8mm.o
obj-$(CONFIG_CLK_IMX8MN) += clk-imx8mn.o
obj-$(CONFIG_CLK_IMX8MP) += clk-imx8mp.o clk-blk-ctl.o clk-blk-ctl-imx8mp.o
obj-$(CONFIG_CLK_IMX8MQ) += clk-imx8mq.o
diff --git a/drivers/clk/imx/clk-blk-ctl-imx8mm.c b/drivers/clk/imx/clk-blk-ctl-imx8mm.c
new file mode 100644
index 000000000000..6a60747bfd07
--- /dev/null
+++ b/drivers/clk/imx/clk-blk-ctl-imx8mm.c
@@ -0,0 +1,66 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2020 Marek Vasut <marex at denx.de>
+ */
+
+#include <dt-bindings/clock/imx8mm-clock.h>
+#include <dt-bindings/reset/imx8mm-reset.h>
+#include <linux/clk-provider.h>
+#include <linux/err.h>
+#include <linux/io.h>
+#include <linux/module.h>
+#include <linux/of_address.h>
+#include <linux/platform_device.h>
+#include <linux/slab.h>
+#include <linux/types.h>
+
+#include "clk.h"
+#include "clk-blk-ctl.h"
+
+#define IMX_MEDIA_BLK_CTL_SFT_RSTN 0x0
+#define IMX_MEDIA_BLK_CTL_CLK_EN 0x4
+#define IMX_MEDIA_BLK_CTL_MIPI_RST 0x8
+
+static struct imx_blk_ctl_hw imx8mm_dispmix_blk_ctl_hws[] = {
+ /* clocks */
+ IMX_BLK_CTL_CLK_GATE("lcdif_apb_clk", IMX8MM_CLK_MEDIA_BLK_CTL_LCDIF_APB, 0x4, 6, "disp_apb"),
+ IMX_BLK_CTL_CLK_GATE("lcdif_pixel_clk", IMX8MM_CLK_MEDIA_BLK_CTL_LCDIF_PIXEL, 0x4, 7, "lcdif_pixel"),
+ IMX_BLK_CTL_CLK_GATE("mipi_dsi_pclk", IMX8MM_CLK_MEDIA_BLK_CTL_MIPI_DSI_PCLK, 0x4, 8, "dsi_core"),
+ IMX_BLK_CTL_CLK_GATE("mipi_dsi_clkref", IMX8MM_CLK_MEDIA_BLK_CTL_MIPI_DSI_CLKREF, 0x4, 9, "dsi_phy_ref"),
+
+ /* resets */
+ IMX_BLK_CTL_RESET(IMX8MM_MEDIA_BLK_CTL_RESET_MIPI_DSI_I_PRESET, 0x0, 5),
+ IMX_BLK_CTL_RESET(IMX8MM_MEDIA_BLK_CTL_RESET_MIPI_M_RESET, 0x8, 17),
+};
+
+const struct imx_blk_ctl_dev_data imx8mm_dispmix_blk_ctl_dev_data __initconst = {
+ .hws = imx8mm_dispmix_blk_ctl_hws,
+ .hws_num = ARRAY_SIZE(imx8mm_dispmix_blk_ctl_hws),
+ .clocks_max = IMX8MM_CLK_MEDIA_BLK_CTL_END,
+ .resets_max = IMX8MM_MEDIA_BLK_CTL_RESET_NUM,
+ .pm_runtime_saved_regs_num = 3,
+ .pm_runtime_saved_regs = {
+ IMX_MEDIA_BLK_CTL_SFT_RSTN,
+ IMX_MEDIA_BLK_CTL_CLK_EN,
+ IMX_MEDIA_BLK_CTL_MIPI_RST,
+ },
+};
+
+static const struct of_device_id imx_blk_ctl_of_match[] = {
+ {
+ .compatible = "fsl,imx8mm-dispmix-blk-ctl",
+ .data = &imx8mm_dispmix_blk_ctl_dev_data
+ },
+ { /* Sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, imx_blk_ctl_of_match);
+
+static struct platform_driver imx_blk_ctl_driver = {
+ .probe = imx_blk_ctl_probe,
+ .driver = {
+ .name = "imx-blk-ctl",
+ .of_match_table = of_match_ptr(imx_blk_ctl_of_match),
+ .pm = &imx_blk_ctl_pm_ops,
+ },
+};
+module_platform_driver(imx_blk_ctl_driver);
--
2.28.0
More information about the linux-arm-kernel
mailing list