1 // SPDX-License-Identifier: GPL-2.0
6 #include <linux/device.h>
8 #include <linux/slab.h>
12 #define DCSS_BLKCTL_RESET_CTRL 0x00
13 #define B_CLK_RESETN BIT(0)
14 #define APB_CLK_RESETN BIT(1)
15 #define P_CLK_RESETN BIT(2)
16 #define RTR_CLK_RESETN BIT(4)
17 #define DCSS_BLKCTL_CONTROL0 0x10
18 #define HDMI_MIPI_CLK_SEL BIT(0)
19 #define DISPMIX_REFCLK_SEL_POS 4
20 #define DISPMIX_REFCLK_SEL_MASK GENMASK(5, 4)
21 #define DISPMIX_PIXCLK_SEL BIT(8)
22 #define HDMI_SRC_SECURE_EN BIT(16)
25 struct dcss_dev *dcss;
26 void __iomem *base_reg;
29 void dcss_blkctl_cfg(struct dcss_blkctl *blkctl)
31 if (blkctl->dcss->hdmi_output)
32 dcss_writel(0, blkctl->base_reg + DCSS_BLKCTL_CONTROL0);
34 dcss_writel(DISPMIX_PIXCLK_SEL,
35 blkctl->base_reg + DCSS_BLKCTL_CONTROL0);
37 dcss_set(B_CLK_RESETN | APB_CLK_RESETN | P_CLK_RESETN | RTR_CLK_RESETN,
38 blkctl->base_reg + DCSS_BLKCTL_RESET_CTRL);
41 int dcss_blkctl_init(struct dcss_dev *dcss, unsigned long blkctl_base)
43 struct dcss_blkctl *blkctl;
45 blkctl = devm_kzalloc(dcss->dev, sizeof(*blkctl), GFP_KERNEL);
49 blkctl->base_reg = devm_ioremap(dcss->dev, blkctl_base, SZ_4K);
50 if (!blkctl->base_reg) {
51 dev_err(dcss->dev, "unable to remap BLK CTRL base\n");
55 dcss->blkctl = blkctl;
58 dcss_blkctl_cfg(blkctl);