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