Commit 2e205ef7 authored by Vignesh R's avatar Vignesh R Committed by Tom Rini
Browse files

net: cpsw: Add support to drive gpios for ethernet to be functional



On DRA72 EVM, cpsw slaves may be muxed with other modules. This
selection is controlled by a pcf gpio line. Add support for cpsw driver
to acquire mode-gpios and select the appropriate slave using gpio APIs.
Signed-off-by: default avatarVignesh R <vigneshr@ti.com>
Reviewed-by: default avatarTom Rini <trini@konsulko.com>
Acked-by: default avatarJoe Hershberger <joe.hershberger@ni.com>
Reviewed-by: default avatarMugunthan V N <mugunthanvnm@ti.com>
parent 06974ea0
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include <netdev.h> #include <netdev.h>
#include <cpsw.h> #include <cpsw.h>
#include <asm/errno.h> #include <asm/errno.h>
#include <asm/gpio.h>
#include <asm/io.h> #include <asm/io.h>
#include <phy.h> #include <phy.h>
#include <asm/arch/cpu.h> #include <asm/arch/cpu.h>
...@@ -1152,12 +1153,14 @@ static int cpsw_eth_ofdata_to_platdata(struct udevice *dev) ...@@ -1152,12 +1153,14 @@ static int cpsw_eth_ofdata_to_platdata(struct udevice *dev)
{ {
struct eth_pdata *pdata = dev_get_platdata(dev); struct eth_pdata *pdata = dev_get_platdata(dev);
struct cpsw_priv *priv = dev_get_priv(dev); struct cpsw_priv *priv = dev_get_priv(dev);
struct gpio_desc *mode_gpios;
const char *phy_mode; const char *phy_mode;
const void *fdt = gd->fdt_blob; const void *fdt = gd->fdt_blob;
int node = dev->of_offset; int node = dev->of_offset;
int subnode; int subnode;
int slave_index = 0; int slave_index = 0;
int active_slave; int active_slave;
int num_mode_gpios;
int ret; int ret;
pdata->iobase = dev_get_addr(dev); pdata->iobase = dev_get_addr(dev);
...@@ -1203,6 +1206,15 @@ static int cpsw_eth_ofdata_to_platdata(struct udevice *dev) ...@@ -1203,6 +1206,15 @@ static int cpsw_eth_ofdata_to_platdata(struct udevice *dev)
return -ENOENT; return -ENOENT;
} }
num_mode_gpios = gpio_get_list_count(dev, "mode-gpios");
if (num_mode_gpios > 0) {
mode_gpios = malloc(sizeof(struct gpio_desc) *
num_mode_gpios);
gpio_request_list_by_name(dev, "mode-gpios", mode_gpios,
num_mode_gpios, GPIOD_IS_OUT);
free(mode_gpios);
}
active_slave = fdtdec_get_int(fdt, node, "active_slave", 0); active_slave = fdtdec_get_int(fdt, node, "active_slave", 0);
priv->data.active_slave = active_slave; priv->data.active_slave = active_slave;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment