mirror of https://gitee.com/openkylin/linux.git
pinctrl: sh-pfc: Fixes for v4.21
- Miscellaneous fixes, - Build-time validation for pins/marks mismatches. -----BEGIN PGP SIGNATURE----- iHUEABYIAB0WIQQ9qaHoIs/1I4cXmEiKwlD9ZEnxcAUCXBqV8gAKCRCKwlD9ZEnx cKLkAQCoIfHax+jV/Kh/VqJmxC83R8fz38Sf4zefUYjP35KHgQD/dTQsNbxO0HcL K1AgfBWQL+wKzzA2nTfQDN2oOlOCtgE= =Psdq -----END PGP SIGNATURE----- Merge tag 'sh-pfc-for-v4.21-tag3' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers into devel pinctrl: sh-pfc: Fixes for v4.21 - Miscellaneous fixes, - Build-time validation for pins/marks mismatches.
This commit is contained in:
commit
642fb53d35
|
@ -1225,6 +1225,9 @@ static int rza1_parse_gpiochip(struct rza1_pinctrl *rza1_pctl,
|
|||
chip->base = -1;
|
||||
chip->label = devm_kasprintf(rza1_pctl->dev, GFP_KERNEL, "%pOFn",
|
||||
np);
|
||||
if (!chip->label)
|
||||
return -ENOMEM;
|
||||
|
||||
chip->ngpio = of_args.args[2];
|
||||
chip->of_node = np;
|
||||
chip->parent = rza1_pctl->dev;
|
||||
|
@ -1326,6 +1329,8 @@ static int rza1_pinctrl_register(struct rza1_pinctrl *rza1_pctl)
|
|||
pins[i].number = i;
|
||||
pins[i].name = devm_kasprintf(rza1_pctl->dev, GFP_KERNEL,
|
||||
"P%u-%u", port, pin);
|
||||
if (!pins[i].name)
|
||||
return -ENOMEM;
|
||||
|
||||
if (i % RZA1_PINS_PER_PORT == 0) {
|
||||
/*
|
||||
|
|
|
@ -221,7 +221,7 @@ static void sh_pfc_write_config_reg(struct sh_pfc *pfc,
|
|||
|
||||
dev_dbg(pfc->dev, "write_reg addr = %x, value = 0x%x, field = %u, "
|
||||
"r_width = %u, f_width = %u\n",
|
||||
crp->reg, value, field, crp->reg_width, crp->field_width);
|
||||
crp->reg, value, field, crp->reg_width, hweight32(mask));
|
||||
|
||||
mask = ~(mask << pos);
|
||||
value = value << pos;
|
||||
|
|
|
@ -1969,7 +1969,7 @@ static const unsigned int gether_gmii_pins[] = {
|
|||
*/
|
||||
185, 186, 187, 188, 189, 190, 191, 192, 174, 161, 204,
|
||||
171, 170, 169, 168, 167, 166, 173, 172, 176, 184, 183, 203,
|
||||
205, 163, 206, 207,
|
||||
205, 163, 206, 207, 158,
|
||||
};
|
||||
static const unsigned int gether_gmii_mux[] = {
|
||||
ET_ERXD0_MARK, ET_ERXD1_MARK, ET_ERXD2_MARK, ET_ERXD3_MARK,
|
||||
|
@ -2141,6 +2141,7 @@ static const unsigned int lcd0_data24_1_mux[] = {
|
|||
LCD0_D0_MARK, LCD0_D1_MARK, LCD0_D2_MARK, LCD0_D3_MARK,
|
||||
LCD0_D4_MARK, LCD0_D5_MARK, LCD0_D6_MARK, LCD0_D7_MARK,
|
||||
LCD0_D8_MARK, LCD0_D9_MARK, LCD0_D10_MARK, LCD0_D11_MARK,
|
||||
LCD0_D12_MARK, LCD0_D13_MARK, LCD0_D14_MARK, LCD0_D15_MARK,
|
||||
LCD0_D16_MARK, LCD0_D17_MARK, LCD0_D18_PORT163_MARK,
|
||||
LCD0_D19_PORT162_MARK, LCD0_D20_PORT161_MARK, LCD0_D21_PORT158_MARK,
|
||||
LCD0_D22_PORT160_MARK, LCD0_D23_PORT159_MARK,
|
||||
|
|
|
@ -3217,8 +3217,7 @@ static const unsigned int qspi_data4_b_pins[] = {
|
|||
RCAR_GP_PIN(6, 4),
|
||||
};
|
||||
static const unsigned int qspi_data4_b_mux[] = {
|
||||
SPCLK_B_MARK, MOSI_IO0_B_MARK, MISO_IO1_B_MARK,
|
||||
IO2_B_MARK, IO3_B_MARK, SSL_B_MARK,
|
||||
MOSI_IO0_B_MARK, MISO_IO1_B_MARK, IO2_B_MARK, IO3_B_MARK,
|
||||
};
|
||||
/* - SCIF0 ------------------------------------------------------------------ */
|
||||
static const unsigned int scif0_data_pins[] = {
|
||||
|
@ -4372,17 +4371,14 @@ static const unsigned int vin1_b_data18_pins[] = {
|
|||
};
|
||||
static const unsigned int vin1_b_data18_mux[] = {
|
||||
/* B */
|
||||
VI1_DATA0_B_MARK, VI1_DATA1_B_MARK,
|
||||
VI1_DATA2_B_MARK, VI1_DATA3_B_MARK,
|
||||
VI1_DATA4_B_MARK, VI1_DATA5_B_MARK,
|
||||
VI1_DATA6_B_MARK, VI1_DATA7_B_MARK,
|
||||
/* G */
|
||||
VI1_G0_B_MARK, VI1_G1_B_MARK,
|
||||
VI1_G2_B_MARK, VI1_G3_B_MARK,
|
||||
VI1_G4_B_MARK, VI1_G5_B_MARK,
|
||||
VI1_G6_B_MARK, VI1_G7_B_MARK,
|
||||
/* R */
|
||||
VI1_R0_B_MARK, VI1_R1_B_MARK,
|
||||
VI1_R2_B_MARK, VI1_R3_B_MARK,
|
||||
VI1_R4_B_MARK, VI1_R5_B_MARK,
|
||||
VI1_R6_B_MARK, VI1_R7_B_MARK,
|
||||
|
|
|
@ -5212,7 +5212,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
|||
FN_AVB_MDC, FN_SSI_SDATA6_B, 0, 0, }
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR9", 0xE6060044, 32,
|
||||
1, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3) {
|
||||
1, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3) {
|
||||
/* IP9_31 [1] */
|
||||
0, 0,
|
||||
/* IP9_30_28 [3] */
|
||||
|
|
|
@ -2421,7 +2421,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
|||
#define F_(x, y) x,
|
||||
#define FM(x) FN_##x,
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL0", 0xe6060500, 32,
|
||||
4, 4, 4, 4,
|
||||
4, 4, 4, 4, 4,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) {
|
||||
/* RESERVED 31, 30, 29, 28 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
|
|
@ -2821,7 +2821,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
|||
#define F_(x, y) x,
|
||||
#define FM(x) FN_##x,
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL0", 0xe6060500, 32,
|
||||
4, 4, 4, 4,
|
||||
4, 4, 4, 4, 4,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) {
|
||||
/* RESERVED 31, 30, 29, 28 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
|
|
@ -399,7 +399,7 @@ FM(IP12_31_28) IP12_31_28 FM(IP13_31_28) IP13_31_28 FM(IP14_31_28) IP14_31_28 FM
|
|||
#define MOD_SEL0_24 FM(SEL_HSCIF0_0) FM(SEL_HSCIF0_1)
|
||||
#define MOD_SEL0_23 FM(SEL_HSCIF1_0) FM(SEL_HSCIF1_1)
|
||||
#define MOD_SEL0_22 FM(SEL_HSCIF2_0) FM(SEL_HSCIF2_1)
|
||||
#define MOD_SEL0_21_20 FM(SEL_I2C1_0) FM(SEL_I2C1_1) FM(SEL_I2C1_2) FM(SEL_I2C1_3) FM(SEL_I2C1_4) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define MOD_SEL0_21_20 FM(SEL_I2C1_0) FM(SEL_I2C1_1) FM(SEL_I2C1_2) FM(SEL_I2C1_3)
|
||||
#define MOD_SEL0_19_18_17 FM(SEL_I2C2_0) FM(SEL_I2C2_1) FM(SEL_I2C2_2) FM(SEL_I2C2_3) FM(SEL_I2C2_4) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define MOD_SEL0_16 FM(SEL_NDFC_0) FM(SEL_NDFC_1)
|
||||
#define MOD_SEL0_15 FM(SEL_PWM0_0) FM(SEL_PWM0_1)
|
||||
|
@ -4914,6 +4914,17 @@ static const struct pinmux_bias_reg pinmux_bias_regs[] = {
|
|||
{ /* sentinel */ },
|
||||
};
|
||||
|
||||
static bool pin_has_pud(unsigned int pin)
|
||||
{
|
||||
/* Some pins are pull-up only */
|
||||
switch (pin) {
|
||||
case RCAR_GP_PIN(6, 9): /* USB30_OVC */
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static unsigned int r8a77990_pinmux_get_bias(struct sh_pfc *pfc,
|
||||
unsigned int pin)
|
||||
{
|
||||
|
@ -4926,7 +4937,7 @@ static unsigned int r8a77990_pinmux_get_bias(struct sh_pfc *pfc,
|
|||
|
||||
if (!(sh_pfc_read(pfc, reg->puen) & BIT(bit)))
|
||||
return PIN_CONFIG_BIAS_DISABLE;
|
||||
else if (sh_pfc_read(pfc, reg->pud) & BIT(bit))
|
||||
else if (!pin_has_pud(pin) || (sh_pfc_read(pfc, reg->pud) & BIT(bit)))
|
||||
return PIN_CONFIG_BIAS_PULL_UP;
|
||||
else
|
||||
return PIN_CONFIG_BIAS_PULL_DOWN;
|
||||
|
@ -4947,11 +4958,13 @@ static void r8a77990_pinmux_set_bias(struct sh_pfc *pfc, unsigned int pin,
|
|||
if (bias != PIN_CONFIG_BIAS_DISABLE)
|
||||
enable |= BIT(bit);
|
||||
|
||||
updown = sh_pfc_read(pfc, reg->pud) & ~BIT(bit);
|
||||
if (bias == PIN_CONFIG_BIAS_PULL_UP)
|
||||
updown |= BIT(bit);
|
||||
if (pin_has_pud(pin)) {
|
||||
updown = sh_pfc_read(pfc, reg->pud) & ~BIT(bit);
|
||||
if (bias == PIN_CONFIG_BIAS_PULL_UP)
|
||||
updown |= BIT(bit);
|
||||
|
||||
sh_pfc_write(pfc, reg->pud, updown);
|
||||
sh_pfc_write(pfc, reg->pud, updown);
|
||||
}
|
||||
sh_pfc_write(pfc, reg->puen, enable);
|
||||
}
|
||||
|
||||
|
@ -5004,6 +5017,7 @@ const struct sh_pfc_soc_info r8a77990_pinmux_info = {
|
|||
|
||||
.cfg_regs = pinmux_config_regs,
|
||||
.bias_regs = pinmux_bias_regs,
|
||||
.ioctrl_regs = pinmux_ioctrl_regs,
|
||||
|
||||
.pinmux_data = pinmux_data,
|
||||
.pinmux_data_size = ARRAY_SIZE(pinmux_data),
|
||||
|
|
|
@ -388,10 +388,10 @@ FM(IP12_31_28) IP12_31_28 \
|
|||
#define MOD_SEL0_27 FM(SEL_MSIOF3_0) FM(SEL_MSIOF3_1)
|
||||
#define MOD_SEL0_26 FM(SEL_HSCIF3_0) FM(SEL_HSCIF3_1)
|
||||
#define MOD_SEL0_25 FM(SEL_SCIF4_0) FM(SEL_SCIF4_1)
|
||||
#define MOD_SEL0_24_23 FM(SEL_PWM0_0) FM(SEL_PWM0_1) FM(SEL_PWM0_2) FM(SEL_PWM0_3)
|
||||
#define MOD_SEL0_22_21 FM(SEL_PWM1_0) FM(SEL_PWM1_1) FM(SEL_PWM1_2) FM(SEL_PWM1_3)
|
||||
#define MOD_SEL0_20_19 FM(SEL_PWM2_0) FM(SEL_PWM2_1) FM(SEL_PWM2_2) FM(SEL_PWM2_3)
|
||||
#define MOD_SEL0_18_17 FM(SEL_PWM3_0) FM(SEL_PWM3_1) FM(SEL_PWM3_2) FM(SEL_PWM3_3)
|
||||
#define MOD_SEL0_24_23 FM(SEL_PWM0_0) FM(SEL_PWM0_1) FM(SEL_PWM0_2) F_(0, 0)
|
||||
#define MOD_SEL0_22_21 FM(SEL_PWM1_0) FM(SEL_PWM1_1) FM(SEL_PWM1_2) F_(0, 0)
|
||||
#define MOD_SEL0_20_19 FM(SEL_PWM2_0) FM(SEL_PWM2_1) FM(SEL_PWM2_2) F_(0, 0)
|
||||
#define MOD_SEL0_18_17 FM(SEL_PWM3_0) FM(SEL_PWM3_1) FM(SEL_PWM3_2) F_(0, 0)
|
||||
#define MOD_SEL0_15 FM(SEL_IRQ_0_0) FM(SEL_IRQ_0_1)
|
||||
#define MOD_SEL0_14 FM(SEL_IRQ_1_0) FM(SEL_IRQ_1_1)
|
||||
#define MOD_SEL0_13 FM(SEL_IRQ_2_0) FM(SEL_IRQ_2_1)
|
||||
|
|
|
@ -1713,6 +1713,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
|||
},
|
||||
|
||||
{ PINMUX_CFG_REG("PFCR3", 0xfffe38a8, 16, 4) {
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
PF12MD_000, PF12MD_001, 0, PF12MD_011,
|
||||
PF12MD_100, PF12MD_101, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 }
|
||||
|
@ -1756,8 +1759,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
|||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
PF1MD_000, PF1MD_001, PF1MD_010, PF1MD_011,
|
||||
PF1MD_100, PF1MD_101, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0
|
||||
}
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
PF0MD_000, PF0MD_001, PF0MD_010, PF0MD_011,
|
||||
PF0MD_100, PF0MD_101, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 }
|
||||
},
|
||||
|
||||
{ PINMUX_CFG_REG("PFIOR0", 0xfffe38b2, 16, 1) {
|
||||
|
|
|
@ -2116,7 +2116,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
|||
},
|
||||
|
||||
{ PINMUX_CFG_REG("PCIOR0", 0xfffe3852, 16, 1) {
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
PC8_IN, PC8_OUT,
|
||||
PC7_IN, PC7_OUT,
|
||||
PC6_IN, PC6_OUT,
|
||||
|
|
|
@ -3073,6 +3073,7 @@ static const unsigned int tpu4_to2_mux[] = {
|
|||
};
|
||||
static const unsigned int tpu4_to3_pins[] = {
|
||||
/* TO */
|
||||
PIN_NUMBER(6, 26),
|
||||
};
|
||||
static const unsigned int tpu4_to3_mux[] = {
|
||||
TPU4TO3_MARK,
|
||||
|
|
|
@ -2210,31 +2210,31 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
|||
/* IP10_22 [1] */
|
||||
FN_CAN_CLK_A, FN_RX4_D,
|
||||
/* IP10_21_19 [3] */
|
||||
FN_AUDIO_CLKOUT, FN_TX1_E, FN_HRTS0_C, FN_FSE_B,
|
||||
FN_LCD_M_DISP_B, 0, 0, 0,
|
||||
FN_AUDIO_CLKOUT, FN_TX1_E, 0, FN_HRTS0_C, FN_FSE_B,
|
||||
FN_LCD_M_DISP_B, 0, 0,
|
||||
/* IP10_18_16 [3] */
|
||||
FN_AUDIO_CLKC, FN_SCK1_E, FN_HCTS0_C, FN_FRB_B,
|
||||
FN_LCD_VEPWC_B, 0, 0, 0,
|
||||
FN_AUDIO_CLKC, FN_SCK1_E, 0, FN_HCTS0_C, FN_FRB_B,
|
||||
FN_LCD_VEPWC_B, 0, 0,
|
||||
/* IP10_15 [1] */
|
||||
FN_AUDIO_CLKB_A, FN_LCD_CLK_B,
|
||||
/* IP10_14_12 [3] */
|
||||
FN_AUDIO_CLKA_A, FN_VI1_CLK_B, FN_SCK1_D, FN_IECLK_B,
|
||||
FN_LCD_FLM_B, 0, 0, 0,
|
||||
/* IP10_11_9 [3] */
|
||||
FN_SSI_SDATA3, FN_VI1_7_B, FN_HTX0_C, FN_FWE_B,
|
||||
FN_LCD_CL2_B, 0, 0, 0,
|
||||
FN_SSI_SDATA3, FN_VI1_7_B, 0, FN_HTX0_C, FN_FWE_B,
|
||||
FN_LCD_CL2_B, 0, 0,
|
||||
/* IP10_8_6 [3] */
|
||||
FN_SSI_SDATA2, FN_VI1_6_B, FN_HRX0_C, FN_FRE_B,
|
||||
FN_LCD_CL1_B, 0, 0, 0,
|
||||
FN_SSI_SDATA2, FN_VI1_6_B, 0, FN_HRX0_C, FN_FRE_B,
|
||||
FN_LCD_CL1_B, 0, 0,
|
||||
/* IP10_5_3 [3] */
|
||||
FN_SSI_WS23, FN_VI1_5_B, FN_TX1_D, FN_HSCK0_C, FN_FALE_B,
|
||||
FN_LCD_DON_B, 0, 0, 0,
|
||||
FN_LCD_DON_B, 0, 0,
|
||||
/* IP10_2_0 [3] */
|
||||
FN_SSI_SCK23, FN_VI1_4_B, FN_RX1_D, FN_FCLE_B,
|
||||
FN_LCD_DATA15_B, 0, 0, 0 }
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR11", 0xFFFC0048, 32,
|
||||
3, 1, 2, 2, 2, 3, 3, 1, 2, 3, 3, 1, 1, 1, 1) {
|
||||
3, 1, 2, 3, 2, 2, 3, 3, 1, 2, 3, 3, 1, 1, 1, 1) {
|
||||
/* IP11_31_29 [3] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP11_28 [1] */
|
||||
|
|
|
@ -41,7 +41,8 @@ struct sh_pfc_pin {
|
|||
.name = #alias, \
|
||||
.pins = n##_pins, \
|
||||
.mux = n##_mux, \
|
||||
.nr_pins = ARRAY_SIZE(n##_pins), \
|
||||
.nr_pins = ARRAY_SIZE(n##_pins) + \
|
||||
BUILD_BUG_ON_ZERO(sizeof(n##_pins) != sizeof(n##_mux)), \
|
||||
}
|
||||
#define SH_PFC_PIN_GROUP(n) SH_PFC_PIN_GROUP_ALIAS(n, n)
|
||||
|
||||
|
@ -141,8 +142,7 @@ struct pinmux_cfg_reg {
|
|||
*/
|
||||
#define PINMUX_CFG_REG_VAR(name, r, r_width, var_fw0, var_fwn...) \
|
||||
.reg = r, .reg_width = r_width, \
|
||||
.var_field_width = (const u8 [r_width]) \
|
||||
{ var_fw0, var_fwn, 0 }, \
|
||||
.var_field_width = (const u8 []) { var_fw0, var_fwn, 0 }, \
|
||||
.enum_ids = (const u16 [])
|
||||
|
||||
struct pinmux_drive_reg_field {
|
||||
|
|
Loading…
Reference in New Issue