diff options
Diffstat (limited to 'include/linux/usb')
| -rw-r--r-- | include/linux/usb/ehci_def.h | 4 | ||||
| -rw-r--r-- | include/linux/usb/gadget.h | 592 | ||||
| -rw-r--r-- | include/linux/usb/msm_hsusb.h | 200 | ||||
| -rw-r--r-- | include/linux/usb/musb.h | 5 | ||||
| -rw-r--r-- | include/linux/usb/of.h | 4 | ||||
| -rw-r--r-- | include/linux/usb/xhci_pdriver.h | 27 | 
6 files changed, 74 insertions, 758 deletions
| diff --git a/include/linux/usb/ehci_def.h b/include/linux/usb/ehci_def.h index 966889a20ea3..e479033bd782 100644 --- a/include/linux/usb/ehci_def.h +++ b/include/linux/usb/ehci_def.h @@ -180,11 +180,11 @@ struct ehci_regs {   * PORTSCx   */  	/* HOSTPC: offset 0x84 */ -	u32		hostpc[1];	/* HOSTPC extension */ +	u32		hostpc[0];	/* HOSTPC extension */  #define HOSTPC_PHCD	(1<<22)		/* Phy clock disable */  #define HOSTPC_PSPD	(3<<25)		/* Port speed detection */ -	u32		reserved5[16]; +	u32		reserved5[17];  	/* USBMODE_EX: offset 0xc8 */  	u32		usbmode_ex;	/* USB Device mode extension */ diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h index 457651bf45b0..612dbdfa388e 100644 --- a/include/linux/usb/gadget.h +++ b/include/linux/usb/gadget.h @@ -25,6 +25,8 @@  #include <linux/workqueue.h>  #include <linux/usb/ch9.h> +#define UDC_TRACE_STR_MAX	512 +  struct usb_ep;  /** @@ -228,307 +230,49 @@ struct usb_ep {  /*-------------------------------------------------------------------------*/ -/** - * usb_ep_set_maxpacket_limit - set maximum packet size limit for endpoint - * @ep:the endpoint being configured - * @maxpacket_limit:value of maximum packet size limit - * - * This function should be used only in UDC drivers to initialize endpoint - * (usually in probe function). - */ +#if IS_ENABLED(CONFIG_USB_GADGET) +void usb_ep_set_maxpacket_limit(struct usb_ep *ep, unsigned maxpacket_limit); +int usb_ep_enable(struct usb_ep *ep); +int usb_ep_disable(struct usb_ep *ep); +struct usb_request *usb_ep_alloc_request(struct usb_ep *ep, gfp_t gfp_flags); +void usb_ep_free_request(struct usb_ep *ep, struct usb_request *req); +int usb_ep_queue(struct usb_ep *ep, struct usb_request *req, gfp_t gfp_flags); +int usb_ep_dequeue(struct usb_ep *ep, struct usb_request *req); +int usb_ep_set_halt(struct usb_ep *ep); +int usb_ep_clear_halt(struct usb_ep *ep); +int usb_ep_set_wedge(struct usb_ep *ep); +int usb_ep_fifo_status(struct usb_ep *ep); +void usb_ep_fifo_flush(struct usb_ep *ep); +#else  static inline void usb_ep_set_maxpacket_limit(struct usb_ep *ep, -					      unsigned maxpacket_limit) -{ -	ep->maxpacket_limit = maxpacket_limit; -	ep->maxpacket = maxpacket_limit; -} - -/** - * usb_ep_enable - configure endpoint, making it usable - * @ep:the endpoint being configured.  may not be the endpoint named "ep0". - *	drivers discover endpoints through the ep_list of a usb_gadget. - * - * When configurations are set, or when interface settings change, the driver - * will enable or disable the relevant endpoints.  while it is enabled, an - * endpoint may be used for i/o until the driver receives a disconnect() from - * the host or until the endpoint is disabled. - * - * the ep0 implementation (which calls this routine) must ensure that the - * hardware capabilities of each endpoint match the descriptor provided - * for it.  for example, an endpoint named "ep2in-bulk" would be usable - * for interrupt transfers as well as bulk, but it likely couldn't be used - * for iso transfers or for endpoint 14.  some endpoints are fully - * configurable, with more generic names like "ep-a".  (remember that for - * USB, "in" means "towards the USB master".) - * - * returns zero, or a negative error code. - */ +		unsigned maxpacket_limit) +{ }  static inline int usb_ep_enable(struct usb_ep *ep) -{ -	int ret; - -	if (ep->enabled) -		return 0; - -	ret = ep->ops->enable(ep, ep->desc); -	if (ret) -		return ret; - -	ep->enabled = true; - -	return 0; -} - -/** - * usb_ep_disable - endpoint is no longer usable - * @ep:the endpoint being unconfigured.  may not be the endpoint named "ep0". - * - * no other task may be using this endpoint when this is called. - * any pending and uncompleted requests will complete with status - * indicating disconnect (-ESHUTDOWN) before this call returns. - * gadget drivers must call usb_ep_enable() again before queueing - * requests to the endpoint. - * - * returns zero, or a negative error code. - */ +{ return 0; }  static inline int usb_ep_disable(struct usb_ep *ep) -{ -	int ret; - -	if (!ep->enabled) -		return 0; - -	ret = ep->ops->disable(ep); -	if (ret) -		return ret; - -	ep->enabled = false; - -	return 0; -} - -/** - * usb_ep_alloc_request - allocate a request object to use with this endpoint - * @ep:the endpoint to be used with with the request - * @gfp_flags:GFP_* flags to use - * - * Request objects must be allocated with this call, since they normally - * need controller-specific setup and may even need endpoint-specific - * resources such as allocation of DMA descriptors. - * Requests may be submitted with usb_ep_queue(), and receive a single - * completion callback.  Free requests with usb_ep_free_request(), when - * they are no longer needed. - * - * Returns the request, or null if one could not be allocated. - */ +{ return 0; }  static inline struct usb_request *usb_ep_alloc_request(struct usb_ep *ep, -						       gfp_t gfp_flags) -{ -	return ep->ops->alloc_request(ep, gfp_flags); -} - -/** - * usb_ep_free_request - frees a request object - * @ep:the endpoint associated with the request - * @req:the request being freed - * - * Reverses the effect of usb_ep_alloc_request(). - * Caller guarantees the request is not queued, and that it will - * no longer be requeued (or otherwise used). - */ +		gfp_t gfp_flags) +{ return NULL; }  static inline void usb_ep_free_request(struct usb_ep *ep, -				       struct usb_request *req) -{ -	ep->ops->free_request(ep, req); -} - -/** - * usb_ep_queue - queues (submits) an I/O request to an endpoint. - * @ep:the endpoint associated with the request - * @req:the request being submitted - * @gfp_flags: GFP_* flags to use in case the lower level driver couldn't - *	pre-allocate all necessary memory with the request. - * - * This tells the device controller to perform the specified request through - * that endpoint (reading or writing a buffer).  When the request completes, - * including being canceled by usb_ep_dequeue(), the request's completion - * routine is called to return the request to the driver.  Any endpoint - * (except control endpoints like ep0) may have more than one transfer - * request queued; they complete in FIFO order.  Once a gadget driver - * submits a request, that request may not be examined or modified until it - * is given back to that driver through the completion callback. - * - * Each request is turned into one or more packets.  The controller driver - * never merges adjacent requests into the same packet.  OUT transfers - * will sometimes use data that's already buffered in the hardware. - * Drivers can rely on the fact that the first byte of the request's buffer - * always corresponds to the first byte of some USB packet, for both - * IN and OUT transfers. - * - * Bulk endpoints can queue any amount of data; the transfer is packetized - * automatically.  The last packet will be short if the request doesn't fill it - * out completely.  Zero length packets (ZLPs) should be avoided in portable - * protocols since not all usb hardware can successfully handle zero length - * packets.  (ZLPs may be explicitly written, and may be implicitly written if - * the request 'zero' flag is set.)  Bulk endpoints may also be used - * for interrupt transfers; but the reverse is not true, and some endpoints - * won't support every interrupt transfer.  (Such as 768 byte packets.) - * - * Interrupt-only endpoints are less functional than bulk endpoints, for - * example by not supporting queueing or not handling buffers that are - * larger than the endpoint's maxpacket size.  They may also treat data - * toggle differently. - * - * Control endpoints ... after getting a setup() callback, the driver queues - * one response (even if it would be zero length).  That enables the - * status ack, after transferring data as specified in the response.  Setup - * functions may return negative error codes to generate protocol stalls. - * (Note that some USB device controllers disallow protocol stall responses - * in some cases.)  When control responses are deferred (the response is - * written after the setup callback returns), then usb_ep_set_halt() may be - * used on ep0 to trigger protocol stalls.  Depending on the controller, - * it may not be possible to trigger a status-stage protocol stall when the - * data stage is over, that is, from within the response's completion - * routine. - * - * For periodic endpoints, like interrupt or isochronous ones, the usb host - * arranges to poll once per interval, and the gadget driver usually will - * have queued some data to transfer at that time. - * - * Returns zero, or a negative error code.  Endpoints that are not enabled - * report errors; errors will also be - * reported when the usb peripheral is disconnected. - */ -static inline int usb_ep_queue(struct usb_ep *ep, -			       struct usb_request *req, gfp_t gfp_flags) -{ -	if (WARN_ON_ONCE(!ep->enabled && ep->address)) -		return -ESHUTDOWN; - -	return ep->ops->queue(ep, req, gfp_flags); -} - -/** - * usb_ep_dequeue - dequeues (cancels, unlinks) an I/O request from an endpoint - * @ep:the endpoint associated with the request - * @req:the request being canceled - * - * If the request is still active on the endpoint, it is dequeued and its - * completion routine is called (with status -ECONNRESET); else a negative - * error code is returned. This is guaranteed to happen before the call to - * usb_ep_dequeue() returns. - * - * Note that some hardware can't clear out write fifos (to unlink the request - * at the head of the queue) except as part of disconnecting from usb. Such - * restrictions prevent drivers from supporting configuration changes, - * even to configuration zero (a "chapter 9" requirement). - */ +		struct usb_request *req) +{ } +static inline int usb_ep_queue(struct usb_ep *ep, struct usb_request *req, +		gfp_t gfp_flags) +{ return 0; }  static inline int usb_ep_dequeue(struct usb_ep *ep, struct usb_request *req) -{ -	return ep->ops->dequeue(ep, req); -} - -/** - * usb_ep_set_halt - sets the endpoint halt feature. - * @ep: the non-isochronous endpoint being stalled - * - * Use this to stall an endpoint, perhaps as an error report. - * Except for control endpoints, - * the endpoint stays halted (will not stream any data) until the host - * clears this feature; drivers may need to empty the endpoint's request - * queue first, to make sure no inappropriate transfers happen. - * - * Note that while an endpoint CLEAR_FEATURE will be invisible to the - * gadget driver, a SET_INTERFACE will not be.  To reset endpoints for the - * current altsetting, see usb_ep_clear_halt().  When switching altsettings, - * it's simplest to use usb_ep_enable() or usb_ep_disable() for the endpoints. - * - * Returns zero, or a negative error code.  On success, this call sets - * underlying hardware state that blocks data transfers. - * Attempts to halt IN endpoints will fail (returning -EAGAIN) if any - * transfer requests are still queued, or if the controller hardware - * (usually a FIFO) still holds bytes that the host hasn't collected. - */ +{ return 0; }  static inline int usb_ep_set_halt(struct usb_ep *ep) -{ -	return ep->ops->set_halt(ep, 1); -} - -/** - * usb_ep_clear_halt - clears endpoint halt, and resets toggle - * @ep:the bulk or interrupt endpoint being reset - * - * Use this when responding to the standard usb "set interface" request, - * for endpoints that aren't reconfigured, after clearing any other state - * in the endpoint's i/o queue. - * - * Returns zero, or a negative error code.  On success, this call clears - * the underlying hardware state reflecting endpoint halt and data toggle. - * Note that some hardware can't support this request (like pxa2xx_udc), - * and accordingly can't correctly implement interface altsettings. - */ +{ return 0; }  static inline int usb_ep_clear_halt(struct usb_ep *ep) -{ -	return ep->ops->set_halt(ep, 0); -} - -/** - * usb_ep_set_wedge - sets the halt feature and ignores clear requests - * @ep: the endpoint being wedged - * - * Use this to stall an endpoint and ignore CLEAR_FEATURE(HALT_ENDPOINT) - * requests. If the gadget driver clears the halt status, it will - * automatically unwedge the endpoint. - * - * Returns zero on success, else negative errno. - */ -static inline int -usb_ep_set_wedge(struct usb_ep *ep) -{ -	if (ep->ops->set_wedge) -		return ep->ops->set_wedge(ep); -	else -		return ep->ops->set_halt(ep, 1); -} - -/** - * usb_ep_fifo_status - returns number of bytes in fifo, or error - * @ep: the endpoint whose fifo status is being checked. - * - * FIFO endpoints may have "unclaimed data" in them in certain cases, - * such as after aborted transfers.  Hosts may not have collected all - * the IN data written by the gadget driver (and reported by a request - * completion).  The gadget driver may not have collected all the data - * written OUT to it by the host.  Drivers that need precise handling for - * fault reporting or recovery may need to use this call. - * - * This returns the number of such bytes in the fifo, or a negative - * errno if the endpoint doesn't use a FIFO or doesn't support such - * precise handling. - */ +{ return 0; } +static inline int usb_ep_set_wedge(struct usb_ep *ep) +{ return 0; }  static inline int usb_ep_fifo_status(struct usb_ep *ep) -{ -	if (ep->ops->fifo_status) -		return ep->ops->fifo_status(ep); -	else -		return -EOPNOTSUPP; -} - -/** - * usb_ep_fifo_flush - flushes contents of a fifo - * @ep: the endpoint whose fifo is being flushed. - * - * This call may be used to flush the "unclaimed data" that may exist in - * an endpoint fifo after abnormal transaction terminations.  The call - * must never be used except when endpoint is not being used for any - * protocol translation. - */ +{ return 0; }  static inline void usb_ep_fifo_flush(struct usb_ep *ep) -{ -	if (ep->ops->fifo_flush) -		ep->ops->fifo_flush(ep); -} - +{ } +#endif /* USB_GADGET */  /*-------------------------------------------------------------------------*/ @@ -582,6 +326,7 @@ struct usb_gadget_ops {   * @dev: Driver model state for this abstract device.   * @out_epnum: last used out ep number   * @in_epnum: last used in ep number + * @mA: last set mA value   * @otg_caps: OTG capabilities of this gadget.   * @sg_supported: true if we can handle scatter-gather   * @is_otg: True if the USB device port uses a Mini-AB jack, so that the @@ -638,6 +383,7 @@ struct usb_gadget {  	struct device			dev;  	unsigned			out_epnum;  	unsigned			in_epnum; +	unsigned			mA;  	struct usb_otg_caps		*otg_caps;  	unsigned			sg_supported:1; @@ -760,251 +506,44 @@ static inline int gadget_is_otg(struct usb_gadget *g)  #endif  } -/** - * usb_gadget_frame_number - returns the current frame number - * @gadget: controller that reports the frame number - * - * Returns the usb frame number, normally eleven bits from a SOF packet, - * or negative errno if this device doesn't support this capability. - */ -static inline int usb_gadget_frame_number(struct usb_gadget *gadget) -{ -	return gadget->ops->get_frame(gadget); -} +/*-------------------------------------------------------------------------*/ -/** - * usb_gadget_wakeup - tries to wake up the host connected to this gadget - * @gadget: controller used to wake up the host - * - * Returns zero on success, else negative error code if the hardware - * doesn't support such attempts, or its support has not been enabled - * by the usb host.  Drivers must return device descriptors that report - * their ability to support this, or hosts won't enable it. - * - * This may also try to use SRP to wake the host and start enumeration, - * even if OTG isn't otherwise in use.  OTG devices may also start - * remote wakeup even when hosts don't explicitly enable it. - */ +#if IS_ENABLED(CONFIG_USB_GADGET) +int usb_gadget_frame_number(struct usb_gadget *gadget); +int usb_gadget_wakeup(struct usb_gadget *gadget); +int usb_gadget_set_selfpowered(struct usb_gadget *gadget); +int usb_gadget_clear_selfpowered(struct usb_gadget *gadget); +int usb_gadget_vbus_connect(struct usb_gadget *gadget); +int usb_gadget_vbus_draw(struct usb_gadget *gadget, unsigned mA); +int usb_gadget_vbus_disconnect(struct usb_gadget *gadget); +int usb_gadget_connect(struct usb_gadget *gadget); +int usb_gadget_disconnect(struct usb_gadget *gadget); +int usb_gadget_deactivate(struct usb_gadget *gadget); +int usb_gadget_activate(struct usb_gadget *gadget); +#else +static inline int usb_gadget_frame_number(struct usb_gadget *gadget) +{ return 0; }  static inline int usb_gadget_wakeup(struct usb_gadget *gadget) -{ -	if (!gadget->ops->wakeup) -		return -EOPNOTSUPP; -	return gadget->ops->wakeup(gadget); -} - -/** - * usb_gadget_set_selfpowered - sets the device selfpowered feature. - * @gadget:the device being declared as self-powered - * - * this affects the device status reported by the hardware driver - * to reflect that it now has a local power supply. - * - * returns zero on success, else negative errno. - */ +{ return 0; }  static inline int usb_gadget_set_selfpowered(struct usb_gadget *gadget) -{ -	if (!gadget->ops->set_selfpowered) -		return -EOPNOTSUPP; -	return gadget->ops->set_selfpowered(gadget, 1); -} - -/** - * usb_gadget_clear_selfpowered - clear the device selfpowered feature. - * @gadget:the device being declared as bus-powered - * - * this affects the device status reported by the hardware driver. - * some hardware may not support bus-powered operation, in which - * case this feature's value can never change. - * - * returns zero on success, else negative errno. - */ +{ return 0; }  static inline int usb_gadget_clear_selfpowered(struct usb_gadget *gadget) -{ -	if (!gadget->ops->set_selfpowered) -		return -EOPNOTSUPP; -	return gadget->ops->set_selfpowered(gadget, 0); -} - -/** - * usb_gadget_vbus_connect - Notify controller that VBUS is powered - * @gadget:The device which now has VBUS power. - * Context: can sleep - * - * This call is used by a driver for an external transceiver (or GPIO) - * that detects a VBUS power session starting.  Common responses include - * resuming the controller, activating the D+ (or D-) pullup to let the - * host detect that a USB device is attached, and starting to draw power - * (8mA or possibly more, especially after SET_CONFIGURATION). - * - * Returns zero on success, else negative errno. - */ +{ return 0; }  static inline int usb_gadget_vbus_connect(struct usb_gadget *gadget) -{ -	if (!gadget->ops->vbus_session) -		return -EOPNOTSUPP; -	return gadget->ops->vbus_session(gadget, 1); -} - -/** - * usb_gadget_vbus_draw - constrain controller's VBUS power usage - * @gadget:The device whose VBUS usage is being described - * @mA:How much current to draw, in milliAmperes.  This should be twice - *	the value listed in the configuration descriptor bMaxPower field. - * - * This call is used by gadget drivers during SET_CONFIGURATION calls, - * reporting how much power the device may consume.  For example, this - * could affect how quickly batteries are recharged. - * - * Returns zero on success, else negative errno. - */ +{ return 0; }  static inline int usb_gadget_vbus_draw(struct usb_gadget *gadget, unsigned mA) -{ -	if (!gadget->ops->vbus_draw) -		return -EOPNOTSUPP; -	return gadget->ops->vbus_draw(gadget, mA); -} - -/** - * usb_gadget_vbus_disconnect - notify controller about VBUS session end - * @gadget:the device whose VBUS supply is being described - * Context: can sleep - * - * This call is used by a driver for an external transceiver (or GPIO) - * that detects a VBUS power session ending.  Common responses include - * reversing everything done in usb_gadget_vbus_connect(). - * - * Returns zero on success, else negative errno. - */ +{ return 0; }  static inline int usb_gadget_vbus_disconnect(struct usb_gadget *gadget) -{ -	if (!gadget->ops->vbus_session) -		return -EOPNOTSUPP; -	return gadget->ops->vbus_session(gadget, 0); -} - -/** - * usb_gadget_connect - software-controlled connect to USB host - * @gadget:the peripheral being connected - * - * Enables the D+ (or potentially D-) pullup.  The host will start - * enumerating this gadget when the pullup is active and a VBUS session - * is active (the link is powered).  This pullup is always enabled unless - * usb_gadget_disconnect() has been used to disable it. - * - * Returns zero on success, else negative errno. - */ +{ return 0; }  static inline int usb_gadget_connect(struct usb_gadget *gadget) -{ -	int ret; - -	if (!gadget->ops->pullup) -		return -EOPNOTSUPP; - -	if (gadget->deactivated) { -		/* -		 * If gadget is deactivated we only save new state. -		 * Gadget will be connected automatically after activation. -		 */ -		gadget->connected = true; -		return 0; -	} - -	ret = gadget->ops->pullup(gadget, 1); -	if (!ret) -		gadget->connected = 1; -	return ret; -} - -/** - * usb_gadget_disconnect - software-controlled disconnect from USB host - * @gadget:the peripheral being disconnected - * - * Disables the D+ (or potentially D-) pullup, which the host may see - * as a disconnect (when a VBUS session is active).  Not all systems - * support software pullup controls. - * - * Returns zero on success, else negative errno. - */ +{ return 0; }  static inline int usb_gadget_disconnect(struct usb_gadget *gadget) -{ -	int ret; - -	if (!gadget->ops->pullup) -		return -EOPNOTSUPP; - -	if (gadget->deactivated) { -		/* -		 * If gadget is deactivated we only save new state. -		 * Gadget will stay disconnected after activation. -		 */ -		gadget->connected = false; -		return 0; -	} - -	ret = gadget->ops->pullup(gadget, 0); -	if (!ret) -		gadget->connected = 0; -	return ret; -} - -/** - * usb_gadget_deactivate - deactivate function which is not ready to work - * @gadget: the peripheral being deactivated - * - * This routine may be used during the gadget driver bind() call to prevent - * the peripheral from ever being visible to the USB host, unless later - * usb_gadget_activate() is called.  For example, user mode components may - * need to be activated before the system can talk to hosts. - * - * Returns zero on success, else negative errno. - */ +{ return 0; }  static inline int usb_gadget_deactivate(struct usb_gadget *gadget) -{ -	int ret; - -	if (gadget->deactivated) -		return 0; - -	if (gadget->connected) { -		ret = usb_gadget_disconnect(gadget); -		if (ret) -			return ret; -		/* -		 * If gadget was being connected before deactivation, we want -		 * to reconnect it in usb_gadget_activate(). -		 */ -		gadget->connected = true; -	} -	gadget->deactivated = true; - -	return 0; -} - -/** - * usb_gadget_activate - activate function which is not ready to work - * @gadget: the peripheral being activated - * - * This routine activates gadget which was previously deactivated with - * usb_gadget_deactivate() call. It calls usb_gadget_connect() if needed. - * - * Returns zero on success, else negative errno. - */ +{ return 0; }  static inline int usb_gadget_activate(struct usb_gadget *gadget) -{ -	if (!gadget->deactivated) -		return 0; - -	gadget->deactivated = false; - -	/* -	 * If gadget has been connected before deactivation, or became connected -	 * while it was being deactivated, we call usb_gadget_connect(). -	 */ -	if (gadget->connected) -		return usb_gadget_connect(gadget); - -	return 0; -} +{ return 0; } +#endif /* CONFIG_USB_GADGET */  /*-------------------------------------------------------------------------*/ @@ -1034,6 +573,8 @@ static inline int usb_gadget_activate(struct usb_gadget *gadget)   * @udc_name: A name of UDC this driver should be bound to. If udc_name is NULL,   *	this driver will be bound to any available UDC.   * @pending: UDC core private data used for deferred probe of this driver. + * @match_existing_only: If udc is not found, return an error and don't add this + *      gadget driver to list of pending driver   *   * Devices are disabled till a gadget driver successfully bind()s, which   * means the driver will handle setup() requests needed to enumerate (and @@ -1097,6 +638,7 @@ struct usb_gadget_driver {  	char			*udc_name;  	struct list_head	pending; +	unsigned                match_existing_only:1;  }; diff --git a/include/linux/usb/msm_hsusb.h b/include/linux/usb/msm_hsusb.h deleted file mode 100644 index 8c8f6854c993..000000000000 --- a/include/linux/usb/msm_hsusb.h +++ /dev/null @@ -1,200 +0,0 @@ -/* linux/include/asm-arm/arch-msm/hsusb.h - * - * Copyright (C) 2008 Google, Inc. - * Author: Brian Swetland <[email protected]> - * Copyright (c) 2009-2011, Code Aurora Forum. All rights reserved. - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - */ - -#ifndef __ASM_ARCH_MSM_HSUSB_H -#define __ASM_ARCH_MSM_HSUSB_H - -#include <linux/extcon.h> -#include <linux/types.h> -#include <linux/usb/otg.h> -#include <linux/clk.h> - -/** - * OTG control - * - * OTG_NO_CONTROL	Id/VBUS notifications not required. Useful in host - *                      only configuration. - * OTG_PHY_CONTROL	Id/VBUS notifications comes form USB PHY. - * OTG_PMIC_CONTROL	Id/VBUS notifications comes from PMIC hardware. - * OTG_USER_CONTROL	Id/VBUS notifcations comes from User via sysfs. - * - */ -enum otg_control_type { -	OTG_NO_CONTROL = 0, -	OTG_PHY_CONTROL, -	OTG_PMIC_CONTROL, -	OTG_USER_CONTROL, -}; - -/** - * PHY used in - * - * INVALID_PHY			Unsupported PHY - * CI_45NM_INTEGRATED_PHY	Chipidea 45nm integrated PHY - * SNPS_28NM_INTEGRATED_PHY	Synopsis 28nm integrated PHY - * - */ -enum msm_usb_phy_type { -	INVALID_PHY = 0, -	CI_45NM_INTEGRATED_PHY, -	SNPS_28NM_INTEGRATED_PHY, -}; - -#define IDEV_CHG_MAX	1500 -#define IUNIT		100 - -/** - * Different states involved in USB charger detection. - * - * USB_CHG_STATE_UNDEFINED	USB charger is not connected or detection - *                              process is not yet started. - * USB_CHG_STATE_WAIT_FOR_DCD	Waiting for Data pins contact. - * USB_CHG_STATE_DCD_DONE	Data pin contact is detected. - * USB_CHG_STATE_PRIMARY_DONE	Primary detection is completed (Detects - *                              between SDP and DCP/CDP). - * USB_CHG_STATE_SECONDARY_DONE	Secondary detection is completed (Detects - *                              between DCP and CDP). - * USB_CHG_STATE_DETECTED	USB charger type is determined. - * - */ -enum usb_chg_state { -	USB_CHG_STATE_UNDEFINED = 0, -	USB_CHG_STATE_WAIT_FOR_DCD, -	USB_CHG_STATE_DCD_DONE, -	USB_CHG_STATE_PRIMARY_DONE, -	USB_CHG_STATE_SECONDARY_DONE, -	USB_CHG_STATE_DETECTED, -}; - -/** - * USB charger types - * - * USB_INVALID_CHARGER	Invalid USB charger. - * USB_SDP_CHARGER	Standard downstream port. Refers to a downstream port - *                      on USB2.0 compliant host/hub. - * USB_DCP_CHARGER	Dedicated charger port (AC charger/ Wall charger). - * USB_CDP_CHARGER	Charging downstream port. Enumeration can happen and - *                      IDEV_CHG_MAX can be drawn irrespective of USB state. - * - */ -enum usb_chg_type { -	USB_INVALID_CHARGER = 0, -	USB_SDP_CHARGER, -	USB_DCP_CHARGER, -	USB_CDP_CHARGER, -}; - -/** - * struct msm_otg_platform_data - platform device data - *              for msm_otg driver. - * @phy_init_seq: PHY configuration sequence values. Value of -1 is reserved as - *              "do not overwrite default vaule at this address". - * @phy_init_sz: PHY configuration sequence size. - * @vbus_power: VBUS power on/off routine. - * @power_budget: VBUS power budget in mA (0 will be treated as 500mA). - * @mode: Supported mode (OTG/peripheral/host). - * @otg_control: OTG switch controlled by user/Id pin - */ -struct msm_otg_platform_data { -	int *phy_init_seq; -	int phy_init_sz; -	void (*vbus_power)(bool on); -	unsigned power_budget; -	enum usb_dr_mode mode; -	enum otg_control_type otg_control; -	enum msm_usb_phy_type phy_type; -	void (*setup_gpio)(enum usb_otg_state state); -}; - -/** - * struct msm_usb_cable - structure for exteternal connector cable - *			  state tracking - * @nb: hold event notification callback - * @conn: used for notification registration - */ -struct msm_usb_cable { -	struct notifier_block		nb; -	struct extcon_dev		*extcon; -}; - -/** - * struct msm_otg: OTG driver data. Shared by HCD and DCD. - * @otg: USB OTG Transceiver structure. - * @pdata: otg device platform data. - * @irq: IRQ number assigned for HSUSB controller. - * @clk: clock struct of usb_hs_clk. - * @pclk: clock struct of usb_hs_pclk. - * @core_clk: clock struct of usb_hs_core_clk. - * @regs: ioremapped register base address. - * @inputs: OTG state machine inputs(Id, SessValid etc). - * @sm_work: OTG state machine work. - * @in_lpm: indicates low power mode (LPM) state. - * @async_int: Async interrupt arrived. - * @cur_power: The amount of mA available from downstream port. - * @chg_work: Charger detection work. - * @chg_state: The state of charger detection process. - * @chg_type: The type of charger attached. - * @dcd_retires: The retry count used to track Data contact - *               detection process. - * @manual_pullup: true if VBUS is not routed to USB controller/phy - *	and controller driver therefore enables pull-up explicitly before - *	starting controller using usbcmd run/stop bit. - * @vbus: VBUS signal state trakining, using extcon framework - * @id: ID signal state trakining, using extcon framework - * @switch_gpio: Descriptor for GPIO used to control external Dual - *               SPDT USB Switch. - * @reboot: Used to inform the driver to route USB D+/D- line to Device - *	    connector - */ -struct msm_otg { -	struct usb_phy phy; -	struct msm_otg_platform_data *pdata; -	int irq; -	struct clk *clk; -	struct clk *pclk; -	struct clk *core_clk; -	void __iomem *regs; -#define ID		0 -#define B_SESS_VLD	1 -	unsigned long inputs; -	struct work_struct sm_work; -	atomic_t in_lpm; -	int async_int; -	unsigned cur_power; -	int phy_number; -	struct delayed_work chg_work; -	enum usb_chg_state chg_state; -	enum usb_chg_type chg_type; -	u8 dcd_retries; -	struct regulator *v3p3; -	struct regulator *v1p8; -	struct regulator *vddcx; - -	struct reset_control *phy_rst; -	struct reset_control *link_rst; -	int vdd_levels[3]; - -	bool manual_pullup; - -	struct msm_usb_cable vbus; -	struct msm_usb_cable id; - -	struct gpio_desc *switch_gpio; -	struct notifier_block reboot; -}; - -#endif diff --git a/include/linux/usb/musb.h b/include/linux/usb/musb.h index 0b3da40a525e..d315c8907869 100644 --- a/include/linux/usb/musb.h +++ b/include/linux/usb/musb.h @@ -142,10 +142,11 @@ enum musb_vbus_id_status {  };  #if IS_ENABLED(CONFIG_USB_MUSB_HDRC) -void musb_mailbox(enum musb_vbus_id_status status); +int musb_mailbox(enum musb_vbus_id_status status);  #else -static inline void musb_mailbox(enum musb_vbus_id_status status) +static inline int musb_mailbox(enum musb_vbus_id_status status)  { +	return 0;  }  #endif diff --git a/include/linux/usb/of.h b/include/linux/usb/of.h index de3237fce6b2..5ff9032ee1b4 100644 --- a/include/linux/usb/of.h +++ b/include/linux/usb/of.h @@ -12,7 +12,7 @@  #include <linux/usb/phy.h>  #if IS_ENABLED(CONFIG_OF) -enum usb_dr_mode of_usb_get_dr_mode_by_phy(struct device_node *phy_np); +enum usb_dr_mode of_usb_get_dr_mode_by_phy(struct device_node *np, int arg0);  bool of_usb_host_tpl_support(struct device_node *np);  int of_usb_update_otg_caps(struct device_node *np,  			struct usb_otg_caps *otg_caps); @@ -20,7 +20,7 @@ struct device_node *usb_of_get_child_node(struct device_node *parent,  			int portnum);  #else  static inline enum usb_dr_mode -of_usb_get_dr_mode_by_phy(struct device_node *phy_np) +of_usb_get_dr_mode_by_phy(struct device_node *np, int arg0)  {  	return USB_DR_MODE_UNKNOWN;  } diff --git a/include/linux/usb/xhci_pdriver.h b/include/linux/usb/xhci_pdriver.h deleted file mode 100644 index 376654b5b0f7..000000000000 --- a/include/linux/usb/xhci_pdriver.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. - * - */ - -#ifndef __USB_CORE_XHCI_PDRIVER_H -#define __USB_CORE_XHCI_PDRIVER_H - -/** - * struct usb_xhci_pdata - platform_data for generic xhci platform driver - * - * @usb3_lpm_capable:	determines if this xhci platform supports USB3 - *			LPM capability - * - */ -struct usb_xhci_pdata { -	unsigned	usb3_lpm_capable:1; -}; - -#endif /* __USB_CORE_XHCI_PDRIVER_H */ |