aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>2013-05-23 19:01:22 -0400
committerDavid S. Miller <davem@davemloft.net>2013-05-28 02:17:53 -0400
commit87227b8b2d4d556a6924ad9af87450fdc3fcd7e3 (patch)
tree0501109d70356a90dedc8d3bab91fcee5b614d07
parent51047840e60287fb4f34bc768cc65f4bfc9098f4 (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.txt9
-rw-r--r--drivers/net/ethernet/micrel/ks8851_mll.c33
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 @@
1Micrel KS8851 Ethernet mac
2
3Required 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
8Optional 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)
1531static const struct of_device_id ks8851_ml_dt_ids[] = {
1532 { .compatible = "micrel,ks8851-mll" },
1533 { /* sentinel */ }
1534};
1535MODULE_DEVICE_TABLE(of, ks8851_ml_dt_ids);
1536#endif
1527 1537
1528static int ks8851_probe(struct platform_device *pdev) 1538static 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,