mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-08-20 21:48:59 +03:00
[AR7] fix cpmac in a more elegant way, thanks Anton Vorontsov
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@10546 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
758e1cc135
commit
d1a05fa1eb
@ -1,27 +1,98 @@
|
|||||||
--- linux-2.6.24.2/drivers/net/cpmac.c 2008-03-05 13:45:56.000000000 +0100
|
From 0daaa095cefd9d7091a7ccce2ff89f1ff4feae7a Mon Sep 17 00:00:00 2001
|
||||||
+++ linux-2.6.24.2/drivers/net/cpmac.c 2008-03-05 13:46:24.000000000 +0100
|
From: Anton Vorontsov <avorontsov@ru.mvista.com>
|
||||||
@@ -841,7 +841,8 @@
|
Date: Wed, 5 Mar 2008 14:52:26 +0300
|
||||||
int new_state = 0;
|
Subject: [PATCH] AR7/cpmac: convert to new fixed phy infrastructure, now for real
|
||||||
|
|
||||||
spin_lock(&priv->lock);
|
This patch converts platform code to register fixed phys early.
|
||||||
- if (priv->phy->link) {
|
cpmac driver modified to blindly accept fixed phy id (that is equal
|
||||||
+ if (1 /* priv->phy->link */ ) {
|
to platform device id).
|
||||||
+ netif_carrier_on(dev);
|
|
||||||
netif_start_queue(dev);
|
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
|
||||||
if (priv->phy->duplex != priv->oldduplex) {
|
---
|
||||||
new_state = 1;
|
arch/mips/ar7/platform.c | 17 +++++++++++++++++
|
||||||
@@ -853,11 +854,11 @@
|
drivers/net/cpmac.c | 19 +++----------------
|
||||||
priv->oldspeed = priv->phy->speed;
|
2 files changed, 20 insertions(+), 16 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/arch/mips/ar7/platform.c b/arch/mips/ar7/platform.c
|
||||||
|
index 22c79f5..02bd574 100644
|
||||||
|
--- a/arch/mips/ar7/platform.c
|
||||||
|
+++ b/arch/mips/ar7/platform.c
|
||||||
|
@@ -32,6 +32,8 @@
|
||||||
|
#include <linux/vlynq.h>
|
||||||
|
#include <linux/leds.h>
|
||||||
|
#include <linux/string.h>
|
||||||
|
+#include <linux/phy.h>
|
||||||
|
+#include <linux/phy_fixed.h>
|
||||||
|
|
||||||
|
#include <asm/addrspace.h>
|
||||||
|
#include <asm/ar7/ar7.h>
|
||||||
|
@@ -204,6 +206,13 @@ static struct physmap_flash_data physmap_flash_data = {
|
||||||
|
.width = 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
+/* lets assume this is suitable for both high and low cpmacs links */
|
||||||
|
+static struct fixed_phy_status fixed_phy_status __initdata = {
|
||||||
|
+ .link = 1,
|
||||||
|
+ .speed = 100,
|
||||||
|
+ .duplex = 1,
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
static struct plat_cpmac_data cpmac_low_data = {
|
||||||
|
.reset_bit = 17,
|
||||||
|
.power_bit = 20,
|
||||||
|
@@ -505,6 +514,10 @@ static int __init ar7_register_devices(void)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ar7_has_high_cpmac()) {
|
||||||
|
+ res = fixed_phy_add(PHY_POLL, cpmac_high.id, &fixed_phy_status);
|
||||||
|
+ if (res && res != -ENODEV)
|
||||||
|
+ return res;
|
||||||
|
+
|
||||||
|
cpmac_get_mac(1, cpmac_high_data.dev_addr);
|
||||||
|
res = platform_device_register(&cpmac_high);
|
||||||
|
if (res)
|
||||||
|
@@ -513,6 +526,10 @@ static int __init ar7_register_devices(void)
|
||||||
|
cpmac_low_data.phy_mask = 0xffffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ res = fixed_phy_add(PHY_POLL, cpmac_low.id, &fixed_phy_status);
|
||||||
|
+ if (res && res != -ENODEV)
|
||||||
|
+ return res;
|
||||||
|
+
|
||||||
|
cpmac_get_mac(0, cpmac_low_data.dev_addr);
|
||||||
|
res = platform_device_register(&cpmac_low);
|
||||||
|
if (res)
|
||||||
|
diff --git a/drivers/net/cpmac.c b/drivers/net/cpmac.c
|
||||||
|
index ac5a8c4..dbac01d 100644
|
||||||
|
--- a/drivers/net/cpmac.c
|
||||||
|
+++ b/drivers/net/cpmac.c
|
||||||
|
@@ -1034,23 +1034,10 @@ static int __devinit cpmac_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
|
if (phy_id == PHY_MAX_ADDR) {
|
||||||
|
if (external_switch || dumb_switch) {
|
||||||
|
- struct fixed_phy_status status = {};
|
||||||
|
-
|
||||||
|
- mdio_bus_id = 0;
|
||||||
|
-
|
||||||
|
- /*
|
||||||
|
- * FIXME: this should be in the platform code!
|
||||||
|
- * Since there is not platform code at all (that is,
|
||||||
|
- * no mainline users of that driver), place it here
|
||||||
|
- * for now.
|
||||||
|
- */
|
||||||
|
- phy_id = 0;
|
||||||
|
- status.link = 1;
|
||||||
|
- status.duplex = 1;
|
||||||
|
- status.speed = 100;
|
||||||
|
- fixed_phy_add(PHY_POLL, phy_id, &status);
|
||||||
|
+ mdio_bus_id = 0; /* fixed phys bus */
|
||||||
|
+ phy_id = pdev->id;
|
||||||
|
} else {
|
||||||
|
- printk(KERN_ERR "cpmac: no PHY present\n");
|
||||||
|
+ dev_err(&pdev->dev, "no PHY present\n");
|
||||||
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
--
|
||||||
|
1.5.2.2
|
||||||
|
|
||||||
- if (!priv->oldlink) {
|
|
||||||
+ /*if (!priv->oldlink) {
|
|
||||||
new_state = 1;
|
|
||||||
- priv->oldlink = 1;
|
|
||||||
+ priv->oldlink = 1;*/
|
|
||||||
netif_schedule(dev);
|
|
||||||
- }
|
|
||||||
+ /*}*/
|
|
||||||
} else if (priv->oldlink) {
|
|
||||||
netif_stop_queue(dev);
|
|
||||||
new_state = 1;
|
|
||||||
|
Loading…
Reference in New Issue
Block a user