Merge tag 'usb-for-v4.2' of git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into usb-next
Felipe writes: usb: patches for v4.2 merge window - dwc2 adds hibernation support - preparation for sunxi glue to musb driver - new ULPI bus - new ULPI PHY driver for TUSB1210 - musb patches to support multiple DMA engines on same binary - support for R-Car E2 on renesas_usbhs Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
#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>
|
||||
@@ -119,6 +120,17 @@ struct msm_otg_platform_data {
|
||||
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_specific_cable_nb conn;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct msm_otg: OTG driver data. Shared by HCD and DCD.
|
||||
* @otg: USB OTG Transceiver structure.
|
||||
@@ -138,6 +150,11 @@ struct msm_otg_platform_data {
|
||||
* @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
|
||||
*/
|
||||
struct msm_otg {
|
||||
struct usb_phy phy;
|
||||
@@ -166,6 +183,11 @@ struct msm_otg {
|
||||
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;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@@ -21,6 +21,8 @@
|
||||
|
||||
#define USB_AHBBURST (MSM_USB_BASE + 0x0090)
|
||||
#define USB_AHBMODE (MSM_USB_BASE + 0x0098)
|
||||
#define USB_GENCONFIG_2 (MSM_USB_BASE + 0x00a0)
|
||||
|
||||
#define USB_CAPLENGTH (MSM_USB_BASE + 0x0100) /* 8 bit */
|
||||
|
||||
#define USB_USBCMD (MSM_USB_BASE + 0x0140)
|
||||
@@ -30,6 +32,9 @@
|
||||
#define USB_PHY_CTRL (MSM_USB_BASE + 0x0240)
|
||||
#define USB_PHY_CTRL2 (MSM_USB_BASE + 0x0278)
|
||||
|
||||
#define GENCONFIG_2_SESS_VLD_CTRL_EN BIT(7)
|
||||
#define USBCMD_SESS_VLD_CTRL BIT(25)
|
||||
|
||||
#define USBCMD_RESET 2
|
||||
#define USB_USBINTR (MSM_USB_BASE + 0x0148)
|
||||
|
||||
@@ -50,6 +55,10 @@
|
||||
#define ULPI_PWR_CLK_MNG_REG 0x88
|
||||
#define OTG_COMP_DISABLE BIT(0)
|
||||
|
||||
#define ULPI_MISC_A 0x96
|
||||
#define ULPI_MISC_A_VBUSVLDEXTSEL BIT(1)
|
||||
#define ULPI_MISC_A_VBUSVLDEXT BIT(0)
|
||||
|
||||
#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 */
|
||||
|
@@ -168,6 +168,9 @@ struct net2280_regs {
|
||||
#define ENDPOINT_B_INTERRUPT 2
|
||||
#define ENDPOINT_A_INTERRUPT 1
|
||||
#define ENDPOINT_0_INTERRUPT 0
|
||||
#define USB3380_IRQSTAT0_EP_INTR_MASK_IN (0xF << 17)
|
||||
#define USB3380_IRQSTAT0_EP_INTR_MASK_OUT (0xF << 1)
|
||||
|
||||
u32 irqstat1;
|
||||
#define POWER_STATE_CHANGE_INTERRUPT 27
|
||||
#define PCI_ARBITER_TIMEOUT_INTERRUPT 26
|
||||
|
@@ -205,6 +205,8 @@ extern struct usb_phy *usb_get_phy_dev(struct device *dev, u8 index);
|
||||
extern struct usb_phy *devm_usb_get_phy_dev(struct device *dev, u8 index);
|
||||
extern struct usb_phy *devm_usb_get_phy_by_phandle(struct device *dev,
|
||||
const char *phandle, u8 index);
|
||||
extern struct usb_phy *devm_usb_get_phy_by_node(struct device *dev,
|
||||
struct device_node *node, struct notifier_block *nb);
|
||||
extern void usb_put_phy(struct usb_phy *);
|
||||
extern void devm_usb_put_phy(struct device *dev, struct usb_phy *x);
|
||||
extern int usb_bind_phy(const char *dev_name, u8 index,
|
||||
@@ -238,6 +240,12 @@ static inline struct usb_phy *devm_usb_get_phy_by_phandle(struct device *dev,
|
||||
return ERR_PTR(-ENXIO);
|
||||
}
|
||||
|
||||
static inline struct usb_phy *devm_usb_get_phy_by_node(struct device *dev,
|
||||
struct device_node *node, struct notifier_block *nb)
|
||||
{
|
||||
return ERR_PTR(-ENXIO);
|
||||
}
|
||||
|
||||
static inline void usb_put_phy(struct usb_phy *x)
|
||||
{
|
||||
}
|
||||
|
@@ -169,8 +169,7 @@ struct renesas_usbhs_driver_param {
|
||||
#define USBHS_USB_DMAC_XFER_SIZE 32 /* hardcode the xfer size */
|
||||
};
|
||||
|
||||
#define USBHS_TYPE_R8A7790 1
|
||||
#define USBHS_TYPE_R8A7791 2
|
||||
#define USBHS_TYPE_RCAR_GEN2 1
|
||||
|
||||
/*
|
||||
* option:
|
||||
|
@@ -12,6 +12,8 @@
|
||||
#define __LINUX_USB_ULPI_H
|
||||
|
||||
#include <linux/usb/otg.h>
|
||||
#include <linux/ulpi/regs.h>
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
@@ -49,138 +51,6 @@
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* Macros for Set and Clear
|
||||
* See ULPI 1.1 specification to find the registers with Set and Clear offsets
|
||||
*/
|
||||
#define ULPI_SET(a) (a + 1)
|
||||
#define ULPI_CLR(a) (a + 2)
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* Register Map
|
||||
*/
|
||||
#define ULPI_VENDOR_ID_LOW 0x00
|
||||
#define ULPI_VENDOR_ID_HIGH 0x01
|
||||
#define ULPI_PRODUCT_ID_LOW 0x02
|
||||
#define ULPI_PRODUCT_ID_HIGH 0x03
|
||||
#define ULPI_FUNC_CTRL 0x04
|
||||
#define ULPI_IFC_CTRL 0x07
|
||||
#define ULPI_OTG_CTRL 0x0a
|
||||
#define ULPI_USB_INT_EN_RISE 0x0d
|
||||
#define ULPI_USB_INT_EN_FALL 0x10
|
||||
#define ULPI_USB_INT_STS 0x13
|
||||
#define ULPI_USB_INT_LATCH 0x14
|
||||
#define ULPI_DEBUG 0x15
|
||||
#define ULPI_SCRATCH 0x16
|
||||
/* Optional Carkit Registers */
|
||||
#define ULPI_CARCIT_CTRL 0x19
|
||||
#define ULPI_CARCIT_INT_DELAY 0x1c
|
||||
#define ULPI_CARCIT_INT_EN 0x1d
|
||||
#define ULPI_CARCIT_INT_STS 0x20
|
||||
#define ULPI_CARCIT_INT_LATCH 0x21
|
||||
#define ULPI_CARCIT_PLS_CTRL 0x22
|
||||
/* Other Optional Registers */
|
||||
#define ULPI_TX_POS_WIDTH 0x25
|
||||
#define ULPI_TX_NEG_WIDTH 0x26
|
||||
#define ULPI_POLARITY_RECOVERY 0x27
|
||||
/* Access Extended Register Set */
|
||||
#define ULPI_ACCESS_EXTENDED 0x2f
|
||||
/* Vendor Specific */
|
||||
#define ULPI_VENDOR_SPECIFIC 0x30
|
||||
/* Extended Registers */
|
||||
#define ULPI_EXT_VENDOR_SPECIFIC 0x80
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* Register Bits
|
||||
*/
|
||||
|
||||
/* Function Control */
|
||||
#define ULPI_FUNC_CTRL_XCVRSEL (1 << 0)
|
||||
#define ULPI_FUNC_CTRL_XCVRSEL_MASK (3 << 0)
|
||||
#define ULPI_FUNC_CTRL_HIGH_SPEED (0 << 0)
|
||||
#define ULPI_FUNC_CTRL_FULL_SPEED (1 << 0)
|
||||
#define ULPI_FUNC_CTRL_LOW_SPEED (2 << 0)
|
||||
#define ULPI_FUNC_CTRL_FS4LS (3 << 0)
|
||||
#define ULPI_FUNC_CTRL_TERMSELECT (1 << 2)
|
||||
#define ULPI_FUNC_CTRL_OPMODE (1 << 3)
|
||||
#define ULPI_FUNC_CTRL_OPMODE_MASK (3 << 3)
|
||||
#define ULPI_FUNC_CTRL_OPMODE_NORMAL (0 << 3)
|
||||
#define ULPI_FUNC_CTRL_OPMODE_NONDRIVING (1 << 3)
|
||||
#define ULPI_FUNC_CTRL_OPMODE_DISABLE_NRZI (2 << 3)
|
||||
#define ULPI_FUNC_CTRL_OPMODE_NOSYNC_NOEOP (3 << 3)
|
||||
#define ULPI_FUNC_CTRL_RESET (1 << 5)
|
||||
#define ULPI_FUNC_CTRL_SUSPENDM (1 << 6)
|
||||
|
||||
/* Interface Control */
|
||||
#define ULPI_IFC_CTRL_6_PIN_SERIAL_MODE (1 << 0)
|
||||
#define ULPI_IFC_CTRL_3_PIN_SERIAL_MODE (1 << 1)
|
||||
#define ULPI_IFC_CTRL_CARKITMODE (1 << 2)
|
||||
#define ULPI_IFC_CTRL_CLOCKSUSPENDM (1 << 3)
|
||||
#define ULPI_IFC_CTRL_AUTORESUME (1 << 4)
|
||||
#define ULPI_IFC_CTRL_EXTERNAL_VBUS (1 << 5)
|
||||
#define ULPI_IFC_CTRL_PASSTHRU (1 << 6)
|
||||
#define ULPI_IFC_CTRL_PROTECT_IFC_DISABLE (1 << 7)
|
||||
|
||||
/* OTG Control */
|
||||
#define ULPI_OTG_CTRL_ID_PULLUP (1 << 0)
|
||||
#define ULPI_OTG_CTRL_DP_PULLDOWN (1 << 1)
|
||||
#define ULPI_OTG_CTRL_DM_PULLDOWN (1 << 2)
|
||||
#define ULPI_OTG_CTRL_DISCHRGVBUS (1 << 3)
|
||||
#define ULPI_OTG_CTRL_CHRGVBUS (1 << 4)
|
||||
#define ULPI_OTG_CTRL_DRVVBUS (1 << 5)
|
||||
#define ULPI_OTG_CTRL_DRVVBUS_EXT (1 << 6)
|
||||
#define ULPI_OTG_CTRL_EXTVBUSIND (1 << 7)
|
||||
|
||||
/* USB Interrupt Enable Rising,
|
||||
* USB Interrupt Enable Falling,
|
||||
* USB Interrupt Status and
|
||||
* USB Interrupt Latch
|
||||
*/
|
||||
#define ULPI_INT_HOST_DISCONNECT (1 << 0)
|
||||
#define ULPI_INT_VBUS_VALID (1 << 1)
|
||||
#define ULPI_INT_SESS_VALID (1 << 2)
|
||||
#define ULPI_INT_SESS_END (1 << 3)
|
||||
#define ULPI_INT_IDGRD (1 << 4)
|
||||
|
||||
/* Debug */
|
||||
#define ULPI_DEBUG_LINESTATE0 (1 << 0)
|
||||
#define ULPI_DEBUG_LINESTATE1 (1 << 1)
|
||||
|
||||
/* Carkit Control */
|
||||
#define ULPI_CARKIT_CTRL_CARKITPWR (1 << 0)
|
||||
#define ULPI_CARKIT_CTRL_IDGNDDRV (1 << 1)
|
||||
#define ULPI_CARKIT_CTRL_TXDEN (1 << 2)
|
||||
#define ULPI_CARKIT_CTRL_RXDEN (1 << 3)
|
||||
#define ULPI_CARKIT_CTRL_SPKLEFTEN (1 << 4)
|
||||
#define ULPI_CARKIT_CTRL_SPKRIGHTEN (1 << 5)
|
||||
#define ULPI_CARKIT_CTRL_MICEN (1 << 6)
|
||||
|
||||
/* Carkit Interrupt Enable */
|
||||
#define ULPI_CARKIT_INT_EN_IDFLOAT_RISE (1 << 0)
|
||||
#define ULPI_CARKIT_INT_EN_IDFLOAT_FALL (1 << 1)
|
||||
#define ULPI_CARKIT_INT_EN_CARINTDET (1 << 2)
|
||||
#define ULPI_CARKIT_INT_EN_DP_RISE (1 << 3)
|
||||
#define ULPI_CARKIT_INT_EN_DP_FALL (1 << 4)
|
||||
|
||||
/* Carkit Interrupt Status and
|
||||
* Carkit Interrupt Latch
|
||||
*/
|
||||
#define ULPI_CARKIT_INT_IDFLOAT (1 << 0)
|
||||
#define ULPI_CARKIT_INT_CARINTDET (1 << 1)
|
||||
#define ULPI_CARKIT_INT_DP (1 << 2)
|
||||
|
||||
/* Carkit Pulse Control*/
|
||||
#define ULPI_CARKIT_PLS_CTRL_TXPLSEN (1 << 0)
|
||||
#define ULPI_CARKIT_PLS_CTRL_RXPLSEN (1 << 1)
|
||||
#define ULPI_CARKIT_PLS_CTRL_SPKRLEFT_BIASEN (1 << 2)
|
||||
#define ULPI_CARKIT_PLS_CTRL_SPKRRIGHT_BIASEN (1 << 3)
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
#if IS_ENABLED(CONFIG_USB_ULPI)
|
||||
struct usb_phy *otg_ulpi_create(struct usb_phy_io_ops *ops,
|
||||
unsigned int flags);
|
||||
|
@@ -43,6 +43,10 @@
|
||||
#define IN_ENDPOINT_TYPE 12
|
||||
#define OUT_ENDPOINT_ENABLE 10
|
||||
#define OUT_ENDPOINT_TYPE 8
|
||||
#define USB3380_EP_CFG_MASK_IN ((0x3 << IN_ENDPOINT_TYPE) | \
|
||||
BIT(IN_ENDPOINT_ENABLE))
|
||||
#define USB3380_EP_CFG_MASK_OUT ((0x3 << OUT_ENDPOINT_TYPE) | \
|
||||
BIT(OUT_ENDPOINT_ENABLE))
|
||||
|
||||
struct usb338x_usb_ext_regs {
|
||||
u32 usbclass;
|
||||
|
Reference in New Issue
Block a user