diff options
| author | Raffaele Recalcati <raffaele.recalcati@bticino.it> | 2012-06-03 06:43:43 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2012-06-04 11:43:00 -0400 |
| commit | 29a6b6c060445eb46528785d51a2d8b0e6d898c4 (patch) | |
| tree | 8974b26b16a2c074aeb0b1ae8fc6076211e0cf85 | |
| parent | d594e987c6f5417cc63dd7e107a2a03a7eeee03f (diff) | |
net/ethernet: ks8851_mll mac address configuration support added
Signed-off-by: Raffaele Recalcati <raffaele.recalcati@bticino.it>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | drivers/net/ethernet/micrel/ks8851_mll.c | 25 | ||||
| -rw-r--r-- | include/linux/ks8851_mll.h | 33 |
2 files changed, 51 insertions, 7 deletions
diff --git a/drivers/net/ethernet/micrel/ks8851_mll.c b/drivers/net/ethernet/micrel/ks8851_mll.c index 5ffde23ac8fb..70bd329882c6 100644 --- a/drivers/net/ethernet/micrel/ks8851_mll.c +++ b/drivers/net/ethernet/micrel/ks8851_mll.c | |||
| @@ -35,7 +35,7 @@ | |||
| 35 | #include <linux/platform_device.h> | 35 | #include <linux/platform_device.h> |
| 36 | #include <linux/delay.h> | 36 | #include <linux/delay.h> |
| 37 | #include <linux/slab.h> | 37 | #include <linux/slab.h> |
| 38 | #include <asm/io.h> | 38 | #include <linux/ks8851_mll.h> |
| 39 | 39 | ||
| 40 | #define DRV_NAME "ks8851_mll" | 40 | #define DRV_NAME "ks8851_mll" |
| 41 | 41 | ||
| @@ -1515,6 +1515,7 @@ static int __devinit ks8851_probe(struct platform_device *pdev) | |||
| 1515 | struct net_device *netdev; | 1515 | struct net_device *netdev; |
| 1516 | struct ks_net *ks; | 1516 | struct ks_net *ks; |
| 1517 | u16 id, data; | 1517 | u16 id, data; |
| 1518 | struct ks8851_mll_platform_data *pdata; | ||
| 1518 | 1519 | ||
| 1519 | io_d = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 1520 | io_d = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
| 1520 | io_c = platform_get_resource(pdev, IORESOURCE_MEM, 1); | 1521 | io_c = platform_get_resource(pdev, IORESOURCE_MEM, 1); |
| @@ -1596,17 +1597,27 @@ static int __devinit ks8851_probe(struct platform_device *pdev) | |||
| 1596 | ks_disable_qmu(ks); | 1597 | ks_disable_qmu(ks); |
| 1597 | ks_setup(ks); | 1598 | ks_setup(ks); |
| 1598 | ks_setup_int(ks); | 1599 | ks_setup_int(ks); |
| 1599 | memcpy(netdev->dev_addr, ks->mac_addr, 6); | ||
| 1600 | 1600 | ||
| 1601 | data = ks_rdreg16(ks, KS_OBCR); | 1601 | data = ks_rdreg16(ks, KS_OBCR); |
| 1602 | ks_wrreg16(ks, KS_OBCR, data | OBCR_ODS_16MA); | 1602 | ks_wrreg16(ks, KS_OBCR, data | OBCR_ODS_16MA); |
| 1603 | 1603 | ||
| 1604 | /** | 1604 | /* overwriting the default MAC address */ |
| 1605 | * If you want to use the default MAC addr, | 1605 | pdata = pdev->dev.platform_data; |
| 1606 | * comment out the 2 functions below. | 1606 | if (!pdata) { |
| 1607 | */ | 1607 | netdev_err(netdev, "No platform data\n"); |
| 1608 | err = -ENODEV; | ||
| 1609 | goto err_register; | ||
| 1610 | } | ||
| 1611 | memcpy(ks->mac_addr, pdata->mac_addr, 6); | ||
| 1612 | if (!is_valid_ether_addr(ks->mac_addr)) { | ||
| 1613 | /* Use random MAC address if none passed */ | ||
| 1614 | random_ether_addr(ks->mac_addr); | ||
| 1615 | netdev_info(netdev, "Using random mac address\n"); | ||
| 1616 | } | ||
| 1617 | netdev_info(netdev, "Mac address is: %pM\n", ks->mac_addr); | ||
| 1618 | |||
| 1619 | memcpy(netdev->dev_addr, ks->mac_addr, 6); | ||
| 1608 | 1620 | ||
| 1609 | random_ether_addr(netdev->dev_addr); | ||
| 1610 | ks_set_mac(ks, netdev->dev_addr); | 1621 | ks_set_mac(ks, netdev->dev_addr); |
| 1611 | 1622 | ||
| 1612 | id = ks_rdreg16(ks, KS_CIDER); | 1623 | id = ks_rdreg16(ks, KS_CIDER); |
diff --git a/include/linux/ks8851_mll.h b/include/linux/ks8851_mll.h new file mode 100644 index 000000000000..e9ccfb59ed30 --- /dev/null +++ b/include/linux/ks8851_mll.h | |||
| @@ -0,0 +1,33 @@ | |||
| 1 | /* | ||
| 2 | * ks8861_mll platform data struct definition | ||
| 3 | * Copyright (c) 2012 BTicino S.p.A. | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify | ||
| 6 | * it under the terms of the GNU General Public License version 2 as | ||
| 7 | * published by the Free Software Foundation. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License | ||
| 15 | * along with this program; if not, write to the Free Software | ||
| 16 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 17 | */ | ||
| 18 | |||
| 19 | #ifndef _LINUX_KS8851_MLL_H | ||
| 20 | #define _LINUX_KS8851_MLL_H | ||
| 21 | |||
| 22 | #include <linux/if_ether.h> | ||
| 23 | |||
| 24 | /** | ||
| 25 | * struct ks8851_mll_platform_data - Platform data of the KS8851_MLL network driver | ||
| 26 | * @macaddr: The MAC address of the device, set to all 0:s to use the on in | ||
| 27 | * the chip. | ||
| 28 | */ | ||
| 29 | struct ks8851_mll_platform_data { | ||
| 30 | u8 mac_addr[ETH_ALEN]; | ||
| 31 | }; | ||
| 32 | |||
| 33 | #endif | ||
