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