]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - drivers/usb/gadget/f_mass_storage.c
usb: f_mass_storage: sleep_thread: retrigger watchdog
[karo-tx-uboot.git] / drivers / usb / gadget / f_mass_storage.c
index 6374bb953a94478bbf469b09b52756e18796fac4..f30b4f812e6d4b8495e8b08fc0c59bb84e9ce851 100644 (file)
 #include <malloc.h>
 #include <common.h>
 #include <g_dnl.h>
+#include <watchdog.h>
 
 #include <linux/err.h>
 #include <linux/usb/ch9.h>
@@ -671,7 +672,7 @@ static int sleep_thread(struct fsg_common *common)
                if (common->thread_wakeup_needed)
                        break;
 
-               if (++i == 50000) {
+               if (++i == 20000) {
                        busy_indicator();
                        i = 0;
                        k++;
@@ -682,6 +683,8 @@ static int sleep_thread(struct fsg_common *common)
                        if (ctrlc())
                                return -EPIPE;
 
+                       WATCHDOG_RESET();
+
                        /* Check cable connection */
                        if (!g_dnl_board_usb_cable_connected())
                                return -EIO;
@@ -689,7 +692,7 @@ static int sleep_thread(struct fsg_common *common)
                        k = 0;
                }
 
-               usb_gadget_handle_interrupts();
+               usb_gadget_handle_interrupts(0);
        }
        common->thread_wakeup_needed = 0;
        return rc;
@@ -973,7 +976,7 @@ static int do_write(struct fsg_common *common)
 
                        /* If an error occurred, report it and its position */
                        if (nwritten < amount) {
-                               printf("nwritten:%d amount:%d\n", nwritten,
+                               printf("nwritten:%zd amount:%u\n", nwritten,
                                       amount);
                                curlun->sense_data = SS_WRITE_ERROR;
                                curlun->info_valid = 1;
@@ -1110,6 +1113,7 @@ static int do_inquiry(struct fsg_common *common, struct fsg_buffhd *bh)
 
        memset(buf, 0, 8);
        buf[0] = TYPE_DISK;
+       buf[1] = curlun->removable ? 0x80 : 0;
        buf[2] = 2;             /* ANSI SCSI level 2 */
        buf[3] = 2;             /* SCSI-2 INQUIRY data format */
        buf[4] = 31;            /* Additional length */
@@ -2462,12 +2466,12 @@ static struct fsg_common *fsg_common_init(struct fsg_common *common,
 
        /* Allocate? */
        if (!common) {
-               common = calloc(sizeof *common, 1);
+               common = calloc(sizeof(*common), 1);
                if (!common)
                        return ERR_PTR(-ENOMEM);
                common->free_storage_on_release = 1;
        } else {
-               memset(common, 0, sizeof common);
+               memset(common, 0, sizeof(*common));
                common->free_storage_on_release = 0;
        }