gmac: adjust power control

This commit is contained in:
hwg
2014-03-27 22:17:43 +08:00
parent 0d203a5c6a
commit dac3422145
5 changed files with 36 additions and 20 deletions

View File

@@ -985,7 +985,15 @@
};
mac_rxpins: mac-rxpins {
rockchip,pins = <MAC_RXD0>, <MAC_RXD1>, <MAC_RXD2>, <MAC_RXD3>, <MAC_RXDV>, <MAC_RXER>, <MAC_RXCLK>, <MAC_CRS>, <MAC_COL>;
rockchip,pins = <MAC_RXD0>, <MAC_RXD1>, <MAC_RXD2>, <MAC_RXD3>, <MAC_RXDV>, <MAC_RXER>, <MAC_RXCLK>, <MAC_COL>;
rockchip,pull = <VALUE_PULL_DISABLE>;
//rockchip,voltage = <VALUE_VOL_DEFAULT>;
rockchip,drive = <VALUE_DRV_DEFAULT>;
//rockchip,tristate = <VALUE_TRI_DEFAULT>;
};
mac_crs: mac-crs {
rockchip,pins = <MAC_CRS>;
rockchip,pull = <VALUE_PULL_DISABLE>;
//rockchip,voltage = <VALUE_VOL_DEFAULT>;
rockchip,drive = <VALUE_DRV_DEFAULT>;

View File

@@ -167,7 +167,7 @@
// power_ctl_by = "gpio"; //"gpio" "pmu"
power-gpio = <&gpio0 GPIO_A6 GPIO_ACTIVE_HIGH>;
// power-pmu = "act_ldo"
reset-gpio = <&gpio4 GPIO_A7 GPIO_ACTIVE_HIGH>;
reset-gpio = <&gpio4 GPIO_A7 GPIO_ACTIVE_LOW>;
};
&pinctrl {

View File

@@ -112,7 +112,9 @@ struct stmmac_priv {
struct bsp_priv {
char pwr_ctl_by[8];
int power_io;
int power_io_level;
int reset_io;
int reset_io_level;
int phy_iface;
int (*phy_power_on)(struct plat_stmmacenet_data *plat, int enable);
};

View File

@@ -1580,6 +1580,17 @@ static int stmmac_open(struct net_device *dev)
stmmac_check_ether_addr(priv);
if (priv->pcs != STMMAC_PCS_SGMII && priv->pcs != STMMAC_PCS_TBI &&
priv->pcs != STMMAC_PCS_RTBI) {
/* MDIO bus Registration */
ret = stmmac_mdio_register(priv->dev);
if (ret < 0) {
pr_debug("%s: MDIO bus (id: %d) registration failed",
__func__, priv->plat->bus_id);
goto open_error;
}
}
if (priv->pcs != STMMAC_PCS_SGMII && priv->pcs != STMMAC_PCS_TBI &&
priv->pcs != STMMAC_PCS_RTBI) {
ret = stmmac_init_phy(dev);
@@ -2736,17 +2747,6 @@ struct stmmac_priv *stmmac_dvr_probe(struct device *device,
stmmac_check_pcs_mode(priv);
if (priv->pcs != STMMAC_PCS_SGMII && priv->pcs != STMMAC_PCS_TBI &&
priv->pcs != STMMAC_PCS_RTBI) {
/* MDIO bus Registration */
ret = stmmac_mdio_register(ndev);
if (ret < 0) {
pr_debug("%s: MDIO bus (id: %d) registration failed",
__func__, priv->plat->bus_id);
goto error_mdio_register;
}
}
return priv;
error_mdio_register:

View File

@@ -28,6 +28,8 @@
#include <linux/of_net.h>
#include <linux/gpio.h>
#include <linux/of_gpio.h>
#include <linux/of_device.h>
#include <dt-bindings/gpio/gpio.h>
#include "stmmac.h"
#include <linux/rockchip/iomap.h>
#include <linux/rockchip/grf.h>
@@ -80,22 +82,24 @@ static int phy_power_on(struct plat_stmmacenet_data *plat, int enable)
if (enable) {
//power on
if (gpio_is_valid(bsp_priv->power_io)) {
gpio_direction_output(bsp_priv->power_io, 0);
gpio_set_value(bsp_priv->power_io, 1);
gpio_direction_output(bsp_priv->power_io, !bsp_priv->power_io_level);
msleep(10);
gpio_direction_output(bsp_priv->power_io, bsp_priv->power_io_level);
//gpio_set_value(bsp_priv->power_io, 1);
}
//reset
if (gpio_is_valid(bsp_priv->reset_io)) {
gpio_direction_output(bsp_priv->reset_io, 0);
gpio_set_value(bsp_priv->reset_io, 0);
gpio_direction_output(bsp_priv->reset_io, bsp_priv->reset_io_level);
//gpio_set_value(bsp_priv->reset_io, 0);
msleep(10);
gpio_set_value(bsp_priv->reset_io, 1);
gpio_direction_output(bsp_priv->reset_io, !bsp_priv->reset_io_level);
}
} else {
//power off
if (gpio_is_valid(bsp_priv->power_io)) {
gpio_direction_output(bsp_priv->power_io, 0);
gpio_set_value(bsp_priv->power_io, 0);
gpio_direction_output(bsp_priv->power_io, !bsp_priv->power_io_level);
//gpio_set_value(bsp_priv->power_io, 0);
}
}
@@ -244,8 +248,10 @@ static int stmmac_probe_config_dt(struct platform_device *pdev,
g_bsp_priv.reset_io =
of_get_named_gpio_flags(np, "reset-gpio", 0, &flags);
g_bsp_priv.reset_io_level = (flags == GPIO_ACTIVE_HIGH) ? 1 : 0;
g_bsp_priv.power_io =
of_get_named_gpio_flags(np, "power-gpio", 0, &flags);
g_bsp_priv.power_io_level = (flags == GPIO_ACTIVE_HIGH) ? 1 : 0;
g_bsp_priv.phy_iface = plat->interface;
g_bsp_priv.phy_power_on = phy_power_on;