Home | History | Annotate | Download | only in msm7k
      1 /*
      2  * Copyright (c) 2008, Google Inc.
      3  * All rights reserved.
      4  *
      5  * Redistribution and use in source and binary forms, with or without
      6  * modification, are permitted provided that the following conditions
      7  * are met:
      8  *  * Redistributions of source code must retain the above copyright
      9  *    notice, this list of conditions and the following disclaimer.
     10  *  * Redistributions in binary form must reproduce the above copyright
     11  *    notice, this list of conditions and the following disclaimer in
     12  *    the documentation and/or other materials provided with the
     13  *    distribution.
     14  *
     15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     16  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     17  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
     18  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
     19  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
     20  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
     21  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
     22  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
     23  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     24  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     25  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     26  * SUCH DAMAGE.
     27  */
     28 
     29 #ifndef _MSM7200_USB_H_
     30 #define _MSM7200_USB_H_
     31 
     32 #define MSM_USB_BASE 0xA0800000
     33 
     34 
     35 #define USB_ID               (MSM_USB_BASE + 0x0000)
     36 #define USB_HWGENERAL        (MSM_USB_BASE + 0x0004)
     37 #define USB_HWHOST           (MSM_USB_BASE + 0x0008)
     38 #define USB_HWDEVICE         (MSM_USB_BASE + 0x000C)
     39 #define USB_HWTXBUF          (MSM_USB_BASE + 0x0010)
     40 #define USB_HWRXBUF          (MSM_USB_BASE + 0x0014)
     41 #define USB_SBUSCFG          (MSM_USB_BASE + 0x0090)
     42 
     43 #define USB_CAPLENGTH        (MSM_USB_BASE + 0x0100) /* 8 bit */
     44 #define USB_HCIVERSION       (MSM_USB_BASE + 0x0102) /* 16 bit */
     45 #define USB_HCSPARAMS        (MSM_USB_BASE + 0x0104)
     46 #define USB_HCCPARAMS        (MSM_USB_BASE + 0x0108)
     47 #define USB_DCIVERSION       (MSM_USB_BASE + 0x0120) /* 16 bit */
     48 #define USB_USBCMD           (MSM_USB_BASE + 0x0140)
     49 #define USB_USBSTS           (MSM_USB_BASE + 0x0144)
     50 #define USB_USBINTR          (MSM_USB_BASE + 0x0148)
     51 #define USB_FRINDEX          (MSM_USB_BASE + 0x014C)
     52 #define USB_DEVICEADDR       (MSM_USB_BASE + 0x0154)
     53 #define USB_ENDPOINTLISTADDR (MSM_USB_BASE + 0x0158)
     54 #define USB_BURSTSIZE        (MSM_USB_BASE + 0x0160)
     55 #define USB_TXFILLTUNING     (MSM_USB_BASE + 0x0164)
     56 #define USB_ULPI_VIEWPORT    (MSM_USB_BASE + 0x0170)
     57 #define USB_ENDPTNAK         (MSM_USB_BASE + 0x0178)
     58 #define USB_ENDPTNAKEN       (MSM_USB_BASE + 0x017C)
     59 #define USB_PORTSC           (MSM_USB_BASE + 0x0184)
     60 #define USB_OTGSC            (MSM_USB_BASE + 0x01A4)
     61 #define USB_USBMODE          (MSM_USB_BASE + 0x01A8)
     62 #define USB_ENDPTSETUPSTAT   (MSM_USB_BASE + 0x01AC)
     63 #define USB_ENDPTPRIME       (MSM_USB_BASE + 0x01B0)
     64 #define USB_ENDPTFLUSH       (MSM_USB_BASE + 0x01B4)
     65 #define USB_ENDPTSTAT        (MSM_USB_BASE + 0x01B8)
     66 #define USB_ENDPTCOMPLETE    (MSM_USB_BASE + 0x01BC)
     67 #define USB_ENDPTCTRL(n)     (MSM_USB_BASE + 0x01C0 + (4 * (n)))
     68 
     69 
     70 #define USBCMD_RESET   2
     71 #define USBCMD_ATTACH  1
     72 
     73 #define USBMODE_DEVICE 2
     74 #define USBMODE_HOST   3
     75 
     76 struct ept_queue_head
     77 {
     78     unsigned config;
     79     unsigned current; /* read-only */
     80 
     81     unsigned next;
     82     unsigned info;
     83     unsigned page0;
     84     unsigned page1;
     85     unsigned page2;
     86     unsigned page3;
     87     unsigned page4;
     88     unsigned reserved_0;
     89 
     90     unsigned char setup_data[8];
     91 
     92     unsigned reserved_1;
     93     unsigned reserved_2;
     94     unsigned reserved_3;
     95     unsigned reserved_4;
     96 };
     97 
     98 #define CONFIG_MAX_PKT(n)     ((n) << 16)
     99 #define CONFIG_ZLT            (1 << 29)    /* stop on zero-len xfer */
    100 #define CONFIG_IOS            (1 << 15)    /* IRQ on setup */
    101 
    102 struct ept_queue_item
    103 {
    104     unsigned next;
    105     unsigned info;
    106     unsigned page0;
    107     unsigned page1;
    108     unsigned page2;
    109     unsigned page3;
    110     unsigned page4;
    111     unsigned reserved;
    112 };
    113 
    114 #define TERMINATE 1
    115 
    116 #define INFO_BYTES(n)         ((n) << 16)
    117 #define INFO_IOC              (1 << 15)
    118 #define INFO_ACTIVE           (1 << 7)
    119 #define INFO_HALTED           (1 << 6)
    120 #define INFO_BUFFER_ERROR     (1 << 5)
    121 #define INFO_TX_ERROR         (1 << 3)
    122 
    123 
    124 #define STS_NAKI              (1 << 16)  /* */
    125 #define STS_SLI               (1 << 8)   /* R/WC - suspend state entered */
    126 #define STS_SRI               (1 << 7)   /* R/WC - SOF recv'd */
    127 #define STS_URI               (1 << 6)   /* R/WC - RESET recv'd - write to clear */
    128 #define STS_FRI               (1 << 3)   /* R/WC - Frame List Rollover */
    129 #define STS_PCI               (1 << 2)   /* R/WC - Port Change Detect */
    130 #define STS_UEI               (1 << 1)   /* R/WC - USB Error */
    131 #define STS_UI                (1 << 0)   /* R/WC - USB Transaction Complete */
    132 
    133 
    134 /* bits used in all the endpoint status registers */
    135 #define EPT_TX(n) (1 << ((n) + 16))
    136 #define EPT_RX(n) (1 << (n))
    137 
    138 
    139 #define CTRL_TXE              (1 << 23)
    140 #define CTRL_TXR              (1 << 22)
    141 #define CTRL_TXI              (1 << 21)
    142 #define CTRL_TXD              (1 << 17)
    143 #define CTRL_TXS              (1 << 16)
    144 #define CTRL_RXE              (1 << 7)
    145 #define CTRL_RXR              (1 << 6)
    146 #define CTRL_RXI              (1 << 5)
    147 #define CTRL_RXD              (1 << 1)
    148 #define CTRL_RXS              (1 << 0)
    149 
    150 #define CTRL_TXT_CTRL         (0 << 18)
    151 #define CTRL_TXT_ISOCH        (1 << 18)
    152 #define CTRL_TXT_BULK         (2 << 18)
    153 #define CTRL_TXT_INT          (3 << 18)
    154 
    155 #define CTRL_RXT_CTRL         (0 << 2)
    156 #define CTRL_RXT_ISOCH        (1 << 2)
    157 #define CTRL_RXT_BULK         (2 << 2)
    158 #define CTRL_RXT_INT          (3 << 2)
    159 
    160 #define ULPI_WAKEUP           (1 << 31)
    161 #define ULPI_RUN              (1 << 30)
    162 #define ULPI_WRITE            (1 << 29)
    163 #define ULPI_READ             (0 << 29)
    164 #define ULPI_STATE_NORMAL     (1 << 27)
    165 #define ULPI_ADDR(n)          (((n) & 255) << 16)
    166 #define ULPI_DATA(n)          ((n) & 255)
    167 #define ULPI_DATA_READ(n)     (((n) >> 8) & 255)
    168 
    169 #endif
    170