xref: /arm-trusted-firmware/include/drivers/brcm/i2c/i2c.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2016 - 2021, Broadcom
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #ifndef I2C_H
8*91f16700Schasinglulu #define I2C_H
9*91f16700Schasinglulu 
10*91f16700Schasinglulu #include <stdint.h>
11*91f16700Schasinglulu 
12*91f16700Schasinglulu #define I2C_SPEED_100KHz	100000
13*91f16700Schasinglulu #define I2C_SPEED_400KHz	400000
14*91f16700Schasinglulu #define I2C_SPEED_DEFAULT	I2C_SPEED_100KHz
15*91f16700Schasinglulu 
16*91f16700Schasinglulu /*
17*91f16700Schasinglulu  * Function Name:    i2c_probe
18*91f16700Schasinglulu  *
19*91f16700Schasinglulu  * Description:
20*91f16700Schasinglulu  *	This function probes the I2C bus for the existence of the specified
21*91f16700Schasinglulu  *	device.
22*91f16700Schasinglulu  *
23*91f16700Schasinglulu  * Parameters:
24*91f16700Schasinglulu  *	bus_id  - I2C bus ID
25*91f16700Schasinglulu  *	devaddr - Device Address
26*91f16700Schasinglulu  *
27*91f16700Schasinglulu  * Return:
28*91f16700Schasinglulu  *	0 on success, or -1 on failure.
29*91f16700Schasinglulu  */
30*91f16700Schasinglulu int i2c_probe(uint32_t bus_id, uint8_t devaddr);
31*91f16700Schasinglulu 
32*91f16700Schasinglulu /*
33*91f16700Schasinglulu  * Function Name:    i2c_init
34*91f16700Schasinglulu  *
35*91f16700Schasinglulu  * Description:
36*91f16700Schasinglulu  *	This function initializes the SMBUS.
37*91f16700Schasinglulu  *
38*91f16700Schasinglulu  * Parameters:
39*91f16700Schasinglulu  *	bus_id - I2C bus ID
40*91f16700Schasinglulu  *	speed  - I2C bus speed in Hz
41*91f16700Schasinglulu  *
42*91f16700Schasinglulu  * Return:
43*91f16700Schasinglulu  *	0 on success, or -1 on failure.
44*91f16700Schasinglulu  */
45*91f16700Schasinglulu int i2c_init(uint32_t bus_id, int speed);
46*91f16700Schasinglulu 
47*91f16700Schasinglulu /*
48*91f16700Schasinglulu  * Function Name:    i2c_set_bus_speed
49*91f16700Schasinglulu  *
50*91f16700Schasinglulu  * Description:
51*91f16700Schasinglulu  *	This function configures the SMBUS speed
52*91f16700Schasinglulu  *
53*91f16700Schasinglulu  * Parameters:
54*91f16700Schasinglulu  *	bus_id - I2C bus ID
55*91f16700Schasinglulu  *	speed  - I2C bus speed in Hz
56*91f16700Schasinglulu  *
57*91f16700Schasinglulu  * Return:
58*91f16700Schasinglulu  *	0 on success, or -1 on failure.
59*91f16700Schasinglulu  */
60*91f16700Schasinglulu int i2c_set_bus_speed(uint32_t bus_id, uint32_t speed);
61*91f16700Schasinglulu 
62*91f16700Schasinglulu /*
63*91f16700Schasinglulu  * Function Name:    i2c_get_bus_speed
64*91f16700Schasinglulu  *
65*91f16700Schasinglulu  * Description:
66*91f16700Schasinglulu  *	This function returns the SMBUS speed.
67*91f16700Schasinglulu  *
68*91f16700Schasinglulu  * Parameters:
69*91f16700Schasinglulu  *	bus_id - I2C bus ID
70*91f16700Schasinglulu  *
71*91f16700Schasinglulu  * Return:
72*91f16700Schasinglulu  *	Bus speed in Hz, 0 on failure
73*91f16700Schasinglulu  */
74*91f16700Schasinglulu uint32_t i2c_get_bus_speed(uint32_t bus_id);
75*91f16700Schasinglulu 
76*91f16700Schasinglulu /*
77*91f16700Schasinglulu  * Function Name:    i2c_recv_byte
78*91f16700Schasinglulu  *
79*91f16700Schasinglulu  * Description:
80*91f16700Schasinglulu  *	This function reads I2C data from a device without specifying
81*91f16700Schasinglulu  *	a command register.
82*91f16700Schasinglulu  *
83*91f16700Schasinglulu  * Parameters:
84*91f16700Schasinglulu  *	bus_id  - I2C bus ID
85*91f16700Schasinglulu  *	devaddr - Device Address
86*91f16700Schasinglulu  *	value   - Data Read
87*91f16700Schasinglulu  *
88*91f16700Schasinglulu  * Return:
89*91f16700Schasinglulu  *	0 on success, or -1 on failure.
90*91f16700Schasinglulu  */
91*91f16700Schasinglulu int i2c_recv_byte(uint32_t bus_id, uint8_t devaddr, uint8_t *value);
92*91f16700Schasinglulu 
93*91f16700Schasinglulu /*
94*91f16700Schasinglulu  * Function Name:    i2c_send_byte
95*91f16700Schasinglulu  *
96*91f16700Schasinglulu  * Description:
97*91f16700Schasinglulu  *	This function send I2C data to a device without specifying
98*91f16700Schasinglulu  *	a command register.
99*91f16700Schasinglulu  *
100*91f16700Schasinglulu  * Parameters:
101*91f16700Schasinglulu  *	bus_id  - I2C bus ID
102*91f16700Schasinglulu  *	devaddr - Device Address
103*91f16700Schasinglulu  *	value   - Data Send
104*91f16700Schasinglulu  *
105*91f16700Schasinglulu  * Return:
106*91f16700Schasinglulu  *	0 on success, or -1 on failure.
107*91f16700Schasinglulu  */
108*91f16700Schasinglulu int i2c_send_byte(uint32_t bus_id, uint8_t devaddr, uint8_t value);
109*91f16700Schasinglulu 
110*91f16700Schasinglulu /*
111*91f16700Schasinglulu  * Function Name:    i2c_read
112*91f16700Schasinglulu  *
113*91f16700Schasinglulu  * Description:
114*91f16700Schasinglulu  *	This function reads I2C data from a device with a designated
115*91f16700Schasinglulu  *	command register
116*91f16700Schasinglulu  *
117*91f16700Schasinglulu  * Parameters:
118*91f16700Schasinglulu  *	bus_id  - I2C bus ID
119*91f16700Schasinglulu  *	devaddr - Device Address
120*91f16700Schasinglulu  *	addr    - Register Offset
121*91f16700Schasinglulu  *	alen    - Address Length, 1 for byte, 2 for word (not supported)
122*91f16700Schasinglulu  *	buffer  - Data Buffer
123*91f16700Schasinglulu  *	len     - Data Length in bytes
124*91f16700Schasinglulu  *
125*91f16700Schasinglulu  * Return:
126*91f16700Schasinglulu  *	0 on success, or -1 on failure.
127*91f16700Schasinglulu  */
128*91f16700Schasinglulu int i2c_read(uint32_t bus_id,
129*91f16700Schasinglulu 	     uint8_t devaddr,
130*91f16700Schasinglulu 	     uint32_t addr,
131*91f16700Schasinglulu 	     int alen,
132*91f16700Schasinglulu 	     uint8_t *buffer,
133*91f16700Schasinglulu 	     int len);
134*91f16700Schasinglulu 
135*91f16700Schasinglulu /*
136*91f16700Schasinglulu  * Function Name:    i2c_write
137*91f16700Schasinglulu  *
138*91f16700Schasinglulu  * Description:
139*91f16700Schasinglulu  *	This function write I2C data to a device with a designated
140*91f16700Schasinglulu  *	command register
141*91f16700Schasinglulu  *
142*91f16700Schasinglulu  * Parameters:
143*91f16700Schasinglulu  *	bus_id  - I2C bus ID
144*91f16700Schasinglulu  *	devaddr - Device Address
145*91f16700Schasinglulu  *	addr    - Register Offset
146*91f16700Schasinglulu  *	alen    - Address Length, 1 for byte, 2 for word (not supported)
147*91f16700Schasinglulu  *	buffer  - Data Buffer
148*91f16700Schasinglulu  *	len     - Data Length in bytes
149*91f16700Schasinglulu  *
150*91f16700Schasinglulu  * Return:
151*91f16700Schasinglulu  *	0 on success, or -1 on failure.
152*91f16700Schasinglulu  */
153*91f16700Schasinglulu int i2c_write(uint32_t bus_id,
154*91f16700Schasinglulu 	      uint8_t devaddr,
155*91f16700Schasinglulu 	      uint32_t addr,
156*91f16700Schasinglulu 	      int alen,
157*91f16700Schasinglulu 	      uint8_t *buffer,
158*91f16700Schasinglulu 	      int len);
159*91f16700Schasinglulu 
160*91f16700Schasinglulu 
161*91f16700Schasinglulu #endif /* I2C_H */
162