4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync I2C Bus implementation upon CirrusLogic.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2008 - 2009, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PCI I/O byte write function.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PciIo The pointer to PCI_IO_PROTOCOL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Address The bit map of I2C Data or I2C Clock pins.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Data The date to write.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PCI I/O byte read function.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PciIo The pointer to PCI_IO_PROTOCOL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Address The bit map of I2C Data or I2C Clock pins.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return byte value read from PCI I/O space.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Read status of I2C Data and I2C Clock Pins.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PciIo The pointer to PCI_IO_PROTOCOL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Blt The bit map of I2C Data or I2C Clock pins.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval 0 Low on I2C Data or I2C Clock Pin.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval 1 High on I2C Data or I2C Clock Pin.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync I2cOutb (PciIo, SEQ_ADDRESS_REGISTER, I2C_CONTROL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (UINT8) ((I2cInb (PciIo, SEQ_DATA_REGISTER) >> Bit ) & 0xfe);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Set/Clear I2C Data and I2C Clock Pins.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PciIo The pointer to PCI_IO_PROTOCOL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Blt The bit map to controller I2C Data or I2C Clock pins.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Value 1 or 0 stands for Set or Clear I2C Data and I2C Clock Pins.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync I2cOutb (PciIo, SEQ_ADDRESS_REGISTER, I2C_CONTROL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Byte = (UINT8) (I2cInb (PciIo, SEQ_DATA_REGISTER) & (UINT8) ~(1 << Bit)) ;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync I2cOutb (PciIo, SEQ_DATA_REGISTER, (UINT8) (Byte | 0x40));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Read/write delay acoording to I2C Bus Speed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Write a 8-bit data onto I2C Data Pin.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PciIo The pointer to PCI_IO_PROTOCOL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Data The byte data to write.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Send byte data onto I2C Bus
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync I2cPinWrite (PciIo, I2CDAT_OUT, (UINT8) (Data >> (7 - Index)));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Read a 8-bit data from I2C Data Pin.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PciIo The pointer to PCI_IO_PROTOCOL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Return the byte data read from I2C Data Pin.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Read byte data from I2C Bus
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Data = (UINT8) (Data | I2cPinRead (PciIo, I2CDAT_IN));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Receive an ACK signal from I2C Bus.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PciIo The pointer to PCI_IO_PROTOCOL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Wait for ACK signal
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Send an ACK signal onto I2C Bus.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PciIo The pointer to PCI_IO_PROTOCOL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Start a I2C transfer on I2C Bus.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PciIo The pointer to PCI_IO_PROTOCOL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Init CLK and DAT pins
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Start a I2C transfer, set SDA low from high, when SCL is high
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Stop a I2C transfer on I2C Bus.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PciIo The pointer to PCI_IO_PROTOCOL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Stop a I2C transfer, set SDA high from low, when SCL is high
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Read one byte data on I2C Bus.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Read one byte data from the slave device connectet to I2C Bus.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Data is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PciIo The pointer to PCI_IO_PROTOCOL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DeviceAddress Slave device's address.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param RegisterAddress The register address on slave device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Data The pointer to returned data if EFI_SUCCESS returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Start I2C transfer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Send slave address with enabling write flag
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync I2cSendByte (PciIo, (UINT8) (DeviceAddress & 0xfe));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Wait for ACK signal
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Send register address
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Wait for ACK signal
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Send slave address with enabling read flag
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync I2cSendByte (PciIo, (UINT8) (DeviceAddress | 0x01));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Wait for ACK signal
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Read byte data from I2C Bus
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Send ACK signal onto I2C Bus
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Stop a I2C transfer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Write one byte data onto I2C Bus.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Write one byte data to the slave device connectet to I2C Bus.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Data is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PciIo The pointer to PCI_IO_PROTOCOL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DeviceAddress Slave device's address.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param RegisterAddress The register address on slave device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Data The pointer to write data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Send slave address with enabling write flag
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync I2cSendByte (PciIo, (UINT8) (DeviceAddress & 0xfe));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Wait for ACK signal
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Send register address
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Wait for ACK signal
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Send byte data onto I2C Bus
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Wait for ACK signal
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Stop a I2C transfer