1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2289fcff4SHeikki Krogerus #ifndef __LINUX_ULPI_REGS_H 3289fcff4SHeikki Krogerus #define __LINUX_ULPI_REGS_H 4289fcff4SHeikki Krogerus 5289fcff4SHeikki Krogerus /* 6289fcff4SHeikki Krogerus * Macros for Set and Clear 7289fcff4SHeikki Krogerus * See ULPI 1.1 specification to find the registers with Set and Clear offsets 8289fcff4SHeikki Krogerus */ 9289fcff4SHeikki Krogerus #define ULPI_SET(a) (a + 1) 10289fcff4SHeikki Krogerus #define ULPI_CLR(a) (a + 2) 11289fcff4SHeikki Krogerus 12289fcff4SHeikki Krogerus /* 13289fcff4SHeikki Krogerus * Register Map 14289fcff4SHeikki Krogerus */ 15289fcff4SHeikki Krogerus #define ULPI_VENDOR_ID_LOW 0x00 16289fcff4SHeikki Krogerus #define ULPI_VENDOR_ID_HIGH 0x01 17289fcff4SHeikki Krogerus #define ULPI_PRODUCT_ID_LOW 0x02 18289fcff4SHeikki Krogerus #define ULPI_PRODUCT_ID_HIGH 0x03 19289fcff4SHeikki Krogerus #define ULPI_FUNC_CTRL 0x04 20289fcff4SHeikki Krogerus #define ULPI_IFC_CTRL 0x07 21289fcff4SHeikki Krogerus #define ULPI_OTG_CTRL 0x0a 22289fcff4SHeikki Krogerus #define ULPI_USB_INT_EN_RISE 0x0d 23289fcff4SHeikki Krogerus #define ULPI_USB_INT_EN_FALL 0x10 24289fcff4SHeikki Krogerus #define ULPI_USB_INT_STS 0x13 25289fcff4SHeikki Krogerus #define ULPI_USB_INT_LATCH 0x14 26289fcff4SHeikki Krogerus #define ULPI_DEBUG 0x15 27289fcff4SHeikki Krogerus #define ULPI_SCRATCH 0x16 28289fcff4SHeikki Krogerus /* Optional Carkit Registers */ 29289fcff4SHeikki Krogerus #define ULPI_CARKIT_CTRL 0x19 30289fcff4SHeikki Krogerus #define ULPI_CARKIT_INT_DELAY 0x1c 31289fcff4SHeikki Krogerus #define ULPI_CARKIT_INT_EN 0x1d 32289fcff4SHeikki Krogerus #define ULPI_CARKIT_INT_STS 0x20 33289fcff4SHeikki Krogerus #define ULPI_CARKIT_INT_LATCH 0x21 34289fcff4SHeikki Krogerus #define ULPI_CARKIT_PLS_CTRL 0x22 35289fcff4SHeikki Krogerus /* Other Optional Registers */ 36289fcff4SHeikki Krogerus #define ULPI_TX_POS_WIDTH 0x25 37289fcff4SHeikki Krogerus #define ULPI_TX_NEG_WIDTH 0x26 38289fcff4SHeikki Krogerus #define ULPI_POLARITY_RECOVERY 0x27 39289fcff4SHeikki Krogerus /* Access Extended Register Set */ 40289fcff4SHeikki Krogerus #define ULPI_ACCESS_EXTENDED 0x2f 41289fcff4SHeikki Krogerus /* Vendor Specific */ 42289fcff4SHeikki Krogerus #define ULPI_VENDOR_SPECIFIC 0x30 43289fcff4SHeikki Krogerus /* Extended Registers */ 44289fcff4SHeikki Krogerus #define ULPI_EXT_VENDOR_SPECIFIC 0x80 45289fcff4SHeikki Krogerus 46289fcff4SHeikki Krogerus /* 47289fcff4SHeikki Krogerus * Register Bits 48289fcff4SHeikki Krogerus */ 49289fcff4SHeikki Krogerus 50289fcff4SHeikki Krogerus /* Function Control */ 51289fcff4SHeikki Krogerus #define ULPI_FUNC_CTRL_XCVRSEL BIT(0) 52289fcff4SHeikki Krogerus #define ULPI_FUNC_CTRL_XCVRSEL_MASK 0x3 53289fcff4SHeikki Krogerus #define ULPI_FUNC_CTRL_HIGH_SPEED 0x0 54289fcff4SHeikki Krogerus #define ULPI_FUNC_CTRL_FULL_SPEED 0x1 55289fcff4SHeikki Krogerus #define ULPI_FUNC_CTRL_LOW_SPEED 0x2 56289fcff4SHeikki Krogerus #define ULPI_FUNC_CTRL_FS4LS 0x3 57289fcff4SHeikki Krogerus #define ULPI_FUNC_CTRL_TERMSELECT BIT(2) 58289fcff4SHeikki Krogerus #define ULPI_FUNC_CTRL_OPMODE BIT(3) 59289fcff4SHeikki Krogerus #define ULPI_FUNC_CTRL_OPMODE_MASK (0x3 << 3) 60289fcff4SHeikki Krogerus #define ULPI_FUNC_CTRL_OPMODE_NORMAL (0x0 << 3) 61289fcff4SHeikki Krogerus #define ULPI_FUNC_CTRL_OPMODE_NONDRIVING (0x1 << 3) 62289fcff4SHeikki Krogerus #define ULPI_FUNC_CTRL_OPMODE_DISABLE_NRZI (0x2 << 3) 63289fcff4SHeikki Krogerus #define ULPI_FUNC_CTRL_OPMODE_NOSYNC_NOEOP (0x3 << 3) 64289fcff4SHeikki Krogerus #define ULPI_FUNC_CTRL_RESET BIT(5) 65289fcff4SHeikki Krogerus #define ULPI_FUNC_CTRL_SUSPENDM BIT(6) 66289fcff4SHeikki Krogerus 67289fcff4SHeikki Krogerus /* Interface Control */ 68289fcff4SHeikki Krogerus #define ULPI_IFC_CTRL_6_PIN_SERIAL_MODE BIT(0) 69289fcff4SHeikki Krogerus #define ULPI_IFC_CTRL_3_PIN_SERIAL_MODE BIT(1) 70289fcff4SHeikki Krogerus #define ULPI_IFC_CTRL_CARKITMODE BIT(2) 71289fcff4SHeikki Krogerus #define ULPI_IFC_CTRL_CLOCKSUSPENDM BIT(3) 72289fcff4SHeikki Krogerus #define ULPI_IFC_CTRL_AUTORESUME BIT(4) 73289fcff4SHeikki Krogerus #define ULPI_IFC_CTRL_EXTERNAL_VBUS BIT(5) 74289fcff4SHeikki Krogerus #define ULPI_IFC_CTRL_PASSTHRU BIT(6) 75289fcff4SHeikki Krogerus #define ULPI_IFC_CTRL_PROTECT_IFC_DISABLE BIT(7) 76289fcff4SHeikki Krogerus 77289fcff4SHeikki Krogerus /* OTG Control */ 78289fcff4SHeikki Krogerus #define ULPI_OTG_CTRL_ID_PULLUP BIT(0) 79289fcff4SHeikki Krogerus #define ULPI_OTG_CTRL_DP_PULLDOWN BIT(1) 80289fcff4SHeikki Krogerus #define ULPI_OTG_CTRL_DM_PULLDOWN BIT(2) 81289fcff4SHeikki Krogerus #define ULPI_OTG_CTRL_DISCHRGVBUS BIT(3) 82289fcff4SHeikki Krogerus #define ULPI_OTG_CTRL_CHRGVBUS BIT(4) 83289fcff4SHeikki Krogerus #define ULPI_OTG_CTRL_DRVVBUS BIT(5) 84289fcff4SHeikki Krogerus #define ULPI_OTG_CTRL_DRVVBUS_EXT BIT(6) 85289fcff4SHeikki Krogerus #define ULPI_OTG_CTRL_EXTVBUSIND BIT(7) 86289fcff4SHeikki Krogerus 87289fcff4SHeikki Krogerus /* USB Interrupt Enable Rising, 88289fcff4SHeikki Krogerus * USB Interrupt Enable Falling, 89289fcff4SHeikki Krogerus * USB Interrupt Status and 90289fcff4SHeikki Krogerus * USB Interrupt Latch 91289fcff4SHeikki Krogerus */ 92289fcff4SHeikki Krogerus #define ULPI_INT_HOST_DISCONNECT BIT(0) 93289fcff4SHeikki Krogerus #define ULPI_INT_VBUS_VALID BIT(1) 94289fcff4SHeikki Krogerus #define ULPI_INT_SESS_VALID BIT(2) 95289fcff4SHeikki Krogerus #define ULPI_INT_SESS_END BIT(3) 96289fcff4SHeikki Krogerus #define ULPI_INT_IDGRD BIT(4) 97289fcff4SHeikki Krogerus 98289fcff4SHeikki Krogerus /* Debug */ 99289fcff4SHeikki Krogerus #define ULPI_DEBUG_LINESTATE0 BIT(0) 100289fcff4SHeikki Krogerus #define ULPI_DEBUG_LINESTATE1 BIT(1) 101289fcff4SHeikki Krogerus 102289fcff4SHeikki Krogerus /* Carkit Control */ 103289fcff4SHeikki Krogerus #define ULPI_CARKIT_CTRL_CARKITPWR BIT(0) 104289fcff4SHeikki Krogerus #define ULPI_CARKIT_CTRL_IDGNDDRV BIT(1) 105289fcff4SHeikki Krogerus #define ULPI_CARKIT_CTRL_TXDEN BIT(2) 106289fcff4SHeikki Krogerus #define ULPI_CARKIT_CTRL_RXDEN BIT(3) 107289fcff4SHeikki Krogerus #define ULPI_CARKIT_CTRL_SPKLEFTEN BIT(4) 108289fcff4SHeikki Krogerus #define ULPI_CARKIT_CTRL_SPKRIGHTEN BIT(5) 109289fcff4SHeikki Krogerus #define ULPI_CARKIT_CTRL_MICEN BIT(6) 110289fcff4SHeikki Krogerus 111289fcff4SHeikki Krogerus /* Carkit Interrupt Enable */ 112289fcff4SHeikki Krogerus #define ULPI_CARKIT_INT_EN_IDFLOAT_RISE BIT(0) 113289fcff4SHeikki Krogerus #define ULPI_CARKIT_INT_EN_IDFLOAT_FALL BIT(1) 114289fcff4SHeikki Krogerus #define ULPI_CARKIT_INT_EN_CARINTDET BIT(2) 115289fcff4SHeikki Krogerus #define ULPI_CARKIT_INT_EN_DP_RISE BIT(3) 116289fcff4SHeikki Krogerus #define ULPI_CARKIT_INT_EN_DP_FALL BIT(4) 117289fcff4SHeikki Krogerus 118289fcff4SHeikki Krogerus /* Carkit Interrupt Status and 119289fcff4SHeikki Krogerus * Carkit Interrupt Latch 120289fcff4SHeikki Krogerus */ 121289fcff4SHeikki Krogerus #define ULPI_CARKIT_INT_IDFLOAT BIT(0) 122289fcff4SHeikki Krogerus #define ULPI_CARKIT_INT_CARINTDET BIT(1) 123289fcff4SHeikki Krogerus #define ULPI_CARKIT_INT_DP BIT(2) 124289fcff4SHeikki Krogerus 125289fcff4SHeikki Krogerus /* Carkit Pulse Control*/ 126289fcff4SHeikki Krogerus #define ULPI_CARKIT_PLS_CTRL_TXPLSEN BIT(0) 127289fcff4SHeikki Krogerus #define ULPI_CARKIT_PLS_CTRL_RXPLSEN BIT(1) 128289fcff4SHeikki Krogerus #define ULPI_CARKIT_PLS_CTRL_SPKRLEFT_BIASEN BIT(2) 129289fcff4SHeikki Krogerus #define ULPI_CARKIT_PLS_CTRL_SPKRRIGHT_BIASEN BIT(3) 130289fcff4SHeikki Krogerus 131289fcff4SHeikki Krogerus #endif /* __LINUX_ULPI_REGS_H */ 132