diff options
Diffstat (limited to 'drivers/net/macb.c')
-rw-r--r-- | drivers/net/macb.c | 61 |
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 | ||
948 | static ssize_t macb_mii_show(const struct class_device *cd, char *buf, | 946 | static 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) \ |
965 | static ssize_t show_##name(struct class_device *cd, char *buf) \ | 963 | static 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 | } \ |
969 | static CLASS_DEVICE_ATTR(name, S_IRUGO, show_##name, NULL) | 969 | static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL) |
970 | 970 | ||
971 | MII_ENTRY(bmcr, MII_BMCR); | 971 | MII_ENTRY(bmcr, MII_BMCR); |
972 | MII_ENTRY(bmsr, MII_BMSR); | 972 | MII_ENTRY(bmsr, MII_BMSR); |
@@ -977,13 +977,13 @@ MII_ENTRY(lpa, MII_LPA); | |||
977 | MII_ENTRY(expansion, MII_EXPANSION); | 977 | MII_ENTRY(expansion, MII_EXPANSION); |
978 | 978 | ||
979 | static struct attribute *macb_mii_attrs[] = { | 979 | static 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 | ||
995 | static void macb_unregister_sysfs(struct net_device *net) | 995 | static 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 | ||
1002 | static int macb_register_sysfs(struct net_device *net) | 1002 | static 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: | |||
1148 | err_out_iounmap: | 1165 | err_out_iounmap: |
1149 | iounmap(bp->regs); | 1166 | iounmap(bp->regs); |
1150 | err_out_disable_clocks: | 1167 | err_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); | ||
1154 | err_out_put_pclk: | 1173 | err_out_put_pclk: |
1155 | clk_put(bp->pclk); | 1174 | clk_put(bp->pclk); |
1156 | err_out_free_dev: | 1175 | err_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); |