aboutsummaryrefslogtreecommitdiff
path: root/drivers/usb/net/asix.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-01-22 13:14:16 -0800
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-01-22 13:14:16 -0800
commit39470bf24d93927bb27929b9f0d52ff5d608cfcb (patch)
tree36c5f47fbf29f58f96970083a7e0d44d34cdf81d /drivers/usb/net/asix.c
parent2596627c5c30b45aa206b7b1b864bf00de3c3503 (diff)
parent39559b4ff89e390c42633d23d257e793a1177e03 (diff)
Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/usb-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/gregkh/usb-2.6: USB: unusual_devs.h entry for nokia 6233 USB: Fix for typo in ohci-ep93xx.c USB: disable USB_MULTITHREAD_PROBE USB: add vendor/device id for Option GT Max 3.6 cards USB: unusual_devs.h for 0x046b:ff40 USB: make usbhid ignore Imation Disc Stakka USB: rndis_host: fix crash while probing a Nokia S60 mobile USB: asix: Detect internal PHY and enable/use accordingly usbtouchscreen: make ITM screens report BTN_TOUCH as zero when not touched
Diffstat (limited to 'drivers/usb/net/asix.c')
-rw-r--r--drivers/usb/net/asix.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/drivers/usb/net/asix.c b/drivers/usb/net/asix.c
index f538013965b..896449f0cf8 100644
--- a/drivers/usb/net/asix.c
+++ b/drivers/usb/net/asix.c
@@ -898,7 +898,7 @@ static int ax88772_link_reset(struct usbnet *dev)
static int ax88772_bind(struct usbnet *dev, struct usb_interface *intf)
{
- int ret;
+ int ret, embd_phy;
void *buf;
u16 rx_ctl;
struct asix_data *data = (struct asix_data *)&dev->data;
@@ -919,13 +919,15 @@ static int ax88772_bind(struct usbnet *dev, struct usb_interface *intf)
AX_GPIO_RSE | AX_GPIO_GPO_2 | AX_GPIO_GPO2EN, 5)) < 0)
goto out2;
+ /* 0x10 is the phy id of the embedded 10/100 ethernet phy */
+ embd_phy = ((asix_get_phy_addr(dev) & 0x1f) == 0x10 ? 1 : 0);
if ((ret = asix_write_cmd(dev, AX_CMD_SW_PHY_SELECT,
- 1, 0, 0, buf)) < 0) {
+ embd_phy, 0, 0, buf)) < 0) {
dbg("Select PHY #1 failed: %d", ret);
goto out2;
}
- if ((ret = asix_sw_reset(dev, AX_SWRESET_IPPD)) < 0)
+ if ((ret = asix_sw_reset(dev, AX_SWRESET_IPPD | AX_SWRESET_PRL)) < 0)
goto out2;
msleep(150);
@@ -933,8 +935,14 @@ static int ax88772_bind(struct usbnet *dev, struct usb_interface *intf)
goto out2;
msleep(150);
- if ((ret = asix_sw_reset(dev, AX_SWRESET_IPRL | AX_SWRESET_PRL)) < 0)
- goto out2;
+ if (embd_phy) {
+ if ((ret = asix_sw_reset(dev, AX_SWRESET_IPRL)) < 0)
+ goto out2;
+ }
+ else {
+ if ((ret = asix_sw_reset(dev, AX_SWRESET_PRTE)) < 0)
+ goto out2;
+ }
msleep(150);
rx_ctl = asix_read_rx_ctl(dev);