Hello,

We are developping hardware based on Freescale's i.MX31 SoC. I'm working on 
the Linux support of our devices. Currently I'm running tests on a mx31ADS 
dev board with Freescale 2.6.16.19 kernel release (which can be found here: 
http://www.bitshrine.org/autodocs/bsp_ext_ava_imx31ads.html)

First I found this very interesting post on this mailing-list: 
http://sourceforge.net/mailarchive/message.php?msg_id=38134069. From what I 
read in this post, the USB block used in i.MX31 is very similar to the one 
used in MPC834x family. Could someone confirm this and quickly explain the 
differences in the USB blocks ? 

Since MPC834x USB module seems to be already quite well advanced, I would be 
happy to try to port the work which was done for i.MX31 in order to help 
i.MX31 mainline support, or at least help me to have a functionnal USB 
support on our i.MX31 hardware.

Now I have a more precise question about the actual implementation of 
Freescale i.MX31 kernel release (here is the patch: 
http://bitshrine.org/gpp/linux-2.6.16-mx31-usb-2.patch). It works well, but 
only with low-current devices (I have tested the ehci support with USB 
pendrive flash disk). But when I try to plug in some higher current consumers 
like a wifi pendrive for instance, which needs 300 mA, the configuration is 
rejected because of this from the choose_configuration function in 
drivers/usb/core/hub.c :

>               /*
>                * The next test may not be as effective as it should be.
>                * Some hubs have errors in their descriptor, claiming
>                * to be self-powered when they are really bus-powered.
>                * We will overestimate the amount of current such hubs
>                * make available for each port.
>                *
>                * This is a fairly benign sort of failure.  It won't
>                * cause us to reject configurations that we should have
>                * accepted.
>                */
>
>               /* Rule out configs that draw too much bus current */
>               if (c->desc.bMaxPower * 2 > udev->bus_mA)
>                       continue;

>From what I understand (I'm not very familiar with kernel USB code) 
c->desc.bMaxPower is what the hub makes available for each port and 
udev->bus_mA is what the device requests. This has failed for me with a 
device requesting 300 mA.

Now I was not able to find in the code where this limit is fixed for my ehci 
hardware. Because I haven't found a current limitation in the USB block or 
transceiver (Phillips ISP1504) documentation (quick look).

Thank you for your help.

Valentin Longchamp

-------------------------------------------------------------------------
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