mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-01 17:08:10 +00:00
net: micrel : ks8851-ml: add dt support
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> Cc: netdev@vger.kernel.org Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
51047840e6
commit
87227b8b2d
2 changed files with 35 additions and 7 deletions
9
Documentation/devicetree/bindings/net/micrel-ks8851.txt
Normal file
9
Documentation/devicetree/bindings/net/micrel-ks8851.txt
Normal file
|
@ -0,0 +1,9 @@
|
|||
Micrel KS8851 Ethernet mac
|
||||
|
||||
Required properties:
|
||||
- compatible = "micrel,ks8851-ml" of parallel interface
|
||||
- reg : 2 physical address and size of registers for data and command
|
||||
- interrupts : interrupt connection
|
||||
|
||||
Optional properties:
|
||||
- local-mac-address : Ethernet mac address to use
|
|
@ -35,6 +35,9 @@
|
|||
#include <linux/delay.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/ks8851_mll.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/of_net.h>
|
||||
|
||||
#define DRV_NAME "ks8851_mll"
|
||||
|
||||
|
@ -1524,6 +1527,13 @@ static int ks_hw_init(struct ks_net *ks)
|
|||
return true;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_OF)
|
||||
static const struct of_device_id ks8851_ml_dt_ids[] = {
|
||||
{ .compatible = "micrel,ks8851-mll" },
|
||||
{ /* sentinel */ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, ks8851_ml_dt_ids);
|
||||
#endif
|
||||
|
||||
static int ks8851_probe(struct platform_device *pdev)
|
||||
{
|
||||
|
@ -1532,7 +1542,7 @@ static int ks8851_probe(struct platform_device *pdev)
|
|||
struct net_device *netdev;
|
||||
struct ks_net *ks;
|
||||
u16 id, data;
|
||||
struct ks8851_mll_platform_data *pdata;
|
||||
const char *mac;
|
||||
|
||||
io_d = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
io_c = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||
|
@ -1619,13 +1629,21 @@ static int ks8851_probe(struct platform_device *pdev)
|
|||
ks_wrreg16(ks, KS_OBCR, data | OBCR_ODS_16MA);
|
||||
|
||||
/* overwriting the default MAC address */
|
||||
pdata = pdev->dev.platform_data;
|
||||
if (!pdata) {
|
||||
netdev_err(netdev, "No platform data\n");
|
||||
err = -ENODEV;
|
||||
goto err_pdata;
|
||||
if (pdev->dev.of_node) {
|
||||
mac = of_get_mac_address(pdev->dev.of_node);
|
||||
if (mac)
|
||||
memcpy(ks->mac_addr, mac, ETH_ALEN);
|
||||
} else {
|
||||
struct ks8851_mll_platform_data *pdata;
|
||||
|
||||
pdata = pdev->dev.platform_data;
|
||||
if (!pdata) {
|
||||
netdev_err(netdev, "No platform data\n");
|
||||
err = -ENODEV;
|
||||
goto err_pdata;
|
||||
}
|
||||
memcpy(ks->mac_addr, pdata->mac_addr, ETH_ALEN);
|
||||
}
|
||||
memcpy(ks->mac_addr, pdata->mac_addr, 6);
|
||||
if (!is_valid_ether_addr(ks->mac_addr)) {
|
||||
/* Use random MAC address if none passed */
|
||||
eth_random_addr(ks->mac_addr);
|
||||
|
@ -1679,6 +1697,7 @@ static struct platform_driver ks8851_platform_driver = {
|
|||
.driver = {
|
||||
.name = DRV_NAME,
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = of_match_ptr(ks8851_ml_dt_ids),
|
||||
},
|
||||
.probe = ks8851_probe,
|
||||
.remove = ks8851_remove,
|
||||
|
|
Loading…
Reference in a new issue