09a3ca06695c2c016032f8a726a5ddcf1c10751c
[openwrt.git] / target / linux / mediatek / patches-4.4 / 0032-soc-mediatek-PMIC-wrap-don-t-duplicate-the-wrapper-d.patch
1 From e2b8f38b1a794b7a0912d0bbaa1454055b5cbac2 Mon Sep 17 00:00:00 2001
2 From: John Crispin <blogic@openwrt.org>
3 Date: Wed, 20 Jan 2016 06:42:01 +0100
4 Subject: [PATCH 32/91] soc: mediatek: PMIC wrap: don't duplicate the wrapper
5  data
6
7 As we add support for more devices struct pmic_wrapper_type will grow and
8 we do not really want to start duplicating all the elements in
9 struct pmic_wrapper.
10
11 Signed-off-by: John Crispin <blogic@openwrt.org>
12 ---
13  drivers/soc/mediatek/mtk-pmic-wrap.c |   22 ++++++++--------------
14  1 file changed, 8 insertions(+), 14 deletions(-)
15
16 diff --git a/drivers/soc/mediatek/mtk-pmic-wrap.c b/drivers/soc/mediatek/mtk-pmic-wrap.c
17 index 0d9b19a..340c4b5 100644
18 --- a/drivers/soc/mediatek/mtk-pmic-wrap.c
19 +++ b/drivers/soc/mediatek/mtk-pmic-wrap.c
20 @@ -376,9 +376,7 @@ struct pmic_wrapper {
21         struct device *dev;
22         void __iomem *base;
23         struct regmap *regmap;
24 -       int *regs;
25 -       enum pwrap_type type;
26 -       u32 arb_en_all;
27 +       const struct pmic_wrapper_type *master;
28         struct clk *clk_spi;
29         struct clk *clk_wrap;
30         struct reset_control *rstc;
31 @@ -389,22 +387,22 @@ struct pmic_wrapper {
32  
33  static inline int pwrap_is_mt8135(struct pmic_wrapper *wrp)
34  {
35 -       return wrp->type == PWRAP_MT8135;
36 +       return wrp->master->type == PWRAP_MT8135;
37  }
38  
39  static inline int pwrap_is_mt8173(struct pmic_wrapper *wrp)
40  {
41 -       return wrp->type == PWRAP_MT8173;
42 +       return wrp->master->type == PWRAP_MT8173;
43  }
44  
45  static u32 pwrap_readl(struct pmic_wrapper *wrp, enum pwrap_regs reg)
46  {
47 -       return readl(wrp->base + wrp->regs[reg]);
48 +       return readl(wrp->base + wrp->master->regs[reg]);
49  }
50  
51  static void pwrap_writel(struct pmic_wrapper *wrp, u32 val, enum pwrap_regs reg)
52  {
53 -       writel(val, wrp->base + wrp->regs[reg]);
54 +       writel(val, wrp->base + wrp->master->regs[reg]);
55  }
56  
57  static bool pwrap_is_fsm_idle(struct pmic_wrapper *wrp)
58 @@ -697,7 +695,7 @@ static int pwrap_init(struct pmic_wrapper *wrp)
59  
60         pwrap_writel(wrp, 1, PWRAP_WRAP_EN);
61  
62 -       pwrap_writel(wrp, wrp->arb_en_all, PWRAP_HIPRIO_ARB_EN);
63 +       pwrap_writel(wrp, wrp->master->arb_en_all, PWRAP_HIPRIO_ARB_EN);
64  
65         pwrap_writel(wrp, 1, PWRAP_WACS2_EN);
66  
67 @@ -742,7 +740,7 @@ static int pwrap_init(struct pmic_wrapper *wrp)
68         pwrap_writel(wrp, 0x1, PWRAP_CRC_EN);
69         pwrap_writel(wrp, 0x0, PWRAP_SIG_MODE);
70         pwrap_writel(wrp, PWRAP_DEW_CRC_VAL, PWRAP_SIG_ADR);
71 -       pwrap_writel(wrp, wrp->arb_en_all, PWRAP_HIPRIO_ARB_EN);
72 +       pwrap_writel(wrp, wrp->master->arb_en_all, PWRAP_HIPRIO_ARB_EN);
73  
74         if (pwrap_is_mt8135(wrp))
75                 pwrap_writel(wrp, 0x7, PWRAP_RRARB_EN);
76 @@ -836,7 +834,6 @@ static int pwrap_probe(struct platform_device *pdev)
77         struct device_node *np = pdev->dev.of_node;
78         const struct of_device_id *of_id =
79                 of_match_device(of_pwrap_match_tbl, &pdev->dev);
80 -       const struct pmic_wrapper_type *type;
81         struct resource *res;
82  
83         wrp = devm_kzalloc(&pdev->dev, sizeof(*wrp), GFP_KERNEL);
84 @@ -845,10 +842,7 @@ static int pwrap_probe(struct platform_device *pdev)
85  
86         platform_set_drvdata(pdev, wrp);
87  
88 -       type = of_id->data;
89 -       wrp->regs = type->regs;
90 -       wrp->type = type->type;
91 -       wrp->arb_en_all = type->arb_en_all;
92 +       wrp->master = of_id->data;
93         wrp->dev = &pdev->dev;
94  
95         res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pwrap");
96 -- 
97 1.7.10.4
98