EP93xx eth: allow passing of phy config via platform data
Passing phy configuration to the ep93xx_eth driver was not supported yet and will be added with this patch. When no pdata is passed, the probably broken default of phy_addr = 0 will be used to maintain compatibility with the previous implementation. Signed-off-by: Alexander Kurz <akurz@blala.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
2bea4f8768
commit
a7932a35da
|
@ -38,6 +38,7 @@
|
|||
#include <linux/types.h>
|
||||
#include <mach/ep93xx-regs.h>
|
||||
#include <linux/phy.h>
|
||||
#include <net/ep93xx_eth.h>
|
||||
#include "ep93xx.h"
|
||||
|
||||
#define EP93XX_MAX_PKT_SIZE 1536
|
||||
|
@ -203,8 +204,8 @@ static int ep93xx_eth_open(struct eth_device *edev)
|
|||
|
||||
pr_debug("+ep93xx_eth_open\n");
|
||||
|
||||
ret = phy_device_connect(edev, &priv->miibus, 0, NULL,
|
||||
0, PHY_INTERFACE_MODE_NA);
|
||||
ret = phy_device_connect(edev, &priv->miibus, priv->phy_addr, NULL,
|
||||
0, priv->interface);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -482,6 +483,7 @@ static int ep93xx_eth_set_ethaddr(struct eth_device *edev,
|
|||
|
||||
static int ep93xx_eth_probe(struct device_d *dev)
|
||||
{
|
||||
struct ep93xx_eth_platform_data *pdata = (struct ep93xx_eth_platform_data *)dev->platform_data;
|
||||
struct eth_device *edev;
|
||||
struct ep93xx_eth_priv *priv;
|
||||
int ret = -1;
|
||||
|
@ -504,6 +506,14 @@ static int ep93xx_eth_probe(struct device_d *dev)
|
|||
edev->set_ethaddr = ep93xx_eth_set_ethaddr;
|
||||
edev->parent = dev;
|
||||
|
||||
if (pdata) {
|
||||
priv->interface = pdata->xcv_type;
|
||||
priv->phy_addr = pdata->phy_addr;
|
||||
} else {
|
||||
priv->interface = PHY_INTERFACE_MODE_NA;
|
||||
priv->phy_addr = 0;
|
||||
}
|
||||
|
||||
priv->miibus.read = ep93xx_phy_read;
|
||||
priv->miibus.write = ep93xx_phy_write;
|
||||
priv->miibus.parent = dev;
|
||||
|
|
|
@ -137,6 +137,8 @@ struct ep93xx_eth_priv {
|
|||
struct tx_descriptor_queue tx_dq;
|
||||
struct tx_status_queue tx_sq;
|
||||
|
||||
int phy_addr;
|
||||
phy_interface_t interface;
|
||||
struct mii_bus miibus;
|
||||
};
|
||||
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
/*
|
||||
* (C) Copyright 2016 Alexander Kurz <akurz@blala.de>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __NET_EP93XX_ETH_H
|
||||
#define __NET_EP93XX_ETH_H
|
||||
|
||||
#include <linux/phy.h>
|
||||
|
||||
struct ep93xx_eth_platform_data {
|
||||
phy_interface_t xcv_type;
|
||||
int phy_addr;
|
||||
};
|
||||
|
||||
#endif /* __NET_EP93XX_ETH_H */
|
Loading…
Reference in New Issue