79 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0 */
 | |
| #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
 | 
