diff options
author | Qipeng Zha <qipeng.zha@intel.com> | 2015-11-30 06:20:16 -0500 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2015-12-10 17:01:42 -0500 |
commit | 99a735b3c287b70aa67952b1ff3d85cd924d85f9 (patch) | |
tree | a97312ad613639a846b832592daa695ffd77efaf | |
parent | 618a919b4c5150408c26f8b4527851f7065f841c (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.c | 9 |
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, | |||
139 | static bool intel_pad_owned_by_host(struct intel_pinctrl *pctrl, unsigned pin) | 140 | static 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)); |