xref: /linux/drivers/media/usb/dvb-usb-v2/rtl28xxu.h (revision 786baecfe78f8e25547c628b48a60fc8e5636056)
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