USB: gadget: f_accessory: Clear accessory strings when USB is disconnected
authorMike Lockwood <lockwood@android.com>
Thu, 10 Mar 2011 21:12:49 +0000 (16:12 -0500)
committerMike Lockwood <lockwood@android.com>
Thu, 10 Mar 2011 21:48:34 +0000 (16:48 -0500)
Signed-off-by: Mike Lockwood <lockwood@android.com>
drivers/usb/gadget/f_accessory.c

index 2ebc0363843e336d1c5388a38d64ab700612cb23..ef21c05caaedca210a1f348d6ebe5313a55b6f36 100644 (file)
@@ -216,14 +216,25 @@ static struct usb_request *req_get(struct acc_dev *dev, struct list_head *head)
        return req;
 }
 
+static void acc_set_disconnected(struct acc_dev *dev)
+{
+       dev->online = 0;
+       dev->disconnected = 1;
+
+       /* clear all accessory strings */
+       memset(dev->manufacturer, 0, sizeof(dev->manufacturer));
+       memset(dev->model, 0, sizeof(dev->model));
+       memset(dev->description, 0, sizeof(dev->description));
+       memset(dev->version, 0, sizeof(dev->version));
+       memset(dev->uri, 0, sizeof(dev->uri));
+}
+
 static void acc_complete_in(struct usb_ep *ep, struct usb_request *req)
 {
        struct acc_dev *dev = _acc_dev;
 
-       if (req->status != 0) {
-               dev->online = 0;
-               dev->disconnected = 1;
-       }
+       if (req->status != 0)
+               acc_set_disconnected(dev);
 
        req_put(dev, &dev->tx_idle, req);
 
@@ -235,10 +246,8 @@ static void acc_complete_out(struct usb_ep *ep, struct usb_request *req)
        struct acc_dev *dev = _acc_dev;
 
        dev->rx_done = 1;
-       if (req->status != 0) {
-               dev->online = 0;
-               dev->disconnected = 1;
-       }
+       if (req->status != 0)
+               acc_set_disconnected(dev);
 
        wake_up(&dev->read_wq);
 }
@@ -706,7 +715,7 @@ static void acc_function_disable(struct usb_function *f)
        struct usb_composite_dev        *cdev = dev->cdev;
 
        DBG(cdev, "acc_function_disable\n");
-       dev->online = 0;
+       acc_set_disconnected(dev);
        usb_ep_disable(dev->ep_in);
        usb_ep_disable(dev->ep_out);