mirror of https://gitee.com/openkylin/linux.git
net: w5100-spi: add support to specify MAC address by device tree
This adds support to specify the MAC address by 'mac-address' or 'local-mac-address' properties in the device tree. These are common properties for the Ethernet controller. Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com> Cc: Mike Sinkovsky <msink@permonline.ru> Cc: David S. Miller <davem@davemloft.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7d6da453ef
commit
c3875ca7d9
|
@ -15,6 +15,7 @@
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/netdevice.h>
|
#include <linux/netdevice.h>
|
||||||
|
#include <linux/of_net.h>
|
||||||
#include <linux/spi/spi.h>
|
#include <linux/spi/spi.h>
|
||||||
|
|
||||||
#include "w5100.h"
|
#include "w5100.h"
|
||||||
|
@ -414,6 +415,7 @@ static int w5100_spi_probe(struct spi_device *spi)
|
||||||
const struct spi_device_id *id = spi_get_device_id(spi);
|
const struct spi_device_id *id = spi_get_device_id(spi);
|
||||||
const struct w5100_ops *ops;
|
const struct w5100_ops *ops;
|
||||||
int priv_size;
|
int priv_size;
|
||||||
|
const void *mac = of_get_mac_address(spi->dev.of_node);
|
||||||
|
|
||||||
switch (id->driver_data) {
|
switch (id->driver_data) {
|
||||||
case W5100:
|
case W5100:
|
||||||
|
@ -432,7 +434,7 @@ static int w5100_spi_probe(struct spi_device *spi)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return w5100_probe(&spi->dev, ops, priv_size, NULL, spi->irq, -EINVAL);
|
return w5100_probe(&spi->dev, ops, priv_size, mac, spi->irq, -EINVAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int w5100_spi_remove(struct spi_device *spi)
|
static int w5100_spi_remove(struct spi_device *spi)
|
||||||
|
|
|
@ -1052,7 +1052,7 @@ static const struct net_device_ops w5100_netdev_ops = {
|
||||||
static int w5100_mmio_probe(struct platform_device *pdev)
|
static int w5100_mmio_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct wiznet_platform_data *data = dev_get_platdata(&pdev->dev);
|
struct wiznet_platform_data *data = dev_get_platdata(&pdev->dev);
|
||||||
u8 *mac_addr = NULL;
|
const void *mac_addr = NULL;
|
||||||
struct resource *mem;
|
struct resource *mem;
|
||||||
const struct w5100_ops *ops;
|
const struct w5100_ops *ops;
|
||||||
int irq;
|
int irq;
|
||||||
|
@ -1087,7 +1087,8 @@ void *w5100_ops_priv(const struct net_device *ndev)
|
||||||
EXPORT_SYMBOL_GPL(w5100_ops_priv);
|
EXPORT_SYMBOL_GPL(w5100_ops_priv);
|
||||||
|
|
||||||
int w5100_probe(struct device *dev, const struct w5100_ops *ops,
|
int w5100_probe(struct device *dev, const struct w5100_ops *ops,
|
||||||
int sizeof_ops_priv, u8 *mac_addr, int irq, int link_gpio)
|
int sizeof_ops_priv, const void *mac_addr, int irq,
|
||||||
|
int link_gpio)
|
||||||
{
|
{
|
||||||
struct w5100_priv *priv;
|
struct w5100_priv *priv;
|
||||||
struct net_device *ndev;
|
struct net_device *ndev;
|
||||||
|
|
|
@ -30,7 +30,8 @@ struct w5100_ops {
|
||||||
void *w5100_ops_priv(const struct net_device *ndev);
|
void *w5100_ops_priv(const struct net_device *ndev);
|
||||||
|
|
||||||
int w5100_probe(struct device *dev, const struct w5100_ops *ops,
|
int w5100_probe(struct device *dev, const struct w5100_ops *ops,
|
||||||
int sizeof_ops_priv, u8 *mac_addr, int irq, int link_gpio);
|
int sizeof_ops_priv, const void *mac_addr, int irq,
|
||||||
|
int link_gpio);
|
||||||
int w5100_remove(struct device *dev);
|
int w5100_remove(struct device *dev);
|
||||||
|
|
||||||
extern const struct dev_pm_ops w5100_pm_ops;
|
extern const struct dev_pm_ops w5100_pm_ops;
|
||||||
|
|
Loading…
Reference in New Issue