diff --git a/arch/blackfin/cpu/cmd_gpio.c b/arch/blackfin/cpu/cmd_gpio.c
index 4430c90d4d760a6d7b6f5b66601d1c65b08cfc23..5988da7917107c11f94794018ab503c0cc055d51 100644
--- a/arch/blackfin/cpu/cmd_gpio.c
+++ b/arch/blackfin/cpu/cmd_gpio.c
@@ -90,20 +90,19 @@ int do_gpio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	gpio_request(gpio, "cmd_gpio");
 
 	/* finally, let's do it: set direction and exec command */
+	ulong value;
 	if (sub_cmd == GPIO_INPUT) {
 		gpio_direction_input(gpio);
-		printf("gpio: pin %lu on port %c set to input\n", pin, *str_pin);
-		return 0;
-	}
-
-	ulong value;
-	switch (sub_cmd) {
-		case GPIO_SET:    value = 1; break;
-		case GPIO_CLEAR:  value = 0; break;
-		case GPIO_TOGGLE: value = !gpio_get_value(gpio); break;
-		default:          goto show_usage;
+		value = gpio_get_value(gpio);
+	} else {
+		switch (sub_cmd) {
+			case GPIO_SET:    value = 1; break;
+			case GPIO_CLEAR:  value = 0; break;
+			case GPIO_TOGGLE: value = !gpio_get_value(gpio); break;
+			default:          goto show_usage;
+		}
+		gpio_direction_output(gpio, value);
 	}
-	gpio_direction_output(gpio, value);
 	printf("gpio: pin %lu on port %c (gpio %lu) value is %lu\n",
 		pin, *str_pin, gpio, value);
 
@@ -113,6 +112,6 @@ int do_gpio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 }
 
 U_BOOT_CMD(gpio, 3, 0, do_gpio,
-	"set/clear/toggle gpio output pins",
-	"<set|clear|toggle> <port><pin>\n"
-	"    - set/clear/toggle the specified pin (e.g. PF10)");
+	"input/set/clear/toggle gpio output pins",
+	"<input|set|clear|toggle> <port><pin>\n"
+	"    - input/set/clear/toggle the specified pin (e.g. PF10)");