Merge branch 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6
* 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6: (205 commits) USB: EHCI: Remove SPARC_LEON {read,write}_be definitions from ehci.h USB: UHCI: Support big endian GRUSBHC HC sparc: add {read,write}*_be routines USB: UHCI: Add support for big endian descriptors USB: UHCI: Use ACCESS_ONCE rather than using a full compiler barrier USB: UHCI: Add support for big endian mmio usb-storage: Correct adjust_quirks to include latest flags usb/isp1760: Fix possible unlink problems usb/isp1760: Move function isp1760_endpoint_disable() within file. USB: remove remaining usages of hcd->state from usbcore and fix regression usb: musb: ux500: add configuration and build options for ux500 dma usb: musb: ux500: add dma glue layer for ux500 usb: musb: ux500: add dma name for ux500 usb: musb: ux500: add ux500 specific code for gadget side usb: musb: fix compile error usb-storage: fix up the unusual_realtek device list USB: gadget: f_audio: Fix invalid dereference of initdata EHCI: don't rescan interrupt QHs needlessly OHCI: fix regression caused by nVidia shutdown workaround USB: OTG: msm: Free VCCCX regulator even if we can't set the voltage ...
This commit is contained in:
@ -579,7 +579,7 @@ struct usb_ss_ep_comp_descriptor {
|
||||
|
||||
__u8 bMaxBurst;
|
||||
__u8 bmAttributes;
|
||||
__u16 wBytesPerInterval;
|
||||
__le16 wBytesPerInterval;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
#define USB_DT_SS_EP_COMP_SIZE 6
|
||||
|
@ -37,6 +37,14 @@
|
||||
#include <linux/usb/ch9.h>
|
||||
#include <linux/usb/gadget.h>
|
||||
|
||||
/*
|
||||
* USB function drivers should return USB_GADGET_DELAYED_STATUS if they
|
||||
* wish to delay the data/status stages of the control transfer till they
|
||||
* are ready. The control transfer will then be kept from completing till
|
||||
* all the function drivers that requested for USB_GADGET_DELAYED_STAUS
|
||||
* invoke usb_composite_setup_continue().
|
||||
*/
|
||||
#define USB_GADGET_DELAYED_STATUS 0x7fff /* Impossibly large value */
|
||||
|
||||
struct usb_configuration;
|
||||
|
||||
@ -285,6 +293,7 @@ struct usb_composite_driver {
|
||||
extern int usb_composite_probe(struct usb_composite_driver *driver,
|
||||
int (*bind)(struct usb_composite_dev *cdev));
|
||||
extern void usb_composite_unregister(struct usb_composite_driver *driver);
|
||||
extern void usb_composite_setup_continue(struct usb_composite_dev *cdev);
|
||||
|
||||
|
||||
/**
|
||||
@ -342,7 +351,12 @@ struct usb_composite_dev {
|
||||
*/
|
||||
unsigned deactivations;
|
||||
|
||||
/* protects at least deactivation count */
|
||||
/* the composite driver won't complete the control transfer's
|
||||
* data/status stages till delayed_status is zero.
|
||||
*/
|
||||
int delayed_status;
|
||||
|
||||
/* protects deactivations and delayed_status counts*/
|
||||
spinlock_t lock;
|
||||
};
|
||||
|
||||
|
@ -25,10 +25,15 @@
|
||||
struct ehci_caps {
|
||||
/* these fields are specified as 8 and 16 bit registers,
|
||||
* but some hosts can't perform 8 or 16 bit PCI accesses.
|
||||
* some hosts treat caplength and hciversion as parts of a 32-bit
|
||||
* register, others treat them as two separate registers, this
|
||||
* affects the memory map for big endian controllers.
|
||||
*/
|
||||
u32 hc_capbase;
|
||||
#define HC_LENGTH(p) (((p)>>00)&0x00ff) /* bits 7:0 */
|
||||
#define HC_VERSION(p) (((p)>>16)&0xffff) /* bits 31:16 */
|
||||
#define HC_LENGTH(ehci, p) (0x00ff&((p) >> /* bits 7:0 / offset 00h */ \
|
||||
(ehci_big_endian_capbase(ehci) ? 24 : 0)))
|
||||
#define HC_VERSION(ehci, p) (0xffff&((p) >> /* bits 31:16 / offset 02h */ \
|
||||
(ehci_big_endian_capbase(ehci) ? 0 : 16)))
|
||||
u32 hcs_params; /* HCSPARAMS - offset 0x4 */
|
||||
#define HCS_DEBUG_PORT(p) (((p)>>20)&0xf) /* bits 23:20, debug port? */
|
||||
#define HCS_INDICATOR(p) ((p)&(1 << 16)) /* true: has port indicators */
|
||||
@ -52,7 +57,7 @@ struct ehci_caps {
|
||||
#define HCC_PGM_FRAMELISTLEN(p) ((p)&(1 << 1)) /* true: periodic_size changes*/
|
||||
#define HCC_64BIT_ADDR(p) ((p)&(1)) /* true: can use 64-bit addr */
|
||||
u8 portroute[8]; /* nibbles for routing - offset 0xC */
|
||||
} __attribute__ ((packed));
|
||||
};
|
||||
|
||||
|
||||
/* Section 2.3 Host Controller Operational Registers */
|
||||
@ -150,7 +155,7 @@ struct ehci_regs {
|
||||
#define PORT_CSC (1<<1) /* connect status change */
|
||||
#define PORT_CONNECT (1<<0) /* device connected */
|
||||
#define PORT_RWC_BITS (PORT_CSC | PORT_PEC | PORT_OCC)
|
||||
} __attribute__ ((packed));
|
||||
};
|
||||
|
||||
#define USBMODE 0x68 /* USB Device mode */
|
||||
#define USBMODE_SDIS (1<<3) /* Stream disable */
|
||||
@ -194,7 +199,7 @@ struct ehci_dbg_port {
|
||||
u32 data47;
|
||||
u32 address;
|
||||
#define DBGP_EPADDR(dev, ep) (((dev)<<8)|(ep))
|
||||
} __attribute__ ((packed));
|
||||
};
|
||||
|
||||
#ifdef CONFIG_EARLY_PRINTK_DBGP
|
||||
#include <linux/init.h>
|
||||
|
@ -890,8 +890,8 @@ static inline void usb_free_descriptors(struct usb_descriptor_header **v)
|
||||
/* utility wrapping a simple endpoint selection policy */
|
||||
|
||||
extern struct usb_ep *usb_ep_autoconfig(struct usb_gadget *,
|
||||
struct usb_endpoint_descriptor *) __devinit;
|
||||
struct usb_endpoint_descriptor *);
|
||||
|
||||
extern void usb_ep_autoconfig_reset(struct usb_gadget *) __devinit;
|
||||
extern void usb_ep_autoconfig_reset(struct usb_gadget *);
|
||||
|
||||
#endif /* __LINUX_USB_GADGET_H */
|
||||
|
@ -2,7 +2,7 @@
|
||||
*
|
||||
* Copyright (C) 2008 Google, Inc.
|
||||
* Author: Brian Swetland <swetland@google.com>
|
||||
* Copyright (c) 2009-2010, Code Aurora Forum. All rights reserved.
|
||||
* 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
|
||||
@ -53,6 +53,64 @@ enum otg_control_type {
|
||||
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.
|
||||
@ -64,7 +122,8 @@ enum otg_control_type {
|
||||
* @otg_control: OTG switch controlled by user/Id pin
|
||||
* @default_mode: Default operational mode. Applicable only if
|
||||
* OTG switch is controller by user.
|
||||
*
|
||||
* @pclk_src_name: pclk is derived from ebi1_usb_clk in case of 7x27 and 8k
|
||||
* dfab_usb_hs_clk in case of 8660 and 8960.
|
||||
*/
|
||||
struct msm_otg_platform_data {
|
||||
int *phy_init_seq;
|
||||
@ -73,7 +132,9 @@ struct msm_otg_platform_data {
|
||||
enum usb_mode_type mode;
|
||||
enum otg_control_type otg_control;
|
||||
enum usb_mode_type default_mode;
|
||||
enum msm_usb_phy_type phy_type;
|
||||
void (*setup_gpio)(enum usb_otg_state state);
|
||||
char *pclk_src_name;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -83,6 +144,7 @@ struct msm_otg_platform_data {
|
||||
* @irq: IRQ number assigned for HSUSB controller.
|
||||
* @clk: clock struct of usb_hs_clk.
|
||||
* @pclk: clock struct of usb_hs_pclk.
|
||||
* @pclk_src: pclk source for voting.
|
||||
* @phy_reset_clk: clock struct of usb_phy_clk.
|
||||
* @core_clk: clock struct of usb_hs_core_clk.
|
||||
* @regs: ioremapped register base address.
|
||||
@ -90,7 +152,12 @@ struct msm_otg_platform_data {
|
||||
* @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.
|
||||
*/
|
||||
struct msm_otg {
|
||||
struct otg_transceiver otg;
|
||||
@ -98,6 +165,7 @@ struct msm_otg {
|
||||
int irq;
|
||||
struct clk *clk;
|
||||
struct clk *pclk;
|
||||
struct clk *pclk_src;
|
||||
struct clk *phy_reset_clk;
|
||||
struct clk *core_clk;
|
||||
void __iomem *regs;
|
||||
@ -107,6 +175,11 @@ struct msm_otg {
|
||||
struct work_struct sm_work;
|
||||
atomic_t in_lpm;
|
||||
int async_int;
|
||||
unsigned cur_power;
|
||||
struct delayed_work chg_work;
|
||||
enum usb_chg_state chg_state;
|
||||
enum usb_chg_type chg_type;
|
||||
u8 dcd_retries;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -24,6 +24,7 @@
|
||||
#define USB_PORTSC (MSM_USB_BASE + 0x0184)
|
||||
#define USB_OTGSC (MSM_USB_BASE + 0x01A4)
|
||||
#define USB_USBMODE (MSM_USB_BASE + 0x01A8)
|
||||
#define USB_PHY_CTRL (MSM_USB_BASE + 0x0240)
|
||||
|
||||
#define USBCMD_RESET 2
|
||||
#define USB_USBINTR (MSM_USB_BASE + 0x0148)
|
||||
@ -42,6 +43,7 @@
|
||||
|
||||
#define ASYNC_INTR_CTRL (1 << 29) /* Enable async interrupt */
|
||||
#define ULPI_STP_CTRL (1 << 30) /* Block communication with PHY */
|
||||
#define PHY_RETEN (1 << 1) /* PHY retention enable/disable */
|
||||
|
||||
/* OTG definitions */
|
||||
#define OTGSC_INTSTS_MASK (0x7f << 16)
|
||||
|
@ -168,6 +168,7 @@ otg_shutdown(struct otg_transceiver *otg)
|
||||
#ifdef CONFIG_USB_OTG_UTILS
|
||||
extern struct otg_transceiver *otg_get_transceiver(void);
|
||||
extern void otg_put_transceiver(struct otg_transceiver *);
|
||||
extern const char *otg_state_string(enum usb_otg_state state);
|
||||
#else
|
||||
static inline struct otg_transceiver *otg_get_transceiver(void)
|
||||
{
|
||||
@ -177,6 +178,11 @@ static inline struct otg_transceiver *otg_get_transceiver(void)
|
||||
static inline void otg_put_transceiver(struct otg_transceiver *x)
|
||||
{
|
||||
}
|
||||
|
||||
static inline const char *otg_state_string(enum usb_otg_state state)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Context: can sleep */
|
||||
|
156
include/linux/usb/renesas_usbhs.h
Normal file
156
include/linux/usb/renesas_usbhs.h
Normal file
@ -0,0 +1,156 @@
|
||||
/*
|
||||
* Renesas USB
|
||||
*
|
||||
* Copyright (C) 2011 Renesas Solutions Corp.
|
||||
* Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
|
||||
*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
#ifndef RENESAS_USB_H
|
||||
#define RENESAS_USB_H
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/usb/ch9.h>
|
||||
|
||||
/*
|
||||
* module type
|
||||
*
|
||||
* it will be return value from get_id
|
||||
*/
|
||||
enum {
|
||||
USBHS_HOST = 0,
|
||||
USBHS_GADGET,
|
||||
USBHS_MAX,
|
||||
};
|
||||
|
||||
/*
|
||||
* callback functions table for driver
|
||||
*
|
||||
* These functions are called from platform for driver.
|
||||
* Callback function's pointer will be set before
|
||||
* renesas_usbhs_platform_callback :: hardware_init was called
|
||||
*/
|
||||
struct renesas_usbhs_driver_callback {
|
||||
int (*notify_hotplug)(struct platform_device *pdev);
|
||||
};
|
||||
|
||||
/*
|
||||
* callback functions for platform
|
||||
*
|
||||
* These functions are called from driver for platform
|
||||
*/
|
||||
struct renesas_usbhs_platform_callback {
|
||||
|
||||
/*
|
||||
* option:
|
||||
*
|
||||
* Hardware init function for platform.
|
||||
* it is called when driver was probed.
|
||||
*/
|
||||
int (*hardware_init)(struct platform_device *pdev);
|
||||
|
||||
/*
|
||||
* option:
|
||||
*
|
||||
* Hardware exit function for platform.
|
||||
* it is called when driver was removed
|
||||
*/
|
||||
void (*hardware_exit)(struct platform_device *pdev);
|
||||
|
||||
/*
|
||||
* option:
|
||||
*
|
||||
* Phy reset for platform
|
||||
*/
|
||||
void (*phy_reset)(struct platform_device *pdev);
|
||||
|
||||
/*
|
||||
* get USB ID function
|
||||
* - USBHS_HOST
|
||||
* - USBHS_GADGET
|
||||
*/
|
||||
int (*get_id)(struct platform_device *pdev);
|
||||
|
||||
/*
|
||||
* get VBUS status function.
|
||||
*/
|
||||
int (*get_vbus)(struct platform_device *pdev);
|
||||
};
|
||||
|
||||
/*
|
||||
* parameters for renesas usbhs
|
||||
*
|
||||
* some register needs USB chip specific parameters.
|
||||
* This struct show it to driver
|
||||
*/
|
||||
struct renesas_usbhs_driver_param {
|
||||
/*
|
||||
* pipe settings
|
||||
*/
|
||||
u32 *pipe_type; /* array of USB_ENDPOINT_XFER_xxx (from ep0) */
|
||||
int pipe_size; /* pipe_type array size */
|
||||
|
||||
/*
|
||||
* option:
|
||||
*
|
||||
* for BUSWAIT :: BWAIT
|
||||
* */
|
||||
int buswait_bwait;
|
||||
|
||||
/*
|
||||
* option:
|
||||
*
|
||||
* delay time from notify_hotplug callback
|
||||
*/
|
||||
int detection_delay;
|
||||
};
|
||||
|
||||
/*
|
||||
* option:
|
||||
*
|
||||
* platform information for renesas_usbhs driver.
|
||||
*/
|
||||
struct renesas_usbhs_platform_info {
|
||||
/*
|
||||
* option:
|
||||
*
|
||||
* platform set these functions before
|
||||
* call platform_add_devices if needed
|
||||
*/
|
||||
struct renesas_usbhs_platform_callback platform_callback;
|
||||
|
||||
/*
|
||||
* driver set these callback functions pointer.
|
||||
* platform can use it on callback functions
|
||||
*/
|
||||
struct renesas_usbhs_driver_callback driver_callback;
|
||||
|
||||
/*
|
||||
* option:
|
||||
*
|
||||
* driver use these param for some register
|
||||
*/
|
||||
struct renesas_usbhs_driver_param driver_param;
|
||||
};
|
||||
|
||||
/*
|
||||
* macro for platform
|
||||
*/
|
||||
#define renesas_usbhs_get_info(pdev)\
|
||||
((struct renesas_usbhs_platform_info *)(pdev)->dev.platform_data)
|
||||
|
||||
#define renesas_usbhs_call_notify_hotplug(pdev) \
|
||||
({ \
|
||||
struct renesas_usbhs_driver_callback *dc; \
|
||||
dc = &(renesas_usbhs_get_info(pdev)->driver_callback); \
|
||||
if (dc && dc->notify_hotplug) \
|
||||
dc->notify_hotplug(pdev); \
|
||||
})
|
||||
#endif /* RENESAS_USB_H */
|
Reference in New Issue
Block a user