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