diff --git a/drivers/net/ethernet/sunxi/eth/Kconfig b/drivers/net/ethernet/sunxi/eth/Kconfig
index af930df..13787db 100755
--- a/drivers/net/ethernet/sunxi/eth/Kconfig
+++ b/drivers/net/ethernet/sunxi/eth/Kconfig
@@ -35,13 +35,5 @@ config GETH_PHY_POWER
 	 If external PHY power is exist, and it want to be controled,
 	 select it.  If not, it mean the power of PHY already on.
 
-config GMAC_PHY_POWER
-        bool "External PHY power control"
-	depends on SUNXI_GETH
-	default y
-	---help---
-	 If external PHY power is exist, and it want to be controled,
-	 select it.  If not, it mean the power of PHY already on.
-
 endif
 
diff --git a/drivers/net/ethernet/sunxi/eth/sunxi_geth.c b/drivers/net/ethernet/sunxi/eth/sunxi_geth.c
index 03931f2..446a83e 100755
--- a/drivers/net/ethernet/sunxi/eth/sunxi_geth.c
+++ b/drivers/net/ethernet/sunxi/eth/sunxi_geth.c
@@ -154,9 +154,7 @@ struct geth_priv {
 
 	spinlock_t lock;
 	spinlock_t tx_lock;
-#ifdef CONFIG_GMAC_PHY_POWER
-	u32 gpio_power_hd;
-#endif
+	int gpio_power_hd;
 };
 
 #ifdef CONFIG_GETH_PHY_POWER
@@ -198,11 +196,8 @@ static void desc_print(struct dma_desc *desc, int size)
 static int geth_power_on(struct geth_priv *priv)
 {
 	int value;
-
-#ifdef CONFIG_GMAC_PHY_POWER
-	gpio_set_value(priv->gpio_power_hd, 1);
-#endif
-
+	if (gpio_is_valid(priv->gpio_power_hd))
+		gpio_set_value(priv->gpio_power_hd, 1);
 #ifdef CONFIG_GETH_PHY_POWER
 	struct regulator **regu;
 	int ret = 0, i = 0;
@@ -266,11 +261,8 @@ err:
 static void geth_power_off(struct geth_priv *priv)
 {
 	int value;
-
-#ifdef CONFIG_GMAC_PHY_POWER
-	gpio_set_value(priv->gpio_power_hd, 0);
-#endif
-
+	if (gpio_is_valid(priv->gpio_power_hd))
+		gpio_set_value(priv->gpio_power_hd, 0);
 #ifdef CONFIG_GETH_PHY_POWER
 	struct regulator **regu = priv->power;
 	int i = 0;
@@ -1575,6 +1567,15 @@ static int geth_script_parse(struct platform_device *pdev)
 		break;
 	}
 
+	priv->gpio_power_hd = -1;
+	type = script_get_item("gmac_phy_power", "gmac_phy_power_en", &item);
+	if (SCIRPT_ITEM_VALUE_TYPE_PIO == type) {
+		if (!gpio_request(item.gpio.gpio, NULL)) {
+			gpio_direction_output(item.gpio.gpio, 1);
+			priv->gpio_power_hd = item.gpio.gpio;
+		}
+	}
+
 #ifdef CONFIG_GETH_PHY_POWER
 	memset(power_tb, 0, sizeof(power_tb));
 	for (cnt = 0; cnt < ARRAY_SIZE(power_tb); cnt++) {
@@ -1621,12 +1622,6 @@ static int geth_sys_request(struct platform_device *pdev)
 	int ret = 0;
 	struct resource *res;
 
-#ifdef CONFIG_GMAC_PHY_POWER
-	script_item_value_type_e  type;
-	script_item_u item;
-	int req_status;
-#endif
-
 	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "geth_extclk");
 	if (unlikely(!res)){
 		ret = -ENODEV;
@@ -1700,22 +1695,6 @@ static int geth_sys_request(struct platform_device *pdev)
 		}
 	}
 #endif
-
-#ifdef CONFIG_GMAC_PHY_POWER && CONFIG_GETH_SCRIPT_SYS
-	type = script_get_item("gmac_phy_power", "gmac_phy_power_en", &item);
-	if (SCIRPT_ITEM_VALUE_TYPE_PIO != type) {
-		pr_err("script_get_item return type err\n");
-		return -EFAULT;
-	}
-	/*request gpio*/
-	req_status = gpio_request(item.gpio.gpio, NULL);
-	if (0 != req_status) {
-		pr_err("request gpio failed!\n");
-	}
-	gpio_direction_output(item.gpio.gpio, 1);
-	priv->gpio_power_hd = item.gpio.gpio;
- #endif
-
 	return 0;
 
 pin_err: