diff options
author | Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | 2013-05-23 19:01:22 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-05-28 02:17:53 -0400 |
commit | 87227b8b2d4d556a6924ad9af87450fdc3fcd7e3 (patch) | |
tree | 0501109d70356a90dedc8d3bab91fcee5b614d07 | |
parent | 51047840e60287fb4f34bc768cc65f4bfc9098f4 (diff) |
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>
-rw-r--r-- | Documentation/devicetree/bindings/net/micrel-ks8851.txt | 9 | ||||
-rw-r--r-- | drivers/net/ethernet/micrel/ks8851_mll.c | 33 |
2 files changed, 35 insertions, 7 deletions
diff --git a/Documentation/devicetree/bindings/net/micrel-ks8851.txt b/Documentation/devicetree/bindings/net/micrel-ks8851.txt new file mode 100644 index 000000000000..11ace3c3d805 --- /dev/null +++ b/Documentation/devicetree/bindings/net/micrel-ks8851.txt | |||
@@ -0,0 +1,9 @@ | |||
1 | Micrel KS8851 Ethernet mac | ||
2 | |||
3 | Required properties: | ||
4 | - compatible = "micrel,ks8851-ml" of parallel interface | ||
5 | - reg : 2 physical address and size of registers for data and command | ||
6 | - interrupts : interrupt connection | ||
7 | |||
8 | Optional properties: | ||
9 | - local-mac-address : Ethernet mac address to use | ||
diff --git a/drivers/net/ethernet/micrel/ks8851_mll.c b/drivers/net/ethernet/micrel/ks8851_mll.c index e9b1a830d582..ac20098b542a 100644 --- a/drivers/net/ethernet/micrel/ks8851_mll.c +++ b/drivers/net/ethernet/micrel/ks8851_mll.c | |||
@@ -35,6 +35,9 @@ | |||
35 | #include <linux/delay.h> | 35 | #include <linux/delay.h> |
36 | #include <linux/slab.h> | 36 | #include <linux/slab.h> |
37 | #include <linux/ks8851_mll.h> | 37 | #include <linux/ks8851_mll.h> |
38 | #include <linux/of.h> | ||
39 | #include <linux/of_device.h> | ||
40 | #include <linux/of_net.h> | ||
38 | 41 | ||
39 | #define DRV_NAME "ks8851_mll" | 42 | #define DRV_NAME "ks8851_mll" |
40 | 43 | ||
@@ -1524,6 +1527,13 @@ static int ks_hw_init(struct ks_net *ks) | |||
1524 | return true; | 1527 | return true; |
1525 | } | 1528 | } |
1526 | 1529 | ||
1530 | #if defined(CONFIG_OF) | ||
1531 | static const struct of_device_id ks8851_ml_dt_ids[] = { | ||
1532 | { .compatible = "micrel,ks8851-mll" }, | ||
1533 | { /* sentinel */ } | ||
1534 | }; | ||
1535 | MODULE_DEVICE_TABLE(of, ks8851_ml_dt_ids); | ||
1536 | #endif | ||
1527 | 1537 | ||
1528 | static int ks8851_probe(struct platform_device *pdev) | 1538 | static int ks8851_probe(struct platform_device *pdev) |
1529 | { | 1539 | { |
@@ -1532,7 +1542,7 @@ static int ks8851_probe(struct platform_device *pdev) | |||
1532 | struct net_device *netdev; | 1542 | struct net_device *netdev; |
1533 | struct ks_net *ks; | 1543 | struct ks_net *ks; |
1534 | u16 id, data; | 1544 | u16 id, data; |
1535 | struct ks8851_mll_platform_data *pdata; | 1545 | const char *mac; |
1536 | 1546 | ||
1537 | io_d = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 1547 | io_d = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
1538 | io_c = platform_get_resource(pdev, IORESOURCE_MEM, 1); | 1548 | io_c = platform_get_resource(pdev, IORESOURCE_MEM, 1); |
@@ -1619,13 +1629,21 @@ static int ks8851_probe(struct platform_device *pdev) | |||
1619 | ks_wrreg16(ks, KS_OBCR, data | OBCR_ODS_16MA); | 1629 | ks_wrreg16(ks, KS_OBCR, data | OBCR_ODS_16MA); |
1620 | 1630 | ||
1621 | /* overwriting the default MAC address */ | 1631 | /* overwriting the default MAC address */ |
1622 | pdata = pdev->dev.platform_data; | 1632 | if (pdev->dev.of_node) { |
1623 | if (!pdata) { | 1633 | mac = of_get_mac_address(pdev->dev.of_node); |
1624 | netdev_err(netdev, "No platform data\n"); | 1634 | if (mac) |
1625 | err = -ENODEV; | 1635 | memcpy(ks->mac_addr, mac, ETH_ALEN); |
1626 | goto err_pdata; | 1636 | } else { |
1637 | struct ks8851_mll_platform_data *pdata; | ||
1638 | |||
1639 | pdata = pdev->dev.platform_data; | ||
1640 | if (!pdata) { | ||
1641 | netdev_err(netdev, "No platform data\n"); | ||
1642 | err = -ENODEV; | ||
1643 | goto err_pdata; | ||
1644 | } | ||
1645 | memcpy(ks->mac_addr, pdata->mac_addr, ETH_ALEN); | ||
1627 | } | 1646 | } |
1628 | memcpy(ks->mac_addr, pdata->mac_addr, 6); | ||
1629 | if (!is_valid_ether_addr(ks->mac_addr)) { | 1647 | if (!is_valid_ether_addr(ks->mac_addr)) { |
1630 | /* Use random MAC address if none passed */ | 1648 | /* Use random MAC address if none passed */ |
1631 | eth_random_addr(ks->mac_addr); | 1649 | eth_random_addr(ks->mac_addr); |
@@ -1679,6 +1697,7 @@ static struct platform_driver ks8851_platform_driver = { | |||
1679 | .driver = { | 1697 | .driver = { |
1680 | .name = DRV_NAME, | 1698 | .name = DRV_NAME, |
1681 | .owner = THIS_MODULE, | 1699 | .owner = THIS_MODULE, |
1700 | .of_match_table = of_match_ptr(ks8851_ml_dt_ids), | ||
1682 | }, | 1701 | }, |
1683 | .probe = ks8851_probe, | 1702 | .probe = ks8851_probe, |
1684 | .remove = ks8851_remove, | 1703 | .remove = ks8851_remove, |