13a229eb1SHeikki Krogerus /* 23a229eb1SHeikki Krogerus * ulpi.h -- ULPI defines and function prorotypes 33a229eb1SHeikki Krogerus * 43a229eb1SHeikki Krogerus * Copyright (C) 2010 Nokia Corporation 53a229eb1SHeikki Krogerus * 63a229eb1SHeikki Krogerus * This software is distributed under the terms of the GNU General 73a229eb1SHeikki Krogerus * Public License ("GPL") as published by the Free Software Foundation, 83a229eb1SHeikki Krogerus * version 2 of that License. 93a229eb1SHeikki Krogerus */ 103a229eb1SHeikki Krogerus 112d57a95fSDaniel Mack #ifndef __LINUX_USB_ULPI_H 122d57a95fSDaniel Mack #define __LINUX_USB_ULPI_H 132d57a95fSDaniel Mack 145128993bSAjay Kumar Gupta #include <linux/usb/otg.h> 153a229eb1SHeikki Krogerus /*-------------------------------------------------------------------------*/ 163a229eb1SHeikki Krogerus 173a229eb1SHeikki Krogerus /* 1813dd0c97SIgor Grinberg * ULPI Flags 1913dd0c97SIgor Grinberg */ 2013dd0c97SIgor Grinberg #define ULPI_OTG_ID_PULLUP (1 << 0) 2113dd0c97SIgor Grinberg #define ULPI_OTG_DP_PULLDOWN_DIS (1 << 1) 2213dd0c97SIgor Grinberg #define ULPI_OTG_DM_PULLDOWN_DIS (1 << 2) 2313dd0c97SIgor Grinberg #define ULPI_OTG_DISCHRGVBUS (1 << 3) 2413dd0c97SIgor Grinberg #define ULPI_OTG_CHRGVBUS (1 << 4) 2513dd0c97SIgor Grinberg #define ULPI_OTG_DRVVBUS (1 << 5) 2613dd0c97SIgor Grinberg #define ULPI_OTG_DRVVBUS_EXT (1 << 6) 2713dd0c97SIgor Grinberg #define ULPI_OTG_EXTVBUSIND (1 << 7) 2813dd0c97SIgor Grinberg 2913dd0c97SIgor Grinberg #define ULPI_IC_6PIN_SERIAL (1 << 8) 3013dd0c97SIgor Grinberg #define ULPI_IC_3PIN_SERIAL (1 << 9) 3113dd0c97SIgor Grinberg #define ULPI_IC_CARKIT (1 << 10) 3213dd0c97SIgor Grinberg #define ULPI_IC_CLKSUSPM (1 << 11) 3313dd0c97SIgor Grinberg #define ULPI_IC_AUTORESUME (1 << 12) 3413dd0c97SIgor Grinberg #define ULPI_IC_EXTVBUS_INDINV (1 << 13) 3513dd0c97SIgor Grinberg #define ULPI_IC_IND_PASSTHRU (1 << 14) 3613dd0c97SIgor Grinberg #define ULPI_IC_PROTECT_DIS (1 << 15) 3713dd0c97SIgor Grinberg 3813dd0c97SIgor Grinberg #define ULPI_FC_HS (1 << 16) 3913dd0c97SIgor Grinberg #define ULPI_FC_FS (1 << 17) 4013dd0c97SIgor Grinberg #define ULPI_FC_LS (1 << 18) 4113dd0c97SIgor Grinberg #define ULPI_FC_FS4LS (1 << 19) 4213dd0c97SIgor Grinberg #define ULPI_FC_TERMSEL (1 << 20) 4313dd0c97SIgor Grinberg #define ULPI_FC_OP_NORM (1 << 21) 4413dd0c97SIgor Grinberg #define ULPI_FC_OP_NODRV (1 << 22) 4513dd0c97SIgor Grinberg #define ULPI_FC_OP_DIS_NRZI (1 << 23) 4613dd0c97SIgor Grinberg #define ULPI_FC_OP_NSYNC_NEOP (1 << 24) 4713dd0c97SIgor Grinberg #define ULPI_FC_RST (1 << 25) 4813dd0c97SIgor Grinberg #define ULPI_FC_SUSPM (1 << 26) 4913dd0c97SIgor Grinberg 5013dd0c97SIgor Grinberg /*-------------------------------------------------------------------------*/ 5113dd0c97SIgor Grinberg 5213dd0c97SIgor Grinberg /* 533a229eb1SHeikki Krogerus * Macros for Set and Clear 543a229eb1SHeikki Krogerus * See ULPI 1.1 specification to find the registers with Set and Clear offsets 553a229eb1SHeikki Krogerus */ 563a229eb1SHeikki Krogerus #define ULPI_SET(a) (a + 1) 573a229eb1SHeikki Krogerus #define ULPI_CLR(a) (a + 2) 583a229eb1SHeikki Krogerus 593a229eb1SHeikki Krogerus /*-------------------------------------------------------------------------*/ 603a229eb1SHeikki Krogerus 613a229eb1SHeikki Krogerus /* 623a229eb1SHeikki Krogerus * Register Map 633a229eb1SHeikki Krogerus */ 643a229eb1SHeikki Krogerus #define ULPI_VENDOR_ID_LOW 0x00 653a229eb1SHeikki Krogerus #define ULPI_VENDOR_ID_HIGH 0x01 663a229eb1SHeikki Krogerus #define ULPI_PRODUCT_ID_LOW 0x02 673a229eb1SHeikki Krogerus #define ULPI_PRODUCT_ID_HIGH 0x03 683a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL 0x04 693a229eb1SHeikki Krogerus #define ULPI_IFC_CTRL 0x07 703a229eb1SHeikki Krogerus #define ULPI_OTG_CTRL 0x0a 713a229eb1SHeikki Krogerus #define ULPI_USB_INT_EN_RISE 0x0d 723a229eb1SHeikki Krogerus #define ULPI_USB_INT_EN_FALL 0x10 733a229eb1SHeikki Krogerus #define ULPI_USB_INT_STS 0x13 743a229eb1SHeikki Krogerus #define ULPI_USB_INT_LATCH 0x14 753a229eb1SHeikki Krogerus #define ULPI_DEBUG 0x15 763a229eb1SHeikki Krogerus #define ULPI_SCRATCH 0x16 773a229eb1SHeikki Krogerus /* Optional Carkit Registers */ 783a229eb1SHeikki Krogerus #define ULPI_CARCIT_CTRL 0x19 793a229eb1SHeikki Krogerus #define ULPI_CARCIT_INT_DELAY 0x1c 803a229eb1SHeikki Krogerus #define ULPI_CARCIT_INT_EN 0x1d 813a229eb1SHeikki Krogerus #define ULPI_CARCIT_INT_STS 0x20 823a229eb1SHeikki Krogerus #define ULPI_CARCIT_INT_LATCH 0x21 833a229eb1SHeikki Krogerus #define ULPI_CARCIT_PLS_CTRL 0x22 843a229eb1SHeikki Krogerus /* Other Optional Registers */ 853a229eb1SHeikki Krogerus #define ULPI_TX_POS_WIDTH 0x25 863a229eb1SHeikki Krogerus #define ULPI_TX_NEG_WIDTH 0x26 873a229eb1SHeikki Krogerus #define ULPI_POLARITY_RECOVERY 0x27 883a229eb1SHeikki Krogerus /* Access Extended Register Set */ 893a229eb1SHeikki Krogerus #define ULPI_ACCESS_EXTENDED 0x2f 903a229eb1SHeikki Krogerus /* Vendor Specific */ 913a229eb1SHeikki Krogerus #define ULPI_VENDOR_SPECIFIC 0x30 923a229eb1SHeikki Krogerus /* Extended Registers */ 933a229eb1SHeikki Krogerus #define ULPI_EXT_VENDOR_SPECIFIC 0x80 943a229eb1SHeikki Krogerus 953a229eb1SHeikki Krogerus /*-------------------------------------------------------------------------*/ 963a229eb1SHeikki Krogerus 9713dd0c97SIgor Grinberg /* 9813dd0c97SIgor Grinberg * Register Bits 9913dd0c97SIgor Grinberg */ 10013dd0c97SIgor Grinberg 1013a229eb1SHeikki Krogerus /* Function Control */ 1023a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_XCVRSEL (1 << 0) 1033a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_XCVRSEL_MASK (3 << 0) 1043a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_HIGH_SPEED (0 << 0) 1053a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_FULL_SPEED (1 << 0) 1063a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_LOW_SPEED (2 << 0) 1073a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_FS4LS (3 << 0) 1083a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_TERMSELECT (1 << 2) 1093a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_OPMODE (1 << 3) 1103a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_OPMODE_MASK (3 << 3) 1113a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_OPMODE_NORMAL (0 << 3) 1123a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_OPMODE_NONDRIVING (1 << 3) 1133a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_OPMODE_DISABLE_NRZI (2 << 3) 1143a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_OPMODE_NOSYNC_NOEOP (3 << 3) 1153a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_RESET (1 << 5) 1163a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_SUSPENDM (1 << 6) 1173a229eb1SHeikki Krogerus 1183a229eb1SHeikki Krogerus /* Interface Control */ 1193a229eb1SHeikki Krogerus #define ULPI_IFC_CTRL_6_PIN_SERIAL_MODE (1 << 0) 1203a229eb1SHeikki Krogerus #define ULPI_IFC_CTRL_3_PIN_SERIAL_MODE (1 << 1) 1213a229eb1SHeikki Krogerus #define ULPI_IFC_CTRL_CARKITMODE (1 << 2) 1223a229eb1SHeikki Krogerus #define ULPI_IFC_CTRL_CLOCKSUSPENDM (1 << 3) 1233a229eb1SHeikki Krogerus #define ULPI_IFC_CTRL_AUTORESUME (1 << 4) 1243a229eb1SHeikki Krogerus #define ULPI_IFC_CTRL_EXTERNAL_VBUS (1 << 5) 1253a229eb1SHeikki Krogerus #define ULPI_IFC_CTRL_PASSTHRU (1 << 6) 1263a229eb1SHeikki Krogerus #define ULPI_IFC_CTRL_PROTECT_IFC_DISABLE (1 << 7) 1273a229eb1SHeikki Krogerus 1283a229eb1SHeikki Krogerus /* OTG Control */ 1293a229eb1SHeikki Krogerus #define ULPI_OTG_CTRL_ID_PULLUP (1 << 0) 1303a229eb1SHeikki Krogerus #define ULPI_OTG_CTRL_DP_PULLDOWN (1 << 1) 1313a229eb1SHeikki Krogerus #define ULPI_OTG_CTRL_DM_PULLDOWN (1 << 2) 1323a229eb1SHeikki Krogerus #define ULPI_OTG_CTRL_DISCHRGVBUS (1 << 3) 1333a229eb1SHeikki Krogerus #define ULPI_OTG_CTRL_CHRGVBUS (1 << 4) 1343a229eb1SHeikki Krogerus #define ULPI_OTG_CTRL_DRVVBUS (1 << 5) 1353a229eb1SHeikki Krogerus #define ULPI_OTG_CTRL_DRVVBUS_EXT (1 << 6) 1363a229eb1SHeikki Krogerus #define ULPI_OTG_CTRL_EXTVBUSIND (1 << 7) 1373a229eb1SHeikki Krogerus 1383a229eb1SHeikki Krogerus /* USB Interrupt Enable Rising, 1393a229eb1SHeikki Krogerus * USB Interrupt Enable Falling, 1403a229eb1SHeikki Krogerus * USB Interrupt Status and 1413a229eb1SHeikki Krogerus * USB Interrupt Latch 1423a229eb1SHeikki Krogerus */ 1433a229eb1SHeikki Krogerus #define ULPI_INT_HOST_DISCONNECT (1 << 0) 1443a229eb1SHeikki Krogerus #define ULPI_INT_VBUS_VALID (1 << 1) 1453a229eb1SHeikki Krogerus #define ULPI_INT_SESS_VALID (1 << 2) 1463a229eb1SHeikki Krogerus #define ULPI_INT_SESS_END (1 << 3) 1473a229eb1SHeikki Krogerus #define ULPI_INT_IDGRD (1 << 4) 1483a229eb1SHeikki Krogerus 1493a229eb1SHeikki Krogerus /* Debug */ 1503a229eb1SHeikki Krogerus #define ULPI_DEBUG_LINESTATE0 (1 << 0) 1513a229eb1SHeikki Krogerus #define ULPI_DEBUG_LINESTATE1 (1 << 1) 1523a229eb1SHeikki Krogerus 1533a229eb1SHeikki Krogerus /* Carkit Control */ 1543a229eb1SHeikki Krogerus #define ULPI_CARKIT_CTRL_CARKITPWR (1 << 0) 1553a229eb1SHeikki Krogerus #define ULPI_CARKIT_CTRL_IDGNDDRV (1 << 1) 1563a229eb1SHeikki Krogerus #define ULPI_CARKIT_CTRL_TXDEN (1 << 2) 1573a229eb1SHeikki Krogerus #define ULPI_CARKIT_CTRL_RXDEN (1 << 3) 1583a229eb1SHeikki Krogerus #define ULPI_CARKIT_CTRL_SPKLEFTEN (1 << 4) 1593a229eb1SHeikki Krogerus #define ULPI_CARKIT_CTRL_SPKRIGHTEN (1 << 5) 1603a229eb1SHeikki Krogerus #define ULPI_CARKIT_CTRL_MICEN (1 << 6) 1613a229eb1SHeikki Krogerus 1623a229eb1SHeikki Krogerus /* Carkit Interrupt Enable */ 1633a229eb1SHeikki Krogerus #define ULPI_CARKIT_INT_EN_IDFLOAT_RISE (1 << 0) 1643a229eb1SHeikki Krogerus #define ULPI_CARKIT_INT_EN_IDFLOAT_FALL (1 << 1) 1653a229eb1SHeikki Krogerus #define ULPI_CARKIT_INT_EN_CARINTDET (1 << 2) 1663a229eb1SHeikki Krogerus #define ULPI_CARKIT_INT_EN_DP_RISE (1 << 3) 1673a229eb1SHeikki Krogerus #define ULPI_CARKIT_INT_EN_DP_FALL (1 << 4) 1683a229eb1SHeikki Krogerus 1693a229eb1SHeikki Krogerus /* Carkit Interrupt Status and 1703a229eb1SHeikki Krogerus * Carkit Interrupt Latch 1713a229eb1SHeikki Krogerus */ 1723a229eb1SHeikki Krogerus #define ULPI_CARKIT_INT_IDFLOAT (1 << 0) 1733a229eb1SHeikki Krogerus #define ULPI_CARKIT_INT_CARINTDET (1 << 1) 1743a229eb1SHeikki Krogerus #define ULPI_CARKIT_INT_DP (1 << 2) 1753a229eb1SHeikki Krogerus 1763a229eb1SHeikki Krogerus /* Carkit Pulse Control*/ 1773a229eb1SHeikki Krogerus #define ULPI_CARKIT_PLS_CTRL_TXPLSEN (1 << 0) 1783a229eb1SHeikki Krogerus #define ULPI_CARKIT_PLS_CTRL_RXPLSEN (1 << 1) 1793a229eb1SHeikki Krogerus #define ULPI_CARKIT_PLS_CTRL_SPKRLEFT_BIASEN (1 << 2) 1803a229eb1SHeikki Krogerus #define ULPI_CARKIT_PLS_CTRL_SPKRRIGHT_BIASEN (1 << 3) 1813a229eb1SHeikki Krogerus 1823a229eb1SHeikki Krogerus /*-------------------------------------------------------------------------*/ 1833a229eb1SHeikki Krogerus 184*7fa4cd1aSFabio Estevam #if IS_ENABLED(CONFIG_USB_ULPI) 185298b083cSHeikki Krogerus struct usb_phy *otg_ulpi_create(struct usb_phy_io_ops *ops, 1862d57a95fSDaniel Mack unsigned int flags); 187*7fa4cd1aSFabio Estevam #else 188*7fa4cd1aSFabio Estevam static inline struct usb_phy *otg_ulpi_create(struct usb_phy_io_ops *ops, 189*7fa4cd1aSFabio Estevam unsigned int flags) 190*7fa4cd1aSFabio Estevam { 191*7fa4cd1aSFabio Estevam return NULL; 192*7fa4cd1aSFabio Estevam } 193*7fa4cd1aSFabio Estevam #endif 1942d57a95fSDaniel Mack 195ee398ba9SBenoit Goby #ifdef CONFIG_USB_ULPI_VIEWPORT 196ee398ba9SBenoit Goby /* access ops for controllers with a viewport register */ 197298b083cSHeikki Krogerus extern struct usb_phy_io_ops ulpi_viewport_access_ops; 198ee398ba9SBenoit Goby #endif 199ee398ba9SBenoit Goby 2002d57a95fSDaniel Mack #endif /* __LINUX_USB_ULPI_H */ 201