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, |
