diff options
Diffstat (limited to 'drivers/usb/chipidea/udc.c')
| -rw-r--r-- | drivers/usb/chipidea/udc.c | 67 | 
1 files changed, 41 insertions, 26 deletions
diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c index db0cfde0cc3c..60ea932afe2b 100644 --- a/drivers/usb/chipidea/udc.c +++ b/drivers/usb/chipidea/udc.c @@ -72,6 +72,7 @@ static inline int ep_to_bit(struct ci_hdrc *ci, int n)  /**   * hw_device_state: enables/disables interrupts (execute without interruption) + * @ci: the controller   * @dma: 0 => disable, !0 => enable and set dma engine   *   * This function returns an error code @@ -91,6 +92,7 @@ static int hw_device_state(struct ci_hdrc *ci, u32 dma)  /**   * hw_ep_flush: flush endpoint fifo (execute without interruption) + * @ci: the controller   * @num: endpoint number   * @dir: endpoint direction   * @@ -112,6 +114,7 @@ static int hw_ep_flush(struct ci_hdrc *ci, int num, int dir)  /**   * hw_ep_disable: disables endpoint (execute without interruption) + * @ci: the controller   * @num: endpoint number   * @dir: endpoint direction   * @@ -126,6 +129,7 @@ static int hw_ep_disable(struct ci_hdrc *ci, int num, int dir)  /**   * hw_ep_enable: enables endpoint (execute without interruption) + * @ci: the controller   * @num:  endpoint number   * @dir:  endpoint direction   * @type: endpoint type @@ -161,6 +165,7 @@ static int hw_ep_enable(struct ci_hdrc *ci, int num, int dir, int type)  /**   * hw_ep_get_halt: return endpoint halt status + * @ci: the controller   * @num: endpoint number   * @dir: endpoint direction   * @@ -175,6 +180,7 @@ static int hw_ep_get_halt(struct ci_hdrc *ci, int num, int dir)  /**   * hw_ep_prime: primes endpoint (execute without interruption) + * @ci: the controller   * @num:     endpoint number   * @dir:     endpoint direction   * @is_ctrl: true if control endpoint @@ -205,6 +211,7 @@ static int hw_ep_prime(struct ci_hdrc *ci, int num, int dir, int is_ctrl)  /**   * hw_ep_set_halt: configures ep halt & resets data toggle after clear (execute   *                 without interruption) + * @ci: the controller   * @num:   endpoint number   * @dir:   endpoint direction   * @value: true => stall, false => unstall @@ -231,6 +238,7 @@ static int hw_ep_set_halt(struct ci_hdrc *ci, int num, int dir, int value)  /**   * hw_is_port_high_speed: test if port is high speed + * @ci: the controller   *   * This function returns true if high speed port   */ @@ -243,6 +251,7 @@ static int hw_port_is_high_speed(struct ci_hdrc *ci)  /**   * hw_test_and_clear_complete: test & clear complete status (execute without   *                             interruption) + * @ci: the controller   * @n: endpoint number   *   * This function returns complete status @@ -256,6 +265,7 @@ static int hw_test_and_clear_complete(struct ci_hdrc *ci, int n)  /**   * hw_test_and_clear_intr_active: test & clear active interrupts (execute   *                                without interruption) + * @ci: the controller   *   * This function returns active interrutps   */ @@ -270,6 +280,7 @@ static u32 hw_test_and_clear_intr_active(struct ci_hdrc *ci)  /**   * hw_test_and_clear_setup_guard: test & clear setup guard (execute without   *                                interruption) + * @ci: the controller   *   * This function returns guard value   */ @@ -281,6 +292,7 @@ static int hw_test_and_clear_setup_guard(struct ci_hdrc *ci)  /**   * hw_test_and_set_setup_guard: test & set setup guard (execute without   *                              interruption) + * @ci: the controller   *   * This function returns guard value   */ @@ -291,6 +303,7 @@ static int hw_test_and_set_setup_guard(struct ci_hdrc *ci)  /**   * hw_usb_set_address: configures USB address (execute without interruption) + * @ci: the controller   * @value: new USB address   *   * This function explicitly sets the address, without the "USBADRA" (advance) @@ -305,6 +318,7 @@ static void hw_usb_set_address(struct ci_hdrc *ci, u8 value)  /**   * hw_usb_reset: restart device after a bus reset (execute without   *               interruption) + * @ci: the controller   *   * This function returns an error code   */ @@ -473,9 +487,10 @@ static void ci_add_buffer_entry(struct td_node *node, struct scatterlist *s)  	int empty_td_slot_index = (CI_MAX_BUF_SIZE - node->td_remaining_size)  			/ CI_HDRC_PAGE_SIZE;  	int i; +	u32 token; -	node->ptr->token += -		cpu_to_le32(sg_dma_len(s) << __ffs(TD_TOTAL_BYTES)); +	token = le32_to_cpu(node->ptr->token) + (sg_dma_len(s) << __ffs(TD_TOTAL_BYTES)); +	node->ptr->token = cpu_to_le32(token);  	for (i = empty_td_slot_index; i < TD_PAGE_COUNT; i++) {  		u32 page = (u32) sg_dma_address(s) + @@ -610,7 +625,7 @@ done:  	return ret;  } -/* +/**   * free_pending_td: remove a pending request for the endpoint   * @hwep: endpoint   */ @@ -636,8 +651,8 @@ static int reprime_dtd(struct ci_hdrc *ci, struct ci_hw_ep *hwep,  /**   * _hardware_dequeue: handles a request at hardware level - * @gadget: gadget - * @hwep:   endpoint + * @hwep: endpoint + * @hwreq:  request   *   * This function returns an error code   */ @@ -1215,11 +1230,11 @@ __acquires(ci->lock)  			case USB_DEVICE_TEST_MODE:  				tmode = le16_to_cpu(req.wIndex) >> 8;  				switch (tmode) { -				case TEST_J: -				case TEST_K: -				case TEST_SE0_NAK: -				case TEST_PACKET: -				case TEST_FORCE_EN: +				case USB_TEST_J: +				case USB_TEST_K: +				case USB_TEST_SE0_NAK: +				case USB_TEST_PACKET: +				case USB_TEST_FORCE_ENABLE:  					ci->test_mode = tmode;  					err = isr_setup_status_phase(  							ci); @@ -1316,7 +1331,7 @@ __acquires(ci->lock)  /******************************************************************************   * ENDPT block   *****************************************************************************/ -/** +/*   * ep_enable: configure endpoint, making it usable   *   * Check usb_ep_enable() at "usb_gadget.h" for details @@ -1384,7 +1399,7 @@ static int ep_enable(struct usb_ep *ep,  	return retval;  } -/** +/*   * ep_disable: endpoint is no longer usable   *   * Check usb_ep_disable() at "usb_gadget.h" for details @@ -1424,7 +1439,7 @@ static int ep_disable(struct usb_ep *ep)  	return retval;  } -/** +/*   * ep_alloc_request: allocate a request object to use with this endpoint   *   * Check usb_ep_alloc_request() at "usb_gadget.h" for details @@ -1445,7 +1460,7 @@ static struct usb_request *ep_alloc_request(struct usb_ep *ep, gfp_t gfp_flags)  	return (hwreq == NULL) ? NULL : &hwreq->req;  } -/** +/*   * ep_free_request: frees a request object   *   * Check usb_ep_free_request() at "usb_gadget.h" for details @@ -1478,7 +1493,7 @@ static void ep_free_request(struct usb_ep *ep, struct usb_request *req)  	spin_unlock_irqrestore(hwep->lock, flags);  } -/** +/*   * ep_queue: queues (submits) an I/O request to an endpoint   *   * Check usb_ep_queue()* at usb_gadget.h" for details @@ -1503,7 +1518,7 @@ static int ep_queue(struct usb_ep *ep, struct usb_request *req,  	return retval;  } -/** +/*   * ep_dequeue: dequeues (cancels, unlinks) an I/O request from an endpoint   *   * Check usb_ep_dequeue() at "usb_gadget.h" for details @@ -1547,7 +1562,7 @@ static int ep_dequeue(struct usb_ep *ep, struct usb_request *req)  	return 0;  } -/** +/*   * ep_set_halt: sets the endpoint halt feature   *   * Check usb_ep_set_halt() at "usb_gadget.h" for details @@ -1557,7 +1572,7 @@ static int ep_set_halt(struct usb_ep *ep, int value)  	return _ep_set_halt(ep, value, true);  } -/** +/*   * ep_set_wedge: sets the halt feature and ignores clear requests   *   * Check usb_ep_set_wedge() at "usb_gadget.h" for details @@ -1577,7 +1592,7 @@ static int ep_set_wedge(struct usb_ep *ep)  	return usb_ep_set_halt(ep);  } -/** +/*   * ep_fifo_flush: flushes contents of a fifo   *   * Check usb_ep_fifo_flush() at "usb_gadget.h" for details @@ -1603,7 +1618,7 @@ static void ep_fifo_flush(struct usb_ep *ep)  	spin_unlock_irqrestore(hwep->lock, flags);  } -/** +/*   * Endpoint-specific part of the API to the USB controller hardware   * Check "usb_gadget.h" for details   */ @@ -1622,7 +1637,7 @@ static const struct usb_ep_ops usb_ep_ops = {  /******************************************************************************   * GADGET block   *****************************************************************************/ -/** +/*   * ci_hdrc_gadget_connect: caller makes sure gadget driver is binded   */  static void ci_hdrc_gadget_connect(struct usb_gadget *_gadget, int is_active) @@ -1772,7 +1787,7 @@ static struct usb_ep *ci_udc_match_ep(struct usb_gadget *gadget,  	return NULL;  } -/** +/*   * Device operations part of the API to the USB controller hardware,   * which don't involve endpoints (or i/o)   * Check  "usb_gadget.h" for details @@ -1924,7 +1939,7 @@ static void ci_udc_stop_for_otg_fsm(struct ci_hdrc *ci)  	mutex_unlock(&ci->fsm.lock);  } -/** +/*   * ci_udc_stop: unregister a gadget driver   */  static int ci_udc_stop(struct usb_gadget *gadget) @@ -1955,7 +1970,7 @@ static int ci_udc_stop(struct usb_gadget *gadget)  /******************************************************************************   * BUS block   *****************************************************************************/ -/** +/*   * udc_irq: ci interrupt handler   *   * This function returns IRQ_HANDLED if the IRQ has been handled @@ -2086,7 +2101,7 @@ free_qh_pool:  	return retval;  } -/** +/*   * ci_hdrc_gadget_destroy: parent remove must call this to remove UDC   *   * No interrupts active, the IRQ has been released @@ -2136,7 +2151,7 @@ static void udc_id_switch_for_host(struct ci_hdrc *ci)  /**   * ci_hdrc_gadget_init - initialize device related bits - * ci: the controller + * @ci: the controller   *   * This function initializes the gadget, if the device is "device capable".   */  | 
