IgfxI2c.c 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /** @file
  2. Intel Graphics I2C Bus I/O
  3. Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #include <Uefi.h>
  7. #include <Library/BaseLib.h>
  8. #include <Library/IoLib.h>
  9. #include <Library/PciLib.h>
  10. #include <IgfxI2c.h>
  11. /**
  12. Returns the GPIO pin pair to use for the given DDC channel
  13. @param[in] Channel - The DDC I2C channel.
  14. @param[out] DdcBusPinPair - The GPIO pin pair for the given DDC channel.
  15. @retval EFI_SUCCESS - The GPIO pin pair was successfully determined
  16. @retval EFI_INVALID_PARAMETER - The given DDC I2C channel does not exist.
  17. @retval EFI_UNSUPPORTED - The platform is using a PCH that is not supported yet.
  18. **/
  19. EFI_STATUS
  20. GetGmbusBusPinPair (
  21. IN IGFX_I2C_CHANNEL Channel,
  22. OUT UINT8 *DdcBusPinPair
  23. )
  24. {
  25. PCH_TYPE PchType;
  26. *DdcBusPinPair = 0;
  27. PchType = GetPchType ();
  28. switch (PchType) {
  29. // The PCH design lineage from SkyLake, KabyLake, AmberLake, & early CoffeeLake
  30. case PchTypeSptLp:
  31. case PchTypeSptH:
  32. case PchTypeKbpH:
  33. switch (Channel) {
  34. case EnumDdcB:
  35. *DdcBusPinPair = V_KBL_PCH_HDMI_DDC_B_PIN_PAIR;
  36. return EFI_SUCCESS;
  37. case EnumDdcC:
  38. *DdcBusPinPair = V_KBL_PCH_HDMI_DDC_C_PIN_PAIR;
  39. return EFI_SUCCESS;
  40. case EnumDdcD:
  41. *DdcBusPinPair = V_KBL_PCH_HDMI_DDC_D_PIN_PAIR;
  42. return EFI_SUCCESS;
  43. default:
  44. return EFI_INVALID_PARAMETER;
  45. }
  46. break;
  47. // The PCH design lineage from newer CoffeeLake & WhiskeyLake
  48. case PchTypeCnlLp:
  49. case PchTypeCnlH:
  50. switch (Channel) {
  51. case EnumDdcB:
  52. *DdcBusPinPair = V_CNL_PCH_HDMI_DDC_B_PIN_PAIR;
  53. return EFI_SUCCESS;
  54. case EnumDdcC:
  55. *DdcBusPinPair = V_CNL_PCH_HDMI_DDC_C_PIN_PAIR;
  56. return EFI_SUCCESS;
  57. case EnumDdcD:
  58. *DdcBusPinPair = V_CNL_PCH_HDMI_DDC_D_PIN_PAIR;
  59. return EFI_SUCCESS;
  60. case EnumDdcF:
  61. *DdcBusPinPair = V_CNL_PCH_HDMI_DDC_F_PIN_PAIR;
  62. return EFI_SUCCESS;
  63. default:
  64. return EFI_INVALID_PARAMETER;
  65. }
  66. break;
  67. }
  68. return EFI_UNSUPPORTED;
  69. }