/** @file
Intel Graphics I2C Bus I/O
Copyright (c) 2022, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include
#include
#include
#include
#include
/**
Returns the GPIO pin pair to use for the given DDC channel
@param[in] Channel - The DDC I2C channel.
@param[out] DdcBusPinPair - The GPIO pin pair for the given DDC channel.
@retval EFI_SUCCESS - The GPIO pin pair was successfully determined
@retval EFI_INVALID_PARAMETER - The given DDC I2C channel does not exist.
@retval EFI_UNSUPPORTED - The platform is using a PCH that is not supported yet.
**/
EFI_STATUS
GetGmbusBusPinPair (
IN IGFX_I2C_CHANNEL Channel,
OUT UINT8 *DdcBusPinPair
)
{
PCH_TYPE PchType;
*DdcBusPinPair = 0;
PchType = GetPchType ();
switch (PchType) {
// The PCH design lineage from SkyLake, KabyLake, AmberLake, & early CoffeeLake
case PchTypeSptLp:
case PchTypeSptH:
case PchTypeKbpH:
switch (Channel) {
case EnumDdcB:
*DdcBusPinPair = V_KBL_PCH_HDMI_DDC_B_PIN_PAIR;
return EFI_SUCCESS;
case EnumDdcC:
*DdcBusPinPair = V_KBL_PCH_HDMI_DDC_C_PIN_PAIR;
return EFI_SUCCESS;
case EnumDdcD:
*DdcBusPinPair = V_KBL_PCH_HDMI_DDC_D_PIN_PAIR;
return EFI_SUCCESS;
default:
return EFI_INVALID_PARAMETER;
}
break;
// The PCH design lineage from newer CoffeeLake & WhiskeyLake
case PchTypeCnlLp:
case PchTypeCnlH:
switch (Channel) {
case EnumDdcB:
*DdcBusPinPair = V_CNL_PCH_HDMI_DDC_B_PIN_PAIR;
return EFI_SUCCESS;
case EnumDdcC:
*DdcBusPinPair = V_CNL_PCH_HDMI_DDC_C_PIN_PAIR;
return EFI_SUCCESS;
case EnumDdcD:
*DdcBusPinPair = V_CNL_PCH_HDMI_DDC_D_PIN_PAIR;
return EFI_SUCCESS;
case EnumDdcF:
*DdcBusPinPair = V_CNL_PCH_HDMI_DDC_F_PIN_PAIR;
return EFI_SUCCESS;
default:
return EFI_INVALID_PARAMETER;
}
break;
}
return EFI_UNSUPPORTED;
}