A USB error during an I2C transfer can leave cp2112(4) blocked indefinitely, preventing USB detach and even reboot from completing.
cp2112iic_check_req_status() uses the status response without checking whether the exchange succeeded. A failed exchange can therefore reuse a stale busy response and retry indefinitely. The output callback also records an error without marking the transfer done, causing its waiter to sleep again.
Check the exchange result before using the response, and mark failed output transfers complete. Use absolute deadlines based on USB_DEFAULT_TIMEOUT (five seconds) for output and input condition-variable waits, and stop repeated busy status responses after the status loop's own deadline. Clear pending input state when the paired output request fails. These are per-wait and status-loop bounds; they do not impose a single five-second limit on the entire I2C operation.
Add HQ_HID_IGNORE entries for both VID/PID pairs matched by cp2112, so usbhid does not claim the interface ahead of the bridge driver. Define LUMANATE in usbdevs and use USB_VENDOR_LUMANATE for the existing 0x1009 entry in both device tables.
PR: 300017
Related hardware testing: D60989, the RNG90 I2C slave driver. This controller fix applies independently of that driver.