aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQipeng Zha <qipeng.zha@intel.com>2015-11-30 06:20:16 -0500
committerLinus Walleij <linus.walleij@linaro.org>2015-12-10 17:01:42 -0500
commit99a735b3c287b70aa67952b1ff3d85cd924d85f9 (patch)
treea97312ad613639a846b832592daa695ffd77efaf
parent618a919b4c5150408c26f8b4527851f7065f841c (diff)
pinctrl: intel: fix offset calculation issue of register PAD_OWN
The calculation equation of PAD_OWN register offset is not correct for Broxton, verified this fix will get right offset for Broxton. Signed-off-by: Qi Zheng <qi.zheng@intel.com> Signed-off-by: Qipeng Zha <qipeng.zha@intel.com> Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
-rw-r--r--drivers/pinctrl/intel/pinctrl-intel.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/pinctrl/intel/pinctrl-intel.c b/drivers/pinctrl/intel/pinctrl-intel.c
index 06004d8fea21..26f6b6ffea5b 100644
--- a/drivers/pinctrl/intel/pinctrl-intel.c
+++ b/drivers/pinctrl/intel/pinctrl-intel.c
@@ -34,6 +34,7 @@
34#define PADOWN_BITS 4 34#define PADOWN_BITS 4
35#define PADOWN_SHIFT(p) ((p) % 8 * PADOWN_BITS) 35#define PADOWN_SHIFT(p) ((p) % 8 * PADOWN_BITS)
36#define PADOWN_MASK(p) (0xf << PADOWN_SHIFT(p)) 36#define PADOWN_MASK(p) (0xf << PADOWN_SHIFT(p))
37#define PADOWN_GPP(p) ((p) / 8)
37 38
38/* Offset from pad_regs */ 39/* Offset from pad_regs */
39#define PADCFG0 0x000 40#define PADCFG0 0x000
@@ -139,7 +140,7 @@ static void __iomem *intel_get_padcfg(struct intel_pinctrl *pctrl, unsigned pin,
139static bool intel_pad_owned_by_host(struct intel_pinctrl *pctrl, unsigned pin) 140static bool intel_pad_owned_by_host(struct intel_pinctrl *pctrl, unsigned pin)
140{ 141{
141 const struct intel_community *community; 142 const struct intel_community *community;
142 unsigned padno, gpp, gpp_offset, offset; 143 unsigned padno, gpp, offset, group;
143 void __iomem *padown; 144 void __iomem *padown;
144 145
145 community = intel_get_community(pctrl, pin); 146 community = intel_get_community(pctrl, pin);
@@ -149,9 +150,9 @@ static bool intel_pad_owned_by_host(struct intel_pinctrl *pctrl, unsigned pin)
149 return true; 150 return true;
150 151
151 padno = pin_to_padno(community, pin); 152 padno = pin_to_padno(community, pin);
152 gpp = padno / NPADS_IN_GPP; 153 group = padno / community->gpp_size;
153 gpp_offset = padno % NPADS_IN_GPP; 154 gpp = PADOWN_GPP(padno % community->gpp_size);
154 offset = community->padown_offset + gpp * 16 + (gpp_offset / 8) * 4; 155 offset = community->padown_offset + 0x10 * group + gpp * 4;
155 padown = community->regs + offset; 156 padown = community->regs + offset;
156 157
157 return !(readl(padown) & PADOWN_MASK(padno)); 158 return !(readl(padown) & PADOWN_MASK(padno));