aboutsummaryrefslogtreecommitdiff
path: root/drivers/misc/mediatek/hdmi/nxp_tda19989/I2C.h
blob: 09e7e52c3b845989c62a7a133eb1142686a3ea3c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include "tmNxTypes.h"


/* States of transmission */
#define  INIT                   0xFF
#define  START                  0xF0
#define  CORRECT                0x00
#define  BUS_ERROR              0x01
#define  NO_ANSWER_SLAVE        0x20
#define  UNCORRECT              0x30
#define  BUS_LOST               0x38

/* version of infrastructure */
#define COMPATIBILITY_INFRA     0U
#define MAJOR_VERSION_INFRA     1U
#define MINOR_VERSION_INFRA     02U

/* i2c address slave */
#define slaveAddressTDA9975A      0x4C
#define slaveAddressTDA8778       0x74
#define slaveAddressUDA1355H      0x1A
#define slaveAddressMAX4562       0x4E
#define slaveAddressTDA9984       0x70
#define slaveAddressTDA9989       0x70
#define slaveAddressDriverHdmiCEC 0x34
#define slaveAddressPCA9536       0x41

typedef enum {
	reg_TDA8778,
	reg_UDA1355H,
	reg_MAX4562,
	reg_TDA997X,
	reg_TDA998X,
	reg_TDA9989_CEC,
	reg_TDA9950,
	reg_PCA9536
} i2cRegisterType_t;

typedef struct {
	UInt8 slaveAddr;
	UInt8 firstRegister;
	UInt8 lenData;
	UInt8 *pData;
} tmbslHdmiSysArgs_t;


extern volatile unsigned char transmission;
    /* Count of repeated starts within frame, used as index into arrays within interrupt routines */
extern unsigned char nb_byte[3];	/* Array of byte counts, allows multi-part messages with repeated starts */
extern unsigned char slave[3];	/* Array of slave addresses, allows multi-part messages with repeated starts to different slaves or W/R */
extern unsigned char *pt_mtd[3], *pt_mrd[3];	/* Array of read/write pointers, allows multi-part messages with repeated starts */
extern unsigned char rep_start_cntr;

tmErrorCode_t Init_i2c(void);

unsigned char Read_at_i2c(unsigned char address, unsigned char pos, unsigned char nb_char,
			  unsigned char *ptr);
unsigned char Write_i2c(unsigned char address, unsigned char *ptr, unsigned char nb_char);
unsigned char Read_edid(unsigned char seg_addr, unsigned char seg_ptr, unsigned char data_addr,
			unsigned char word_offset, unsigned char nb_char, unsigned char *ptr);

tmErrorCode_t i2cWrite(i2cRegisterType_t type_register, tmbslHdmiSysArgs_t *pSysArgs);
tmErrorCode_t i2cRead(i2cRegisterType_t type_register, tmbslHdmiSysArgs_t *pSysArgs);

unsigned char i2cReadEdid(unsigned char seg_addr, unsigned char seg_ptr,
			  unsigned char data_addr, unsigned char word_offset,
			  unsigned char nb_char, unsigned char *ptr);