include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit...
[safe/jmp/linux-2.6] / drivers / usb / gadget / atmel_usba_udc.c
index 65b03e3..75a256f 100644 (file)
@@ -12,6 +12,7 @@
 #include <linux/init.h>
 #include <linux/interrupt.h>
 #include <linux/io.h>
+#include <linux/slab.h>
 #include <linux/device.h>
 #include <linux/dma-mapping.h>
 #include <linux/list.h>
@@ -319,20 +320,14 @@ static inline void usba_cleanup_debugfs(struct usba_udc *udc)
 
 static int vbus_is_present(struct usba_udc *udc)
 {
-       if (udc->vbus_pin != -1)
-               return gpio_get_value(udc->vbus_pin);
+       if (gpio_is_valid(udc->vbus_pin))
+               return gpio_get_value(udc->vbus_pin) ^ udc->vbus_pin_inverted;
 
        /* No Vbus detection: Assume always present */
        return 1;
 }
 
-#if defined(CONFIG_AVR32)
-
-static void toggle_bias(int is_on)
-{
-}
-
-#elif defined(CONFIG_ARCH_AT91)
+#if defined(CONFIG_ARCH_AT91SAM9RL)
 
 #include <mach/at91_pmc.h>
 
@@ -346,7 +341,13 @@ static void toggle_bias(int is_on)
                at91_sys_write(AT91_CKGR_UCKR, uckr & ~(AT91_PMC_BIASEN));
 }
 
-#endif /* CONFIG_ARCH_AT91 */
+#else
+
+static void toggle_bias(int is_on)
+{
+}
+
+#endif /* CONFIG_ARCH_AT91SAM9RL */
 
 static void next_fifo_transaction(struct usba_ep *ep, struct usba_request *req)
 {
@@ -550,12 +551,12 @@ usba_ep_enable(struct usb_ep *_ep, const struct usb_endpoint_descriptor *desc)
        DBG(DBG_HW, "%s: EPT_SIZE = %lu (maxpacket = %lu)\n",
                        ep->ep.name, ept_cfg, maxpacket);
 
-       if ((desc->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) {
+       if (usb_endpoint_dir_in(desc)) {
                ep->is_in = 1;
                ept_cfg |= USBA_EPT_DIR_IN;
        }
 
-       switch (desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
+       switch (usb_endpoint_type(desc)) {
        case USB_ENDPOINT_XFER_CONTROL:
                ept_cfg |= USBA_BF(EPT_TYPE, USBA_EPT_TYPE_CONTROL);
                ept_cfg |= USBA_BF(BK_NUMBER, USBA_BK_NUMBER_ONE);
@@ -794,7 +795,8 @@ usba_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
        if (ep->desc) {
                list_add_tail(&req->queue, &ep->queue);
 
-               if (ep->is_in || (ep_is_control(ep)
+               if ((!ep_is_control(ep) && ep->is_in) ||
+                       (ep_is_control(ep)
                                && (ep->state == DATA_STAGE_IN
                                        || ep->state == STATUS_STAGE_IN)))
                        usba_ep_writel(ep, CTL_ENB, USBA_TX_PK_RDY);
@@ -1017,7 +1019,7 @@ static struct usb_endpoint_descriptor usba_ep0_desc = {
        .bDescriptorType = USB_DT_ENDPOINT,
        .bEndpointAddress = 0,
        .bmAttributes = USB_ENDPOINT_XFER_CONTROL,
-       .wMaxPacketSize = __constant_cpu_to_le16(64),
+       .wMaxPacketSize = cpu_to_le16(64),
        /* FIXME: I have no idea what to put here */
        .bInterval = 1,
 };
@@ -1207,21 +1209,21 @@ static int do_test_mode(struct usba_udc *udc)
 /* Avoid overly long expressions */
 static inline bool feature_is_dev_remote_wakeup(struct usb_ctrlrequest *crq)
 {
-       if (crq->wValue == __constant_cpu_to_le16(USB_DEVICE_REMOTE_WAKEUP))
+       if (crq->wValue == cpu_to_le16(USB_DEVICE_REMOTE_WAKEUP))
                return true;
        return false;
 }
 
 static inline bool feature_is_dev_test_mode(struct usb_ctrlrequest *crq)
 {
-       if (crq->wValue == __constant_cpu_to_le16(USB_DEVICE_TEST_MODE))
+       if (crq->wValue == cpu_to_le16(USB_DEVICE_TEST_MODE))
                return true;
        return false;
 }
 
 static inline bool feature_is_ep_halt(struct usb_ctrlrequest *crq)
 {
-       if (crq->wValue == __constant_cpu_to_le16(USB_ENDPOINT_HALT))
+       if (crq->wValue == cpu_to_le16(USB_ENDPOINT_HALT))
                return true;
        return false;
 }
@@ -1239,7 +1241,7 @@ static int handle_ep0_setup(struct usba_udc *udc, struct usba_ep *ep,
                        status = cpu_to_le16(udc->devstatus);
                } else if (crq->bRequestType
                                == (USB_DIR_IN | USB_RECIP_INTERFACE)) {
-                       status = __constant_cpu_to_le16(0);
+                       status = cpu_to_le16(0);
                } else if (crq->bRequestType
                                == (USB_DIR_IN | USB_RECIP_ENDPOINT)) {
                        struct usba_ep *target;
@@ -1250,12 +1252,12 @@ static int handle_ep0_setup(struct usba_udc *udc, struct usba_ep *ep,
 
                        status = 0;
                        if (is_stalled(udc, target))
-                               status |= __constant_cpu_to_le16(1);
+                               status |= cpu_to_le16(1);
                } else
                        goto delegate;
 
                /* Write directly to the FIFO. No queueing is done. */
-               if (crq->wLength != __constant_cpu_to_le16(sizeof(status)))
+               if (crq->wLength != cpu_to_le16(sizeof(status)))
                        goto stall;
                ep->state = DATA_STAGE_IN;
                __raw_writew(status, ep->fifo);
@@ -1274,7 +1276,7 @@ static int handle_ep0_setup(struct usba_udc *udc, struct usba_ep *ep,
                } else if (crq->bRequestType == USB_RECIP_ENDPOINT) {
                        struct usba_ep *target;
 
-                       if (crq->wLength != __constant_cpu_to_le16(0)
+                       if (crq->wLength != cpu_to_le16(0)
                                        || !feature_is_ep_halt(crq))
                                goto stall;
                        target = get_ep_by_addr(udc, le16_to_cpu(crq->wIndex));
@@ -1308,7 +1310,7 @@ static int handle_ep0_setup(struct usba_udc *udc, struct usba_ep *ep,
                } else if (crq->bRequestType == USB_RECIP_ENDPOINT) {
                        struct usba_ep *target;
 
-                       if (crq->wLength != __constant_cpu_to_le16(0)
+                       if (crq->wLength != cpu_to_le16(0)
                                        || !feature_is_ep_halt(crq))
                                goto stall;
 
@@ -1514,7 +1516,7 @@ restart:
                         */
                        ep->state = DATA_STAGE_IN;
                } else {
-                       if (crq.crq.wLength != __constant_cpu_to_le16(0))
+                       if (crq.crq.wLength != cpu_to_le16(0))
                                ep->state = DATA_STAGE_OUT;
                        else
                                ep->state = STATUS_STAGE_IN;
@@ -1762,7 +1764,7 @@ static irqreturn_t usba_vbus_irq(int irq, void *devid)
        if (!udc->driver)
                goto out;
 
-       vbus = gpio_get_value(udc->vbus_pin);
+       vbus = vbus_is_present(udc);
        if (vbus != udc->vbus_prev) {
                if (vbus) {
                        toggle_bias(1);
@@ -1821,7 +1823,7 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver)
        DBG(DBG_GADGET, "registered driver `%s'\n", driver->driver.name);
 
        udc->vbus_prev = 0;
-       if (udc->vbus_pin != -1)
+       if (gpio_is_valid(udc->vbus_pin))
                enable_irq(gpio_to_irq(udc->vbus_pin));
 
        /* If Vbus is present, enable the controller and wait for reset */
@@ -1852,7 +1854,7 @@ int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
        if (driver != udc->driver || !driver->unbind)
                return -EINVAL;
 
-       if (udc->vbus_pin != -1)
+       if (gpio_is_valid(udc->vbus_pin))
                disable_irq(gpio_to_irq(udc->vbus_pin));
 
        spin_lock_irqsave(&udc->lock, flags);
@@ -1910,17 +1912,17 @@ static int __init usba_udc_probe(struct platform_device *pdev)
        udc->pdev = pdev;
        udc->pclk = pclk;
        udc->hclk = hclk;
-       udc->vbus_pin = -1;
+       udc->vbus_pin = -ENODEV;
 
        ret = -ENOMEM;
-       udc->regs = ioremap(regs->start, regs->end - regs->start + 1);
+       udc->regs = ioremap(regs->start, resource_size(regs));
        if (!udc->regs) {
                dev_err(&pdev->dev, "Unable to map I/O memory, aborting.\n");
                goto err_map_regs;
        }
        dev_info(&pdev->dev, "MMIO registers at 0x%08lx mapped at %p\n",
                 (unsigned long)regs->start, udc->regs);
-       udc->fifo = ioremap(fifo->start, fifo->end - fifo->start + 1);
+       udc->fifo = ioremap(fifo->start, resource_size(fifo));
        if (!udc->fifo) {
                dev_err(&pdev->dev, "Unable to map FIFO, aborting.\n");
                goto err_map_fifo;
@@ -1940,7 +1942,7 @@ static int __init usba_udc_probe(struct platform_device *pdev)
        usba_writel(udc, CTRL, USBA_DISABLE_MASK);
        clk_disable(pclk);
 
-       usba_ep = kmalloc(sizeof(struct usba_ep) * pdata->num_ep,
+       usba_ep = kzalloc(sizeof(struct usba_ep) * pdata->num_ep,
                          GFP_KERNEL);
        if (!usba_ep)
                goto err_alloc_ep;
@@ -1996,16 +1998,17 @@ static int __init usba_udc_probe(struct platform_device *pdev)
                goto err_device_add;
        }
 
-       if (pdata->vbus_pin >= 0) {
+       if (gpio_is_valid(pdata->vbus_pin)) {
                if (!gpio_request(pdata->vbus_pin, "atmel_usba_udc")) {
                        udc->vbus_pin = pdata->vbus_pin;
+                       udc->vbus_pin_inverted = pdata->vbus_pin_inverted;
 
                        ret = request_irq(gpio_to_irq(udc->vbus_pin),
                                        usba_vbus_irq, 0,
                                        "atmel_usba_udc", udc);
                        if (ret) {
                                gpio_free(udc->vbus_pin);
-                               udc->vbus_pin = -1;
+                               udc->vbus_pin = -ENODEV;
                                dev_warn(&udc->pdev->dev,
                                         "failed to request vbus irq; "
                                         "assuming always on\n");
@@ -2051,7 +2054,7 @@ static int __exit usba_udc_remove(struct platform_device *pdev)
                usba_ep_cleanup_debugfs(&usba_ep[i]);
        usba_cleanup_debugfs(udc);
 
-       if (udc->vbus_pin != -1)
+       if (gpio_is_valid(udc->vbus_pin))
                gpio_free(udc->vbus_pin);
 
        free_irq(udc->irq, udc);