1*786baecfSMauro Carvalho Chehab /* 2*786baecfSMauro Carvalho Chehab * Realtek RTL28xxU DVB USB driver 3*786baecfSMauro Carvalho Chehab * 4*786baecfSMauro Carvalho Chehab * Copyright (C) 2009 Antti Palosaari <crope@iki.fi> 5*786baecfSMauro Carvalho Chehab * Copyright (C) 2011 Antti Palosaari <crope@iki.fi> 6*786baecfSMauro Carvalho Chehab * 7*786baecfSMauro Carvalho Chehab * This program is free software; you can redistribute it and/or modify 8*786baecfSMauro Carvalho Chehab * it under the terms of the GNU General Public License as published by 9*786baecfSMauro Carvalho Chehab * the Free Software Foundation; either version 2 of the License, or 10*786baecfSMauro Carvalho Chehab * (at your option) any later version. 11*786baecfSMauro Carvalho Chehab * 12*786baecfSMauro Carvalho Chehab * This program is distributed in the hope that it will be useful, 13*786baecfSMauro Carvalho Chehab * but WITHOUT ANY WARRANTY; without even the implied warranty of 14*786baecfSMauro Carvalho Chehab * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15*786baecfSMauro Carvalho Chehab * GNU General Public License for more details. 16*786baecfSMauro Carvalho Chehab * 17*786baecfSMauro Carvalho Chehab * You should have received a copy of the GNU General Public License along 18*786baecfSMauro Carvalho Chehab * with this program; if not, write to the Free Software Foundation, Inc., 19*786baecfSMauro Carvalho Chehab * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 20*786baecfSMauro Carvalho Chehab */ 21*786baecfSMauro Carvalho Chehab 22*786baecfSMauro Carvalho Chehab #ifndef RTL28XXU_H 23*786baecfSMauro Carvalho Chehab #define RTL28XXU_H 24*786baecfSMauro Carvalho Chehab 25*786baecfSMauro Carvalho Chehab #include "dvb_usb.h" 26*786baecfSMauro Carvalho Chehab 27*786baecfSMauro Carvalho Chehab #define deb_dump(r, t, v, i, b, l) { \ 28*786baecfSMauro Carvalho Chehab char *direction; \ 29*786baecfSMauro Carvalho Chehab if (t == (USB_TYPE_VENDOR | USB_DIR_OUT)) \ 30*786baecfSMauro Carvalho Chehab direction = ">>>"; \ 31*786baecfSMauro Carvalho Chehab else \ 32*786baecfSMauro Carvalho Chehab direction = "<<<"; \ 33*786baecfSMauro Carvalho Chehab dev_dbg(&d->udev->dev, "%s: %02x %02x %02x %02x %02x %02x %02x %02x " \ 34*786baecfSMauro Carvalho Chehab "%s [%d bytes]\n", __func__, t, r, v & 0xff, v >> 8, \ 35*786baecfSMauro Carvalho Chehab i & 0xff, i >> 8, l & 0xff, l >> 8, direction, l); \ 36*786baecfSMauro Carvalho Chehab } 37*786baecfSMauro Carvalho Chehab 38*786baecfSMauro Carvalho Chehab /* 39*786baecfSMauro Carvalho Chehab * USB commands 40*786baecfSMauro Carvalho Chehab * (usb_control_msg() index parameter) 41*786baecfSMauro Carvalho Chehab */ 42*786baecfSMauro Carvalho Chehab 43*786baecfSMauro Carvalho Chehab #define DEMOD 0x0000 44*786baecfSMauro Carvalho Chehab #define USB 0x0100 45*786baecfSMauro Carvalho Chehab #define SYS 0x0200 46*786baecfSMauro Carvalho Chehab #define I2C 0x0300 47*786baecfSMauro Carvalho Chehab #define I2C_DA 0x0600 48*786baecfSMauro Carvalho Chehab 49*786baecfSMauro Carvalho Chehab #define CMD_WR_FLAG 0x0010 50*786baecfSMauro Carvalho Chehab #define CMD_DEMOD_RD 0x0000 51*786baecfSMauro Carvalho Chehab #define CMD_DEMOD_WR 0x0010 52*786baecfSMauro Carvalho Chehab #define CMD_USB_RD 0x0100 53*786baecfSMauro Carvalho Chehab #define CMD_USB_WR 0x0110 54*786baecfSMauro Carvalho Chehab #define CMD_SYS_RD 0x0200 55*786baecfSMauro Carvalho Chehab #define CMD_IR_RD 0x0201 56*786baecfSMauro Carvalho Chehab #define CMD_IR_WR 0x0211 57*786baecfSMauro Carvalho Chehab #define CMD_SYS_WR 0x0210 58*786baecfSMauro Carvalho Chehab #define CMD_I2C_RD 0x0300 59*786baecfSMauro Carvalho Chehab #define CMD_I2C_WR 0x0310 60*786baecfSMauro Carvalho Chehab #define CMD_I2C_DA_RD 0x0600 61*786baecfSMauro Carvalho Chehab #define CMD_I2C_DA_WR 0x0610 62*786baecfSMauro Carvalho Chehab 63*786baecfSMauro Carvalho Chehab 64*786baecfSMauro Carvalho Chehab struct rtl28xxu_priv { 65*786baecfSMauro Carvalho Chehab u8 chip_id; 66*786baecfSMauro Carvalho Chehab u8 tuner; 67*786baecfSMauro Carvalho Chehab u8 page; /* integrated demod active register page */ 68*786baecfSMauro Carvalho Chehab bool rc_active; 69*786baecfSMauro Carvalho Chehab }; 70*786baecfSMauro Carvalho Chehab 71*786baecfSMauro Carvalho Chehab enum rtl28xxu_chip_id { 72*786baecfSMauro Carvalho Chehab CHIP_ID_NONE, 73*786baecfSMauro Carvalho Chehab CHIP_ID_RTL2831U, 74*786baecfSMauro Carvalho Chehab CHIP_ID_RTL2832U, 75*786baecfSMauro Carvalho Chehab }; 76*786baecfSMauro Carvalho Chehab 77*786baecfSMauro Carvalho Chehab enum rtl28xxu_tuner { 78*786baecfSMauro Carvalho Chehab TUNER_NONE, 79*786baecfSMauro Carvalho Chehab 80*786baecfSMauro Carvalho Chehab TUNER_RTL2830_QT1010, 81*786baecfSMauro Carvalho Chehab TUNER_RTL2830_MT2060, 82*786baecfSMauro Carvalho Chehab TUNER_RTL2830_MXL5005S, 83*786baecfSMauro Carvalho Chehab 84*786baecfSMauro Carvalho Chehab TUNER_RTL2832_MT2266, 85*786baecfSMauro Carvalho Chehab TUNER_RTL2832_FC2580, 86*786baecfSMauro Carvalho Chehab TUNER_RTL2832_MT2063, 87*786baecfSMauro Carvalho Chehab TUNER_RTL2832_MAX3543, 88*786baecfSMauro Carvalho Chehab TUNER_RTL2832_TUA9001, 89*786baecfSMauro Carvalho Chehab TUNER_RTL2832_MXL5007T, 90*786baecfSMauro Carvalho Chehab TUNER_RTL2832_FC0012, 91*786baecfSMauro Carvalho Chehab TUNER_RTL2832_E4000, 92*786baecfSMauro Carvalho Chehab TUNER_RTL2832_TDA18272, 93*786baecfSMauro Carvalho Chehab TUNER_RTL2832_FC0013, 94*786baecfSMauro Carvalho Chehab }; 95*786baecfSMauro Carvalho Chehab 96*786baecfSMauro Carvalho Chehab struct rtl28xxu_req { 97*786baecfSMauro Carvalho Chehab u16 value; 98*786baecfSMauro Carvalho Chehab u16 index; 99*786baecfSMauro Carvalho Chehab u16 size; 100*786baecfSMauro Carvalho Chehab u8 *data; 101*786baecfSMauro Carvalho Chehab }; 102*786baecfSMauro Carvalho Chehab 103*786baecfSMauro Carvalho Chehab struct rtl28xxu_reg_val { 104*786baecfSMauro Carvalho Chehab u16 reg; 105*786baecfSMauro Carvalho Chehab u8 val; 106*786baecfSMauro Carvalho Chehab }; 107*786baecfSMauro Carvalho Chehab 108*786baecfSMauro Carvalho Chehab /* 109*786baecfSMauro Carvalho Chehab * memory map 110*786baecfSMauro Carvalho Chehab * 111*786baecfSMauro Carvalho Chehab * 0x0000 DEMOD : demodulator 112*786baecfSMauro Carvalho Chehab * 0x2000 USB : SIE, USB endpoint, debug, DMA 113*786baecfSMauro Carvalho Chehab * 0x3000 SYS : system 114*786baecfSMauro Carvalho Chehab * 0xfc00 RC : remote controller (not RTL2831U) 115*786baecfSMauro Carvalho Chehab */ 116*786baecfSMauro Carvalho Chehab 117*786baecfSMauro Carvalho Chehab /* 118*786baecfSMauro Carvalho Chehab * USB registers 119*786baecfSMauro Carvalho Chehab */ 120*786baecfSMauro Carvalho Chehab /* SIE Control Registers */ 121*786baecfSMauro Carvalho Chehab #define USB_SYSCTL 0x2000 /* USB system control */ 122*786baecfSMauro Carvalho Chehab #define USB_SYSCTL_0 0x2000 /* USB system control */ 123*786baecfSMauro Carvalho Chehab #define USB_SYSCTL_1 0x2001 /* USB system control */ 124*786baecfSMauro Carvalho Chehab #define USB_SYSCTL_2 0x2002 /* USB system control */ 125*786baecfSMauro Carvalho Chehab #define USB_SYSCTL_3 0x2003 /* USB system control */ 126*786baecfSMauro Carvalho Chehab #define USB_IRQSTAT 0x2008 /* SIE interrupt status */ 127*786baecfSMauro Carvalho Chehab #define USB_IRQEN 0x200C /* SIE interrupt enable */ 128*786baecfSMauro Carvalho Chehab #define USB_CTRL 0x2010 /* USB control */ 129*786baecfSMauro Carvalho Chehab #define USB_STAT 0x2014 /* USB status */ 130*786baecfSMauro Carvalho Chehab #define USB_DEVADDR 0x2018 /* USB device address */ 131*786baecfSMauro Carvalho Chehab #define USB_TEST 0x201C /* USB test mode */ 132*786baecfSMauro Carvalho Chehab #define USB_FRAME_NUMBER 0x2020 /* frame number */ 133*786baecfSMauro Carvalho Chehab #define USB_FIFO_ADDR 0x2028 /* address of SIE FIFO RAM */ 134*786baecfSMauro Carvalho Chehab #define USB_FIFO_CMD 0x202A /* SIE FIFO RAM access command */ 135*786baecfSMauro Carvalho Chehab #define USB_FIFO_DATA 0x2030 /* SIE FIFO RAM data */ 136*786baecfSMauro Carvalho Chehab /* Endpoint Registers */ 137*786baecfSMauro Carvalho Chehab #define EP0_SETUPA 0x20F8 /* EP 0 setup packet lower byte */ 138*786baecfSMauro Carvalho Chehab #define EP0_SETUPB 0x20FC /* EP 0 setup packet higher byte */ 139*786baecfSMauro Carvalho Chehab #define USB_EP0_CFG 0x2104 /* EP 0 configure */ 140*786baecfSMauro Carvalho Chehab #define USB_EP0_CTL 0x2108 /* EP 0 control */ 141*786baecfSMauro Carvalho Chehab #define USB_EP0_STAT 0x210C /* EP 0 status */ 142*786baecfSMauro Carvalho Chehab #define USB_EP0_IRQSTAT 0x2110 /* EP 0 interrupt status */ 143*786baecfSMauro Carvalho Chehab #define USB_EP0_IRQEN 0x2114 /* EP 0 interrupt enable */ 144*786baecfSMauro Carvalho Chehab #define USB_EP0_MAXPKT 0x2118 /* EP 0 max packet size */ 145*786baecfSMauro Carvalho Chehab #define USB_EP0_BC 0x2120 /* EP 0 FIFO byte counter */ 146*786baecfSMauro Carvalho Chehab #define USB_EPA_CFG 0x2144 /* EP A configure */ 147*786baecfSMauro Carvalho Chehab #define USB_EPA_CFG_0 0x2144 /* EP A configure */ 148*786baecfSMauro Carvalho Chehab #define USB_EPA_CFG_1 0x2145 /* EP A configure */ 149*786baecfSMauro Carvalho Chehab #define USB_EPA_CFG_2 0x2146 /* EP A configure */ 150*786baecfSMauro Carvalho Chehab #define USB_EPA_CFG_3 0x2147 /* EP A configure */ 151*786baecfSMauro Carvalho Chehab #define USB_EPA_CTL 0x2148 /* EP A control */ 152*786baecfSMauro Carvalho Chehab #define USB_EPA_CTL_0 0x2148 /* EP A control */ 153*786baecfSMauro Carvalho Chehab #define USB_EPA_CTL_1 0x2149 /* EP A control */ 154*786baecfSMauro Carvalho Chehab #define USB_EPA_CTL_2 0x214A /* EP A control */ 155*786baecfSMauro Carvalho Chehab #define USB_EPA_CTL_3 0x214B /* EP A control */ 156*786baecfSMauro Carvalho Chehab #define USB_EPA_STAT 0x214C /* EP A status */ 157*786baecfSMauro Carvalho Chehab #define USB_EPA_IRQSTAT 0x2150 /* EP A interrupt status */ 158*786baecfSMauro Carvalho Chehab #define USB_EPA_IRQEN 0x2154 /* EP A interrupt enable */ 159*786baecfSMauro Carvalho Chehab #define USB_EPA_MAXPKT 0x2158 /* EP A max packet size */ 160*786baecfSMauro Carvalho Chehab #define USB_EPA_MAXPKT_0 0x2158 /* EP A max packet size */ 161*786baecfSMauro Carvalho Chehab #define USB_EPA_MAXPKT_1 0x2159 /* EP A max packet size */ 162*786baecfSMauro Carvalho Chehab #define USB_EPA_MAXPKT_2 0x215A /* EP A max packet size */ 163*786baecfSMauro Carvalho Chehab #define USB_EPA_MAXPKT_3 0x215B /* EP A max packet size */ 164*786baecfSMauro Carvalho Chehab #define USB_EPA_FIFO_CFG 0x2160 /* EP A FIFO configure */ 165*786baecfSMauro Carvalho Chehab #define USB_EPA_FIFO_CFG_0 0x2160 /* EP A FIFO configure */ 166*786baecfSMauro Carvalho Chehab #define USB_EPA_FIFO_CFG_1 0x2161 /* EP A FIFO configure */ 167*786baecfSMauro Carvalho Chehab #define USB_EPA_FIFO_CFG_2 0x2162 /* EP A FIFO configure */ 168*786baecfSMauro Carvalho Chehab #define USB_EPA_FIFO_CFG_3 0x2163 /* EP A FIFO configure */ 169*786baecfSMauro Carvalho Chehab /* Debug Registers */ 170*786baecfSMauro Carvalho Chehab #define USB_PHYTSTDIS 0x2F04 /* PHY test disable */ 171*786baecfSMauro Carvalho Chehab #define USB_TOUT_VAL 0x2F08 /* USB time-out time */ 172*786baecfSMauro Carvalho Chehab #define USB_VDRCTRL 0x2F10 /* UTMI vendor signal control */ 173*786baecfSMauro Carvalho Chehab #define USB_VSTAIN 0x2F14 /* UTMI vendor signal status in */ 174*786baecfSMauro Carvalho Chehab #define USB_VLOADM 0x2F18 /* UTMI load vendor signal status in */ 175*786baecfSMauro Carvalho Chehab #define USB_VSTAOUT 0x2F1C /* UTMI vendor signal status out */ 176*786baecfSMauro Carvalho Chehab #define USB_UTMI_TST 0x2F80 /* UTMI test */ 177*786baecfSMauro Carvalho Chehab #define USB_UTMI_STATUS 0x2F84 /* UTMI status */ 178*786baecfSMauro Carvalho Chehab #define USB_TSTCTL 0x2F88 /* test control */ 179*786baecfSMauro Carvalho Chehab #define USB_TSTCTL2 0x2F8C /* test control 2 */ 180*786baecfSMauro Carvalho Chehab #define USB_PID_FORCE 0x2F90 /* force PID */ 181*786baecfSMauro Carvalho Chehab #define USB_PKTERR_CNT 0x2F94 /* packet error counter */ 182*786baecfSMauro Carvalho Chehab #define USB_RXERR_CNT 0x2F98 /* RX error counter */ 183*786baecfSMauro Carvalho Chehab #define USB_MEM_BIST 0x2F9C /* MEM BIST test */ 184*786baecfSMauro Carvalho Chehab #define USB_SLBBIST 0x2FA0 /* self-loop-back BIST */ 185*786baecfSMauro Carvalho Chehab #define USB_CNTTEST 0x2FA4 /* counter test */ 186*786baecfSMauro Carvalho Chehab #define USB_PHYTST 0x2FC0 /* USB PHY test */ 187*786baecfSMauro Carvalho Chehab #define USB_DBGIDX 0x2FF0 /* select individual block debug signal */ 188*786baecfSMauro Carvalho Chehab #define USB_DBGMUX 0x2FF4 /* debug signal module mux */ 189*786baecfSMauro Carvalho Chehab 190*786baecfSMauro Carvalho Chehab /* 191*786baecfSMauro Carvalho Chehab * SYS registers 192*786baecfSMauro Carvalho Chehab */ 193*786baecfSMauro Carvalho Chehab /* demod control registers */ 194*786baecfSMauro Carvalho Chehab #define SYS_SYS0 0x3000 /* include DEMOD_CTL, GPO, GPI, GPOE */ 195*786baecfSMauro Carvalho Chehab #define SYS_DEMOD_CTL 0x3000 /* control register for DVB-T demodulator */ 196*786baecfSMauro Carvalho Chehab /* GPIO registers */ 197*786baecfSMauro Carvalho Chehab #define SYS_GPIO_OUT_VAL 0x3001 /* output value of GPIO */ 198*786baecfSMauro Carvalho Chehab #define SYS_GPIO_IN_VAL 0x3002 /* input value of GPIO */ 199*786baecfSMauro Carvalho Chehab #define SYS_GPIO_OUT_EN 0x3003 /* output enable of GPIO */ 200*786baecfSMauro Carvalho Chehab #define SYS_SYS1 0x3004 /* include GPD, SYSINTE, SYSINTS, GP_CFG0 */ 201*786baecfSMauro Carvalho Chehab #define SYS_GPIO_DIR 0x3004 /* direction control for GPIO */ 202*786baecfSMauro Carvalho Chehab #define SYS_SYSINTE 0x3005 /* system interrupt enable */ 203*786baecfSMauro Carvalho Chehab #define SYS_SYSINTS 0x3006 /* system interrupt status */ 204*786baecfSMauro Carvalho Chehab #define SYS_GPIO_CFG0 0x3007 /* PAD configuration for GPIO0-GPIO3 */ 205*786baecfSMauro Carvalho Chehab #define SYS_SYS2 0x3008 /* include GP_CFG1 and 3 reserved bytes */ 206*786baecfSMauro Carvalho Chehab #define SYS_GPIO_CFG1 0x3008 /* PAD configuration for GPIO4 */ 207*786baecfSMauro Carvalho Chehab #define SYS_DEMOD_CTL1 0x300B 208*786baecfSMauro Carvalho Chehab 209*786baecfSMauro Carvalho Chehab /* IrDA registers */ 210*786baecfSMauro Carvalho Chehab #define SYS_IRRC_PSR 0x3020 /* IR protocol selection */ 211*786baecfSMauro Carvalho Chehab #define SYS_IRRC_PER 0x3024 /* IR protocol extension */ 212*786baecfSMauro Carvalho Chehab #define SYS_IRRC_SF 0x3028 /* IR sampling frequency */ 213*786baecfSMauro Carvalho Chehab #define SYS_IRRC_DPIR 0x302C /* IR data package interval */ 214*786baecfSMauro Carvalho Chehab #define SYS_IRRC_CR 0x3030 /* IR control */ 215*786baecfSMauro Carvalho Chehab #define SYS_IRRC_RP 0x3034 /* IR read port */ 216*786baecfSMauro Carvalho Chehab #define SYS_IRRC_SR 0x3038 /* IR status */ 217*786baecfSMauro Carvalho Chehab /* I2C master registers */ 218*786baecfSMauro Carvalho Chehab #define SYS_I2CCR 0x3040 /* I2C clock */ 219*786baecfSMauro Carvalho Chehab #define SYS_I2CMCR 0x3044 /* I2C master control */ 220*786baecfSMauro Carvalho Chehab #define SYS_I2CMSTR 0x3048 /* I2C master SCL timing */ 221*786baecfSMauro Carvalho Chehab #define SYS_I2CMSR 0x304C /* I2C master status */ 222*786baecfSMauro Carvalho Chehab #define SYS_I2CMFR 0x3050 /* I2C master FIFO */ 223*786baecfSMauro Carvalho Chehab 224*786baecfSMauro Carvalho Chehab /* 225*786baecfSMauro Carvalho Chehab * IR registers 226*786baecfSMauro Carvalho Chehab */ 227*786baecfSMauro Carvalho Chehab #define IR_RX_BUF 0xFC00 228*786baecfSMauro Carvalho Chehab #define IR_RX_IE 0xFD00 229*786baecfSMauro Carvalho Chehab #define IR_RX_IF 0xFD01 230*786baecfSMauro Carvalho Chehab #define IR_RX_CTRL 0xFD02 231*786baecfSMauro Carvalho Chehab #define IR_RX_CFG 0xFD03 232*786baecfSMauro Carvalho Chehab #define IR_MAX_DURATION0 0xFD04 233*786baecfSMauro Carvalho Chehab #define IR_MAX_DURATION1 0xFD05 234*786baecfSMauro Carvalho Chehab #define IR_IDLE_LEN0 0xFD06 235*786baecfSMauro Carvalho Chehab #define IR_IDLE_LEN1 0xFD07 236*786baecfSMauro Carvalho Chehab #define IR_GLITCH_LEN 0xFD08 237*786baecfSMauro Carvalho Chehab #define IR_RX_BUF_CTRL 0xFD09 238*786baecfSMauro Carvalho Chehab #define IR_RX_BUF_DATA 0xFD0A 239*786baecfSMauro Carvalho Chehab #define IR_RX_BC 0xFD0B 240*786baecfSMauro Carvalho Chehab #define IR_RX_CLK 0xFD0C 241*786baecfSMauro Carvalho Chehab #define IR_RX_C_COUNT_L 0xFD0D 242*786baecfSMauro Carvalho Chehab #define IR_RX_C_COUNT_H 0xFD0E 243*786baecfSMauro Carvalho Chehab #define IR_SUSPEND_CTRL 0xFD10 244*786baecfSMauro Carvalho Chehab #define IR_ERR_TOL_CTRL 0xFD11 245*786baecfSMauro Carvalho Chehab #define IR_UNIT_LEN 0xFD12 246*786baecfSMauro Carvalho Chehab #define IR_ERR_TOL_LEN 0xFD13 247*786baecfSMauro Carvalho Chehab #define IR_MAX_H_TOL_LEN 0xFD14 248*786baecfSMauro Carvalho Chehab #define IR_MAX_L_TOL_LEN 0xFD15 249*786baecfSMauro Carvalho Chehab #define IR_MASK_CTRL 0xFD16 250*786baecfSMauro Carvalho Chehab #define IR_MASK_DATA 0xFD17 251*786baecfSMauro Carvalho Chehab #define IR_RES_MASK_ADDR 0xFD18 252*786baecfSMauro Carvalho Chehab #define IR_RES_MASK_T_LEN 0xFD19 253*786baecfSMauro Carvalho Chehab 254*786baecfSMauro Carvalho Chehab #endif 255