diff options
Diffstat (limited to 'gpxe/src/include/gpxe/i2c.h')
-rw-r--r-- | gpxe/src/include/gpxe/i2c.h | 171 |
1 files changed, 0 insertions, 171 deletions
diff --git a/gpxe/src/include/gpxe/i2c.h b/gpxe/src/include/gpxe/i2c.h deleted file mode 100644 index 87b89d46..00000000 --- a/gpxe/src/include/gpxe/i2c.h +++ /dev/null @@ -1,171 +0,0 @@ -#ifndef _GPXE_I2C_H -#define _GPXE_I2C_H - -/** @file - * - * I2C interface - * - */ - -FILE_LICENCE ( GPL2_OR_LATER ); - -#include <stdint.h> -#include <gpxe/bitbash.h> - -/** An I2C device - * - * An I2C device represents a specific slave device on an I2C bus. It - * is accessed via an I2C interface. - */ -struct i2c_device { - /** Address of this device - * - * The actual address sent on the bus will look like - * - * <start> <device address> <word address overflow> <r/w> - * - * The "word address overflow" is any excess bits from the - * word address, i.e. any portion that does not fit within the - * defined word address length. - */ - unsigned int dev_addr; - /** Device address length, in bytes - * - * This is the number of bytes that comprise the device - * address, defined to be the portion that terminates with the - * read/write bit. - */ - unsigned int dev_addr_len; - /** Word adddress length, in bytes - * - * This is the number of bytes that comprise the word address, - * defined to be the portion that starts after the read/write - * bit and ends before the first data byte. - * - * For some devices, this length will be zero (i.e. the word - * address is contained entirely within the "word address - * overflow"). - */ - unsigned int word_addr_len; -}; - -/** An I2C interface - * - * An I2C interface provides access to an I2C bus, via which I2C - * devices may be reached. - */ -struct i2c_interface { - /** - * Read data from I2C device - * - * @v i2c I2C interface - * @v i2cdev I2C device - * @v offset Starting offset within the device - * @v data Data buffer - * @v len Length of data buffer - * @ret rc Return status code - */ - int ( * read ) ( struct i2c_interface *i2c, struct i2c_device *i2cdev, - unsigned int offset, uint8_t *data, - unsigned int len ); - /** - * Write data to I2C device - * - * @v i2c I2C interface - * @v i2cdev I2C device - * @v offset Starting offset within the device - * @v data Data buffer - * @v len Length of data buffer - * @ret rc Return status code - */ - int ( * write ) ( struct i2c_interface *i2c, struct i2c_device *i2cdev, - unsigned int offset, const uint8_t *data, - unsigned int len ); -}; - -/** A bit-bashing I2C interface - * - * This provides a standardised way to construct I2C buses via a - * bit-bashing interface. - */ -struct i2c_bit_basher { - /** I2C interface */ - struct i2c_interface i2c; - /** Bit-bashing interface */ - struct bit_basher basher; -}; - -/** Ten-bit address marker - * - * This value is ORed with the I2C device address to indicate a - * ten-bit address format on the bus. - */ -#define I2C_TENBIT_ADDRESS 0x7800 - -/** An I2C write command */ -#define I2C_WRITE 0 - -/** An I2C read command */ -#define I2C_READ 1 - -/** Bit indices used for I2C bit-bashing interface */ -enum { - /** Serial clock */ - I2C_BIT_SCL = 0, - /** Serial data */ - I2C_BIT_SDA, -}; - -/** Delay required for bit-bashing operation */ -#define I2C_UDELAY 5 - -/** Maximum number of cycles to use when attempting a bus reset */ -#define I2C_RESET_MAX_CYCLES 32 - -/** - * Check presence of I2C device - * - * @v i2c I2C interface - * @v i2cdev I2C device - * @ret rc Return status code - * - * Checks for the presence of the device on the I2C bus by attempting - * a zero-length write. - */ -static inline int i2c_check_presence ( struct i2c_interface *i2c, - struct i2c_device *i2cdev ) { - return i2c->write ( i2c, i2cdev, 0, NULL, 0 ); -} - -extern int init_i2c_bit_basher ( struct i2c_bit_basher *i2cbit, - struct bit_basher_operations *bash_op ); - -/** - * Initialise generic I2C EEPROM device - * - * @v i2cdev I2C device - */ -static inline __always_inline void -init_i2c_eeprom ( struct i2c_device *i2cdev, unsigned int dev_addr ) { - i2cdev->dev_addr = dev_addr; - i2cdev->dev_addr_len = 1; - i2cdev->word_addr_len = 1; -} - -/** - * Initialise Atmel AT24C11 - * - * @v i2cdev I2C device - */ -static inline __always_inline void -init_at24c11 ( struct i2c_device *i2cdev ) { - /* This chip has no device address; it must be the only chip - * on the bus. The word address is contained entirely within - * the device address field. - */ - i2cdev->dev_addr = 0; - i2cdev->dev_addr_len = 1; - i2cdev->word_addr_len = 0; -} - -#endif /* _GPXE_I2C_H */ |