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