USB Stall issue

We have found some USB controllers stall when the driver issues USB requests to the controller.

This hardware stall can sometimes result in a lockup in the USB interface module we utilise in the driver to handle the USB interface.

The USB requests that UPDD issues are as follows:

Request Description 
Set alternate interface This is a feature we have never seen used for a touchscreen, however we have seen devices where not explicitly setting alternate 0 caused a failure. For this reason the driver always explicitly sets alternate 0 for all utilised interfaces unless this option is disabled as described below.
Get max contacts This is issued to determine the number of supported contacts if the HID Report Descriptor indicates a multi-touch device.
Set device mode This is issued to set multi-touch mode if the HID Report Descriptor indicates a multi-touch device .

We have seen the Set Device Mode stall a TPK, Fusion 4 and one other 'unknown' device.

When this happens the symptoms seen are:

1)      'No driver connection' is shown in UPDD Status.
2)      The bootstrap log has 'Issuing set device mode' as last entry.

It is often the case that the device defaults to multi-touch mode so does not need or is not expecting the 'set device mode' request.

Disabling USB requests

If it is discovered that these requests are having a negative affect on the device you can set a corresponding disable setting using the command line interface 'setall' command. The settings are disable_set_alt0, disable_get_max_contacts and disable_set_device _mode respectively and should be set to 1 to disable the request, i.e.

Upddutils setall disable_set_alt0 1
Upddutils setall disable_set_device_mode 1
Upddutils setall disable_get_max_contacts 1

It is hoped that in some future release of the USB interface we will be able to detect the stall, retry the failing command and then continue.