diff options
Diffstat (limited to 'drivers/media/dvb/dvb-usb/m920x.h')
-rw-r--r-- | drivers/media/dvb/dvb-usb/m920x.h | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/drivers/media/dvb/dvb-usb/m920x.h b/drivers/media/dvb/dvb-usb/m920x.h new file mode 100644 index 00000000000..3c061518ffc --- /dev/null +++ b/drivers/media/dvb/dvb-usb/m920x.h | |||
@@ -0,0 +1,77 @@ | |||
1 | #ifndef _DVB_USB_M920X_H_ | ||
2 | #define _DVB_USB_M920X_H_ | ||
3 | |||
4 | #define DVB_USB_LOG_PREFIX "m920x" | ||
5 | #include "dvb-usb.h" | ||
6 | |||
7 | #define deb(args...) dprintk(dvb_usb_m920x_debug,0x01,args) | ||
8 | |||
9 | #define M9206_CORE 0x22 | ||
10 | #define M9206_RC_STATE 0xff51 | ||
11 | #define M9206_RC_KEY 0xff52 | ||
12 | #define M9206_RC_INIT1 0xff54 | ||
13 | #define M9206_RC_INIT2 0xff55 | ||
14 | #define M9206_FW_GO 0xff69 | ||
15 | |||
16 | #define M9206_I2C 0x23 | ||
17 | #define M9206_FILTER 0x25 | ||
18 | #define M9206_FW 0x30 | ||
19 | |||
20 | #define M9206_MAX_FILTERS 8 | ||
21 | #define M9206_MAX_ADAPTERS 4 | ||
22 | |||
23 | /* | ||
24 | sequences found in logs: | ||
25 | [index value] | ||
26 | 0x80 write addr | ||
27 | (0x00 out byte)* | ||
28 | 0x40 out byte | ||
29 | |||
30 | 0x80 write addr | ||
31 | (0x00 out byte)* | ||
32 | 0x80 read addr | ||
33 | (0x21 in byte)* | ||
34 | 0x60 in byte | ||
35 | |||
36 | this sequence works: | ||
37 | 0x80 read addr | ||
38 | (0x21 in byte)* | ||
39 | 0x60 in byte | ||
40 | |||
41 | Guess at API of the I2C function: | ||
42 | I2C operation is done one byte at a time with USB control messages. The | ||
43 | index the messages is sent to is made up of a set of flags that control | ||
44 | the I2C bus state: | ||
45 | 0x80: Send START condition. After a START condition, one would normally | ||
46 | always send the 7-bit slave I2C address as the 7 MSB, followed by | ||
47 | the read/write bit as the LSB. | ||
48 | 0x40: Send STOP condition. This should be set on the last byte of an | ||
49 | I2C transaction. | ||
50 | 0x20: Read a byte from the slave. As opposed to writing a byte to the | ||
51 | slave. The slave will normally not produce any data unless you | ||
52 | set the R/W bit to 1 when sending the slave's address after the | ||
53 | START condition. | ||
54 | 0x01: Respond with ACK, as opposed to a NACK. For a multi-byte read, | ||
55 | the master should send an ACK, that is pull SDA low during the 9th | ||
56 | clock cycle, after every byte but the last. This flags only makes | ||
57 | sense when bit 0x20 is set, indicating a read. | ||
58 | |||
59 | What any other bits might mean, or how to get the slave's ACK/NACK | ||
60 | response to a write, is unknown. | ||
61 | */ | ||
62 | |||
63 | struct m920x_state { | ||
64 | u16 filters[M9206_MAX_ADAPTERS][M9206_MAX_FILTERS]; | ||
65 | int filtering_enabled[M9206_MAX_ADAPTERS]; | ||
66 | int rep_count; | ||
67 | }; | ||
68 | |||
69 | /* Initialisation data for the m920x | ||
70 | */ | ||
71 | |||
72 | struct m920x_inits { | ||
73 | u16 address; | ||
74 | u8 data; | ||
75 | }; | ||
76 | |||
77 | #endif | ||