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