diff --git a/arch/arm/mach-s5pv210/setup-sdhci-gpio.c b/arch/arm/mach-s5pv210/setup-sdhci-gpio.c
index b18587b..7064278 100644
--- a/arch/arm/mach-s5pv210/setup-sdhci-gpio.c
+++ b/arch/arm/mach-s5pv210/setup-sdhci-gpio.c
@@ -29,23 +29,21 @@
 	unsigned int gpio;
 
 	/* Set all the necessary GPG0/GPG1 pins to special-function 2 */
-	for (gpio = S5PV210_GPG0(0); gpio < S5PV210_GPG0(2); gpio++) {
-		s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
+	s3c_gpio_cfgpin_range(S5PV210_GPG0(0), 2, S3C_GPIO_SFN(2));
+	for (gpio = S5PV210_GPG0(0); gpio < S5PV210_GPG0(2); gpio++)
 		s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
-	}
+
 	switch (width) {
 	case 8:
 		/* GPG1[3:6] special-funtion 3 */
-		for (gpio = S5PV210_GPG1(3); gpio <= S5PV210_GPG1(6); gpio++) {
-			s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(3));
+		s3c_gpio_cfgpin_range(S5PV210_GPG1(3), 4, S3C_GPIO_SFN(3));
+		for (gpio = S5PV210_GPG1(3); gpio <= S5PV210_GPG1(6); gpio++)
 			s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
-		}
 	case 4:
 		/* GPG0[3:6] special-funtion 2 */
-		for (gpio = S5PV210_GPG0(3); gpio <= S5PV210_GPG0(6); gpio++) {
-			s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
+		s3c_gpio_cfgpin_range(S5PV210_GPG0(3), 4, S3C_GPIO_SFN(2));
+		for (gpio = S5PV210_GPG0(3); gpio <= S5PV210_GPG0(6); gpio++)
 			s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
-		}
 	default:
 		break;
 	}
@@ -62,16 +60,14 @@
 	unsigned int gpio;
 
 	/* Set all the necessary GPG1[0:1] pins to special-function 2 */
-	for (gpio = S5PV210_GPG1(0); gpio < S5PV210_GPG1(2); gpio++) {
-		s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
+	s3c_gpio_cfgpin_range(S5PV210_GPG1(0), 2, S3C_GPIO_SFN(2));
+	for (gpio = S5PV210_GPG1(0); gpio < S5PV210_GPG1(2); gpio++)
 		s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
-	}
 
 	/* Data pin GPG1[3:6] to special-function 2 */
-	for (gpio = S5PV210_GPG1(3); gpio <= S5PV210_GPG1(6); gpio++) {
-		s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
+	s3c_gpio_cfgpin_range(S5PV210_GPG1(3), 4, S3C_GPIO_SFN(2));
+	for (gpio = S5PV210_GPG1(3); gpio <= S5PV210_GPG1(6); gpio++)
 		s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
-	}
 
 	if (pdata->cd_type == S3C_SDHCI_CD_INTERNAL) {
 		s3c_gpio_setpull(S5PV210_GPG1(2), S3C_GPIO_PULL_UP);
@@ -85,24 +81,21 @@
 	unsigned int gpio;
 
 	/* Set all the necessary GPG2[0:1] pins to special-function 2 */
-	for (gpio = S5PV210_GPG2(0); gpio < S5PV210_GPG2(2); gpio++) {
-		s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
+	s3c_gpio_cfgpin_range(S5PV210_GPG2(0), 2, S3C_GPIO_SFN(2));
+	for (gpio = S5PV210_GPG2(0); gpio < S5PV210_GPG2(2); gpio++)
 		s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
-	}
 
 	switch (width) {
 	case 8:
 		/* Data pin GPG3[3:6] to special-function 3 */
-		for (gpio = S5PV210_GPG3(3); gpio <= S5PV210_GPG3(6); gpio++) {
-			s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(3));
+		s3c_gpio_cfgpin_range(S5PV210_GPG3(3), 4, S3C_GPIO_SFN(3));
+		for (gpio = S5PV210_GPG3(3); gpio <= S5PV210_GPG3(6); gpio++)
 			s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
-		}
 	case 4:
 		/* Data pin GPG2[3:6] to special-function 2 */
-		for (gpio = S5PV210_GPG2(3); gpio <= S5PV210_GPG2(6); gpio++) {
-			s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
+		s3c_gpio_cfgpin_range(S5PV210_GPG2(3), 4, S3C_GPIO_SFN(2));
+		for (gpio = S5PV210_GPG2(3); gpio <= S5PV210_GPG2(6); gpio++)
 			s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
-		}
 	default:
 		break;
 	}
@@ -118,17 +111,15 @@
 	struct s3c_sdhci_platdata *pdata = dev->dev.platform_data;
 	unsigned int gpio;
 
-	/* Set all the necessary GPG3[0:2] pins to special-function 2 */
-	for (gpio = S5PV210_GPG3(0); gpio < S5PV210_GPG3(2); gpio++) {
-		s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
+	/* Set all the necessary GPG3[0:1] pins to special-function 2 */
+	s3c_gpio_cfgpin_range(S5PV210_GPG3(0), 2, S3C_GPIO_SFN(2));
+	for (gpio = S5PV210_GPG3(0); gpio < S5PV210_GPG3(2); gpio++)
 		s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
-	}
 
 	/* Data pin GPG3[3:6] to special-function 2 */
-	for (gpio = S5PV210_GPG3(3); gpio <= S5PV210_GPG3(6); gpio++) {
-		s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
+	s3c_gpio_cfgpin_range(S5PV210_GPG3(3), 4, S3C_GPIO_SFN(2));
+	for (gpio = S5PV210_GPG3(3); gpio <= S5PV210_GPG3(6); gpio++)
 		s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
-	}
 
 	if (pdata->cd_type == S3C_SDHCI_CD_INTERNAL) {
 		s3c_gpio_setpull(S5PV210_GPG3(2), S3C_GPIO_PULL_UP);
