]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
soc: imx: gpcv2: move register access table to domain data
authorLucas Stach <l.stach@pengutronix.de>
Fri, 16 Nov 2018 15:49:26 +0000 (16:49 +0100)
committerShawn Guo <shawnguo@kernel.org>
Wed, 5 Dec 2018 00:50:34 +0000 (08:50 +0800)
The valid register ranges are defined by the implemented power domains,
which are different between the individual SoCs where the GPCv2 is used.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
drivers/soc/imx/gpcv2.c

index 4183f7f830c8f368df343b7b6aba346666b4750d..fe2cf6b61b058b015205740fca27e4f547e130f6 100644 (file)
@@ -67,6 +67,7 @@ struct imx_pgc_domain {
 struct imx_pgc_domain_data {
        const struct imx_pgc_domain *domains;
        size_t domains_num;
+       const struct regmap_access_table *reg_access_table;
 };
 
 static int imx_gpc_pu_pgc_sw_pxx_req(struct generic_pm_domain *genpd,
@@ -198,9 +199,26 @@ static const struct imx_pgc_domain imx7_pgc_domains[] = {
        },
 };
 
+static const struct regmap_range imx7_yes_ranges[] = {
+               regmap_reg_range(GPC_LPCR_A_CORE_BSC,
+                                GPC_M4_PU_PDN_FLG),
+               regmap_reg_range(GPC_PGC_CTRL(IMX7_PGC_MIPI),
+                                GPC_PGC_SR(IMX7_PGC_MIPI)),
+               regmap_reg_range(GPC_PGC_CTRL(IMX7_PGC_PCIE),
+                                GPC_PGC_SR(IMX7_PGC_PCIE)),
+               regmap_reg_range(GPC_PGC_CTRL(IMX7_PGC_USB_HSIC),
+                                GPC_PGC_SR(IMX7_PGC_USB_HSIC)),
+};
+
+static const struct regmap_access_table imx7_access_table = {
+       .yes_ranges     = imx7_yes_ranges,
+       .n_yes_ranges   = ARRAY_SIZE(imx7_yes_ranges),
+};
+
 static const struct imx_pgc_domain_data imx7_pgc_domain_data = {
        .domains = imx7_pgc_domains,
        .domains_num = ARRAY_SIZE(imx7_pgc_domains),
+       .reg_access_table = &imx7_access_table,
 };
 
 static int imx_pgc_domain_probe(struct platform_device *pdev)
@@ -265,27 +283,15 @@ builtin_platform_driver(imx_pgc_domain_driver)
 
 static int imx_gpcv2_probe(struct platform_device *pdev)
 {
-       static const struct imx_pgc_domain_data *domain_data;
-       static const struct regmap_range yes_ranges[] = {
-               regmap_reg_range(GPC_LPCR_A_CORE_BSC,
-                                GPC_M4_PU_PDN_FLG),
-               regmap_reg_range(GPC_PGC_CTRL(IMX7_PGC_MIPI),
-                                GPC_PGC_SR(IMX7_PGC_MIPI)),
-               regmap_reg_range(GPC_PGC_CTRL(IMX7_PGC_PCIE),
-                                GPC_PGC_SR(IMX7_PGC_PCIE)),
-               regmap_reg_range(GPC_PGC_CTRL(IMX7_PGC_USB_HSIC),
-                                GPC_PGC_SR(IMX7_PGC_USB_HSIC)),
-       };
-       static const struct regmap_access_table access_table = {
-               .yes_ranges     = yes_ranges,
-               .n_yes_ranges   = ARRAY_SIZE(yes_ranges),
-       };
-       static const struct regmap_config regmap_config = {
+       const struct imx_pgc_domain_data *domain_data =
+                       of_device_get_match_data(&pdev->dev);
+
+       struct regmap_config regmap_config = {
                .reg_bits       = 32,
                .val_bits       = 32,
                .reg_stride     = 4,
-               .rd_table       = &access_table,
-               .wr_table       = &access_table,
+               .rd_table       = domain_data->reg_access_table,
+               .wr_table       = domain_data->reg_access_table,
                .max_register   = SZ_4K,
        };
        struct device *dev = &pdev->dev;
@@ -313,8 +319,6 @@ static int imx_gpcv2_probe(struct platform_device *pdev)
                return ret;
        }
 
-       domain_data = of_device_get_match_data(&pdev->dev);
-
        for_each_child_of_node(pgc_np, np) {
                struct platform_device *pd_pdev;
                struct imx_pgc_domain *domain;