/** @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; }