return quirks;
 }
 
+static int i2c_hid_probe_address(struct i2c_hid *ihid)
+{
+       int ret;
+
+       /*
+        * Some STM-based devices need 400µs after a rising clock edge to wake
+        * from deep sleep, in which case the first read will fail. Try after a
+        * short sleep to see if the device came alive on the bus. Certain
+        * Weida Tech devices also need this.
+        */
+       ret = i2c_smbus_read_byte(ihid->client);
+       if (ret < 0) {
+               usleep_range(400, 500);
+               ret = i2c_smbus_read_byte(ihid->client);
+       }
+       return ret < 0 ? ret : 0;
+}
+
 static int i2c_hid_xfer(struct i2c_hid *ihid,
                        u8 *send_buf, int send_len, u8 *recv_buf, int recv_len)
 {
        struct hid_device *hid = ihid->hid;
        int ret;
 
-       /* Make sure there is something at this address */
-       ret = i2c_smbus_read_byte(client);
+       ret = i2c_hid_probe_address(ihid);
        if (ret < 0) {
                i2c_hid_dbg(ihid, "nothing at this address: %d\n", ret);
                return -ENXIO;