| #ifndef _DVB_USB_M920X_H_ | |
| #define _DVB_USB_M920X_H_ | |
| #define DVB_USB_LOG_PREFIX "m920x" | |
| #include "dvb-usb.h" | |
| #define deb(args...) dprintk(dvb_usb_m920x_debug,0x01,args) | |
| #define M9206_CORE 0x22 | |
| #define M9206_RC_STATE 0xff51 | |
| #define M9206_RC_KEY 0xff52 | |
| #define M9206_RC_INIT1 0xff54 | |
| #define M9206_RC_INIT2 0xff55 | |
| #define M9206_FW_GO 0xff69 | |
| #define M9206_I2C 0x23 | |
| #define M9206_FILTER 0x25 | |
| #define M9206_FW 0x30 | |
| #define M9206_MAX_FILTERS 8 | |
| #define M9206_MAX_ADAPTERS 4 | |
| /* | |
| sequences found in logs: | |
| [index value] | |
| 0x80 write addr | |
| (0x00 out byte)* | |
| 0x40 out byte | |
| 0x80 write addr | |
| (0x00 out byte)* | |
| 0x80 read addr | |
| (0x21 in byte)* | |
| 0x60 in byte | |
| this sequence works: | |
| 0x80 read addr | |
| (0x21 in byte)* | |
| 0x60 in byte | |
| Guess at API of the I2C function: | |
| I2C operation is done one byte at a time with USB control messages. The | |
| index the messages is sent to is made up of a set of flags that control | |
| the I2C bus state: | |
| 0x80: Send START condition. After a START condition, one would normally | |
| always send the 7-bit slave I2C address as the 7 MSB, followed by | |
| the read/write bit as the LSB. | |
| 0x40: Send STOP condition. This should be set on the last byte of an | |
| I2C transaction. | |
| 0x20: Read a byte from the slave. As opposed to writing a byte to the | |
| slave. The slave will normally not produce any data unless you | |
| set the R/W bit to 1 when sending the slave's address after the | |
| START condition. | |
| 0x01: Respond with ACK, as opposed to a NACK. For a multi-byte read, | |
| the master should send an ACK, that is pull SDA low during the 9th | |
| clock cycle, after every byte but the last. This flags only makes | |
| sense when bit 0x20 is set, indicating a read. | |
| What any other bits might mean, or how to get the slave's ACK/NACK | |
| response to a write, is unknown. | |
| */ | |
| struct m920x_state { | |
| u16 filters[M9206_MAX_ADAPTERS][M9206_MAX_FILTERS]; | |
| int filtering_enabled[M9206_MAX_ADAPTERS]; | |
| int rep_count; | |
| }; | |
| /* Initialisation data for the m920x | |
| */ | |
| struct m920x_inits { | |
| u16 address; | |
| u8 data; | |
| }; | |
| #endif |