aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/macb.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/macb.c')
-rw-r--r--drivers/net/macb.c61
1 files changed, 41 insertions, 20 deletions
diff --git a/drivers/net/macb.c b/drivers/net/macb.c
index 25b559b5d5ed..e67361e2bf5d 100644
--- a/drivers/net/macb.c
+++ b/drivers/net/macb.c
@@ -27,8 +27,6 @@
27 27
28#include "macb.h" 28#include "macb.h"
29 29
30#define to_net_dev(class) container_of(class, struct net_device, class_dev)
31
32#define RX_BUFFER_SIZE 128 30#define RX_BUFFER_SIZE 128
33#define RX_RING_SIZE 512 31#define RX_RING_SIZE 512
34#define RX_RING_BYTES (sizeof(struct dma_desc) * RX_RING_SIZE) 32#define RX_RING_BYTES (sizeof(struct dma_desc) * RX_RING_SIZE)
@@ -945,10 +943,10 @@ static int macb_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
945 return ret; 943 return ret;
946} 944}
947 945
948static ssize_t macb_mii_show(const struct class_device *cd, char *buf, 946static ssize_t macb_mii_show(const struct device *_dev, char *buf,
949 unsigned long addr) 947 unsigned long addr)
950{ 948{
951 struct net_device *dev = to_net_dev(cd); 949 struct net_device *dev = to_net_dev(_dev);
952 struct macb *bp = netdev_priv(dev); 950 struct macb *bp = netdev_priv(dev);
953 ssize_t ret = -EINVAL; 951 ssize_t ret = -EINVAL;
954 952
@@ -962,11 +960,13 @@ static ssize_t macb_mii_show(const struct class_device *cd, char *buf,
962} 960}
963 961
964#define MII_ENTRY(name, addr) \ 962#define MII_ENTRY(name, addr) \
965static ssize_t show_##name(struct class_device *cd, char *buf) \ 963static ssize_t show_##name(struct device *_dev, \
964 struct device_attribute *attr, \
965 char *buf) \
966{ \ 966{ \
967 return macb_mii_show(cd, buf, addr); \ 967 return macb_mii_show(_dev, buf, addr); \
968} \ 968} \
969static CLASS_DEVICE_ATTR(name, S_IRUGO, show_##name, NULL) 969static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL)
970 970
971MII_ENTRY(bmcr, MII_BMCR); 971MII_ENTRY(bmcr, MII_BMCR);
972MII_ENTRY(bmsr, MII_BMSR); 972MII_ENTRY(bmsr, MII_BMSR);
@@ -977,13 +977,13 @@ MII_ENTRY(lpa, MII_LPA);
977MII_ENTRY(expansion, MII_EXPANSION); 977MII_ENTRY(expansion, MII_EXPANSION);
978 978
979static struct attribute *macb_mii_attrs[] = { 979static struct attribute *macb_mii_attrs[] = {
980 &class_device_attr_bmcr.attr, 980 &dev_attr_bmcr.attr,
981 &class_device_attr_bmsr.attr, 981 &dev_attr_bmsr.attr,
982 &class_device_attr_physid1.attr, 982 &dev_attr_physid1.attr,
983 &class_device_attr_physid2.attr, 983 &dev_attr_physid2.attr,
984 &class_device_attr_advertise.attr, 984 &dev_attr_advertise.attr,
985 &class_device_attr_lpa.attr, 985 &dev_attr_lpa.attr,
986 &class_device_attr_expansion.attr, 986 &dev_attr_expansion.attr,
987 NULL, 987 NULL,
988}; 988};
989 989
@@ -994,17 +994,17 @@ static struct attribute_group macb_mii_group = {
994 994
995static void macb_unregister_sysfs(struct net_device *net) 995static void macb_unregister_sysfs(struct net_device *net)
996{ 996{
997 struct class_device *class_dev = &net->class_dev; 997 struct device *_dev = &net->dev;
998 998
999 sysfs_remove_group(&class_dev->kobj, &macb_mii_group); 999 sysfs_remove_group(&_dev->kobj, &macb_mii_group);
1000} 1000}
1001 1001
1002static int macb_register_sysfs(struct net_device *net) 1002static int macb_register_sysfs(struct net_device *net)
1003{ 1003{
1004 struct class_device *class_dev = &net->class_dev; 1004 struct device *_dev = &net->dev;
1005 int ret; 1005 int ret;
1006 1006
1007 ret = sysfs_create_group(&class_dev->kobj, &macb_mii_group); 1007 ret = sysfs_create_group(&_dev->kobj, &macb_mii_group);
1008 if (ret) 1008 if (ret)
1009 printk(KERN_WARNING 1009 printk(KERN_WARNING
1010 "%s: sysfs mii attribute registration failed: %d\n", 1010 "%s: sysfs mii attribute registration failed: %d\n",
@@ -1046,6 +1046,14 @@ static int __devinit macb_probe(struct platform_device *pdev)
1046 1046
1047 spin_lock_init(&bp->lock); 1047 spin_lock_init(&bp->lock);
1048 1048
1049#if defined(CONFIG_ARCH_AT91)
1050 bp->pclk = clk_get(&pdev->dev, "macb_clk");
1051 if (IS_ERR(bp->pclk)) {
1052 dev_err(&pdev->dev, "failed to get macb_clk\n");
1053 goto err_out_free_dev;
1054 }
1055 clk_enable(bp->pclk);
1056#else
1049 bp->pclk = clk_get(&pdev->dev, "pclk"); 1057 bp->pclk = clk_get(&pdev->dev, "pclk");
1050 if (IS_ERR(bp->pclk)) { 1058 if (IS_ERR(bp->pclk)) {
1051 dev_err(&pdev->dev, "failed to get pclk\n"); 1059 dev_err(&pdev->dev, "failed to get pclk\n");
@@ -1059,6 +1067,7 @@ static int __devinit macb_probe(struct platform_device *pdev)
1059 1067
1060 clk_enable(bp->pclk); 1068 clk_enable(bp->pclk);
1061 clk_enable(bp->hclk); 1069 clk_enable(bp->hclk);
1070#endif
1062 1071
1063 bp->regs = ioremap(regs->start, regs->end - regs->start + 1); 1072 bp->regs = ioremap(regs->start, regs->end - regs->start + 1);
1064 if (!bp->regs) { 1073 if (!bp->regs) {
@@ -1119,9 +1128,17 @@ static int __devinit macb_probe(struct platform_device *pdev)
1119 1128
1120 pdata = pdev->dev.platform_data; 1129 pdata = pdev->dev.platform_data;
1121 if (pdata && pdata->is_rmii) 1130 if (pdata && pdata->is_rmii)
1131#if defined(CONFIG_ARCH_AT91)
1132 macb_writel(bp, USRIO, (MACB_BIT(RMII) | MACB_BIT(CLKEN)) );
1133#else
1122 macb_writel(bp, USRIO, 0); 1134 macb_writel(bp, USRIO, 0);
1135#endif
1123 else 1136 else
1137#if defined(CONFIG_ARCH_AT91)
1138 macb_writel(bp, USRIO, MACB_BIT(CLKEN));
1139#else
1124 macb_writel(bp, USRIO, MACB_BIT(MII)); 1140 macb_writel(bp, USRIO, MACB_BIT(MII));
1141#endif
1125 1142
1126 bp->tx_pending = DEF_TX_RING_PENDING; 1143 bp->tx_pending = DEF_TX_RING_PENDING;
1127 1144
@@ -1148,9 +1165,11 @@ err_out_free_irq:
1148err_out_iounmap: 1165err_out_iounmap:
1149 iounmap(bp->regs); 1166 iounmap(bp->regs);
1150err_out_disable_clocks: 1167err_out_disable_clocks:
1168#ifndef CONFIG_ARCH_AT91
1151 clk_disable(bp->hclk); 1169 clk_disable(bp->hclk);
1152 clk_disable(bp->pclk);
1153 clk_put(bp->hclk); 1170 clk_put(bp->hclk);
1171#endif
1172 clk_disable(bp->pclk);
1154err_out_put_pclk: 1173err_out_put_pclk:
1155 clk_put(bp->pclk); 1174 clk_put(bp->pclk);
1156err_out_free_dev: 1175err_out_free_dev:
@@ -1173,9 +1192,11 @@ static int __devexit macb_remove(struct platform_device *pdev)
1173 unregister_netdev(dev); 1192 unregister_netdev(dev);
1174 free_irq(dev->irq, dev); 1193 free_irq(dev->irq, dev);
1175 iounmap(bp->regs); 1194 iounmap(bp->regs);
1195#ifndef CONFIG_ARCH_AT91
1176 clk_disable(bp->hclk); 1196 clk_disable(bp->hclk);
1177 clk_disable(bp->pclk);
1178 clk_put(bp->hclk); 1197 clk_put(bp->hclk);
1198#endif
1199 clk_disable(bp->pclk);
1179 clk_put(bp->pclk); 1200 clk_put(bp->pclk);
1180 free_netdev(dev); 1201 free_netdev(dev);
1181 platform_set_drvdata(pdev, NULL); 1202 platform_set_drvdata(pdev, NULL);