Re: [PATCH] mfd: omap-usb-tll: Fix inverted bit use for USB TLL mode
From: Roger Quadros
Date: Tue Apr 11 2017 - 03:31:37 EST
Hi Tony,
On 11/04/17 03:15, Tony Lindgren wrote:
> Commit 16fa3dc75c22 ("mfd: omap-usb-tll: HOST TLL platform driver")
> added support for USB TLL, but uses OMAP_TLL_CHANNEL_CONF_ULPINOBITSTUFF
> bit the wrong way. The comments in the code are mostly correct, but the
> inverted use of OMAP_TLL_CHANNEL_CONF_ULPINOBITSTUFF causes the register
> to be enabled instead of disabled like the comments say. And the
> idle mode should be only disabled for UTMIAUTOIDLE while ULPIAUTOIDLE
> can be enabled.
>
> This matches the TLL_CHANNEL_CONF_i register configuration for ehci-tll
> in the Motorola Linux kernel tree for Wrigley 3G LTE modem on droid 4.
> Without this patch the modem can only be pinged few times before it
> stops responding. Also lsub -v output shows errors without this patch.
This patch does 2 things.
- Fixes the bad commit by correctly disabling Bitstuffing
- Enables ULPI Autoidle.
Is enabling ULPI autoidle required to fix the LTE modem issue? If not I'd put it
in a separate patch.
cheers,
-roger
>
> Fixes: 16fa3dc75c22 ("mfd: omap-usb-tll: HOST TLL platform driver")
> Cc: Felipe Balbi <felipe.balbi@xxxxxxxxxxxxxxx>
> Cc: Keshava Munegowda <keshava_mgowda@xxxxxx>
> Cc: Marcel Partap <mpartap@xxxxxxx>
> Cc: Michael Scott <michael.scott@xxxxxxxxxx>
> Cc: Roger Quadros <rogerq@xxxxxx>
> Cc: Sebastian Reichel <sre@xxxxxxxxxx>
> Signed-off-by: Tony Lindgren <tony@xxxxxxxxxxx>
> ---
> drivers/mfd/omap-usb-tll.c | 11 ++++++-----
> 1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/mfd/omap-usb-tll.c b/drivers/mfd/omap-usb-tll.c
> --- a/drivers/mfd/omap-usb-tll.c
> +++ b/drivers/mfd/omap-usb-tll.c
> @@ -373,12 +373,13 @@ int omap_tll_init(struct usbhs_omap_platform_data *pdata)
> } else if (pdata->port_mode[i] ==
> OMAP_EHCI_PORT_MODE_TLL) {
> /*
> - * Disable AutoIdle, BitStuffing
> - * and use SDR Mode
> + * Disable UTMI AutoIdle, BitStuffing
> + * and use SDR Mode. Enable ULPI AutoIdle.
> */
> - reg &= ~(OMAP_TLL_CHANNEL_CONF_UTMIAUTOIDLE
> - | OMAP_TLL_CHANNEL_CONF_ULPINOBITSTUFF
> - | OMAP_TLL_CHANNEL_CONF_ULPIDDRMODE);
> + reg &= ~(OMAP_TLL_CHANNEL_CONF_UTMIAUTOIDLE |
> + OMAP_TLL_CHANNEL_CONF_ULPIDDRMODE);
> + reg |= OMAP_TLL_CHANNEL_CONF_ULPINOBITSTUFF;
> + reg |= OMAP_TLL_CHANNEL_CONF_ULPI_ULPIAUTOIDLE;
> } else if (pdata->port_mode[i] ==
> OMAP_EHCI_PORT_MODE_HSIC) {
> /*
>