retire i2c library, move its implementation to CirrusLogic5430Dxe

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8085 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
vanjeff 2009-04-15 03:25:39 +00:00
parent 88f2bdb51d
commit 2e2938977f
8 changed files with 8 additions and 557 deletions

View File

@ -38,7 +38,7 @@
#include <Library/UefiBootServicesTableLib.h> #include <Library/UefiBootServicesTableLib.h>
#include <Library/BaseMemoryLib.h> #include <Library/BaseMemoryLib.h>
#include <Library/DevicePathLib.h> #include <Library/DevicePathLib.h>
#include <Library/DxeI2cLib.h> #include <Library/TimerLib.h>
#include <IndustryStandard/Pci22.h> #include <IndustryStandard/Pci22.h>
// //

View File

@ -9,7 +9,7 @@
# requires both the UGA Draw and the UGA I/O Protocol. Please refer to Microsoft's # requires both the UGA Draw and the UGA I/O Protocol. Please refer to Microsoft's
# documentation on UGA for details on how to write a UGA driver that is able # documentation on UGA for details on how to write a UGA driver that is able
# to function both in the EFI pre-boot environment and from the OS runtime. # to function both in the EFI pre-boot environment and from the OS runtime.
# Copyright (c) 2006 - 2007, Intel Corporation # Copyright (c) 2006 - 2009, Intel Corporation
# #
# All rights reserved. This program and the accompanying materials # All rights reserved. This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License # are licensed and made available under the terms and conditions of the BSD License
@ -49,6 +49,8 @@
CirrusLogic5430.c CirrusLogic5430.c
CirrusLogic5430.h CirrusLogic5430.h
Edid.c Edid.c
CirrusLogic5430I2c.h
CirrusLogic5430I2c.c
[Packages] [Packages]
MdePkg/MdePkg.dec MdePkg/MdePkg.dec
@ -62,7 +64,7 @@
DebugLib DebugLib
BaseMemoryLib BaseMemoryLib
DevicePathLib DevicePathLib
DxeI2cLib TimerLib
[Protocols] [Protocols]
gEfiDriverSupportedEfiVersionProtocolGuid # PROTOCOL ALWAYS_PRODUCED gEfiDriverSupportedEfiVersionProtocolGuid # PROTOCOL ALWAYS_PRODUCED

View File

@ -13,6 +13,7 @@
**/ **/
#include "CirrusLogic5430.h" #include "CirrusLogic5430.h"
#include "CirrusLogic5430I2c.h"
// //
// EDID block // EDID block

View File

@ -1,64 +0,0 @@
/** @file
I2c Bus byte read/write functions.
Copyright (c) 2008, Intel Corporation
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#include <Protocol/PciIo.h>
/**
Read one byte data on I2C Bus.
Read one byte data from the slave device connectet to I2C Bus.
If Data is NULL, then ASSERT().
@param PciIo The pointer to PCI_IO_PROTOCOL.
@param DeviceAddress Slave device's address.
@param RegisterAddress The register address on slave device.
@param Data The pointer to returned data if EFI_SUCCESS returned.
@retval EFI_DEVICE_ERROR
@retval EFI_SUCCESS
**/
EFI_STATUS
EFIAPI
I2cReadByte (
EFI_PCI_IO_PROTOCOL *PciIo,
UINT8 DeviceAddress,
UINT8 RegisterAddress,
UINT8 *Data
);
/**
Write one byte data onto I2C Bus.
Write one byte data to the slave device connectet to I2C Bus.
If Data is NULL, then ASSERT().
@param PciIo The pointer to PCI_IO_PROTOCOL.
@param DeviceAddress Slave device's address.
@param RegisterAddress The register address on slave device.
@param Data The pointer to write data.
@retval EFI_DEVICE_ERROR
@retval EFI_SUCCESS
**/
EFI_STATUS
EFIAPI
I2cWriteByte (
EFI_PCI_IO_PROTOCOL *PciIo,
UINT8 DeviceAddress,
UINT8 RegisterAddress,
UINT8 *Data
);

View File

@ -1,436 +0,0 @@
/** @file
I2C Bus Libary implementation upon CirrusLogic.
Copyright (c) 2008, Intel Corporation
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#include <PiDxe.h>
#include <Library/DxeI2cLib.h>
#include <Library/TimerLib.h>
#include <Library/DebugLib.h>
#define SEQ_ADDRESS_REGISTER 0x3c4
#define SEQ_DATA_REGISTER 0x3c5
#define I2C_CONTROL 0x08
#define I2CDAT_IN 7
#define I2CCLK_IN 2
#define I2CDAT_OUT 1
#define I2CCLK_OUT 0
#define I2C_BUS_SPEED 100 //100kbps
/**
PCI I/O byte write function.
@param PciIo The pointer to PCI_IO_PROTOCOL.
@param Address The bit map of I2C Data or I2C Clock pins.
@param Data The date to write.
**/
VOID
I2cOutb (
EFI_PCI_IO_PROTOCOL *PciIo,
UINTN Address,
UINT8 Data
)
{
PciIo->Io.Write (
PciIo,
EfiPciIoWidthUint8,
EFI_PCI_IO_PASS_THROUGH_BAR,
Address,
1,
&Data
);
}
/**
PCI I/O byte read function.
@param PciIo The pointer to PCI_IO_PROTOCOL.
@param Address The bit map of I2C Data or I2C Clock pins.
return byte value read from PCI I/O space.
**/
UINT8
I2cInb (
EFI_PCI_IO_PROTOCOL *PciIo,
UINTN Address
)
{
UINT8 Data;
PciIo->Io.Read (
PciIo,
EfiPciIoWidthUint8,
EFI_PCI_IO_PASS_THROUGH_BAR,
Address,
1,
&Data
);
return Data;
}
/**
Read status of I2C Data and I2C Clock Pins.
@param PciIo The pointer to PCI_IO_PROTOCOL.
@param Blt The bit map of I2C Data or I2C Clock pins.
@retval 0 Low on I2C Data or I2C Clock Pin.
@retval 1 High on I2C Data or I2C Clock Pin.
**/
UINT8
I2cPinRead (
EFI_PCI_IO_PROTOCOL *PciIo,
UINT8 Bit
)
{
I2cOutb (PciIo, SEQ_ADDRESS_REGISTER, I2C_CONTROL);
return (UINT8) ((I2cInb (PciIo, SEQ_DATA_REGISTER) >> Bit ) & 0xfe);
}
/**
Set/Clear I2C Data and I2C Clock Pins.
@param PciIo The pointer to PCI_IO_PROTOCOL.
@param Blt The bit map to controller I2C Data or I2C Clock pins.
@param Value 1 or 0 stands for Set or Clear I2C Data and I2C Clock Pins.
**/
VOID
I2cPinWrite (
EFI_PCI_IO_PROTOCOL *PciIo,
UINT8 Bit,
UINT8 Value
)
{
UINT8 Byte;
I2cOutb (PciIo, SEQ_ADDRESS_REGISTER, I2C_CONTROL);
Byte = (UINT8) (I2cInb (PciIo, SEQ_DATA_REGISTER) & (UINT8) ~(1 << Bit)) ;
Byte = (UINT8) (Byte | ((Value & 0x01) << Bit));
I2cOutb (PciIo, SEQ_DATA_REGISTER, (UINT8) (Byte | 0x40));
return;
}
/**
Read/write delay acoording to I2C Bus Speed.
**/
VOID
I2cDelay (
VOID
)
{
MicroSecondDelay (1000 / I2C_BUS_SPEED);
}
/**
Write a 8-bit data onto I2C Data Pin.
@param PciIo The pointer to PCI_IO_PROTOCOL.
@param Data The byte data to write.
**/
VOID
I2cSendByte (
EFI_PCI_IO_PROTOCOL *PciIo,
UINT8 Data
)
{
UINTN Index;
//
// Send byte data onto I2C Bus
//
for (Index = 0; Index < 8; Index --) {
I2cPinWrite (PciIo, I2CDAT_OUT, (UINT8) (Data >> (7 - Index)));
I2cPinWrite (PciIo, I2CCLK_OUT, 1);
I2cDelay ();
I2cPinWrite (PciIo, I2CCLK_OUT, 0);
}
}
/**
Read a 8-bit data from I2C Data Pin.
@param PciIo The pointer to PCI_IO_PROTOCOL.
Return the byte data read from I2C Data Pin.
**/
UINT8
I2cReceiveByte (
EFI_PCI_IO_PROTOCOL *PciIo
)
{
UINT8 Data;
UINTN Index;
Data = 0;
//
// Read byte data from I2C Bus
//
for (Index = 0; Index < 8; Index --) {
I2cPinWrite (PciIo, I2CCLK_OUT, 1);
I2cDelay ();
Data = (UINT8) (Data << 1);
Data = (UINT8) (Data | I2cPinRead (PciIo, I2CDAT_IN));
I2cPinWrite (PciIo, I2CCLK_OUT, 0);
}
return Data;
}
/**
Receive an ACK signal from I2C Bus.
@param PciIo The pointer to PCI_IO_PROTOCOL.
**/
BOOLEAN
I2cWaitAck (
EFI_PCI_IO_PROTOCOL *PciIo
)
{
//
// Wait for ACK signal
//
I2cPinWrite (PciIo, I2CDAT_OUT, 1);
I2cPinWrite (PciIo, I2CCLK_OUT, 1);
I2cDelay ();
if (I2cPinRead (PciIo, I2CDAT_IN) == 0) {
I2cPinWrite (PciIo, I2CDAT_OUT, 1);
return TRUE;
} else {
return FALSE;
}
}
/**
Send an ACK signal onto I2C Bus.
@param PciIo The pointer to PCI_IO_PROTOCOL.
**/
VOID
I2cSendAck (
EFI_PCI_IO_PROTOCOL *PciIo
)
{
I2cPinWrite (PciIo, I2CCLK_OUT, 1);
I2cPinWrite (PciIo, I2CDAT_OUT, 1);
I2cPinWrite (PciIo, I2CDAT_OUT, 0);
I2cPinWrite (PciIo, I2CCLK_OUT, 0);
}
/**
Start a I2C transfer on I2C Bus.
@param PciIo The pointer to PCI_IO_PROTOCOL.
**/
VOID
I2cStart (
EFI_PCI_IO_PROTOCOL *PciIo
)
{
//
// Init CLK and DAT pins
//
I2cPinWrite (PciIo, I2CCLK_OUT, 1);
I2cPinWrite (PciIo, I2CDAT_OUT, 1);
//
// Start a I2C transfer, set SDA low from high, when SCL is high
//
I2cPinWrite (PciIo, I2CDAT_OUT, 0);
I2cPinWrite (PciIo, I2CCLK_OUT, 0);
}
/**
Stop a I2C transfer on I2C Bus.
@param PciIo The pointer to PCI_IO_PROTOCOL.
**/
VOID
I2cStop (
EFI_PCI_IO_PROTOCOL *PciIo
)
{
//
// Stop a I2C transfer, set SDA high from low, when SCL is high
//
I2cPinWrite (PciIo, I2CDAT_OUT, 0);
I2cPinWrite (PciIo, I2CCLK_OUT, 1);
I2cPinWrite (PciIo, I2CDAT_OUT, 1);
}
/**
Read one byte data on I2C Bus.
Read one byte data from the slave device connectet to I2C Bus.
If Data is NULL, then ASSERT().
@param PciIo The pointer to PCI_IO_PROTOCOL.
@param DeviceAddress Slave device's address.
@param RegisterAddress The register address on slave device.
@param Data The pointer to returned data if EFI_SUCCESS returned.
@retval EFI_DEVICE_ERROR
@retval EFI_SUCCESS
**/
EFI_STATUS
EFIAPI
I2cReadByte (
EFI_PCI_IO_PROTOCOL *PciIo,
UINT8 DeviceAddress,
UINT8 RegisterAddress,
UINT8 *Data
)
{
ASSERT (Data != NULL);
//
// Start I2C transfer
//
I2cStart (PciIo);
//
// Send slave address with enabling write flag
//
I2cSendByte (PciIo, (UINT8) (DeviceAddress & 0xfe));
//
// Wait for ACK signal
//
if (I2cWaitAck (PciIo) == FALSE) {
return EFI_DEVICE_ERROR;
}
//
// Send register address
//
I2cSendByte (PciIo, RegisterAddress);
//
// Wait for ACK signal
//
if (I2cWaitAck (PciIo) == FALSE) {
return EFI_DEVICE_ERROR;
}
//
// Send slave address with enabling read flag
//
I2cSendByte (PciIo, (UINT8) (DeviceAddress | 0x01));
//
// Wait for ACK signal
//
if (I2cWaitAck (PciIo) == FALSE) {
return EFI_DEVICE_ERROR;
}
//
// Read byte data from I2C Bus
//
*Data = I2cReceiveByte (PciIo);
//
// Send ACK signal onto I2C Bus
//
I2cSendAck (PciIo);
//
// Stop a I2C transfer
//
I2cStop (PciIo);
return EFI_SUCCESS;
}
/**
Write one byte data onto I2C Bus.
Write one byte data to the slave device connectet to I2C Bus.
If Data is NULL, then ASSERT().
@param PciIo The pointer to PCI_IO_PROTOCOL.
@param DeviceAddress Slave device's address.
@param RegisterAddress The register address on slave device.
@param Data The pointer to write data.
@retval EFI_DEVICE_ERROR
@retval EFI_SUCCESS
**/
EFI_STATUS
EFIAPI
I2cWriteByte (
EFI_PCI_IO_PROTOCOL *PciIo,
UINT8 DeviceAddress,
UINT8 RegisterAddress,
UINT8 *Data
)
{
ASSERT (Data != NULL);
I2cStart (PciIo);
//
// Send slave address with enabling write flag
//
I2cSendByte (PciIo, (UINT8) (DeviceAddress & 0xfe));
//
// Wait for ACK signal
//
if (I2cWaitAck (PciIo) == FALSE) {
return EFI_DEVICE_ERROR;
}
//
// Send register address
//
I2cSendByte (PciIo, RegisterAddress);
//
// Wait for ACK signal
//
if (I2cWaitAck (PciIo) == FALSE) {
return EFI_DEVICE_ERROR;
}
//
// Send byte data onto I2C Bus
//
I2cSendByte (PciIo, *Data);
//
// Wait for ACK signal
//
if (I2cWaitAck (PciIo) == FALSE) {
return EFI_DEVICE_ERROR;
}
//
// Stop a I2C transfer
//
I2cStop (PciIo);
return EFI_SUCCESS;
}

View File

@ -1,45 +0,0 @@
#/** @file
# DxeI2c Library implementation on CirrusLogic.
#
# Provides I2c Bus byte read/write functions upon CirrusLogic5430.
# Copyright (c) 2008, Intel Corporation.
#
# All rights reserved. This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
# which accompanies this distribution. The full text of the license may be found at
# http://opensource.org/licenses/bsd-license.php
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
#
#**/
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = CirrusLogic5430I2cLib
FILE_GUID = 0C86ADD7-ED2A-4b9a-ABC9-D932E8AA349B
MODULE_TYPE = DXE_DRIVER
VERSION_STRING = 1.0
LIBRARY_CLASS = DxeI2cLib
EDK_RELEASE_VERSION = 0x00020000
EFI_SPECIFICATION_VERSION = 0x00020000
#
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
#
[Sources.common]
CirrusLogic5430I2cLib.c
[Packages]
MdePkg/MdePkg.dec
OptionRomPkg/OptionRomPkg.dec
[LibraryClasses]
TimerLib
DebugLib

View File

@ -6,7 +6,7 @@
# Option ROM image for all CPU architectures, including EBC target. # Option ROM image for all CPU architectures, including EBC target.
# A single driver can support mixes of EFI 1.1, UEFI 2.0 and UEFI 2.1. # A single driver can support mixes of EFI 1.1, UEFI 2.0 and UEFI 2.1.
# #
# Copyright (c) 2007 - 2008, Intel Corporation. # Copyright (c) 2007 - 2009, Intel Corporation.
# #
# All rights reserved. This program and the accompanying materials # All rights reserved. This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License # are licensed and made available under the terms and conditions of the BSD License
@ -24,12 +24,6 @@
PACKAGE_GUID = AA3865E8-7F30-4f59-8696-99F560101852 PACKAGE_GUID = AA3865E8-7F30-4f59-8696-99F560101852
PACKAGE_VERSION = 0.1 PACKAGE_VERSION = 0.1
[Includes.common]
Include
[LibraryClasses.common]
DxeI2cLib|Include/Library/DxeI2cLib.h
[PcdsFeatureFlag.common] [PcdsFeatureFlag.common]
gOptionRomPkgTokenSpaceGuid.PcdSupportScsiPassThru|TRUE|BOOLEAN|0x00010001 gOptionRomPkgTokenSpaceGuid.PcdSupportScsiPassThru|TRUE|BOOLEAN|0x00010001
gOptionRomPkgTokenSpaceGuid.PcdSupportExtScsiPassThru|TRUE|BOOLEAN|0x00010002 gOptionRomPkgTokenSpaceGuid.PcdSupportExtScsiPassThru|TRUE|BOOLEAN|0x00010002

View File

@ -6,7 +6,7 @@
# Option ROM image for all CPU architectures, including EBC target. # Option ROM image for all CPU architectures, including EBC target.
# A single driver can support mixes of EFI 1.1, UEFI 2.0 and UEFI 2.1. # A single driver can support mixes of EFI 1.1, UEFI 2.0 and UEFI 2.1.
# #
# Copyright (c) 2007 - 2008, Intel Corporation # Copyright (c) 2007 - 2009, Intel Corporation
# #
# All rights reserved. This program and the accompanying materials # All rights reserved. This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License # are licensed and made available under the terms and conditions of the BSD License
@ -55,7 +55,6 @@
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
DxeI2cLib|OptionRomPkg/Library/CirrusLogicI2cLib/CirrusLogic5430I2cLib.inf
################################################################################ ################################################################################
# #