1
2
3
# ifndef QEMU_I2C_H
# define QEMU_I2C_H
4
5
# include "qdev.h"
6
7
8
9
10
11
12
13
14
/* The QEMU I2C implementation only supports simple transfers that complete
immediately . It does not support slave devices that need to be able to
defer their response ( eg . CPU slave interfaces where the data is supplied
by the device driver in response to an interrupt ). */
enum i2c_event {
I2C_START_RECV ,
I2C_START_SEND ,
I2C_FINISH ,
ths
authored
18 years ago
15
I2C_NACK /* Masker NACKed a receive byte. */
16
17
18
19
20
21
22
23
24
};
/* Master to slave. */
typedef int ( * i2c_send_cb )( i2c_slave * s , uint8_t data );
/* Slave to master. */
typedef int ( * i2c_recv_cb )( i2c_slave * s );
/* Notify the slave of a bus state change. */
typedef void ( * i2c_event_cb )( i2c_slave * s , enum i2c_event event );
25
26
27
28
29
30
31
32
33
34
typedef void ( * i2c_slave_initfn )( i2c_slave * dev );
typedef struct {
/* Callbacks provided by the device. */
i2c_slave_initfn init ;
i2c_event_cb event ;
i2c_recv_cb recv ;
i2c_send_cb send ;
} I2CSlaveInfo ;
35
36
struct i2c_slave
{
37
38
DeviceState qdev ;
I2CSlaveInfo * info ;
39
40
41
42
/* Remaining fields for internal use by the I2C code. */
int address ;
void * next ;
43
i2c_bus * bus ;
44
45
46
47
48
49
50
51
52
53
};
i2c_bus * i2c_init_bus ( void );
void i2c_set_slave_address ( i2c_slave * dev , int address );
int i2c_bus_busy ( i2c_bus * bus );
int i2c_start_transfer ( i2c_bus * bus , int address , int recv );
void i2c_end_transfer ( i2c_bus * bus );
void i2c_nack ( i2c_bus * bus );
int i2c_send ( i2c_bus * bus , uint8_t data );
int i2c_recv ( i2c_bus * bus );
54
55
void i2c_slave_save ( QEMUFile * f , i2c_slave * dev );
void i2c_slave_load ( QEMUFile * f , i2c_slave * dev );
56
57
58
59
60
61
62
63
# define I2C_SLAVE_FROM_QDEV ( dev ) DO_UPCAST ( i2c_slave , qdev , dev )
# define FROM_I2C_SLAVE ( type , dev ) DO_UPCAST ( type , i2c , dev )
void i2c_register_slave ( const char * name , int size , I2CSlaveInfo * type );
DeviceState * i2c_create_slave ( i2c_bus * bus , const char * name , int addr );
64
65
66
67
68
69
/* max7310.c */
void max7310_reset ( i2c_slave * i2c );
qemu_irq * max7310_gpio_in_get ( i2c_slave * i2c );
void max7310_gpio_out_set ( i2c_slave * i2c , int line , qemu_irq handler );
/* wm8750.c */
70
void wm8750_data_req_set ( DeviceState * dev ,
71
72
73
void ( * data_req )( void * , int , int ), void * opaque );
void wm8750_dac_dat ( void * opaque , uint32_t sample );
uint32_t wm8750_adc_dat ( void * opaque );
74
75
void * wm8750_dac_buffer ( void * opaque , int samples );
void wm8750_dac_commit ( void * opaque );
76
void wm8750_set_bclk_in ( void * opaque , int new_hz );
77
78
79
80
/* tmp105.c */
void tmp105_set ( i2c_slave * i2c , int temp );
81
/* lm832x.c */
82
void lm832x_key_event ( i2c_slave * i2c , int key , int state );
83
84
# endif