|
@@ -70,7 +70,7 @@ static struct intel_hdmi *intel_attached_hdmi(struct drm_connector *connector)
|
|
|
return enc_to_intel_hdmi(&intel_attached_encoder(connector)->base);
|
|
|
}
|
|
|
|
|
|
-static u32 g4x_infoframe_index(enum hdmi_infoframe_type type)
|
|
|
+static u32 g4x_infoframe_index(unsigned int type)
|
|
|
{
|
|
|
switch (type) {
|
|
|
case HDMI_INFOFRAME_TYPE_AVI:
|
|
@@ -85,7 +85,7 @@ static u32 g4x_infoframe_index(enum hdmi_infoframe_type type)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static u32 g4x_infoframe_enable(enum hdmi_infoframe_type type)
|
|
|
+static u32 g4x_infoframe_enable(unsigned int type)
|
|
|
{
|
|
|
switch (type) {
|
|
|
case HDMI_INFOFRAME_TYPE_AVI:
|
|
@@ -100,9 +100,11 @@ static u32 g4x_infoframe_enable(enum hdmi_infoframe_type type)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static u32 hsw_infoframe_enable(enum hdmi_infoframe_type type)
|
|
|
+static u32 hsw_infoframe_enable(unsigned int type)
|
|
|
{
|
|
|
switch (type) {
|
|
|
+ case DP_SDP_VSC:
|
|
|
+ return VIDEO_DIP_ENABLE_VSC_HSW;
|
|
|
case HDMI_INFOFRAME_TYPE_AVI:
|
|
|
return VIDEO_DIP_ENABLE_AVI_HSW;
|
|
|
case HDMI_INFOFRAME_TYPE_SPD:
|
|
@@ -118,10 +120,12 @@ static u32 hsw_infoframe_enable(enum hdmi_infoframe_type type)
|
|
|
static i915_reg_t
|
|
|
hsw_dip_data_reg(struct drm_i915_private *dev_priv,
|
|
|
enum transcoder cpu_transcoder,
|
|
|
- enum hdmi_infoframe_type type,
|
|
|
+ unsigned int type,
|
|
|
int i)
|
|
|
{
|
|
|
switch (type) {
|
|
|
+ case DP_SDP_VSC:
|
|
|
+ return HSW_TVIDEO_DIP_VSC_DATA(cpu_transcoder, i);
|
|
|
case HDMI_INFOFRAME_TYPE_AVI:
|
|
|
return HSW_TVIDEO_DIP_AVI_DATA(cpu_transcoder, i);
|
|
|
case HDMI_INFOFRAME_TYPE_SPD:
|
|
@@ -136,7 +140,7 @@ hsw_dip_data_reg(struct drm_i915_private *dev_priv,
|
|
|
|
|
|
static void g4x_write_infoframe(struct drm_encoder *encoder,
|
|
|
const struct intel_crtc_state *crtc_state,
|
|
|
- enum hdmi_infoframe_type type,
|
|
|
+ unsigned int type,
|
|
|
const void *frame, ssize_t len)
|
|
|
{
|
|
|
const uint32_t *data = frame;
|
|
@@ -191,7 +195,7 @@ static bool g4x_infoframe_enabled(struct drm_encoder *encoder,
|
|
|
|
|
|
static void ibx_write_infoframe(struct drm_encoder *encoder,
|
|
|
const struct intel_crtc_state *crtc_state,
|
|
|
- enum hdmi_infoframe_type type,
|
|
|
+ unsigned int type,
|
|
|
const void *frame, ssize_t len)
|
|
|
{
|
|
|
const uint32_t *data = frame;
|
|
@@ -251,7 +255,7 @@ static bool ibx_infoframe_enabled(struct drm_encoder *encoder,
|
|
|
|
|
|
static void cpt_write_infoframe(struct drm_encoder *encoder,
|
|
|
const struct intel_crtc_state *crtc_state,
|
|
|
- enum hdmi_infoframe_type type,
|
|
|
+ unsigned int type,
|
|
|
const void *frame, ssize_t len)
|
|
|
{
|
|
|
const uint32_t *data = frame;
|
|
@@ -309,7 +313,7 @@ static bool cpt_infoframe_enabled(struct drm_encoder *encoder,
|
|
|
|
|
|
static void vlv_write_infoframe(struct drm_encoder *encoder,
|
|
|
const struct intel_crtc_state *crtc_state,
|
|
|
- enum hdmi_infoframe_type type,
|
|
|
+ unsigned int type,
|
|
|
const void *frame, ssize_t len)
|
|
|
{
|
|
|
const uint32_t *data = frame;
|
|
@@ -368,7 +372,7 @@ static bool vlv_infoframe_enabled(struct drm_encoder *encoder,
|
|
|
|
|
|
static void hsw_write_infoframe(struct drm_encoder *encoder,
|
|
|
const struct intel_crtc_state *crtc_state,
|
|
|
- enum hdmi_infoframe_type type,
|
|
|
+ unsigned int type,
|
|
|
const void *frame, ssize_t len)
|
|
|
{
|
|
|
const uint32_t *data = frame;
|
|
@@ -377,6 +381,8 @@ static void hsw_write_infoframe(struct drm_encoder *encoder,
|
|
|
enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
|
|
|
i915_reg_t ctl_reg = HSW_TVIDEO_DIP_CTL(cpu_transcoder);
|
|
|
i915_reg_t data_reg;
|
|
|
+ int data_size = type == DP_SDP_VSC ?
|
|
|
+ VIDEO_DIP_VSC_DATA_SIZE : VIDEO_DIP_DATA_SIZE;
|
|
|
int i;
|
|
|
u32 val = I915_READ(ctl_reg);
|
|
|
|
|
@@ -392,7 +398,7 @@ static void hsw_write_infoframe(struct drm_encoder *encoder,
|
|
|
data++;
|
|
|
}
|
|
|
/* Write every possible data byte to force correct ECC calculation. */
|
|
|
- for (; i < VIDEO_DIP_DATA_SIZE; i += 4)
|
|
|
+ for (; i < data_size; i += 4)
|
|
|
I915_WRITE(hsw_dip_data_reg(dev_priv, cpu_transcoder,
|
|
|
type, i >> 2), 0);
|
|
|
mmiowb();
|