forked from Minki/linux
976f8bef9c
All function drivers are now converted to our new configfs-based binding. Eventually this will help us getting rid of in-kernel gadget drivers and only keep function drivers in the kernel. MUSB was taught that it needs to be built for host-only and device-only modes too. We had this support long ago but it involved a ridiculous amount of ifdefs. Now we have a much cleaner approach. Samsung Exynos4 platform now implements HSIC support. We're introducing support for AB8540 and AB9540 PHYs. MUSB module reinsertion now works as expected, before we were getting -EBUSY being returned by the resource checks done on driver core. DWC3 now has minimum support for TI's AM437x series of SoCs. OMAP5 USB3 PHY learned one extra DPLL configuration values because that PHY is reused in TI's DRA7xx devices. We're introducing support for Faraday fotg210 UDCs. Last, but not least, the usual set of non-critical fixes and cleanups ranging from usage of platform_{get,set}_drvdata to lock improvements. Signed-of-by: Felipe Balbi <balbi@ti.com> -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQIcBAABAgAGBQJRuODuAAoJEIaOsuA1yqREEYMP/212PIcMM/niwl2T97l+Ispc EVe8ebg69/t+LjEHmipyw00HvBuGv+6ccJbuU+NBSSi229iIkxXlE+Q7MoywHOZg eSozqiIXIotkNTPg4vT6YfWspyNaoiDrl9TK3KMP9SyctlgxqMdcfke5dqpGpdUP xqYhWCAbZ6uvu6Lq6r3NwX1pMKhXxbnTDCY77YOCb/H8UPlSHSW4nwjAKYvsEWwD RLXn0UKDZF4FRm296ftIHDD8rDazCaQPkkglQejFrqheNpbR7SUkC672veca7xF5 2iaWS62p7SWDHsfzyLpeJwoglHcxRa3E8ZqdT9ALvrimMTm0jVM0pzDSCF2xBpFq UP78YX2S94o/YC8NXfp6GMf5CFSlLDxQ7oahcUpUBVtx5l2v8bfyb2/KOrB6kHBS v8RJqFbcYXHHygaYS0oXGqKg2ScwYeVIenlrk8ByPrfkJqS3v7CKLB0wNrV5ZWyC nnfyMF+bW+M00nb9jKjS+Utni8looKpWdKcmAdP/zPVKDZE5zh5WL2q/zWepWdgP 8nIslvivXmAkNs8wN5ji/E/w9qqkXiYCVkSQXfXPgBLWesaQqBR2geRWduSetKSm AHINjU4+wXkRR0V1HyKzn+b1v5yZ5ksV7n5SXltyXKNeO0IeBDHNBHRVPFqHdgau u2prz3aPvqEFENqgr7z5 =O9AH -----END PGP SIGNATURE----- Merge tag 'usb-for-v3.11' of git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into usb-next Felipe writes: usb: patches for v3.11 merge window All function drivers are now converted to our new configfs-based binding. Eventually this will help us getting rid of in-kernel gadget drivers and only keep function drivers in the kernel. MUSB was taught that it needs to be built for host-only and device-only modes too. We had this support long ago but it involved a ridiculous amount of ifdefs. Now we have a much cleaner approach. Samsung Exynos4 platform now implements HSIC support. We're introducing support for AB8540 and AB9540 PHYs. MUSB module reinsertion now works as expected, before we were getting -EBUSY being returned by the resource checks done on driver core. DWC3 now has minimum support for TI's AM437x series of SoCs. OMAP5 USB3 PHY learned one extra DPLL configuration values because that PHY is reused in TI's DRA7xx devices. We're introducing support for Faraday fotg210 UDCs. Last, but not least, the usual set of non-critical fixes and cleanups ranging from usage of platform_{get,set}_drvdata to lock improvements. Signed-of-by: Felipe Balbi <balbi@ti.com>
146 lines
4.9 KiB
C
146 lines
4.9 KiB
C
/*
|
|
* MUSB OTG driver host defines
|
|
*
|
|
* Copyright 2005 Mentor Graphics Corporation
|
|
* Copyright (C) 2005-2006 by Texas Instruments
|
|
* Copyright (C) 2006-2007 Nokia Corporation
|
|
*
|
|
* 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.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
|
* 02110-1301 USA
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
|
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
|
|
* NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
|
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
*/
|
|
|
|
#ifndef _MUSB_HOST_H
|
|
#define _MUSB_HOST_H
|
|
|
|
#include <linux/scatterlist.h>
|
|
|
|
/* stored in "usb_host_endpoint.hcpriv" for scheduled endpoints */
|
|
struct musb_qh {
|
|
struct usb_host_endpoint *hep; /* usbcore info */
|
|
struct usb_device *dev;
|
|
struct musb_hw_ep *hw_ep; /* current binding */
|
|
|
|
struct list_head ring; /* of musb_qh */
|
|
/* struct musb_qh *next; */ /* for periodic tree */
|
|
u8 mux; /* qh multiplexed to hw_ep */
|
|
|
|
unsigned offset; /* in urb->transfer_buffer */
|
|
unsigned segsize; /* current xfer fragment */
|
|
|
|
u8 type_reg; /* {rx,tx} type register */
|
|
u8 intv_reg; /* {rx,tx} interval register */
|
|
u8 addr_reg; /* device address register */
|
|
u8 h_addr_reg; /* hub address register */
|
|
u8 h_port_reg; /* hub port register */
|
|
|
|
u8 is_ready; /* safe to modify hw_ep */
|
|
u8 type; /* XFERTYPE_* */
|
|
u8 epnum;
|
|
u8 hb_mult; /* high bandwidth pkts per uf */
|
|
u16 maxpacket;
|
|
u16 frame; /* for periodic schedule */
|
|
unsigned iso_idx; /* in urb->iso_frame_desc[] */
|
|
struct sg_mapping_iter sg_miter; /* for highmem in PIO mode */
|
|
bool use_sg; /* to track urb using sglist */
|
|
};
|
|
|
|
/* map from control or bulk queue head to the first qh on that ring */
|
|
static inline struct musb_qh *first_qh(struct list_head *q)
|
|
{
|
|
if (list_empty(q))
|
|
return NULL;
|
|
return list_entry(q->next, struct musb_qh, ring);
|
|
}
|
|
|
|
|
|
#if IS_ENABLED(CONFIG_USB_MUSB_HOST) || IS_ENABLED(CONFIG_USB_MUSB_DUAL_ROLE)
|
|
extern struct musb *hcd_to_musb(struct usb_hcd *);
|
|
extern irqreturn_t musb_h_ep0_irq(struct musb *);
|
|
extern int musb_host_alloc(struct musb *);
|
|
extern int musb_host_setup(struct musb *, int);
|
|
extern void musb_host_cleanup(struct musb *);
|
|
extern void musb_host_tx(struct musb *, u8);
|
|
extern void musb_host_rx(struct musb *, u8);
|
|
extern void musb_root_disconnect(struct musb *musb);
|
|
extern void musb_host_free(struct musb *);
|
|
extern void musb_host_cleanup(struct musb *);
|
|
extern void musb_host_tx(struct musb *, u8);
|
|
extern void musb_host_rx(struct musb *, u8);
|
|
extern void musb_root_disconnect(struct musb *musb);
|
|
extern void musb_host_resume_root_hub(struct musb *musb);
|
|
extern void musb_host_poke_root_hub(struct musb *musb);
|
|
#else
|
|
static inline struct musb *hcd_to_musb(struct usb_hcd *hcd)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
static inline irqreturn_t musb_h_ep0_irq(struct musb *musb)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline int musb_host_alloc(struct musb *musb)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline int musb_host_setup(struct musb *musb, int power_budget)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline void musb_host_cleanup(struct musb *musb) {}
|
|
static inline void musb_host_free(struct musb *musb) {}
|
|
static inline void musb_host_tx(struct musb *musb, u8 epnum) {}
|
|
static inline void musb_host_rx(struct musb *musb, u8 epnum) {}
|
|
static inline void musb_root_disconnect(struct musb *musb) {}
|
|
static inline void musb_host_resume_root_hub(struct musb *musb) {}
|
|
static inline void musb_host_poll_rh_status(struct musb *musb) {}
|
|
static inline void musb_host_poke_root_hub(struct musb *musb) {}
|
|
#endif
|
|
|
|
struct usb_hcd;
|
|
|
|
extern int musb_hub_status_data(struct usb_hcd *hcd, char *buf);
|
|
extern int musb_hub_control(struct usb_hcd *hcd,
|
|
u16 typeReq, u16 wValue, u16 wIndex,
|
|
char *buf, u16 wLength);
|
|
|
|
static inline struct urb *next_urb(struct musb_qh *qh)
|
|
{
|
|
struct list_head *queue;
|
|
|
|
if (!qh)
|
|
return NULL;
|
|
queue = &qh->hep->urb_list;
|
|
if (list_empty(queue))
|
|
return NULL;
|
|
return list_entry(queue->next, struct urb, urb_list);
|
|
}
|
|
|
|
#endif /* _MUSB_HOST_H */
|