diff --git a/arch/arm/mach-sunxi/spl_pinmux.c b/arch/arm/mach-sunxi/spl_pinmux.c
index 45cc2cfe2b1..18f8cd93b6a 100644
--- a/arch/arm/mach-sunxi/spl_pinmux.c
+++ b/arch/arm/mach-sunxi/spl_pinmux.c
@@ -17,95 +17,105 @@
 #include <asm/u-boot.h>
 #include <sunxi_gpio.h>
 
+static void i2c0_init_board(void)
+{
+	if (IS_ENABLED(CONFIG_MACH_SUN4I) || IS_ENABLED(CONFIG_MACH_SUN5I) ||
+	    IS_ENABLED(CONFIG_MACH_SUN7I) || IS_ENABLED(CONFIG_MACH_SUN8I_R40)) {
+		sunxi_gpio_set_cfgpin(SUNXI_GPB(0), SUN4I_GPB_TWI0);
+		sunxi_gpio_set_cfgpin(SUNXI_GPB(1), SUN4I_GPB_TWI0);
+		clock_twi_onoff(0, 1);
+	} else if (IS_ENABLED(CONFIG_MACH_SUN6I)) {
+		sunxi_gpio_set_cfgpin(SUNXI_GPH(14), SUN6I_GPH_TWI0);
+		sunxi_gpio_set_cfgpin(SUNXI_GPH(15), SUN6I_GPH_TWI0);
+		clock_twi_onoff(0, 1);
+	} else if (IS_ENABLED(CONFIG_MACH_SUN8I_V3S)) {
+		sunxi_gpio_set_cfgpin(SUNXI_GPB(6), SUN8I_V3S_GPB_TWI0);
+		sunxi_gpio_set_cfgpin(SUNXI_GPB(7), SUN8I_V3S_GPB_TWI0);
+		clock_twi_onoff(0, 1);
+	} else if (IS_ENABLED(CONFIG_MACH_SUN8I)) {
+		sunxi_gpio_set_cfgpin(SUNXI_GPH(2), SUN8I_GPH_TWI0);
+		sunxi_gpio_set_cfgpin(SUNXI_GPH(3), SUN8I_GPH_TWI0);
+		clock_twi_onoff(0, 1);
+	} else if (IS_ENABLED(CONFIG_MACH_SUN50I)) {
+		sunxi_gpio_set_cfgpin(SUNXI_GPH(0), SUN50I_GPH_TWI0);
+		sunxi_gpio_set_cfgpin(SUNXI_GPH(1), SUN50I_GPH_TWI0);
+		clock_twi_onoff(0, 1);
+	}
+}
+
+static void i2c1_init_board(void)
+{
+	if (IS_ENABLED(CONFIG_MACH_SUN4I) || IS_ENABLED(CONFIG_MACH_SUN7I) ||
+	    IS_ENABLED(CONFIG_MACH_SUN8I_R40)) {
+		sunxi_gpio_set_cfgpin(SUNXI_GPB(18), SUN4I_GPB_TWI1);
+		sunxi_gpio_set_cfgpin(SUNXI_GPB(19), SUN4I_GPB_TWI1);
+		clock_twi_onoff(1, 1);
+	} else if (IS_ENABLED(CONFIG_MACH_SUN5I)) {
+		sunxi_gpio_set_cfgpin(SUNXI_GPB(15), SUN5I_GPB_TWI1);
+		sunxi_gpio_set_cfgpin(SUNXI_GPB(16), SUN5I_GPB_TWI1);
+		clock_twi_onoff(1, 1);
+	} else if (IS_ENABLED(CONFIG_MACH_SUN6I)) {
+		sunxi_gpio_set_cfgpin(SUNXI_GPH(16), SUN6I_GPH_TWI1);
+		sunxi_gpio_set_cfgpin(SUNXI_GPH(17), SUN6I_GPH_TWI1);
+		clock_twi_onoff(1, 1);
+	} else if (IS_ENABLED(CONFIG_MACH_SUN8I)) {
+		sunxi_gpio_set_cfgpin(SUNXI_GPH(4), SUN8I_GPH_TWI1);
+		sunxi_gpio_set_cfgpin(SUNXI_GPH(5), SUN8I_GPH_TWI1);
+		clock_twi_onoff(1, 1);
+	} else if (IS_ENABLED(CONFIG_MACH_SUN50I)) {
+		sunxi_gpio_set_cfgpin(SUNXI_GPH(2), SUN50I_GPH_TWI1);
+		sunxi_gpio_set_cfgpin(SUNXI_GPH(3), SUN50I_GPH_TWI1);
+		clock_twi_onoff(1, 1);
+	}
+}
+
+static void i2cr_init_board(void)
+{
+	if (IS_ENABLED(CONFIG_MACH_SUN50I)) {
+		clock_twi_onoff(5, 1);
+		sunxi_gpio_set_cfgpin(SUNXI_GPL(8), SUN50I_GPL_R_TWI);
+		sunxi_gpio_set_cfgpin(SUNXI_GPL(9), SUN50I_GPL_R_TWI);
+	} else if (IS_ENABLED(CONFIG_MACH_SUN50I_H616)) {
+		clock_twi_onoff(5, 1);
+		sunxi_gpio_set_cfgpin(SUNXI_GPL(0), SUN50I_H616_GPL_R_TWI);
+		sunxi_gpio_set_cfgpin(SUNXI_GPL(1), SUN50I_H616_GPL_R_TWI);
+	} else {
+		clock_twi_onoff(5, 1);
+		sunxi_gpio_set_cfgpin(SUNXI_GPL(0), SUN8I_H3_GPL_R_TWI);
+		sunxi_gpio_set_cfgpin(SUNXI_GPL(1), SUN8I_H3_GPL_R_TWI);
+	}
+}
+
 void i2c_init_board(void)
 {
-#ifdef CONFIG_I2C0_ENABLE
-#if defined(CONFIG_MACH_SUN4I) || \
-    defined(CONFIG_MACH_SUN5I) || \
-    defined(CONFIG_MACH_SUN7I) || \
-    defined(CONFIG_MACH_SUN8I_R40)
-	sunxi_gpio_set_cfgpin(SUNXI_GPB(0), SUN4I_GPB_TWI0);
-	sunxi_gpio_set_cfgpin(SUNXI_GPB(1), SUN4I_GPB_TWI0);
-	clock_twi_onoff(0, 1);
-#elif defined(CONFIG_MACH_SUN6I)
-	sunxi_gpio_set_cfgpin(SUNXI_GPH(14), SUN6I_GPH_TWI0);
-	sunxi_gpio_set_cfgpin(SUNXI_GPH(15), SUN6I_GPH_TWI0);
-	clock_twi_onoff(0, 1);
-#elif defined(CONFIG_MACH_SUN8I_V3S)
-	sunxi_gpio_set_cfgpin(SUNXI_GPB(6), SUN8I_V3S_GPB_TWI0);
-	sunxi_gpio_set_cfgpin(SUNXI_GPB(7), SUN8I_V3S_GPB_TWI0);
-	clock_twi_onoff(0, 1);
-#elif defined(CONFIG_MACH_SUN8I)
-	sunxi_gpio_set_cfgpin(SUNXI_GPH(2), SUN8I_GPH_TWI0);
-	sunxi_gpio_set_cfgpin(SUNXI_GPH(3), SUN8I_GPH_TWI0);
-	clock_twi_onoff(0, 1);
-#elif defined(CONFIG_MACH_SUN50I)
-	sunxi_gpio_set_cfgpin(SUNXI_GPH(0), SUN50I_GPH_TWI0);
-	sunxi_gpio_set_cfgpin(SUNXI_GPH(1), SUN50I_GPH_TWI0);
-	clock_twi_onoff(0, 1);
-#endif
-#endif /* CONFIG_I2C0_ENABLE */
+	if (IS_ENABLED(CONFIG_I2C0_ENABLE))
+		i2c0_init_board();
 
-#ifdef CONFIG_I2C1_ENABLE
-#if defined(CONFIG_MACH_SUN4I) || \
-    defined(CONFIG_MACH_SUN7I) || \
-    defined(CONFIG_MACH_SUN8I_R40)
-	sunxi_gpio_set_cfgpin(SUNXI_GPB(18), SUN4I_GPB_TWI1);
-	sunxi_gpio_set_cfgpin(SUNXI_GPB(19), SUN4I_GPB_TWI1);
-	clock_twi_onoff(1, 1);
-#elif defined(CONFIG_MACH_SUN5I)
-	sunxi_gpio_set_cfgpin(SUNXI_GPB(15), SUN5I_GPB_TWI1);
-	sunxi_gpio_set_cfgpin(SUNXI_GPB(16), SUN5I_GPB_TWI1);
-	clock_twi_onoff(1, 1);
-#elif defined(CONFIG_MACH_SUN6I)
-	sunxi_gpio_set_cfgpin(SUNXI_GPH(16), SUN6I_GPH_TWI1);
-	sunxi_gpio_set_cfgpin(SUNXI_GPH(17), SUN6I_GPH_TWI1);
-	clock_twi_onoff(1, 1);
-#elif defined(CONFIG_MACH_SUN8I)
-	sunxi_gpio_set_cfgpin(SUNXI_GPH(4), SUN8I_GPH_TWI1);
-	sunxi_gpio_set_cfgpin(SUNXI_GPH(5), SUN8I_GPH_TWI1);
-	clock_twi_onoff(1, 1);
-#elif defined(CONFIG_MACH_SUN50I)
-	sunxi_gpio_set_cfgpin(SUNXI_GPH(2), SUN50I_GPH_TWI1);
-	sunxi_gpio_set_cfgpin(SUNXI_GPH(3), SUN50I_GPH_TWI1);
-	clock_twi_onoff(1, 1);
-#endif
-#endif /* CONFIG_I2C1_ENABLE */
+	if (IS_ENABLED(CONFIG_I2C1_ENABLE))
+		i2c1_init_board();
 
-#ifdef CONFIG_R_I2C_ENABLE
-#ifdef CONFIG_MACH_SUN50I
-	clock_twi_onoff(5, 1);
-	sunxi_gpio_set_cfgpin(SUNXI_GPL(8), SUN50I_GPL_R_TWI);
-	sunxi_gpio_set_cfgpin(SUNXI_GPL(9), SUN50I_GPL_R_TWI);
-#elif defined(CONFIG_MACH_SUN50I_H616)
-	clock_twi_onoff(5, 1);
-	sunxi_gpio_set_cfgpin(SUNXI_GPL(0), SUN50I_H616_GPL_R_TWI);
-	sunxi_gpio_set_cfgpin(SUNXI_GPL(1), SUN50I_H616_GPL_R_TWI);
-#else
-	clock_twi_onoff(5, 1);
-	sunxi_gpio_set_cfgpin(SUNXI_GPL(0), SUN8I_H3_GPL_R_TWI);
-	sunxi_gpio_set_cfgpin(SUNXI_GPL(1), SUN8I_H3_GPL_R_TWI);
-#endif
-#endif /* CONFIG_R_I2C_ENABLE */
+	if (IS_ENABLED(CONFIG_R_I2C_ENABLE))
+		i2cr_init_board();
 }
 
 #if defined(CONFIG_NAND_SUNXI)
-static void nand_pinmux_setup(void)
+void nand_pinmux_setup(void)
 {
 	unsigned int pin;
 
 	for (pin = SUNXI_GPC(0); pin <= SUNXI_GPC(19); pin++)
 		sunxi_gpio_set_cfgpin(pin, SUNXI_GPC_NAND);
 
-#if defined CONFIG_MACH_SUN4I || defined CONFIG_MACH_SUN7I
-	for (pin = SUNXI_GPC(20); pin <= SUNXI_GPC(22); pin++)
-		sunxi_gpio_set_cfgpin(pin, SUNXI_GPC_NAND);
-#endif
-	/* sun4i / sun7i do have a PC23, but it is not used for nand,
-	 * only sun7i has a PC24 */
-#ifdef CONFIG_MACH_SUN7I
-	sunxi_gpio_set_cfgpin(SUNXI_GPC(24), SUNXI_GPC_NAND);
-#endif
+	if (IS_ENABLED(CONFIG_MACH_SUN4I) || IS_ENABLED(CONFIG_MACH_SUN7I)) {
+		for (pin = SUNXI_GPC(20); pin <= SUNXI_GPC(22); pin++)
+			sunxi_gpio_set_cfgpin(pin, SUNXI_GPC_NAND);
+	}
+	/*
+	 * sun4i / sun7i do have a PC23, but it is not used for NAND.
+	 * Only sun7i has a PC24.
+	 */
+	if (IS_ENABLED(CONFIG_MACH_SUN7I))
+		sunxi_gpio_set_cfgpin(SUNXI_GPC(24), SUNXI_GPC_NAND);
 }
 
 static void nand_clock_setup(void)
@@ -114,10 +124,12 @@ static void nand_clock_setup(void)
 		(struct sunxi_ccm_reg *)SUNXI_CCM_BASE;
 
 	setbits_le32(&ccm->ahb_gate0, (CLK_GATE_OPEN << AHB_GATE_OFFSET_NAND0));
+
 #if defined CONFIG_MACH_SUN6I || defined CONFIG_MACH_SUN8I || \
-    defined CONFIG_MACH_SUN9I || defined CONFIG_MACH_SUN50I
+	defined CONFIG_MACH_SUN9I || defined CONFIG_MACH_SUN50I
 	setbits_le32(&ccm->ahb_reset0_cfg, (1 << AHB_GATE_OFFSET_NAND0));
 #endif
+
 	setbits_le32(&ccm->nand0_clk_cfg, CCM_NAND_CTRL_ENABLE | AHB_DIV_1);
 }
 
@@ -131,174 +143,149 @@ void board_nand_init(void)
 #ifdef CONFIG_MMC
 static void mmc_pinmux_setup(int sdc)
 {
-	unsigned int pin;
+	unsigned int pin, first_pin, last_pin, pin_mux;
+	unsigned int skip_pin = ~0, extra_pin = ~0;
 
 	switch (sdc) {
 	case 0:
 		/* SDC0: PF0-PF5 */
-		for (pin = SUNXI_GPF(0); pin <= SUNXI_GPF(5); pin++) {
-			sunxi_gpio_set_cfgpin(pin, SUNXI_GPF_SDC0);
-			sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
-			sunxi_gpio_set_drv(pin, 2);
-		}
+		first_pin = SUNXI_GPF(0);
+		last_pin = SUNXI_GPF(5);
+		pin_mux = SUNXI_GPF_SDC0;
 		break;
-
 	case 1:
-#if defined(CONFIG_MACH_SUN4I) || defined(CONFIG_MACH_SUN7I) || \
-    defined(CONFIG_MACH_SUN8I_R40)
-		if (IS_ENABLED(CONFIG_MMC1_PINS_PH)) {
-			/* SDC1: PH22-PH-27 */
-			for (pin = SUNXI_GPH(22); pin <= SUNXI_GPH(27); pin++) {
-				sunxi_gpio_set_cfgpin(pin, SUN4I_GPH_SDC1);
-				sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
-				sunxi_gpio_set_drv(pin, 2);
+		if (IS_ENABLED(CONFIG_MACH_SUN4I) ||
+		    IS_ENABLED(CONFIG_MACH_SUN7I) ||
+		    IS_ENABLED(CONFIG_MACH_SUN8I_R40)) {
+			if (IS_ENABLED(CONFIG_MMC1_PINS_PH)) {
+				/* SDC1: PH22-PH-27 */
+				first_pin = SUNXI_GPH(22);
+				last_pin = SUNXI_GPH(27);
+				pin_mux = SUN4I_GPH_SDC1;
+			} else {
+				/* SDC1: PG0-PG5 */
+				first_pin = SUNXI_GPG(0);
+				last_pin = SUNXI_GPG(5);
+				pin_mux = SUN4I_GPG_SDC1;
 			}
-		} else {
+		} else if (IS_ENABLED(CONFIG_MACH_SUN5I)) {
+			/* SDC1: PG3-PG8 */
+			first_pin = SUNXI_GPG(3);
+			last_pin = SUNXI_GPG(8);
+			pin_mux = SUN4I_GPG_SDC1;
+		} else if (IS_ENABLED(CONFIG_MACH_SUN6I)) {
 			/* SDC1: PG0-PG5 */
-			for (pin = SUNXI_GPG(0); pin <= SUNXI_GPG(5); pin++) {
-				sunxi_gpio_set_cfgpin(pin, SUN4I_GPG_SDC1);
-				sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
-				sunxi_gpio_set_drv(pin, 2);
-			}
-		}
-#elif defined(CONFIG_MACH_SUN5I)
-		/* SDC1: PG3-PG8 */
-		for (pin = SUNXI_GPG(3); pin <= SUNXI_GPG(8); pin++) {
-			sunxi_gpio_set_cfgpin(pin, SUN5I_GPG_SDC1);
-			sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
-			sunxi_gpio_set_drv(pin, 2);
-		}
-#elif defined(CONFIG_MACH_SUN6I)
-		/* SDC1: PG0-PG5 */
-		for (pin = SUNXI_GPG(0); pin <= SUNXI_GPG(5); pin++) {
-			sunxi_gpio_set_cfgpin(pin, SUN6I_GPG_SDC1);
-			sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
-			sunxi_gpio_set_drv(pin, 2);
-		}
-#elif defined(CONFIG_MACH_SUN8I)
-		/* SDC1: PG0-PG5 */
-		for (pin = SUNXI_GPG(0); pin <= SUNXI_GPG(5); pin++) {
-			sunxi_gpio_set_cfgpin(pin, SUN8I_GPG_SDC1);
-			sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
-			sunxi_gpio_set_drv(pin, 2);
+			first_pin = SUNXI_GPG(0);
+			last_pin = SUNXI_GPG(5);
+			pin_mux = SUN6I_GPG_SDC1;
+		} else if (IS_ENABLED(CONFIG_MACH_SUN8I)) {
+			/* SDC1: PG0-PG5 */
+			first_pin = SUNXI_GPG(0);
+			last_pin = SUNXI_GPG(5);
+			pin_mux = SUN8I_GPG_SDC1;
 		}
-#endif
 		break;
-
 	case 2:
-#if defined(CONFIG_MACH_SUN4I) || defined(CONFIG_MACH_SUN7I)
-		/* SDC2: PC6-PC11 */
-		for (pin = SUNXI_GPC(6); pin <= SUNXI_GPC(11); pin++) {
-			sunxi_gpio_set_cfgpin(pin, SUNXI_GPC_SDC2);
-			sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
-			sunxi_gpio_set_drv(pin, 2);
-		}
-#elif defined(CONFIG_MACH_SUN5I)
-		/* SDC2: PC6-PC15 */
-		for (pin = SUNXI_GPC(6); pin <= SUNXI_GPC(15); pin++) {
-			sunxi_gpio_set_cfgpin(pin, SUNXI_GPC_SDC2);
-			sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
-			sunxi_gpio_set_drv(pin, 2);
-		}
-#elif defined(CONFIG_MACH_SUN6I)
-		/* SDC2: PC6-PC15, PC24 */
-		for (pin = SUNXI_GPC(6); pin <= SUNXI_GPC(15); pin++) {
-			sunxi_gpio_set_cfgpin(pin, SUNXI_GPC_SDC2);
-			sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
-			sunxi_gpio_set_drv(pin, 2);
-		}
+		if (IS_ENABLED(CONFIG_MACH_SUN4I) ||
+		    IS_ENABLED(CONFIG_MACH_SUN7I)) {
+			/* SDC2: PC6-PC11 */
+			first_pin = SUNXI_GPG(6);
+			last_pin = SUNXI_GPG(11);
+			pin_mux = SUNXI_GPC_SDC2;
+		} else if (IS_ENABLED(CONFIG_MACH_SUN5I)) {
+			/* SDC2: PC6-PC15 */
+			first_pin = SUNXI_GPG(6);
+			last_pin = SUNXI_GPG(15);
+			pin_mux = SUNXI_GPC_SDC2;
+		} else if (IS_ENABLED(CONFIG_MACH_SUN6I)) {
+			/* SDC2: PC6-PC15, PC24 */
+			first_pin = SUNXI_GPG(6);
+			last_pin = SUNXI_GPG(15);
+			extra_pin = SUNXI_GPC(24);
+			pin_mux = SUNXI_GPC_SDC2;
+		} else if (IS_ENABLED(CONFIG_MACH_SUN8I_R40)) {
+			/* SDC2: PC6-PC15, PC24 */
+			first_pin = SUNXI_GPC(6);
+			last_pin = SUNXI_GPC(15);
+			extra_pin = SUNXI_GPC(24);
+			pin_mux = SUNXI_GPC_SDC2;
+		} else if (IS_ENABLED(CONFIG_MACH_SUN8I) ||
+			   IS_ENABLED(CONFIG_MACH_SUN50I)) {
+			/* SDC2: PC5-PC6, PC8-PC16 */
+			first_pin = SUNXI_GPC(5);
+			last_pin = SUNXI_GPC(16);
+			skip_pin = SUNXI_GPC(7);
+			pin_mux = SUNXI_GPC_SDC2;
+		} else if (IS_ENABLED(CONFIG_MACH_SUN50I_H6)) {
+			/* SDC2: PC4-PC14 */
+			first_pin = SUNXI_GPC(4);
+			last_pin = SUNXI_GPC(14);
+			pin_mux = SUNXI_GPC_SDC2;
+		} else if (IS_ENABLED(CONFIG_MACH_SUN50I_H616)) {
+			/* SDC2: PC0-PC1, PC5-PC6, PC8-PC11, PC13-PC16 */
+			first_pin = SUNXI_GPC(5);
+			last_pin = SUNXI_GPC(11);
+			skip_pin = SUNXI_GPC(7);
+			pin_mux = 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_drv(SUNXI_GPC(24), 2);
-#elif defined(CONFIG_MACH_SUN8I_R40)
-		/* SDC2: PC6-PC15, PC24 */
-		for (pin = SUNXI_GPC(6); pin <= SUNXI_GPC(15); pin++) {
-			sunxi_gpio_set_cfgpin(pin, SUNXI_GPC_SDC2);
-			sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
-			sunxi_gpio_set_drv(pin, 2);
-		}
-
-		sunxi_gpio_set_cfgpin(SUNXI_GPC(24), SUNXI_GPC_SDC2);
-		sunxi_gpio_set_pull(SUNXI_GPC(24), SUNXI_GPIO_PULL_UP);
-		sunxi_gpio_set_drv(SUNXI_GPC(24), 2);
-#elif defined(CONFIG_MACH_SUN8I) || defined(CONFIG_MACH_SUN50I)
-		/* SDC2: PC5-PC6, PC8-PC16 */
-		for (pin = SUNXI_GPC(5); pin <= SUNXI_GPC(6); pin++) {
-			sunxi_gpio_set_cfgpin(pin, SUNXI_GPC_SDC2);
-			sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
-			sunxi_gpio_set_drv(pin, 2);
-		}
-
-		for (pin = SUNXI_GPC(8); pin <= SUNXI_GPC(16); pin++) {
-			sunxi_gpio_set_cfgpin(pin, SUNXI_GPC_SDC2);
-			sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
-			sunxi_gpio_set_drv(pin, 2);
-		}
-#elif defined(CONFIG_MACH_SUN50I_H6)
-		/* SDC2: PC4-PC14 */
-		for (pin = SUNXI_GPC(4); pin <= SUNXI_GPC(14); pin++) {
-			sunxi_gpio_set_cfgpin(pin, SUNXI_GPC_SDC2);
-			sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
-			sunxi_gpio_set_drv(pin, 2);
-		}
-#elif defined(CONFIG_MACH_SUN50I_H616)
-		/* SDC2: PC0-PC1, PC5-PC6, PC8-PC11, PC13-PC16 */
-		for (pin = SUNXI_GPC(0); pin <= SUNXI_GPC(16); pin++) {
-			if (pin > SUNXI_GPC(1) && pin < SUNXI_GPC(5))
-				continue;
-			if (pin == SUNXI_GPC(7) || pin == SUNXI_GPC(12))
-				continue;
-			sunxi_gpio_set_cfgpin(pin, SUNXI_GPC_SDC2);
-			sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
-			sunxi_gpio_set_drv(pin, 3);
-		}
-#elif defined(CONFIG_MACH_SUN9I)
-		/* SDC2: PC6-PC16 */
-		for (pin = SUNXI_GPC(6); pin <= SUNXI_GPC(16); pin++) {
-			sunxi_gpio_set_cfgpin(pin, SUNXI_GPC_SDC2);
-			sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
-			sunxi_gpio_set_drv(pin, 2);
-		}
-#elif defined(CONFIG_MACH_SUN8I_R528)
-		/* SDC2: PC2-PC7 */
-		for (pin = SUNXI_GPC(2); pin <= SUNXI_GPC(7); pin++) {
-			sunxi_gpio_set_cfgpin(pin, SUNXI_GPC_SDC2);
-			sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
-			sunxi_gpio_set_drv(pin, 2);
+			for (pin = SUNXI_GPC(0); pin <= SUNXI_GPC(1); pin++) {
+				sunxi_gpio_set_cfgpin(pin, SUNXI_GPC_SDC2);
+				sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
+				sunxi_gpio_set_drv(pin, 3);
+			}
+			for (pin = SUNXI_GPC(13); pin <= SUNXI_GPC(16); pin++) {
+				sunxi_gpio_set_cfgpin(pin, SUNXI_GPC_SDC2);
+				sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
+				sunxi_gpio_set_drv(pin, 3);
+			}
+		} else if (IS_ENABLED(CONFIG_MACH_SUN9I)) {
+			/* SDC2: PC6-PC16 */
+			first_pin = SUNXI_GPC(6);
+			last_pin = SUNXI_GPC(16);
+			pin_mux = SUNXI_GPC_SDC2;
+		} else if (IS_ENABLED(CONFIG_MACH_SUN8I_R528)) {
+			/* SDC2: PC2-PC7 */
+			first_pin = SUNXI_GPC(2);
+			last_pin = SUNXI_GPC(7);
+			pin_mux = SUNXI_GPC_SDC2;
+		} else {
+			puts("ERROR: No pinmux setup defined for MMC2!\n");
 		}
-#else
-		puts("ERROR: No pinmux setup defined for MMC2!\n");
-#endif
 		break;
-
 	case 3:
-#if defined(CONFIG_MACH_SUN4I) || defined(CONFIG_MACH_SUN7I) || \
-    defined(CONFIG_MACH_SUN8I_R40)
-		/* SDC3: PI4-PI9 */
-		for (pin = SUNXI_GPI(4); pin <= SUNXI_GPI(9); pin++) {
-			sunxi_gpio_set_cfgpin(pin, SUNXI_GPI_SDC3);
-			sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
-			sunxi_gpio_set_drv(pin, 2);
+		if (IS_ENABLED(CONFIG_MACH_SUN4I) ||
+		    IS_ENABLED(CONFIG_MACH_SUN7I) ||
+		    IS_ENABLED(CONFIG_MACH_SUN8I_R40)) {
+			/* SDC3: PI4-PI9 */
+			first_pin = SUNXI_GPI(4);
+			last_pin = SUNXI_GPI(9);
+			pin_mux = SUNXI_GPI_SDC3;
+		} else if (IS_ENABLED(CONFIG_MACH_SUN6I)) {
+			/* SDC3: PC6-PC15, PC24 */
+			first_pin = SUNXI_GPC(6);
+			last_pin = SUNXI_GPC(15);
+			extra_pin = SUNXI_GPC(24);
+			pin_mux = SUN6I_GPC_SDC3;
 		}
-#elif defined(CONFIG_MACH_SUN6I)
-		/* SDC3: PC6-PC15, PC24 */
-		for (pin = SUNXI_GPC(6); pin <= SUNXI_GPC(15); pin++) {
-			sunxi_gpio_set_cfgpin(pin, SUN6I_GPC_SDC3);
-			sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
-			sunxi_gpio_set_drv(pin, 2);
-		}
-
-		sunxi_gpio_set_cfgpin(SUNXI_GPC(24), SUN6I_GPC_SDC3);
-		sunxi_gpio_set_pull(SUNXI_GPC(24), SUNXI_GPIO_PULL_UP);
-		sunxi_gpio_set_drv(SUNXI_GPC(24), 2);
-#endif
 		break;
 
 	default:
 		printf("sunxi: invalid MMC slot %d for pinmux setup\n", sdc);
 		break;
 	}
+
+	for (pin = first_pin; pin <= last_pin; pin++) {
+		if (pin == skip_pin)
+			continue;
+		sunxi_gpio_set_cfgpin(pin, pin_mux);
+		sunxi_gpio_set_pull(pin, SUNXI_GPIO_PULL_UP);
+		sunxi_gpio_set_drv(pin, 2);
+	}
+	if (extra_pin != ~0) {
+		sunxi_gpio_set_cfgpin(extra_pin, pin_mux);
+		sunxi_gpio_set_pull(extra_pin, SUNXI_GPIO_PULL_UP);
+		sunxi_gpio_set_drv(extra_pin, 2);
+	}
 }
 
 int board_mmc_init(struct bd_info *bis)
@@ -322,5 +309,4 @@ int board_mmc_init(struct bd_info *bis)
 
 	return 0;
 }
-
 #endif /* CONFIG_MMC */
