Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'renesas-pinctrl-for-v5.17-tag1' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers into devel

pinctrl: renesas: Updates for v5.17

- Add generic support for output impedance,
- Add drive strength and output impedance support for the RZ/G2L SoC,
- Miscellaneous fixes and improvements.

+223 -110
+3
Documentation/devicetree/bindings/pinctrl/pincfg-node.yaml
··· 114 114 description: enable output on a pin without actively driving it 115 115 (such as enabling an output buffer) 116 116 117 + output-impedance-ohms: 118 + description: set the output impedance of a pin to at most X ohms 119 + 117 120 output-low: 118 121 type: boolean 119 122 description: set the pin to output mode with low level
+2
Documentation/devicetree/bindings/pinctrl/renesas,rzg2l-pinctrl.yaml
··· 73 73 pins: true 74 74 drive-strength: 75 75 enum: [ 2, 4, 8, 12 ] 76 + output-impedance-ohms: 77 + enum: [ 33, 50, 66, 100 ] 76 78 power-source: 77 79 enum: [ 1800, 2500, 3300 ] 78 80 slew-rate: true
+2
drivers/pinctrl/pinconf-generic.c
··· 46 46 PCONFDUMP(PIN_CONFIG_MODE_LOW_POWER, "pin low power", "mode", true), 47 47 PCONFDUMP(PIN_CONFIG_OUTPUT_ENABLE, "output enabled", NULL, false), 48 48 PCONFDUMP(PIN_CONFIG_OUTPUT, "pin output", "level", true), 49 + PCONFDUMP(PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS, "output impedance", "ohms", true), 49 50 PCONFDUMP(PIN_CONFIG_POWER_SOURCE, "pin power source", "selector", true), 50 51 PCONFDUMP(PIN_CONFIG_SLEEP_HARDWARE_STATE, "sleep hardware state", NULL, false), 51 52 PCONFDUMP(PIN_CONFIG_SLEW_RATE, "slew rate", NULL, true), ··· 180 179 { "output-disable", PIN_CONFIG_OUTPUT_ENABLE, 0 }, 181 180 { "output-enable", PIN_CONFIG_OUTPUT_ENABLE, 1 }, 182 181 { "output-high", PIN_CONFIG_OUTPUT, 1, }, 182 + { "output-impedance-ohms", PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS, 0 }, 183 183 { "output-low", PIN_CONFIG_OUTPUT, 0, }, 184 184 { "power-source", PIN_CONFIG_POWER_SOURCE, 0 }, 185 185 { "sleep-hardware-state", PIN_CONFIG_SLEEP_HARDWARE_STATE, 0 },
+3 -3
drivers/pinctrl/renesas/pinctrl-rza1.c
··· 757 757 } 758 758 759 759 /** 760 - * rza1_gpio_disable_free() - reset a pin 760 + * rza1_gpio_free() - reset a pin 761 761 * 762 - * Surprisingly, disable_free a gpio, is equivalent to request it. 762 + * Surprisingly, freeing a gpio is equivalent to requesting it. 763 763 * Reset pin to port mode, with input buffer disabled. This overwrites all 764 764 * port direction settings applied with set_direction 765 765 * ··· 875 875 } 876 876 877 877 /** 878 - * rza1_parse_pmx_function() - parse a pin mux sub-node 878 + * rza1_parse_pinmux_node() - parse a pin mux sub-node 879 879 * 880 880 * @rza1_pctl: RZ/A1 pin controller device 881 881 * @np: of pmx sub-node
+209 -99
drivers/pinctrl/renesas/pinctrl-rzg2l.c
··· 35 35 #define MUX_FUNC(pinconf) (((pinconf) & MUX_FUNC_MASK) >> MUX_FUNC_OFFS) 36 36 37 37 /* PIN capabilities */ 38 - #define PIN_CFG_IOLH BIT(0) 39 - #define PIN_CFG_SR BIT(1) 40 - #define PIN_CFG_IEN BIT(2) 41 - #define PIN_CFG_PUPD BIT(3) 42 - #define PIN_CFG_IOLH_SD0 BIT(4) 43 - #define PIN_CFG_IOLH_SD1 BIT(5) 44 - #define PIN_CFG_IOLH_QSPI BIT(6) 45 - #define PIN_CFG_IOLH_ETH0 BIT(7) 46 - #define PIN_CFG_IOLH_ETH1 BIT(8) 47 - #define PIN_CFG_FILONOFF BIT(9) 48 - #define PIN_CFG_FILNUM BIT(10) 49 - #define PIN_CFG_FILCLKSEL BIT(11) 38 + #define PIN_CFG_IOLH_A BIT(0) 39 + #define PIN_CFG_IOLH_B BIT(1) 40 + #define PIN_CFG_SR BIT(2) 41 + #define PIN_CFG_IEN BIT(3) 42 + #define PIN_CFG_PUPD BIT(4) 43 + #define PIN_CFG_IO_VMC_SD0 BIT(5) 44 + #define PIN_CFG_IO_VMC_SD1 BIT(6) 45 + #define PIN_CFG_IO_VMC_QSPI BIT(7) 46 + #define PIN_CFG_IO_VMC_ETH0 BIT(8) 47 + #define PIN_CFG_IO_VMC_ETH1 BIT(9) 48 + #define PIN_CFG_FILONOFF BIT(10) 49 + #define PIN_CFG_FILNUM BIT(11) 50 + #define PIN_CFG_FILCLKSEL BIT(12) 50 51 51 - #define RZG2L_MPXED_PIN_FUNCS (PIN_CFG_IOLH | \ 52 + #define RZG2L_MPXED_PIN_FUNCS (PIN_CFG_IOLH_A | \ 52 53 PIN_CFG_SR | \ 53 54 PIN_CFG_PUPD | \ 54 55 PIN_CFG_FILONOFF | \ ··· 78 77 #define RZG2L_SINGLE_PIN BIT(31) 79 78 #define RZG2L_SINGLE_PIN_PACK(p, b, f) (RZG2L_SINGLE_PIN | \ 80 79 ((p) << 24) | ((b) << 20) | (f)) 81 - #define RZG2L_SINGLE_PIN_GET_PORT(x) (((x) & GENMASK(30, 24)) >> 24) 80 + #define RZG2L_SINGLE_PIN_GET_PORT_OFFSET(x) (((x) & GENMASK(30, 24)) >> 24) 82 81 #define RZG2L_SINGLE_PIN_GET_BIT(x) (((x) & GENMASK(22, 20)) >> 20) 83 82 #define RZG2L_SINGLE_PIN_GET_CFGS(x) ((x) & GENMASK(19, 0)) 84 83 ··· 87 86 #define PMC(n) (0x0200 + 0x10 + (n)) 88 87 #define PFC(n) (0x0400 + 0x40 + (n) * 4) 89 88 #define PIN(n) (0x0800 + 0x10 + (n)) 89 + #define IOLH(n) (0x1000 + (n) * 8) 90 90 #define IEN(n) (0x1800 + (n) * 8) 91 91 #define PWPR (0x3014) 92 92 #define SD_CH(n) (0x3000 + (n) * 4) ··· 103 101 #define PVDD_MASK 0x01 104 102 #define PFC_MASK 0x07 105 103 #define IEN_MASK 0x01 104 + #define IOLH_MASK 0x03 106 105 107 106 #define PM_INPUT 0x1 108 107 #define PM_OUTPUT 0x2 109 108 110 109 #define RZG2L_PIN_ID_TO_PORT(id) ((id) / RZG2L_PINS_PER_PORT) 110 + #define RZG2L_PIN_ID_TO_PORT_OFFSET(id) (RZG2L_PIN_ID_TO_PORT(id) + 0x10) 111 111 #define RZG2L_PIN_ID_TO_PIN(id) ((id) % RZG2L_PINS_PER_PORT) 112 112 113 113 struct rzg2l_dedicated_configs { ··· 140 136 141 137 spinlock_t lock; 142 138 }; 139 + 140 + static const unsigned int iolh_groupa_mA[] = { 2, 4, 8, 12 }; 141 + static const unsigned int iolh_groupb_oi[] = { 100, 66, 50, 33 }; 143 142 144 143 static void rzg2l_pinctrl_set_pfc_mode(struct rzg2l_pinctrl *pctrl, 145 144 u8 port, u8 pin, u8 func) ··· 431 424 return ret; 432 425 } 433 426 427 + static int rzg2l_validate_gpio_pin(struct rzg2l_pinctrl *pctrl, 428 + u32 cfg, u32 port, u8 bit) 429 + { 430 + u8 pincount = RZG2L_GPIO_PORT_GET_PINCNT(cfg); 431 + u32 port_index = RZG2L_GPIO_PORT_GET_INDEX(cfg); 432 + u32 data; 433 + 434 + if (bit >= pincount || port >= pctrl->data->n_port_pins) 435 + return -EINVAL; 436 + 437 + data = pctrl->data->port_pin_configs[port]; 438 + if (port_index != RZG2L_GPIO_PORT_GET_INDEX(data)) 439 + return -EINVAL; 440 + 441 + return 0; 442 + } 443 + 444 + static u32 rzg2l_read_pin_config(struct rzg2l_pinctrl *pctrl, u32 offset, 445 + u8 bit, u32 mask) 446 + { 447 + void __iomem *addr = pctrl->base + offset; 448 + 449 + /* handle _L/_H for 32-bit register read/write */ 450 + if (bit >= 4) { 451 + bit -= 4; 452 + addr += 4; 453 + } 454 + 455 + return (readl(addr) >> (bit * 8)) & mask; 456 + } 457 + 458 + static void rzg2l_rmw_pin_config(struct rzg2l_pinctrl *pctrl, u32 offset, 459 + u8 bit, u32 mask, u32 val) 460 + { 461 + void __iomem *addr = pctrl->base + offset; 462 + unsigned long flags; 463 + u32 reg; 464 + 465 + /* handle _L/_H for 32-bit register read/write */ 466 + if (bit >= 4) { 467 + bit -= 4; 468 + addr += 4; 469 + } 470 + 471 + spin_lock_irqsave(&pctrl->lock, flags); 472 + reg = readl(addr) & ~(mask << (bit * 8)); 473 + writel(reg | (val << (bit * 8)), addr); 474 + spin_unlock_irqrestore(&pctrl->lock, flags); 475 + } 476 + 434 477 static int rzg2l_pinctrl_pinconf_get(struct pinctrl_dev *pctldev, 435 478 unsigned int _pin, 436 479 unsigned long *config) ··· 492 435 unsigned int arg = 0; 493 436 unsigned long flags; 494 437 void __iomem *addr; 495 - u32 port = 0, reg; 438 + u32 port_offset; 496 439 u32 cfg = 0; 497 440 u8 bit = 0; 498 441 ··· 500 443 return -EINVAL; 501 444 502 445 if (*pin_data & RZG2L_SINGLE_PIN) { 503 - port = RZG2L_SINGLE_PIN_GET_PORT(*pin_data); 446 + port_offset = RZG2L_SINGLE_PIN_GET_PORT_OFFSET(*pin_data); 504 447 cfg = RZG2L_SINGLE_PIN_GET_CFGS(*pin_data); 505 448 bit = RZG2L_SINGLE_PIN_GET_BIT(*pin_data); 449 + } else { 450 + cfg = RZG2L_GPIO_PORT_GET_CFGS(*pin_data); 451 + port_offset = RZG2L_PIN_ID_TO_PORT_OFFSET(_pin); 452 + bit = RZG2L_PIN_ID_TO_PIN(_pin); 453 + 454 + if (rzg2l_validate_gpio_pin(pctrl, *pin_data, RZG2L_PIN_ID_TO_PORT(_pin), bit)) 455 + return -EINVAL; 506 456 } 507 457 508 458 switch (param) { 509 459 case PIN_CONFIG_INPUT_ENABLE: 510 460 if (!(cfg & PIN_CFG_IEN)) 511 461 return -EINVAL; 512 - spin_lock_irqsave(&pctrl->lock, flags); 513 - /* handle _L/_H for 32-bit register read/write */ 514 - addr = pctrl->base + IEN(port); 515 - if (bit >= 4) { 516 - bit -= 4; 517 - addr += 4; 518 - } 519 - 520 - reg = readl(addr) & (IEN_MASK << (bit * 8)); 521 - arg = (reg >> (bit * 8)) & 0x1; 522 - spin_unlock_irqrestore(&pctrl->lock, flags); 462 + arg = rzg2l_read_pin_config(pctrl, IEN(port_offset), bit, IEN_MASK); 523 463 break; 524 464 525 465 case PIN_CONFIG_POWER_SOURCE: { 526 466 u32 pwr_reg = 0x0; 527 467 528 - if (cfg & PIN_CFG_IOLH_SD0) 468 + if (cfg & PIN_CFG_IO_VMC_SD0) 529 469 pwr_reg = SD_CH(0); 530 - else if (cfg & PIN_CFG_IOLH_SD1) 470 + else if (cfg & PIN_CFG_IO_VMC_SD1) 531 471 pwr_reg = SD_CH(1); 532 - else if (cfg & PIN_CFG_IOLH_QSPI) 472 + else if (cfg & PIN_CFG_IO_VMC_QSPI) 533 473 pwr_reg = QSPI; 534 474 else 535 475 return -EINVAL; ··· 535 481 addr = pctrl->base + pwr_reg; 536 482 arg = (readl(addr) & PVDD_MASK) ? 1800 : 3300; 537 483 spin_unlock_irqrestore(&pctrl->lock, flags); 484 + break; 485 + } 486 + 487 + case PIN_CONFIG_DRIVE_STRENGTH: { 488 + unsigned int index; 489 + 490 + if (!(cfg & PIN_CFG_IOLH_A)) 491 + return -EINVAL; 492 + 493 + index = rzg2l_read_pin_config(pctrl, IOLH(port_offset), bit, IOLH_MASK); 494 + arg = iolh_groupa_mA[index]; 495 + break; 496 + } 497 + 498 + case PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS: { 499 + unsigned int index; 500 + 501 + if (!(cfg & PIN_CFG_IOLH_B)) 502 + return -EINVAL; 503 + 504 + index = rzg2l_read_pin_config(pctrl, IOLH(port_offset), bit, IOLH_MASK); 505 + arg = iolh_groupb_oi[index]; 538 506 break; 539 507 } 540 508 ··· 580 504 enum pin_config_param param; 581 505 unsigned long flags; 582 506 void __iomem *addr; 583 - u32 port = 0, reg; 507 + u32 port_offset; 584 508 unsigned int i; 585 509 u32 cfg = 0; 586 510 u8 bit = 0; ··· 589 513 return -EINVAL; 590 514 591 515 if (*pin_data & RZG2L_SINGLE_PIN) { 592 - port = RZG2L_SINGLE_PIN_GET_PORT(*pin_data); 516 + port_offset = RZG2L_SINGLE_PIN_GET_PORT_OFFSET(*pin_data); 593 517 cfg = RZG2L_SINGLE_PIN_GET_CFGS(*pin_data); 594 518 bit = RZG2L_SINGLE_PIN_GET_BIT(*pin_data); 519 + } else { 520 + cfg = RZG2L_GPIO_PORT_GET_CFGS(*pin_data); 521 + port_offset = RZG2L_PIN_ID_TO_PORT_OFFSET(_pin); 522 + bit = RZG2L_PIN_ID_TO_PIN(_pin); 523 + 524 + if (rzg2l_validate_gpio_pin(pctrl, *pin_data, RZG2L_PIN_ID_TO_PORT(_pin), bit)) 525 + return -EINVAL; 595 526 } 596 527 597 528 for (i = 0; i < num_configs; i++) { ··· 611 528 if (!(cfg & PIN_CFG_IEN)) 612 529 return -EINVAL; 613 530 614 - /* handle _L/_H for 32-bit register read/write */ 615 - addr = pctrl->base + IEN(port); 616 - if (bit >= 4) { 617 - bit -= 4; 618 - addr += 4; 619 - } 620 - 621 - spin_lock_irqsave(&pctrl->lock, flags); 622 - reg = readl(addr) & ~(IEN_MASK << (bit * 8)); 623 - writel(reg | (arg << (bit * 8)), addr); 624 - spin_unlock_irqrestore(&pctrl->lock, flags); 531 + rzg2l_rmw_pin_config(pctrl, IEN(port_offset), bit, IEN_MASK, !!arg); 625 532 break; 626 533 } 627 534 ··· 622 549 if (mV != 1800 && mV != 3300) 623 550 return -EINVAL; 624 551 625 - if (cfg & PIN_CFG_IOLH_SD0) 552 + if (cfg & PIN_CFG_IO_VMC_SD0) 626 553 pwr_reg = SD_CH(0); 627 - else if (cfg & PIN_CFG_IOLH_SD1) 554 + else if (cfg & PIN_CFG_IO_VMC_SD1) 628 555 pwr_reg = SD_CH(1); 629 - else if (cfg & PIN_CFG_IOLH_QSPI) 556 + else if (cfg & PIN_CFG_IO_VMC_QSPI) 630 557 pwr_reg = QSPI; 631 558 else 632 559 return -EINVAL; ··· 637 564 spin_unlock_irqrestore(&pctrl->lock, flags); 638 565 break; 639 566 } 567 + 568 + case PIN_CONFIG_DRIVE_STRENGTH: { 569 + unsigned int arg = pinconf_to_config_argument(_configs[i]); 570 + unsigned int index; 571 + 572 + if (!(cfg & PIN_CFG_IOLH_A)) 573 + return -EINVAL; 574 + 575 + for (index = 0; index < ARRAY_SIZE(iolh_groupa_mA); index++) { 576 + if (arg == iolh_groupa_mA[index]) 577 + break; 578 + } 579 + if (index >= ARRAY_SIZE(iolh_groupa_mA)) 580 + return -EINVAL; 581 + 582 + rzg2l_rmw_pin_config(pctrl, IOLH(port_offset), bit, IOLH_MASK, index); 583 + break; 584 + } 585 + 586 + case PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS: { 587 + unsigned int arg = pinconf_to_config_argument(_configs[i]); 588 + unsigned int index; 589 + 590 + if (!(cfg & PIN_CFG_IOLH_B)) 591 + return -EINVAL; 592 + 593 + for (index = 0; index < ARRAY_SIZE(iolh_groupb_oi); index++) { 594 + if (arg == iolh_groupb_oi[index]) 595 + break; 596 + } 597 + if (index >= ARRAY_SIZE(iolh_groupb_oi)) 598 + return -EINVAL; 599 + 600 + rzg2l_rmw_pin_config(pctrl, IOLH(port_offset), bit, IOLH_MASK, index); 601 + break; 602 + } 603 + 640 604 default: 641 605 return -EOPNOTSUPP; 642 606 } ··· 965 855 RZG2L_GPIO_PORT_PACK(3, 0x21, RZG2L_MPXED_PIN_FUNCS), 966 856 RZG2L_GPIO_PORT_PACK(2, 0x22, RZG2L_MPXED_PIN_FUNCS), 967 857 RZG2L_GPIO_PORT_PACK(2, 0x23, RZG2L_MPXED_PIN_FUNCS), 968 - RZG2L_GPIO_PORT_PACK(3, 0x24, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IOLH_ETH0)), 969 - RZG2L_GPIO_PORT_PACK(2, 0x25, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IOLH_ETH0)), 970 - RZG2L_GPIO_PORT_PACK(2, 0x26, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IOLH_ETH0)), 971 - RZG2L_GPIO_PORT_PACK(2, 0x27, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IOLH_ETH0)), 972 - RZG2L_GPIO_PORT_PACK(2, 0x28, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IOLH_ETH0)), 973 - RZG2L_GPIO_PORT_PACK(2, 0x29, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IOLH_ETH0)), 974 - RZG2L_GPIO_PORT_PACK(2, 0x2a, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IOLH_ETH0)), 975 - RZG2L_GPIO_PORT_PACK(2, 0x2b, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IOLH_ETH0)), 976 - RZG2L_GPIO_PORT_PACK(2, 0x2c, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IOLH_ETH0)), 977 - RZG2L_GPIO_PORT_PACK(2, 0x2d, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IOLH_ETH1)), 978 - RZG2L_GPIO_PORT_PACK(2, 0x2e, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IOLH_ETH1)), 979 - RZG2L_GPIO_PORT_PACK(2, 0x2f, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IOLH_ETH1)), 980 - RZG2L_GPIO_PORT_PACK(2, 0x30, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IOLH_ETH1)), 981 - RZG2L_GPIO_PORT_PACK(2, 0x31, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IOLH_ETH1)), 982 - RZG2L_GPIO_PORT_PACK(2, 0x32, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IOLH_ETH1)), 983 - RZG2L_GPIO_PORT_PACK(2, 0x33, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IOLH_ETH1)), 984 - RZG2L_GPIO_PORT_PACK(2, 0x34, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IOLH_ETH1)), 985 - RZG2L_GPIO_PORT_PACK(3, 0x35, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IOLH_ETH1)), 858 + RZG2L_GPIO_PORT_PACK(3, 0x24, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH0)), 859 + RZG2L_GPIO_PORT_PACK(2, 0x25, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH0)), 860 + RZG2L_GPIO_PORT_PACK(2, 0x26, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH0)), 861 + RZG2L_GPIO_PORT_PACK(2, 0x27, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH0)), 862 + RZG2L_GPIO_PORT_PACK(2, 0x28, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH0)), 863 + RZG2L_GPIO_PORT_PACK(2, 0x29, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH0)), 864 + RZG2L_GPIO_PORT_PACK(2, 0x2a, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH0)), 865 + RZG2L_GPIO_PORT_PACK(2, 0x2b, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH0)), 866 + RZG2L_GPIO_PORT_PACK(2, 0x2c, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH0)), 867 + RZG2L_GPIO_PORT_PACK(2, 0x2d, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH1)), 868 + RZG2L_GPIO_PORT_PACK(2, 0x2e, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH1)), 869 + RZG2L_GPIO_PORT_PACK(2, 0x2f, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH1)), 870 + RZG2L_GPIO_PORT_PACK(2, 0x30, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH1)), 871 + RZG2L_GPIO_PORT_PACK(2, 0x31, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH1)), 872 + RZG2L_GPIO_PORT_PACK(2, 0x32, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH1)), 873 + RZG2L_GPIO_PORT_PACK(2, 0x33, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH1)), 874 + RZG2L_GPIO_PORT_PACK(2, 0x34, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH1)), 875 + RZG2L_GPIO_PORT_PACK(3, 0x35, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH1)), 986 876 RZG2L_GPIO_PORT_PACK(2, 0x36, RZG2L_MPXED_PIN_FUNCS), 987 877 RZG2L_GPIO_PORT_PACK(3, 0x37, RZG2L_MPXED_PIN_FUNCS), 988 878 RZG2L_GPIO_PORT_PACK(3, 0x38, RZG2L_MPXED_PIN_FUNCS), ··· 1000 890 { "NMI", RZG2L_SINGLE_PIN_PACK(0x1, 0, 1001 891 (PIN_CFG_FILONOFF | PIN_CFG_FILNUM | PIN_CFG_FILCLKSEL)) }, 1002 892 { "TMS/SWDIO", RZG2L_SINGLE_PIN_PACK(0x2, 0, 1003 - (PIN_CFG_SR | PIN_CFG_IOLH | PIN_CFG_IEN)) }, 893 + (PIN_CFG_SR | PIN_CFG_IOLH_A | PIN_CFG_IEN)) }, 1004 894 { "TDO", RZG2L_SINGLE_PIN_PACK(0x3, 0, 1005 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IEN)) }, 895 + (PIN_CFG_IOLH_A | PIN_CFG_SR | PIN_CFG_IEN)) }, 1006 896 { "AUDIO_CLK1", RZG2L_SINGLE_PIN_PACK(0x4, 0, PIN_CFG_IEN) }, 1007 897 { "AUDIO_CLK2", RZG2L_SINGLE_PIN_PACK(0x4, 1, PIN_CFG_IEN) }, 1008 898 { "SD0_CLK", RZG2L_SINGLE_PIN_PACK(0x6, 0, 1009 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IOLH_SD0)) }, 899 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_SD0)) }, 1010 900 { "SD0_CMD", RZG2L_SINGLE_PIN_PACK(0x6, 1, 1011 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IOLH_SD0)) }, 901 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) }, 1012 902 { "SD0_RST#", RZG2L_SINGLE_PIN_PACK(0x6, 2, 1013 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IOLH_SD0)) }, 903 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_SD0)) }, 1014 904 { "SD0_DATA0", RZG2L_SINGLE_PIN_PACK(0x7, 0, 1015 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IOLH_SD0)) }, 905 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) }, 1016 906 { "SD0_DATA1", RZG2L_SINGLE_PIN_PACK(0x7, 1, 1017 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IOLH_SD0)) }, 907 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) }, 1018 908 { "SD0_DATA2", RZG2L_SINGLE_PIN_PACK(0x7, 2, 1019 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IOLH_SD0)) }, 909 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) }, 1020 910 { "SD0_DATA3", RZG2L_SINGLE_PIN_PACK(0x7, 3, 1021 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IOLH_SD0)) }, 911 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) }, 1022 912 { "SD0_DATA4", RZG2L_SINGLE_PIN_PACK(0x7, 4, 1023 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IOLH_SD0)) }, 913 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) }, 1024 914 { "SD0_DATA5", RZG2L_SINGLE_PIN_PACK(0x7, 5, 1025 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IOLH_SD0)) }, 915 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) }, 1026 916 { "SD0_DATA6", RZG2L_SINGLE_PIN_PACK(0x7, 6, 1027 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IOLH_SD0)) }, 917 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) }, 1028 918 { "SD0_DATA7", RZG2L_SINGLE_PIN_PACK(0x7, 7, 1029 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IOLH_SD0)) }, 919 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) }, 1030 920 { "SD1_CLK", RZG2L_SINGLE_PIN_PACK(0x8, 0, 1031 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IOLH_SD1))}, 921 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_SD1)) }, 1032 922 { "SD1_CMD", RZG2L_SINGLE_PIN_PACK(0x8, 1, 1033 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IOLH_SD1)) }, 923 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD1)) }, 1034 924 { "SD1_DATA0", RZG2L_SINGLE_PIN_PACK(0x9, 0, 1035 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IOLH_SD1)) }, 925 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD1)) }, 1036 926 { "SD1_DATA1", RZG2L_SINGLE_PIN_PACK(0x9, 1, 1037 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IOLH_SD1)) }, 927 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD1)) }, 1038 928 { "SD1_DATA2", RZG2L_SINGLE_PIN_PACK(0x9, 2, 1039 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IOLH_SD1)) }, 929 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD1)) }, 1040 930 { "SD1_DATA3", RZG2L_SINGLE_PIN_PACK(0x9, 3, 1041 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IOLH_SD1)) }, 931 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD1)) }, 1042 932 { "QSPI0_SPCLK", RZG2L_SINGLE_PIN_PACK(0xa, 0, 1043 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IOLH_QSPI)) }, 933 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) }, 1044 934 { "QSPI0_IO0", RZG2L_SINGLE_PIN_PACK(0xa, 1, 1045 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IOLH_QSPI)) }, 935 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) }, 1046 936 { "QSPI0_IO1", RZG2L_SINGLE_PIN_PACK(0xa, 2, 1047 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IOLH_QSPI)) }, 937 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) }, 1048 938 { "QSPI0_IO2", RZG2L_SINGLE_PIN_PACK(0xa, 3, 1049 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IOLH_QSPI)) }, 939 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) }, 1050 940 { "QSPI0_IO3", RZG2L_SINGLE_PIN_PACK(0xa, 4, 1051 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IOLH_QSPI)) }, 941 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) }, 1052 942 { "QSPI0_SSL", RZG2L_SINGLE_PIN_PACK(0xa, 5, 1053 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IOLH_QSPI)) }, 943 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) }, 1054 944 { "QSPI1_SPCLK", RZG2L_SINGLE_PIN_PACK(0xb, 0, 1055 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IOLH_QSPI)) }, 945 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) }, 1056 946 { "QSPI1_IO0", RZG2L_SINGLE_PIN_PACK(0xb, 1, 1057 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IOLH_QSPI)) }, 947 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) }, 1058 948 { "QSPI1_IO1", RZG2L_SINGLE_PIN_PACK(0xb, 2, 1059 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IOLH_QSPI)) }, 949 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) }, 1060 950 { "QSPI1_IO2", RZG2L_SINGLE_PIN_PACK(0xb, 3, 1061 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IOLH_QSPI)) }, 951 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) }, 1062 952 { "QSPI1_IO3", RZG2L_SINGLE_PIN_PACK(0xb, 4, 1063 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IOLH_QSPI)) }, 953 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) }, 1064 954 { "QSPI1_SSL", RZG2L_SINGLE_PIN_PACK(0xb, 5, 1065 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IOLH_QSPI)) }, 955 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) }, 1066 956 { "QSPI_RESET#", RZG2L_SINGLE_PIN_PACK(0xc, 0, 1067 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IOLH_QSPI)) }, 957 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) }, 1068 958 { "QSPI_WP#", RZG2L_SINGLE_PIN_PACK(0xc, 1, 1069 - (PIN_CFG_IOLH | PIN_CFG_SR | PIN_CFG_IOLH_QSPI)) }, 1070 - { "QSPI_INT#", RZG2L_SINGLE_PIN_PACK(0xc, 2, (PIN_CFG_SR | PIN_CFG_IOLH_QSPI)) }, 1071 - { "WDTOVF_PERROUT#", RZG2L_SINGLE_PIN_PACK(0xd, 0, (PIN_CFG_IOLH | PIN_CFG_SR)) }, 959 + (PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) }, 960 + { "QSPI_INT#", RZG2L_SINGLE_PIN_PACK(0xc, 2, (PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) }, 961 + { "WDTOVF_PERROUT#", RZG2L_SINGLE_PIN_PACK(0xd, 0, (PIN_CFG_IOLH_A | PIN_CFG_SR)) }, 1072 962 { "RIIC0_SDA", RZG2L_SINGLE_PIN_PACK(0xe, 0, PIN_CFG_IEN) }, 1073 963 { "RIIC0_SCL", RZG2L_SINGLE_PIN_PACK(0xe, 1, PIN_CFG_IEN) }, 1074 964 { "RIIC1_SDA", RZG2L_SINGLE_PIN_PACK(0xe, 2, PIN_CFG_IEN) },
+1 -8
drivers/pinctrl/renesas/pinctrl.c
··· 504 504 static int sh_pfc_pinconf_get_drive_strength(struct sh_pfc *pfc, 505 505 unsigned int pin) 506 506 { 507 - unsigned long flags; 508 507 unsigned int offset; 509 508 unsigned int size; 510 509 u32 reg; ··· 513 514 if (!reg) 514 515 return -EINVAL; 515 516 516 - spin_lock_irqsave(&pfc->lock, flags); 517 - val = sh_pfc_read(pfc, reg); 518 - spin_unlock_irqrestore(&pfc->lock, flags); 519 - 520 - val = (val >> offset) & GENMASK(size - 1, 0); 517 + val = (sh_pfc_read(pfc, reg) >> offset) & GENMASK(size - 1, 0); 521 518 522 519 /* Convert the value to mA based on a full drive strength value of 24mA. 523 520 * We can make the full value configurable later if needed. ··· 643 648 if (WARN(bit < 0, "invalid pin %#x", _pin)) 644 649 return bit; 645 650 646 - spin_lock_irqsave(&pfc->lock, flags); 647 651 val = sh_pfc_read(pfc, pocctrl); 648 - spin_unlock_irqrestore(&pfc->lock, flags); 649 652 650 653 lower_voltage = (pin->configs & SH_PFC_PIN_VOLTAGE_25_33) ? 651 654 2500 : 1800;
+3
include/linux/pinctrl/pinconf-generic.h
··· 91 91 * configuration (eg. the currently selected mux function) drive values on 92 92 * the line. Use argument 1 to enable output mode, argument 0 to disable 93 93 * it. 94 + * @PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS: this will configure the output impedance 95 + * of the pin with the value passed as argument. The argument is in ohms. 94 96 * @PIN_CONFIG_PERSIST_STATE: retain pin state across sleep or controller reset 95 97 * @PIN_CONFIG_POWER_SOURCE: if the pin can select between different power 96 98 * supplies, the argument to this parameter (on a custom format) tells ··· 131 129 PIN_CONFIG_MODE_PWM, 132 130 PIN_CONFIG_OUTPUT, 133 131 PIN_CONFIG_OUTPUT_ENABLE, 132 + PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS, 134 133 PIN_CONFIG_PERSIST_STATE, 135 134 PIN_CONFIG_POWER_SOURCE, 136 135 PIN_CONFIG_SKEW_DELAY,