]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/sysclk-lwla/api.c
sysclk-lwla: Use static array for init sequence
[libsigrok.git] / src / hardware / sysclk-lwla / api.c
index 516726a3fe865b684cd5e292866914b9fcba8dd1..36c9ee608bfc7dc05796437cae9728707ee8e023 100644 (file)
@@ -23,7 +23,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <libsigrok/libsigrok.h>
-#include "libsigrok-internal.h"
+#include <libsigrok-internal.h>
 #include "protocol.h"
 
 /* Supported device scan options.
@@ -325,12 +325,17 @@ static int dev_open(struct sr_dev_inst *sdi)
        }
 
        ret = drain_usb(usb, EP_REPLY);
-       if (ret != SR_OK)
+       if (ret != SR_OK) {
+               sr_usb_close(usb);
                return ret;
+       }
+       /* This delay appears to be necessary for reliable operation. */
+       g_usleep(30 * 1000);
 
        sdi->status = SR_ST_ACTIVE;
 
        devc->active_fpga_config = FPGA_NOCONF;
+       devc->short_transfer_quirk = FALSE;
        devc->state = STATE_IDLE;
 
        ret = (*devc->model->apply_fpga_config)(sdi);
@@ -341,8 +346,12 @@ static int dev_open(struct sr_dev_inst *sdi)
        if (ret != SR_OK) {
                sdi->status = SR_ST_INACTIVE;
                sr_usb_close(usb);
+               return ret;
        }
-       return ret;
+       if (devc->short_transfer_quirk)
+               sr_warn("Short transfer quirk detected! "
+                       "Memory reads will be slow.");
+       return SR_OK;
 }
 
 /* Shutdown and close device.