From patchwork Fri Feb 22 07:03:27 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 2175081 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by patchwork2.kernel.org (Postfix) with ESMTP id 1F683DFABD for ; Fri, 22 Feb 2013 07:35:21 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 08647E68EE for ; Thu, 21 Feb 2013 23:35:21 -0800 (PST) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.17.8]) by gabe.freedesktop.org (Postfix) with ESMTP id 1615CE611B for ; Thu, 21 Feb 2013 23:03:55 -0800 (PST) Received: from mailbox.adnet.avionic-design.de (mailbox.avionic-design.de [109.75.18.3]) by mrelayeu.kundenserver.de (node=mreu1) with ESMTP (Nemesis) id 0MAihL-1U1O9R3ul1-00BcJC; Fri, 22 Feb 2013 08:03:39 +0100 Received: from localhost (localhost [127.0.0.1]) by mailbox.adnet.avionic-design.de (Postfix) with ESMTP id 529B52A28176; Fri, 22 Feb 2013 08:03:38 +0100 (CET) X-Virus-Scanned: amavisd-new at avionic-design.de Received: from mailbox.adnet.avionic-design.de ([127.0.0.1]) by localhost (mailbox.avionic-design.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Uc8L4YCu7-c2; Fri, 22 Feb 2013 08:03:37 +0100 (CET) Received: from mailman.adnet.avionic-design.de (mailman.adnet.avionic-design.de [172.20.31.172]) by mailbox.adnet.avionic-design.de (Postfix) with ESMTP id 9D0062A2823E; Fri, 22 Feb 2013 08:03:32 +0100 (CET) Received: from localhost (avionic-0098.adnet.avionic-design.de [172.20.31.233]) by mailman.adnet.avionic-design.de (Postfix) with ESMTP id 2186F100936; Fri, 22 Feb 2013 08:03:28 +0100 (CET) From: Thierry Reding To: David Airlie Subject: [PATCH v5 5/9] drm: Add HDMI infoframe helpers Date: Fri, 22 Feb 2013 08:03:27 +0100 Message-Id: <1361516611-2517-6-git-send-email-thierry.reding@avionic-design.de> X-Mailer: git-send-email 1.8.1.2 In-Reply-To: <1361516611-2517-1-git-send-email-thierry.reding@avionic-design.de> References: <1361516611-2517-1-git-send-email-thierry.reding@avionic-design.de> X-Provags-ID: V02:K0:mx+moKHHHyHCJuEOWSubGyJc8FnsO83k6hMlfX9f2Ks TPWbL3QJcpOXP9no//1ALE0GrR/9hFnLWvpMVU40Q8ncfalVmj fd5Xq3Wbbrh/k/JeXvvtDxu4FISM7YH22LkNgodfAnd8C1LM23 nbuczgLcqooOjf5/CmgYUqUT58XVC22k5CzbL6WPw8qwzDfMrA Ks0cNWpMK+Ko0hmeuG0b5OshEcRL/1AoiWPB04ftB7xc0T77ed 3UwKEpIgoZIDUQqNhiNLsYPbnOud4BVzsbDxousQictaOQSPLT Z0efncV650AEY0Hmq1ekPOEoGzKGIKcjjlZ/9u1QGzKj8WLCEn MCUXo2gBOKlHjQNerfLuNB1TFSyiqttWjwyb2TAjBWgAuDvikO A+B8o+MjVAJ/m/tYsztmNzAlUdzvU8NryMSwMnZ2LbfmHT4iH5 Mvqs+ Cc: dri-devel@lists.freedesktop.org, Paulo Zanoni X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org Errors-To: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org Add a generic helper to fill in an HDMI AVI infoframe with data extracted from a DRM display mode. Signed-off-by: Thierry Reding --- Changes in v2: - reuse CEA modes defined in drm_edid_modes.h - don't use pixel aspect ratio for picture aspect Changes in v3: - move implementation into drm_edid.[ch] drivers/gpu/drm/Kconfig | 1 + drivers/gpu/drm/drm_edid.c | 33 +++++++++++++++++++++++++++++++++ include/drm/drm_edid.h | 6 ++++++ 3 files changed, 40 insertions(+) diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig index f8dae85..1e82882 100644 --- a/drivers/gpu/drm/Kconfig +++ b/drivers/gpu/drm/Kconfig @@ -7,6 +7,7 @@ menuconfig DRM tristate "Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)" depends on (AGP || AGP=n) && !EMULATED_CMPXCHG && MMU + select HDMI select I2C select I2C_ALGOBIT select DMA_SHARED_BUFFER diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 6995d2f..c194f4e 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -29,6 +29,7 @@ */ #include #include +#include #include #include #include @@ -2856,3 +2857,35 @@ int drm_add_modes_noedid(struct drm_connector *connector, return num_modes; } EXPORT_SYMBOL(drm_add_modes_noedid); + +/** + * drm_hdmi_avi_infoframe_from_display_mode() - fill an HDMI AVI infoframe with + * data from a DRM display mode + * @frame: HDMI AVI infoframe + * @mode: DRM display mode + * + * Returns 0 on success or a negative error code on failure. + */ +int +drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe *frame, + const struct drm_display_mode *mode) +{ + int err; + + if (!frame || !mode) + return -EINVAL; + + err = hdmi_avi_infoframe_init(frame); + if (err < 0) + return err; + + frame->video_code = drm_match_cea_mode(mode); + if (!frame->video_code) + return 0; + + frame->picture_aspect = HDMI_PICTURE_ASPECT_NONE; + frame->active_aspect = HDMI_ACTIVE_ASPECT_PICTURE; + + return 0; +} +EXPORT_SYMBOL(drm_hdmi_avi_infoframe_from_display_mode); diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h index 0cac551..5da1b4a 100644 --- a/include/drm/drm_edid.h +++ b/include/drm/drm_edid.h @@ -247,6 +247,8 @@ struct edid { struct drm_encoder; struct drm_connector; struct drm_display_mode; +struct hdmi_avi_infoframe; + void drm_edid_to_eld(struct drm_connector *connector, struct edid *edid); int drm_av_sync_delay(struct drm_connector *connector, struct drm_display_mode *mode); @@ -254,4 +256,8 @@ struct drm_connector *drm_select_eld(struct drm_encoder *encoder, struct drm_display_mode *mode); int drm_load_edid_firmware(struct drm_connector *connector); +int +drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe *frame, + const struct drm_display_mode *mode); + #endif /* __DRM_EDID_H__ */