xref: /OK3568_Linux_fs/kernel/drivers/media/usb/dvb-usb/digitv.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun #ifndef _DVB_USB_DIGITV_H_
3*4882a593Smuzhiyun #define _DVB_USB_DIGITV_H_
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun #define DVB_USB_LOG_PREFIX "digitv"
6*4882a593Smuzhiyun #include "dvb-usb.h"
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun struct digitv_state {
9*4882a593Smuzhiyun 	int is_nxt6000;
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun 	unsigned char sndbuf[7];
12*4882a593Smuzhiyun 	unsigned char rcvbuf[7];
13*4882a593Smuzhiyun };
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun /* protocol (from usblogging and the SDK:
16*4882a593Smuzhiyun  *
17*4882a593Smuzhiyun  * Always 7 bytes bulk message(s) for controlling
18*4882a593Smuzhiyun  *
19*4882a593Smuzhiyun  * First byte describes the command. Reads are 2 consecutive transfer (as always).
20*4882a593Smuzhiyun  *
21*4882a593Smuzhiyun  * General structure:
22*4882a593Smuzhiyun  *
23*4882a593Smuzhiyun  * write or first message of a read:
24*4882a593Smuzhiyun  * <cmdbyte> VV <len> B0 B1 B2 B3
25*4882a593Smuzhiyun  *
26*4882a593Smuzhiyun  * second message of a read
27*4882a593Smuzhiyun  * <cmdbyte> VV <len> R0 R1 R2 R3
28*4882a593Smuzhiyun  *
29*4882a593Smuzhiyun  * whereas 0 < len <= 4
30*4882a593Smuzhiyun  *
31*4882a593Smuzhiyun  * I2C address is stored somewhere inside the device.
32*4882a593Smuzhiyun  *
33*4882a593Smuzhiyun  * 0x01 read from EEPROM
34*4882a593Smuzhiyun  *  VV = offset; B* = 0; R* = value(s)
35*4882a593Smuzhiyun  *
36*4882a593Smuzhiyun  * 0x02 read register of the COFDM
37*4882a593Smuzhiyun  *  VV = register; B* = 0; R* = value(s)
38*4882a593Smuzhiyun  *
39*4882a593Smuzhiyun  * 0x05 write register of the COFDM
40*4882a593Smuzhiyun  *  VV = register; B* = value(s);
41*4882a593Smuzhiyun  *
42*4882a593Smuzhiyun  * 0x06 write to the tuner (only for NXT6000)
43*4882a593Smuzhiyun  *  VV = 0; B* = PLL data; len = 4;
44*4882a593Smuzhiyun  *
45*4882a593Smuzhiyun  * 0x03 read remote control
46*4882a593Smuzhiyun  *  VV = 0; B* = 0; len = 4; R* = key
47*4882a593Smuzhiyun  *
48*4882a593Smuzhiyun  * 0x07 write to the remote (don't know why one should this, resetting ?)
49*4882a593Smuzhiyun  *  VV = 0; B* = key; len = 4;
50*4882a593Smuzhiyun  *
51*4882a593Smuzhiyun  * 0x08 write remote type
52*4882a593Smuzhiyun  *  VV = 0; B[0] = 0x01, len = 4
53*4882a593Smuzhiyun  *
54*4882a593Smuzhiyun  * 0x09 write device init
55*4882a593Smuzhiyun  *  TODO
56*4882a593Smuzhiyun  */
57*4882a593Smuzhiyun #define USB_READ_EEPROM         1
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun #define USB_READ_COFDM          2
60*4882a593Smuzhiyun #define USB_WRITE_COFDM         5
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun #define USB_WRITE_TUNER         6
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun #define USB_READ_REMOTE         3
65*4882a593Smuzhiyun #define USB_WRITE_REMOTE        7
66*4882a593Smuzhiyun #define USB_WRITE_REMOTE_TYPE   8
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun #define USB_DEV_INIT            9
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun #endif
71