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 14*5128993bSAjay Kumar Gupta #include <linux/usb/otg.h> 153a229eb1SHeikki Krogerus /*-------------------------------------------------------------------------*/ 163a229eb1SHeikki Krogerus 173a229eb1SHeikki Krogerus /* 183a229eb1SHeikki Krogerus * Macros for Set and Clear 193a229eb1SHeikki Krogerus * See ULPI 1.1 specification to find the registers with Set and Clear offsets 203a229eb1SHeikki Krogerus */ 213a229eb1SHeikki Krogerus #define ULPI_SET(a) (a + 1) 223a229eb1SHeikki Krogerus #define ULPI_CLR(a) (a + 2) 233a229eb1SHeikki Krogerus 243a229eb1SHeikki Krogerus /*-------------------------------------------------------------------------*/ 253a229eb1SHeikki Krogerus 263a229eb1SHeikki Krogerus /* 273a229eb1SHeikki Krogerus * Register Map 283a229eb1SHeikki Krogerus */ 293a229eb1SHeikki Krogerus #define ULPI_VENDOR_ID_LOW 0x00 303a229eb1SHeikki Krogerus #define ULPI_VENDOR_ID_HIGH 0x01 313a229eb1SHeikki Krogerus #define ULPI_PRODUCT_ID_LOW 0x02 323a229eb1SHeikki Krogerus #define ULPI_PRODUCT_ID_HIGH 0x03 333a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL 0x04 343a229eb1SHeikki Krogerus #define ULPI_IFC_CTRL 0x07 353a229eb1SHeikki Krogerus #define ULPI_OTG_CTRL 0x0a 363a229eb1SHeikki Krogerus #define ULPI_USB_INT_EN_RISE 0x0d 373a229eb1SHeikki Krogerus #define ULPI_USB_INT_EN_FALL 0x10 383a229eb1SHeikki Krogerus #define ULPI_USB_INT_STS 0x13 393a229eb1SHeikki Krogerus #define ULPI_USB_INT_LATCH 0x14 403a229eb1SHeikki Krogerus #define ULPI_DEBUG 0x15 413a229eb1SHeikki Krogerus #define ULPI_SCRATCH 0x16 423a229eb1SHeikki Krogerus /* Optional Carkit Registers */ 433a229eb1SHeikki Krogerus #define ULPI_CARCIT_CTRL 0x19 443a229eb1SHeikki Krogerus #define ULPI_CARCIT_INT_DELAY 0x1c 453a229eb1SHeikki Krogerus #define ULPI_CARCIT_INT_EN 0x1d 463a229eb1SHeikki Krogerus #define ULPI_CARCIT_INT_STS 0x20 473a229eb1SHeikki Krogerus #define ULPI_CARCIT_INT_LATCH 0x21 483a229eb1SHeikki Krogerus #define ULPI_CARCIT_PLS_CTRL 0x22 493a229eb1SHeikki Krogerus /* Other Optional Registers */ 503a229eb1SHeikki Krogerus #define ULPI_TX_POS_WIDTH 0x25 513a229eb1SHeikki Krogerus #define ULPI_TX_NEG_WIDTH 0x26 523a229eb1SHeikki Krogerus #define ULPI_POLARITY_RECOVERY 0x27 533a229eb1SHeikki Krogerus /* Access Extended Register Set */ 543a229eb1SHeikki Krogerus #define ULPI_ACCESS_EXTENDED 0x2f 553a229eb1SHeikki Krogerus /* Vendor Specific */ 563a229eb1SHeikki Krogerus #define ULPI_VENDOR_SPECIFIC 0x30 573a229eb1SHeikki Krogerus /* Extended Registers */ 583a229eb1SHeikki Krogerus #define ULPI_EXT_VENDOR_SPECIFIC 0x80 593a229eb1SHeikki Krogerus 603a229eb1SHeikki Krogerus /*-------------------------------------------------------------------------*/ 613a229eb1SHeikki Krogerus 623a229eb1SHeikki Krogerus /* Function Control */ 633a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_XCVRSEL (1 << 0) 643a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_XCVRSEL_MASK (3 << 0) 653a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_HIGH_SPEED (0 << 0) 663a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_FULL_SPEED (1 << 0) 673a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_LOW_SPEED (2 << 0) 683a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_FS4LS (3 << 0) 693a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_TERMSELECT (1 << 2) 703a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_OPMODE (1 << 3) 713a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_OPMODE_MASK (3 << 3) 723a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_OPMODE_NORMAL (0 << 3) 733a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_OPMODE_NONDRIVING (1 << 3) 743a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_OPMODE_DISABLE_NRZI (2 << 3) 753a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_OPMODE_NOSYNC_NOEOP (3 << 3) 763a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_RESET (1 << 5) 773a229eb1SHeikki Krogerus #define ULPI_FUNC_CTRL_SUSPENDM (1 << 6) 783a229eb1SHeikki Krogerus 793a229eb1SHeikki Krogerus /* Interface Control */ 803a229eb1SHeikki Krogerus #define ULPI_IFC_CTRL_6_PIN_SERIAL_MODE (1 << 0) 813a229eb1SHeikki Krogerus #define ULPI_IFC_CTRL_3_PIN_SERIAL_MODE (1 << 1) 823a229eb1SHeikki Krogerus #define ULPI_IFC_CTRL_CARKITMODE (1 << 2) 833a229eb1SHeikki Krogerus #define ULPI_IFC_CTRL_CLOCKSUSPENDM (1 << 3) 843a229eb1SHeikki Krogerus #define ULPI_IFC_CTRL_AUTORESUME (1 << 4) 853a229eb1SHeikki Krogerus #define ULPI_IFC_CTRL_EXTERNAL_VBUS (1 << 5) 863a229eb1SHeikki Krogerus #define ULPI_IFC_CTRL_PASSTHRU (1 << 6) 873a229eb1SHeikki Krogerus #define ULPI_IFC_CTRL_PROTECT_IFC_DISABLE (1 << 7) 883a229eb1SHeikki Krogerus 893a229eb1SHeikki Krogerus /* OTG Control */ 903a229eb1SHeikki Krogerus #define ULPI_OTG_CTRL_ID_PULLUP (1 << 0) 913a229eb1SHeikki Krogerus #define ULPI_OTG_CTRL_DP_PULLDOWN (1 << 1) 923a229eb1SHeikki Krogerus #define ULPI_OTG_CTRL_DM_PULLDOWN (1 << 2) 933a229eb1SHeikki Krogerus #define ULPI_OTG_CTRL_DISCHRGVBUS (1 << 3) 943a229eb1SHeikki Krogerus #define ULPI_OTG_CTRL_CHRGVBUS (1 << 4) 953a229eb1SHeikki Krogerus #define ULPI_OTG_CTRL_DRVVBUS (1 << 5) 963a229eb1SHeikki Krogerus #define ULPI_OTG_CTRL_DRVVBUS_EXT (1 << 6) 973a229eb1SHeikki Krogerus #define ULPI_OTG_CTRL_EXTVBUSIND (1 << 7) 983a229eb1SHeikki Krogerus 993a229eb1SHeikki Krogerus /* USB Interrupt Enable Rising, 1003a229eb1SHeikki Krogerus * USB Interrupt Enable Falling, 1013a229eb1SHeikki Krogerus * USB Interrupt Status and 1023a229eb1SHeikki Krogerus * USB Interrupt Latch 1033a229eb1SHeikki Krogerus */ 1043a229eb1SHeikki Krogerus #define ULPI_INT_HOST_DISCONNECT (1 << 0) 1053a229eb1SHeikki Krogerus #define ULPI_INT_VBUS_VALID (1 << 1) 1063a229eb1SHeikki Krogerus #define ULPI_INT_SESS_VALID (1 << 2) 1073a229eb1SHeikki Krogerus #define ULPI_INT_SESS_END (1 << 3) 1083a229eb1SHeikki Krogerus #define ULPI_INT_IDGRD (1 << 4) 1093a229eb1SHeikki Krogerus 1103a229eb1SHeikki Krogerus /* Debug */ 1113a229eb1SHeikki Krogerus #define ULPI_DEBUG_LINESTATE0 (1 << 0) 1123a229eb1SHeikki Krogerus #define ULPI_DEBUG_LINESTATE1 (1 << 1) 1133a229eb1SHeikki Krogerus 1143a229eb1SHeikki Krogerus /* Carkit Control */ 1153a229eb1SHeikki Krogerus #define ULPI_CARKIT_CTRL_CARKITPWR (1 << 0) 1163a229eb1SHeikki Krogerus #define ULPI_CARKIT_CTRL_IDGNDDRV (1 << 1) 1173a229eb1SHeikki Krogerus #define ULPI_CARKIT_CTRL_TXDEN (1 << 2) 1183a229eb1SHeikki Krogerus #define ULPI_CARKIT_CTRL_RXDEN (1 << 3) 1193a229eb1SHeikki Krogerus #define ULPI_CARKIT_CTRL_SPKLEFTEN (1 << 4) 1203a229eb1SHeikki Krogerus #define ULPI_CARKIT_CTRL_SPKRIGHTEN (1 << 5) 1213a229eb1SHeikki Krogerus #define ULPI_CARKIT_CTRL_MICEN (1 << 6) 1223a229eb1SHeikki Krogerus 1233a229eb1SHeikki Krogerus /* Carkit Interrupt Enable */ 1243a229eb1SHeikki Krogerus #define ULPI_CARKIT_INT_EN_IDFLOAT_RISE (1 << 0) 1253a229eb1SHeikki Krogerus #define ULPI_CARKIT_INT_EN_IDFLOAT_FALL (1 << 1) 1263a229eb1SHeikki Krogerus #define ULPI_CARKIT_INT_EN_CARINTDET (1 << 2) 1273a229eb1SHeikki Krogerus #define ULPI_CARKIT_INT_EN_DP_RISE (1 << 3) 1283a229eb1SHeikki Krogerus #define ULPI_CARKIT_INT_EN_DP_FALL (1 << 4) 1293a229eb1SHeikki Krogerus 1303a229eb1SHeikki Krogerus /* Carkit Interrupt Status and 1313a229eb1SHeikki Krogerus * Carkit Interrupt Latch 1323a229eb1SHeikki Krogerus */ 1333a229eb1SHeikki Krogerus #define ULPI_CARKIT_INT_IDFLOAT (1 << 0) 1343a229eb1SHeikki Krogerus #define ULPI_CARKIT_INT_CARINTDET (1 << 1) 1353a229eb1SHeikki Krogerus #define ULPI_CARKIT_INT_DP (1 << 2) 1363a229eb1SHeikki Krogerus 1373a229eb1SHeikki Krogerus /* Carkit Pulse Control*/ 1383a229eb1SHeikki Krogerus #define ULPI_CARKIT_PLS_CTRL_TXPLSEN (1 << 0) 1393a229eb1SHeikki Krogerus #define ULPI_CARKIT_PLS_CTRL_RXPLSEN (1 << 1) 1403a229eb1SHeikki Krogerus #define ULPI_CARKIT_PLS_CTRL_SPKRLEFT_BIASEN (1 << 2) 1413a229eb1SHeikki Krogerus #define ULPI_CARKIT_PLS_CTRL_SPKRRIGHT_BIASEN (1 << 3) 1423a229eb1SHeikki Krogerus 1433a229eb1SHeikki Krogerus /*-------------------------------------------------------------------------*/ 1443a229eb1SHeikki Krogerus 1452d57a95fSDaniel Mack struct otg_transceiver *otg_ulpi_create(struct otg_io_access_ops *ops, 1462d57a95fSDaniel Mack unsigned int flags); 1472d57a95fSDaniel Mack 1482d57a95fSDaniel Mack #endif /* __LINUX_USB_ULPI_H */ 149