cxacru: treat firmware data as const
[safe/jmp/linux-2.6] / drivers / usb / gadget / amd5536udc.c
index 66e10da..f261d2a 100644 (file)
@@ -328,6 +328,7 @@ udc_ep_enable(struct usb_ep *usbep, const struct usb_endpoint_descriptor *desc)
        u32                     tmp;
        unsigned long           iflags;
        u8 udc_csr_epix;
+       unsigned                maxpacket;
 
        if (!usbep
                        || usbep->name == ep0_string
@@ -354,9 +355,10 @@ udc_ep_enable(struct usb_ep *usbep, const struct usb_endpoint_descriptor *desc)
        writel(tmp, &dev->ep[ep->num].regs->ctl);
 
        /* set max packet size */
+       maxpacket = le16_to_cpu(desc->wMaxPacketSize);
        tmp = readl(&dev->ep[ep->num].regs->bufout_maxpkt);
-       tmp = AMD_ADDBITS(tmp, desc->wMaxPacketSize, UDC_EP_MAX_PKT_SIZE);
-       ep->ep.maxpacket = desc->wMaxPacketSize;
+       tmp = AMD_ADDBITS(tmp, maxpacket, UDC_EP_MAX_PKT_SIZE);
+       ep->ep.maxpacket = maxpacket;
        writel(tmp, &dev->ep[ep->num].regs->bufout_maxpkt);
 
        /* IN ep */
@@ -370,8 +372,8 @@ udc_ep_enable(struct usb_ep *usbep, const struct usb_endpoint_descriptor *desc)
                /* double buffering: fifo size = 2 x max packet size */
                tmp = AMD_ADDBITS(
                                tmp,
-                               desc->wMaxPacketSize * UDC_EPIN_BUFF_SIZE_MULT
-                                               / UDC_DWORD_BYTES,
+                               maxpacket * UDC_EPIN_BUFF_SIZE_MULT
+                                         / UDC_DWORD_BYTES,
                                UDC_EPIN_BUFF_SIZE);
                writel(tmp, &dev->ep[ep->num].regs->bufin_framenum);
 
@@ -390,7 +392,7 @@ udc_ep_enable(struct usb_ep *usbep, const struct usb_endpoint_descriptor *desc)
 
                /* set max packet size UDC CSR  */
                tmp = readl(&dev->csr->ne[ep->num - UDC_CSR_EP_OUT_IX_OFS]);
-               tmp = AMD_ADDBITS(tmp, desc->wMaxPacketSize,
+               tmp = AMD_ADDBITS(tmp, maxpacket,
                                        UDC_CSR_NE_MAX_PKT);
                writel(tmp, &dev->csr->ne[ep->num - UDC_CSR_EP_OUT_IX_OFS]);
 
@@ -407,7 +409,7 @@ udc_ep_enable(struct usb_ep *usbep, const struct usb_endpoint_descriptor *desc)
        /* set ep values */
        tmp = readl(&dev->csr->ne[udc_csr_epix]);
        /* max packet */
-       tmp = AMD_ADDBITS(tmp, desc->wMaxPacketSize, UDC_CSR_NE_MAX_PKT);
+       tmp = AMD_ADDBITS(tmp, maxpacket, UDC_CSR_NE_MAX_PKT);
        /* ep number */
        tmp = AMD_ADDBITS(tmp, desc->bEndpointAddress, UDC_CSR_NE_NUM);
        /* ep direction */
@@ -2038,6 +2040,7 @@ int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
        spin_unlock_irqrestore(&dev->lock, flags);
 
        driver->unbind(&dev->gadget);
+       dev->gadget.dev.driver = NULL;
        dev->driver = NULL;
 
        /* set SD */
@@ -2831,7 +2834,7 @@ __acquires(dev->lock)
                /* make usb request for gadget driver */
                memset(&setup_data, 0 , sizeof(union udc_setup_data));
                setup_data.request.bRequest = USB_REQ_SET_CONFIGURATION;
-               setup_data.request.wValue = dev->cur_config;
+               setup_data.request.wValue = cpu_to_le16(dev->cur_config);
 
                /* programm the NE registers */
                for (i = 0; i < UDC_EP_NUM; i++) {
@@ -2880,8 +2883,8 @@ __acquires(dev->lock)
                memset(&setup_data, 0 , sizeof(union udc_setup_data));
                setup_data.request.bRequest = USB_REQ_SET_INTERFACE;
                setup_data.request.bRequestType = USB_RECIP_INTERFACE;
-               setup_data.request.wValue = dev->cur_alt;
-               setup_data.request.wIndex = dev->cur_intf;
+               setup_data.request.wValue = cpu_to_le16(dev->cur_alt);
+               setup_data.request.wIndex = cpu_to_le16(dev->cur_intf);
 
                DBG(dev, "SET_INTERFACE interrupt: alt=%d intf=%d\n",
                                dev->cur_alt, dev->cur_intf);
@@ -3247,6 +3250,8 @@ static int udc_pci_probe(
 
        /* pci setup */
        if (pci_enable_device(pdev) < 0) {
+               kfree(dev);
+               dev = NULL;
                retval = -ENODEV;
                goto finished;
        }
@@ -3258,6 +3263,8 @@ static int udc_pci_probe(
 
        if (!request_mem_region(resource, len, name)) {
                dev_dbg(&pdev->dev, "pci device used already\n");
+               kfree(dev);
+               dev = NULL;
                retval = -EBUSY;
                goto finished;
        }
@@ -3266,18 +3273,24 @@ static int udc_pci_probe(
        dev->virt_addr = ioremap_nocache(resource, len);
        if (dev->virt_addr == NULL) {
                dev_dbg(&pdev->dev, "start address cannot be mapped\n");
+               kfree(dev);
+               dev = NULL;
                retval = -EFAULT;
                goto finished;
        }
 
        if (!pdev->irq) {
                dev_err(&dev->pdev->dev, "irq not set\n");
+               kfree(dev);
+               dev = NULL;
                retval = -ENODEV;
                goto finished;
        }
 
        if (request_irq(pdev->irq, udc_irq, IRQF_SHARED, name, dev) != 0) {
                dev_dbg(&dev->pdev->dev, "request_irq(%d) fail\n", pdev->irq);
+               kfree(dev);
+               dev = NULL;
                retval = -EBUSY;
                goto finished;
        }