| 1. Introduction | |
| --------------- | |
| **MvI2cDxe** is a driver supporting I2C controller on Marvell SOCs boards. | |
| It is connected through protocols to generic UEFI I2C stack, which exposes | |
| IO functionality to drivers of specific devices on I2C bus. | |
| 2. MvI2cDxe driver design | |
| -------------------------- | |
| MvI2cDxe produces several protocols from generic I2C stack: | |
| - EFI_I2C_MASTER_PROTOCOL, | |
| - EFI_I2C_ENUMERATE_PROTOCOL, | |
| - EFI_I2C_BUS_CONFIGURATION_MANAGEMENT_PROTOCOL | |
| - general-purpose EFI_DRIVER_BINDING_PROTOCOL. | |
| 2.1 EFI_I2C_MASTER_PROTOCOL | |
| --------------------------- | |
| This is the most important protocol produced by MvI2cDxe. Following functions | |
| are implemented: | |
| /// | |
| /// Reset the I2C host controller. | |
| /// | |
| EFI_I2C_MASTER_PROTOCOL_RESET Reset; | |
| /// | |
| /// Start an I2C transaction in master mode on the host controller. | |
| /// | |
| EFI_I2C_MASTER_PROTOCOL_START_REQUEST StartRequest; | |
| StartRequest and Reset functions are used by I2cHost. | |
| These should **not** be used by I2C device drivers - required | |
| synchronization is not provided. Instead, members of EFI_I2C_IO_PROTOCOL | |
| should be used. | |
| 2.2 EFI_I2C_BUS_CONFIGURATION_MANAGEMENT_PROTOCOL | |
| ------------------------------------------------- | |
| The only function exposed via this protocol is MvI2cEnableConf. It is | |
| required by I2C stack in order to allow changing I2C bus configuration from | |
| device drivers. | |
| 2.3 EFI_I2C_ENUMERATE_PROTOCOL | |
| ------------------------------ | |
| Provides Enumerate function, which is used by I2cBus code as an iterator over | |
| devices on I2C bus. | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_I2C_ENUMERATE_PROTOCOL_ENUMERATE) ( | |
| IN CONST EFI_I2C_ENUMERATE_PROTOCOL *This, | |
| IN OUT CONST EFI_I2C_DEVICE **Device | |
| ); | |
| /// | |
| /// Traverse the set of I2C devices on an I2C bus. This routine | |
| /// returns the next I2C device on an I2C bus. | |
| /// | |
| EFI_I2C_ENUMERATE_PROTOCOL_ENUMERATE Enumerate; | |
| MvI2cDevice creates EFI_I2C_DEVICE structure for every device on the bus. | |
| Due to the fact that hardware-based I2C enumeration isn't safe, information | |
| about attached devices should be provided through PCDs. After EFI_I2C_DEVICE | |
| structure is created and filled properly, it is returned to I2cBus. It is | |
| followed by attachment of I2C device driver. | |