From: Paulo Zanoni paulo.r.zanoni@intel.com
This function returns the VIC of the mode. This value can be used when creating AVI InfoFrames.
Cc: Thierry Reding thierry.reding@avionic-design.de Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=50371 Signed-off-by: Paulo Zanoni paulo.r.zanoni@intel.com --- drivers/gpu/drm/drm_edid.c | 19 +++++++++++++++++++ include/drm/drm_crtc.h | 1 + 2 files changed, 20 insertions(+)
Since drm-intel-next-queued is too old for this patch, I am rebasing it against drm-next and splitting into 2 patches: one drm-only and the other i915-only, so I imagine the first will be merged by Dave and the second by Daniel.
New version: - Based on Dave's drm-next - Fix function name inside the comments - Remove the i915 chunk - Constification of other functions is no more required as they are already const here.
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 1648200..011bd4f 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -2079,3 +2079,22 @@ int drm_add_modes_noedid(struct drm_connector *connector, return num_modes; } EXPORT_SYMBOL(drm_add_modes_noedid); + +/** + * drm_mode_cea_vic - return the CEA-861 VIC of a given mode + * @mode: mode + * + * RETURNS: + * The VIC number, 0 in case it's not a CEA-861 mode. + */ +uint8_t drm_mode_cea_vic(const struct drm_display_mode *mode) +{ + uint8_t i; + + for (i = 0; i < drm_num_cea_modes; i++) + if (drm_mode_equal(mode, &edid_cea_modes[i])) + return i + 1; + + return 0; +} +EXPORT_SYMBOL(drm_mode_cea_vic); diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index c0635b7..3538eda 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -1055,6 +1055,7 @@ extern struct drm_display_mode *drm_gtf_mode_complex(struct drm_device *dev, int GTF_2C, int GTF_K, int GTF_2J); extern int drm_add_modes_noedid(struct drm_connector *connector, int hdisplay, int vdisplay); +extern uint8_t drm_mode_cea_vic(const struct drm_display_mode *mode);
extern int drm_edid_header_is_valid(const u8 *raw_edid); extern bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid);
From: Paulo Zanoni paulo.r.zanoni@intel.com
We currently set "0" as the VIC value of the AVI InfoFrames. According to the specs this should be fine and work for every mode, so to my point of view we can't consider the current behavior as a bug. The problem is that we recently received a bug report (Kernel bug #50371) from a user that has an AV receiver that gives a black screen for any mode with VIC set to 0.
So in order to make at least some modes work for him, this patch sets the correct VIC number when sending AVI InfoFrames.
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=50371 Signed-off-by: Paulo Zanoni paulo.r.zanoni@intel.com --- drivers/gpu/drm/i915/intel_hdmi.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c index 1dcfd5b..eaf70d6 100644 --- a/drivers/gpu/drm/i915/intel_hdmi.c +++ b/drivers/gpu/drm/i915/intel_hdmi.c @@ -340,6 +340,8 @@ static void intel_hdmi_set_avi_infoframe(struct drm_encoder *encoder, if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK) avi_if.body.avi.YQ_CN_PR |= DIP_AVI_PR_2;
+ avi_if.body.avi.VIC = drm_mode_cea_vic(adjusted_mode); + intel_set_infoframe(encoder, &avi_if); }
On Fri, Nov 23, 2012 at 12:09:27PM -0200, Paulo Zanoni wrote:
From: Paulo Zanoni paulo.r.zanoni@intel.com
We currently set "0" as the VIC value of the AVI InfoFrames. According to the specs this should be fine and work for every mode, so to my point of view we can't consider the current behavior as a bug. The problem is that we recently received a bug report (Kernel bug #50371) from a user that has an AV receiver that gives a black screen for any mode with VIC set to 0.
So in order to make at least some modes work for him, this patch sets the correct VIC number when sending AVI InfoFrames.
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=50371 Signed-off-by: Paulo Zanoni paulo.r.zanoni@intel.com
Queued for -next, thanks for the patch. -Daniel
On Fri, Nov 23, 2012 at 12:09:26PM -0200, Paulo Zanoni wrote:
From: Paulo Zanoni paulo.r.zanoni@intel.com
This function returns the VIC of the mode. This value can be used when creating AVI InfoFrames.
Cc: Thierry Reding thierry.reding@avionic-design.de Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=50371 Signed-off-by: Paulo Zanoni paulo.r.zanoni@intel.com
drivers/gpu/drm/drm_edid.c | 19 +++++++++++++++++++ include/drm/drm_crtc.h | 1 + 2 files changed, 20 insertions(+)
Since drm-intel-next-queued is too old for this patch, I am rebasing it against drm-next and splitting into 2 patches: one drm-only and the other i915-only, so I imagine the first will be merged by Dave and the second by Daniel.
New version:
- Based on Dave's drm-next
- Fix function name inside the comments
- Remove the i915 chunk
- Constification of other functions is no more required as they are already const here.
Looks good to me:
Reviewed-by: Thierry Reding thierry.reding@avionic-design.de
On Fri, Nov 23, 2012 at 03:11:52PM +0100, Thierry Reding wrote:
On Fri, Nov 23, 2012 at 12:09:26PM -0200, Paulo Zanoni wrote:
From: Paulo Zanoni paulo.r.zanoni@intel.com
This function returns the VIC of the mode. This value can be used when creating AVI InfoFrames.
Cc: Thierry Reding thierry.reding@avionic-design.de Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=50371 Signed-off-by: Paulo Zanoni paulo.r.zanoni@intel.com
drivers/gpu/drm/drm_edid.c | 19 +++++++++++++++++++ include/drm/drm_crtc.h | 1 + 2 files changed, 20 insertions(+)
Since drm-intel-next-queued is too old for this patch, I am rebasing it against drm-next and splitting into 2 patches: one drm-only and the other i915-only, so I imagine the first will be merged by Dave and the second by Daniel.
New version:
- Based on Dave's drm-next
- Fix function name inside the comments
- Remove the i915 chunk
- Constification of other functions is no more required as they are already const here.
Looks good to me:
Reviewed-by: Thierry Reding thierry.reding@avionic-design.de
Merged to drm-intel-next for 3.8 with Dave's irc-ack. -Daniel
dri-devel@lists.freedesktop.org