|
|
| Line 261: |
Line 261: |
| *** 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>
| |
| 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>
| |
| 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>
| |
| 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>
| |
| 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>
| |
| 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> | | </pre> |