sunxi: Simplify MMC pinmux selection

Only one board, Yones Toptech BD1078, actually uses a non-default MMC
pinmux. All other uses of these symbols select the default value or an
invalid value. To simplify things, remove support for the unused pinmux
options, and convert the remaining option to a Boolean.

This allows the pinmux to be chosen by the preprocessor, instead of
having the code parse a string at runtime (for a build-time option!).
Not only does this reduce code size, but it also allows this Kconfig
option to be used in a table-driven DM pinctrl driver.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
This commit is contained in:
Samuel Holland 2021-09-12 10:28:35 -05:00 committed by Andre Przywara
parent 21d314a661
commit dda9fa734f
7 changed files with 34 additions and 97 deletions

View File

@ -148,8 +148,6 @@ enum sunxi_gpio_number {
#define SUNXI_GPA_EMAC 2 #define SUNXI_GPA_EMAC 2
#define SUN6I_GPA_GMAC 2 #define SUN6I_GPA_GMAC 2
#define SUN7I_GPA_GMAC 5 #define SUN7I_GPA_GMAC 5
#define SUN6I_GPA_SDC2 5
#define SUN6I_GPA_SDC3 4
#define SUN8I_H3_GPA_UART0 2 #define SUN8I_H3_GPA_UART0 2
#define SUN4I_GPB_PWM 2 #define SUN4I_GPB_PWM 2
@ -173,12 +171,10 @@ enum sunxi_gpio_number {
#define SUN6I_GPC_SDC3 4 #define SUN6I_GPC_SDC3 4
#define SUN50I_GPC_SPI0 4 #define SUN50I_GPC_SPI0 4
#define SUN8I_GPD_SDC1 3
#define SUNXI_GPD_LCD0 2 #define SUNXI_GPD_LCD0 2
#define SUNXI_GPD_LVDS0 3 #define SUNXI_GPD_LVDS0 3
#define SUNXI_GPD_PWM 2 #define SUNXI_GPD_PWM 2
#define SUN5I_GPE_SDC2 3
#define SUN8I_GPE_TWI2 3 #define SUN8I_GPE_TWI2 3
#define SUN50I_GPE_TWI2 3 #define SUN50I_GPE_TWI2 3

View File

@ -677,24 +677,11 @@ config MMC3_CD_PIN
---help--- ---help---
See MMC0_CD_PIN help text. See MMC0_CD_PIN help text.
config MMC1_PINS config MMC1_PINS_PH
string "Pins for mmc1" bool "Pins for mmc1 are on Port H"
default "" depends on MACH_SUN4I || MACH_SUN7I || MACH_SUN8I_R40
---help--- ---help---
Set the pins used for mmc1, when applicable. This takes a string in the Select this option for boards where mmc1 uses the Port H pinmux.
format understood by sunxi_name_to_gpio_bank, e.g. PH for port H.
config MMC2_PINS
string "Pins for mmc2"
default ""
---help---
See MMC1_PINS help text.
config MMC3_PINS
string "Pins for mmc3"
default ""
---help---
See MMC1_PINS help text.
config MMC_SUNXI_SLOT_EXTRA config MMC_SUNXI_SLOT_EXTRA
int "mmc extra slot number" int "mmc extra slot number"

View File

@ -413,7 +413,6 @@ void board_nand_init(void)
static void mmc_pinmux_setup(int sdc) static void mmc_pinmux_setup(int sdc)
{ {
unsigned int pin; unsigned int pin;
__maybe_unused int pins;
switch (sdc) { switch (sdc) {
case 0: case 0:
@ -426,11 +425,9 @@ static void mmc_pinmux_setup(int sdc)
break; break;
case 1: case 1:
pins = sunxi_name_to_gpio_bank(CONFIG_MMC1_PINS);
#if defined(CONFIG_MACH_SUN4I) || defined(CONFIG_MACH_SUN7I) || \ #if defined(CONFIG_MACH_SUN4I) || defined(CONFIG_MACH_SUN7I) || \
defined(CONFIG_MACH_SUN8I_R40) defined(CONFIG_MACH_SUN8I_R40)
if (pins == SUNXI_GPIO_H) { if (IS_ENABLED(CONFIG_MMC1_PINS_PH)) {
/* SDC1: PH22-PH-27 */ /* SDC1: PH22-PH-27 */
for (pin = SUNXI_GPH(22); pin <= SUNXI_GPH(27); pin++) { for (pin = SUNXI_GPH(22); pin <= SUNXI_GPH(27); pin++) {
sunxi_gpio_set_cfgpin(pin, SUN4I_GPH_SDC1); sunxi_gpio_set_cfgpin(pin, SUN4I_GPH_SDC1);
@ -460,27 +457,16 @@ static void mmc_pinmux_setup(int sdc)
sunxi_gpio_set_drv(pin, 2); sunxi_gpio_set_drv(pin, 2);
} }
#elif defined(CONFIG_MACH_SUN8I) #elif defined(CONFIG_MACH_SUN8I)
if (pins == SUNXI_GPIO_D) {
/* SDC1: PD2-PD7 */
for (pin = SUNXI_GPD(2); pin <= SUNXI_GPD(7); pin++) {
sunxi_gpio_set_cfgpin(pin, SUN8I_GPD_SDC1);
sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
sunxi_gpio_set_drv(pin, 2);
}
} else {
/* SDC1: PG0-PG5 */ /* SDC1: PG0-PG5 */
for (pin = SUNXI_GPG(0); pin <= SUNXI_GPG(5); pin++) { for (pin = SUNXI_GPG(0); pin <= SUNXI_GPG(5); pin++) {
sunxi_gpio_set_cfgpin(pin, SUN8I_GPG_SDC1); sunxi_gpio_set_cfgpin(pin, SUN8I_GPG_SDC1);
sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP); sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
sunxi_gpio_set_drv(pin, 2); sunxi_gpio_set_drv(pin, 2);
} }
}
#endif #endif
break; break;
case 2: case 2:
pins = sunxi_name_to_gpio_bank(CONFIG_MMC2_PINS);
#if defined(CONFIG_MACH_SUN4I) || defined(CONFIG_MACH_SUN7I) #if defined(CONFIG_MACH_SUN4I) || defined(CONFIG_MACH_SUN7I)
/* SDC2: PC6-PC11 */ /* SDC2: PC6-PC11 */
for (pin = SUNXI_GPC(6); pin <= SUNXI_GPC(11); pin++) { for (pin = SUNXI_GPC(6); pin <= SUNXI_GPC(11); pin++) {
@ -489,30 +475,13 @@ static void mmc_pinmux_setup(int sdc)
sunxi_gpio_set_drv(pin, 2); sunxi_gpio_set_drv(pin, 2);
} }
#elif defined(CONFIG_MACH_SUN5I) #elif defined(CONFIG_MACH_SUN5I)
if (pins == SUNXI_GPIO_E) {
/* SDC2: PE4-PE9 */
for (pin = SUNXI_GPE(4); pin <= SUNXI_GPD(9); pin++) {
sunxi_gpio_set_cfgpin(pin, SUN5I_GPE_SDC2);
sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
sunxi_gpio_set_drv(pin, 2);
}
} else {
/* SDC2: PC6-PC15 */ /* SDC2: PC6-PC15 */
for (pin = SUNXI_GPC(6); pin <= SUNXI_GPC(15); pin++) { for (pin = SUNXI_GPC(6); pin <= SUNXI_GPC(15); pin++) {
sunxi_gpio_set_cfgpin(pin, SUNXI_GPC_SDC2); sunxi_gpio_set_cfgpin(pin, SUNXI_GPC_SDC2);
sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP); sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
sunxi_gpio_set_drv(pin, 2); sunxi_gpio_set_drv(pin, 2);
} }
}
#elif defined(CONFIG_MACH_SUN6I) #elif defined(CONFIG_MACH_SUN6I)
if (pins == SUNXI_GPIO_A) {
/* SDC2: PA9-PA14 */
for (pin = SUNXI_GPA(9); pin <= SUNXI_GPA(14); pin++) {
sunxi_gpio_set_cfgpin(pin, SUN6I_GPA_SDC2);
sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
sunxi_gpio_set_drv(pin, 2);
}
} else {
/* SDC2: PC6-PC15, PC24 */ /* SDC2: PC6-PC15, PC24 */
for (pin = SUNXI_GPC(6); pin <= SUNXI_GPC(15); pin++) { for (pin = SUNXI_GPC(6); pin <= SUNXI_GPC(15); pin++) {
sunxi_gpio_set_cfgpin(pin, SUNXI_GPC_SDC2); sunxi_gpio_set_cfgpin(pin, SUNXI_GPC_SDC2);
@ -523,7 +492,6 @@ static void mmc_pinmux_setup(int sdc)
sunxi_gpio_set_cfgpin(SUNXI_GPC(24), SUNXI_GPC_SDC2); sunxi_gpio_set_cfgpin(SUNXI_GPC(24), SUNXI_GPC_SDC2);
sunxi_gpio_set_pull(SUNXI_GPC(24), SUNXI_GPIO_PULL_UP); sunxi_gpio_set_pull(SUNXI_GPC(24), SUNXI_GPIO_PULL_UP);
sunxi_gpio_set_drv(SUNXI_GPC(24), 2); sunxi_gpio_set_drv(SUNXI_GPC(24), 2);
}
#elif defined(CONFIG_MACH_SUN8I_R40) #elif defined(CONFIG_MACH_SUN8I_R40)
/* SDC2: PC6-PC15, PC24 */ /* SDC2: PC6-PC15, PC24 */
for (pin = SUNXI_GPC(6); pin <= SUNXI_GPC(15); pin++) { for (pin = SUNXI_GPC(6); pin <= SUNXI_GPC(15); pin++) {
@ -579,8 +547,6 @@ static void mmc_pinmux_setup(int sdc)
break; break;
case 3: case 3:
pins = sunxi_name_to_gpio_bank(CONFIG_MMC3_PINS);
#if defined(CONFIG_MACH_SUN4I) || defined(CONFIG_MACH_SUN7I) || \ #if defined(CONFIG_MACH_SUN4I) || defined(CONFIG_MACH_SUN7I) || \
defined(CONFIG_MACH_SUN8I_R40) defined(CONFIG_MACH_SUN8I_R40)
/* SDC3: PI4-PI9 */ /* SDC3: PI4-PI9 */
@ -590,14 +556,6 @@ static void mmc_pinmux_setup(int sdc)
sunxi_gpio_set_drv(pin, 2); sunxi_gpio_set_drv(pin, 2);
} }
#elif defined(CONFIG_MACH_SUN6I) #elif defined(CONFIG_MACH_SUN6I)
if (pins == SUNXI_GPIO_A) {
/* SDC3: PA9-PA14 */
for (pin = SUNXI_GPA(9); pin <= SUNXI_GPA(14); pin++) {
sunxi_gpio_set_cfgpin(pin, SUN6I_GPA_SDC3);
sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
sunxi_gpio_set_drv(pin, 2);
}
} else {
/* SDC3: PC6-PC15, PC24 */ /* SDC3: PC6-PC15, PC24 */
for (pin = SUNXI_GPC(6); pin <= SUNXI_GPC(15); pin++) { for (pin = SUNXI_GPC(6); pin <= SUNXI_GPC(15); pin++) {
sunxi_gpio_set_cfgpin(pin, SUN6I_GPC_SDC3); sunxi_gpio_set_cfgpin(pin, SUN6I_GPC_SDC3);
@ -608,7 +566,6 @@ static void mmc_pinmux_setup(int sdc)
sunxi_gpio_set_cfgpin(SUNXI_GPC(24), SUN6I_GPC_SDC3); sunxi_gpio_set_cfgpin(SUNXI_GPC(24), SUN6I_GPC_SDC3);
sunxi_gpio_set_pull(SUNXI_GPC(24), SUNXI_GPIO_PULL_UP); sunxi_gpio_set_pull(SUNXI_GPC(24), SUNXI_GPIO_PULL_UP);
sunxi_gpio_set_drv(SUNXI_GPC(24), 2); sunxi_gpio_set_drv(SUNXI_GPC(24), 2);
}
#endif #endif
break; break;

View File

@ -6,7 +6,6 @@ CONFIG_MACH_SUN7I=y
CONFIG_DRAM_CLK=384 CONFIG_DRAM_CLK=384
CONFIG_MMC0_CD_PIN="PH1" CONFIG_MMC0_CD_PIN="PH1"
CONFIG_MMC3_CD_PIN="PH0" CONFIG_MMC3_CD_PIN="PH0"
CONFIG_MMC3_PINS="PH"
CONFIG_MMC_SUNXI_SLOT_EXTRA=3 CONFIG_MMC_SUNXI_SLOT_EXTRA=3
CONFIG_USB0_VBUS_PIN="PB9" CONFIG_USB0_VBUS_PIN="PB9"
CONFIG_USB0_VBUS_DET="PH5" CONFIG_USB0_VBUS_DET="PH5"

View File

@ -6,7 +6,6 @@ CONFIG_MACH_SUN6I=y
CONFIG_DRAM_CLK=432 CONFIG_DRAM_CLK=432
CONFIG_DRAM_ZQ=251 CONFIG_DRAM_ZQ=251
CONFIG_MMC0_CD_PIN="PA4" CONFIG_MMC0_CD_PIN="PA4"
CONFIG_MMC3_PINS="PC"
CONFIG_MMC_SUNXI_SLOT_EXTRA=3 CONFIG_MMC_SUNXI_SLOT_EXTRA=3
CONFIG_USB1_VBUS_PIN="" CONFIG_USB1_VBUS_PIN=""
CONFIG_USB2_VBUS_PIN="" CONFIG_USB2_VBUS_PIN=""

View File

@ -6,7 +6,7 @@ CONFIG_MACH_SUN7I=y
CONFIG_DRAM_CLK=408 CONFIG_DRAM_CLK=408
CONFIG_MMC0_CD_PIN="PH1" CONFIG_MMC0_CD_PIN="PH1"
CONFIG_MMC1_CD_PIN="PH2" CONFIG_MMC1_CD_PIN="PH2"
CONFIG_MMC1_PINS="PH" CONFIG_MMC1_PINS_PH=y
CONFIG_MMC_SUNXI_SLOT_EXTRA=1 CONFIG_MMC_SUNXI_SLOT_EXTRA=1
CONFIG_USB0_VBUS_PIN="PB9" CONFIG_USB0_VBUS_PIN="PB9"
CONFIG_USB0_VBUS_DET="AXP0-VBUS-DETECT" CONFIG_USB0_VBUS_DET="AXP0-VBUS-DETECT"

View File

@ -6,7 +6,6 @@ CONFIG_MACH_SUN8I_A33=y
CONFIG_DRAM_CLK=600 CONFIG_DRAM_CLK=600
CONFIG_DRAM_ZQ=15291 CONFIG_DRAM_ZQ=15291
CONFIG_MMC0_CD_PIN="PD14" CONFIG_MMC0_CD_PIN="PD14"
CONFIG_MMC2_PINS="PC"
CONFIG_MMC_SUNXI_SLOT_EXTRA=2 CONFIG_MMC_SUNXI_SLOT_EXTRA=2
CONFIG_USB0_ID_DET="PD10" CONFIG_USB0_ID_DET="PD10"
CONFIG_USB1_VBUS_PIN="PD12" CONFIG_USB1_VBUS_PIN="PD12"