drm/i915/icl: Map VBT DDC Pin to BSpec DDC Pin
On ICL we need to map VBT DDC Pin to BSpec DDC Pin. Adding ICL Pin Values. According to VBT Block 2 (General Bytes Definition) DDC Bus +----------+-----------+--------------------+ | DDI Type | VBT Value | BSpec Mapped Value | +----------+-----------+--------------------+ | DDI-A | 0x1 | 0x1 | | DDI-B | 0x2 | 0x2 | | PORT-1 | 0x4 | 0x9 | | PORT-2 | 0x5 | 0xA | | PORT-3 | 0x6 | 0xB | | PORT-4 | 0x7 | 0xC | +----------+-----------+--------------------+ Cc: James Ausmus <james.ausmus@intel.com> Cc: Jani Nikula <jani.nikula@intel.com> Cc: Anusha Srivatsa <anusha.srivatsa@intel.com> Cc: Clinton Taylor <clinton.a.taylor@intel.com> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> Cc: Paulo Zanoni <paulo.r.zanoni@intel.com> Reviewed-by: James Ausmus <james.ausmus@intel.com> Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> [Paulo: checkpatch fixes.] Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20180522002558.29262-9-paulo.r.zanoni@intel.com
This commit is contained in:
Родитель
a2bc69a1a9
Коммит
3937eb1a07
|
@ -1259,18 +1259,37 @@ static const u8 cnp_ddc_pin_map[] = {
|
|||
[DDC_BUS_DDI_F] = GMBUS_PIN_3_BXT, /* sic */
|
||||
};
|
||||
|
||||
static const u8 icp_ddc_pin_map[] = {
|
||||
[ICL_DDC_BUS_DDI_A] = GMBUS_PIN_1_BXT,
|
||||
[ICL_DDC_BUS_DDI_B] = GMBUS_PIN_2_BXT,
|
||||
[ICL_DDC_BUS_PORT_1] = GMBUS_PIN_9_TC1_ICP,
|
||||
[ICL_DDC_BUS_PORT_2] = GMBUS_PIN_10_TC2_ICP,
|
||||
[ICL_DDC_BUS_PORT_3] = GMBUS_PIN_11_TC3_ICP,
|
||||
[ICL_DDC_BUS_PORT_4] = GMBUS_PIN_12_TC4_ICP,
|
||||
};
|
||||
|
||||
static u8 map_ddc_pin(struct drm_i915_private *dev_priv, u8 vbt_pin)
|
||||
{
|
||||
if (HAS_PCH_CNP(dev_priv)) {
|
||||
if (vbt_pin < ARRAY_SIZE(cnp_ddc_pin_map)) {
|
||||
return cnp_ddc_pin_map[vbt_pin];
|
||||
} else {
|
||||
DRM_DEBUG_KMS("Ignoring alternate pin: VBT claims DDC pin %d, which is not valid for this platform\n", vbt_pin);
|
||||
return 0;
|
||||
}
|
||||
const u8 *ddc_pin_map;
|
||||
int n_entries;
|
||||
|
||||
if (HAS_PCH_ICP(dev_priv)) {
|
||||
ddc_pin_map = icp_ddc_pin_map;
|
||||
n_entries = ARRAY_SIZE(icp_ddc_pin_map);
|
||||
} else if (HAS_PCH_CNP(dev_priv)) {
|
||||
ddc_pin_map = cnp_ddc_pin_map;
|
||||
n_entries = ARRAY_SIZE(cnp_ddc_pin_map);
|
||||
} else {
|
||||
/* Assuming direct map */
|
||||
return vbt_pin;
|
||||
}
|
||||
|
||||
return vbt_pin;
|
||||
if (vbt_pin < n_entries && ddc_pin_map[vbt_pin] != 0)
|
||||
return ddc_pin_map[vbt_pin];
|
||||
|
||||
DRM_DEBUG_KMS("Ignoring alternate pin: VBT claims DDC pin %d, which is not valid for this platform\n",
|
||||
vbt_pin);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
|
||||
|
|
|
@ -318,6 +318,12 @@ enum vbt_gmbus_ddi {
|
|||
DDC_BUS_DDI_C,
|
||||
DDC_BUS_DDI_D,
|
||||
DDC_BUS_DDI_F,
|
||||
ICL_DDC_BUS_DDI_A = 0x1,
|
||||
ICL_DDC_BUS_DDI_B,
|
||||
ICL_DDC_BUS_PORT_1 = 0x4,
|
||||
ICL_DDC_BUS_PORT_2,
|
||||
ICL_DDC_BUS_PORT_3,
|
||||
ICL_DDC_BUS_PORT_4,
|
||||
};
|
||||
|
||||
#define VBT_DP_MAX_LINK_RATE_HBR3 0
|
||||
|
|
Загрузка…
Ссылка в новой задаче