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