aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeert Uytterhoeven <geert+renesas@glider.be>2015-02-27 12:38:02 -0500
committerLinus Walleij <linus.walleij@linaro.org>2015-03-09 13:10:56 -0400
commit05c5f265c6f72750d2a60f75ff3cfefe47379210 (patch)
treee5da0868abe619f969c6df7c78f53efc3d7a4041
parenteaef1279fa349db0cbec953e745d91db019a729e (diff)
pinctrl: sh-pfc: Do not overwrite bias configuration
After the last user of the in_pd/in_pu bias parameters of the _PCRH() macro was removed in commit 80da8e02d22caaef ("sh-pfc: r8a7740: Add bias (pull-up/down) pinconf support"), bias parameters are supposed to be configured using the generic pinctl mechanism, which calls the .set_bias() method. However, the PORTCR() macro still represents the control register as consisting of two 4-bit fields. Hence the bias configuration in the uppermost 2 bits is always overwritten with zeroes when a pin is configured for GPIO, disabling any previously configured bias. Use the variable config register macro instead, to represent the register as having 4 fields, and to make sure only the input/output control and function fields are touched. This affects R-Mobile APE6 (r8a73a4), R-Mobile A1 (r8a7740), SH-Mobile AP4 (sh7372), and SH-Mobile AG5 (sh73a0). Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
-rw-r--r--drivers/pinctrl/sh-pfc/sh_pfc.h25
1 files changed, 13 insertions, 12 deletions
diff --git a/drivers/pinctrl/sh-pfc/sh_pfc.h b/drivers/pinctrl/sh-pfc/sh_pfc.h
index c83728626906..ed5cf4192fa1 100644
--- a/drivers/pinctrl/sh-pfc/sh_pfc.h
+++ b/drivers/pinctrl/sh-pfc/sh_pfc.h
@@ -302,20 +302,21 @@ struct sh_pfc_soc_info {
302/* 302/*
303 * PORTnCR macro 303 * PORTnCR macro
304 */ 304 */
305#define _PCRH(in, in_pd, in_pu, out) \
306 0, (out), (in), 0, \
307 0, 0, 0, 0, \
308 0, 0, (in_pd), 0, \
309 0, 0, (in_pu), 0
310
311#define PORTCR(nr, reg) \ 305#define PORTCR(nr, reg) \
312 { \ 306 { \
313 PINMUX_CFG_REG("PORT" nr "CR", reg, 8, 4) { \ 307 PINMUX_CFG_REG_VAR("PORT" nr "CR", reg, 8, 2, 2, 1, 3) {\
314 _PCRH(PORT##nr##_IN, 0, 0, PORT##nr##_OUT), \ 308 /* PULMD[1:0], handled by .set_bias() */ \
315 PORT##nr##_FN0, PORT##nr##_FN1, \ 309 0, 0, 0, 0, \
316 PORT##nr##_FN2, PORT##nr##_FN3, \ 310 /* IE and OE */ \
317 PORT##nr##_FN4, PORT##nr##_FN5, \ 311 0, PORT##nr##_OUT, PORT##nr##_IN, 0, \
318 PORT##nr##_FN6, PORT##nr##_FN7 } \ 312 /* SEC, not supported */ \
313 0, 0, \
314 /* PTMD[2:0] */ \
315 PORT##nr##_FN0, PORT##nr##_FN1, \
316 PORT##nr##_FN2, PORT##nr##_FN3, \
317 PORT##nr##_FN4, PORT##nr##_FN5, \
318 PORT##nr##_FN6, PORT##nr##_FN7 \
319 } \
319 } 320 }
320 321
321#endif /* __SH_PFC_H */ 322#endif /* __SH_PFC_H */