Editing User:Joerg rw/hostmode/summary

Warning: You are not logged in. Your IP address will be recorded in this page's edit history.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 130: Line 130:
*** SESSREQ (Session request) interrupt preconditions?
*** SESSREQ (Session request) interrupt preconditions?
*** CONNECT interrupt preconditions?
*** CONNECT interrupt preconditions?
 +
<pre>
 +
N900 (rx51) hostmode notes
 +
 +
There were several (semi-) successful encounters of using the
 +
hostmode, some via tricking the OTG statemachine, some via
 +
implementing the FORCE_HOST testmode properly, we'll concentrate on
 +
the latter
 +
 +
* Hardware
 +
The detailed overview is at http://wiki.maemo.org/N900_Hardware_USB
 +
 +
** There're leaked schematics
 +
 +
** There're datasheets for SoC (spurf98d is the best version) and
 +
ISP1707/1074
 +
 +
** Comparision with N8x0
 +
*** Same USB core
 +
*** N8x0 uses a discrete component TUSB6010 that integrates musb core and phy
 +
while N900 uses SoC-integrated musb with ISP1707 PHY via ULPI link
 +
*** ID pin of the USB core on N8x0 can be forcibly grounded
 +
programmatically, thus activating the host mode in the core, not
 +
possible with ISP1707
 +
*** ID pin is connected to the micro-usb receptable on N8x0, but some
 +
stupid decided to not route it to ISP1707 on N900 (he routed it to
 +
TWL4030 instead)
 +
 +
** The battery charger chip is controlled via i2c and can
 +
supply 5V/200mA on usb vbus when asked to.
 +
** twl4030 has connection to the ID pin and can sense it
 +
OTG-like operation (at least automatic switching to/from hostmode)
 +
possible?
 +
 +
 +
* Software
 +
** Driver
 +
*** Shitty
 +
*** There's a considerably improved version at linux-omap
 +
(nobody's tried to use it on N900 so far)
 +
*** Needs implementation of forced hostmode via one of the testmodes
 +
See the patchsets in the repository, there're no incremental patches
 +
accompanied by the meaningful logs (yet); when it starts working,
 +
implement it in a separate file as a "platform" function for ``echo
 +
host >/sys/devices/platform/musb_hdrc/mode'' to start working.
 +
*** Needs (why?) disabling of some current limiting features
 +
diff --git a/drivers/usb/core/generic.c b/drivers/usb/core/generic.c
 +
index 7e912f2..b51e5ea 100644
 +
--- a/drivers/usb/core/generic.c
 +
+++ b/drivers/usb/core/generic.c
 +
@@ -97,10 +97,10 @@ int usb_choose_configuration(struct usb_device *udev)
 +
                */
 +
 +
                /* Rule out configs that draw too much bus current */
 +
-              if (c->desc.bMaxPower * 2 > udev->bus_mA) {
 +
+              /*if (c->desc.bMaxPower * 2 > udev->bus_mA) {
 +
                        insufficient_power++;
 +
                        continue;
 +
-              }
 +
+              }*/
 +
 +
                /* When the first config's first interface is one of Microsoft's
 +
                * pet nonstandard Ethernet-over-USB protocols, ignore it unless
 +
@@ -132,10 +132,10 @@ int usb_choose_configuration(struct usb_device *udev)
 +
                        best = c;
 +
        }
 +
 +
-      if (insufficient_power > 0)
 +
+      /*if (insufficient_power > 0)
 +
                dev_info(&udev->dev, "rejected %d configuration%s "
 +
                        "due to insufficient available bus power\n",
 +
-                      insufficient_power, plural(insufficient_power));
 +
+                      insufficient_power, plural(insufficient_power));*/
 +
 +
        if (best) {
 +
                i = best->desc.bConfigurationValue;
 +
 +
*** Needs (why?) disabling of some suspend features
 +
diff --git a/drivers/usb/otg/twl4030-usb.c b/drivers/usb/otg/twl4030-usb.c
 +
index ecffb2a..1577e7a 100644
 +
--- a/drivers/usb/otg/twl4030-usb.c
 +
+++ b/drivers/usb/otg/twl4030-usb.c
 +
@@ -480,7 +480,7 @@ extern void musb_restore_ctx_and_resume(struct usb_gadget *gadget);
 +
 +
static void twl4030_phy_suspend(struct twl4030_usb *twl, int controller_off)
 +
{
 +
-      if (twl->asleep)
 +
+      if (!twl->asleep)
 +
                return;
 +
 +
        twl4030_phy_power(twl, 0);
 +
 +
*** Needs (why?) manual step-through to get device recognised, enumerated, etc
 +
pcsuite-enable.sh
 +
echo H >/proc/driver/musb_hdrc
 +
echo host >/sys/devices/platform/musb_hdrc/mode
 +
echo e > /proc/driver/musb_hdrc
 +
echo F > /proc/driver/musb_hdrc
 +
echo host >/sys/devices/platform/musb_hdrc/mode
 +
echo H >/proc/driver/musb_hdrc
 +
echo I > /proc/driver/musb_hdrc
 +
echo host >/sys/devices/platform/musb_hdrc/mode
 +
echo H >/proc/driver/musb_hdrc
 +
echo "Done echo'ing"
 +
#echo "Connect the flash drive in 3 seconds!"
 +
stop bme; sleep 3; i2cset -y -m 0x07 2 0x6b 0x01 0x05; while true; do sleep 28; i2cset -y -m 0x80 2 0x6b 0x00 0x80; done
 +
 +
*** How can it switch out of "waiting Vbus to rise" state?
 +
*** No way to distinguish between full-speed and high-speed modes
 +
by just looking at the D+, D- states (via debug register of isp1704),
 +
needs special care
 +
 +
** BME
 +
*** Messes with charging so should be disabled
 +
stop bme
 +
*** Incapable of providing VBUS to external device
 +
One can use ``i2cset -y -m 0x07 2 0x6b 0x01 0x05'' instead to enable
 +
the reverse boost converter and ``i2cset -y -m 0x80 2 0x6b 0x00 0x80''
 +
to disable
 +
 +
** twl4030-usb.c
 +
*** Gets in the way by switching states behind your back
 +
Switches state to b_idle if the ID pin is not grounded), so should be
 +
(at least partially) disabled.
 +
*** Is registered as an OTG controller
 +
Should we provide a minimal OTG driver for isp1407 instead? Or should
 +
we rather get the whole stuff somehow working and then try to port the
 +
upstream driver (it's supposed to be saner)?
 +
 +
** musb
 +
*** SESSREQ (Session request) interrupt preconditions?
 +
*** CONNECT interrupt preconditions?
 +
 +
</pre>

Learn more about Contributing to the wiki.


Please note that all contributions to maemo.org wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see maemo.org wiki:Copyrights for details). Do not submit copyrighted work without permission!


Cancel | Editing help (opens in new window)