Andres Salomon wrote:
> Greg KH wrote:
>   
>> On Thu, Jan 11, 2007 at 09:29:54PM +0000, Chris Ball wrote:
>>     
>>>>> On Thu, 11 Jan 2007 18:55:05, Rui Santos <[EMAIL PROTECTED]> said:
>>>>>           
>>>    > Hi, By applying this patch on kernel 2.6.19.1 the effect is the
>>>    > opposite on some Network Cards.  The Hardware I used to test it was
>>>    > 'D-Link DUB-E100 Rev. B1' and 'D-Link DUB-E100 Rev. B1
>>>    > Alternate'. It works without the patch, and stops working after
>>>    > applying it.  The Network Card is detected, the driver is loaded
>>>    > with no apparent errors, the ethtool seems to report the same
>>>    > applied settings but, not even a ping gets trough.
>>>
>>> Confirmed, our DUB-E100s stop working with this patch too.
>>>       
>> Not good.  David, any thoughts?
>>
>> thanks,
>>
>> greg k-h
>>     
>
> Does the attached patch work for you folks?  The original patch causes
> the driver to always use the external PHY; something we don't want if
> the hardware is telling us that we should be using an internal PHY.
> This patch checks whether to not to use the internal phy.
>   
Both 'D-Link DUB-E100 Rev. B1' and 'D-Link DUB-E100 Rev. B1 Alternate'
work with this patch applied on 2.6.19.2. Chris, can you confirm ?

I'd also like to remember ( forgot on my first email ), that this issue
does not apply to 'D-Link DUB-E100 Original' (Rev. Ax), which have an
AX88172 chip instead of the AX88772 one.

>   
> ------------------------------------------------------------------------
>
> >From c9aabfc121a62b12e35223482c4aa132b12d9fd1 Mon Sep 17 00:00:00 2001
> From: Andres Salomon <[EMAIL PROTECTED]>
> Date: Thu, 11 Jan 2007 18:39:16 -0500
> Subject: [PATCH] asix: Detect internal PHY and enable/use accordingly
>
> Different AX88772 dongles use different PHYs; the chip is capable of using
> both a primary and secondary PHY, and supports an internal and external PHY.
>
> It appears that some DUB-E100 devices use the internal PHY, so trying to use
> an external one will not work (note that this is different across revisions,
> as well; the "A" and "B" revs of the DUB-E100 use different PHYs!).  The data
> sheet for the AX88772 chip specifies that the internal PHY id will be 0x10,
> so if that's read from the EEPROM, we should use that rather than attempting
> to use an external PHY.
>
> Thanks to Mitch Bradley for pointing this out!
>
> Signed-off-by: Andres Salomon <[EMAIL PROTECTED]>
> ---
>  drivers/usb/net/asix.c |   18 +++++++++++++-----
>  1 files changed, 13 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/usb/net/asix.c b/drivers/usb/net/asix.c
> index f538013..896449f 100644
> --- a/drivers/usb/net/asix.c
> +++ b/drivers/usb/net/asix.c
> @@ -898,7 +898,7 @@ static int ax88772_link_reset(struct usb
>  
>  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 *d
>                       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 *d
>               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);
>   

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to