From patchwork Fri Jun 19 16:19:12 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yakir Yang X-Patchwork-Id: 6646001 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id A3609C0020 for ; Fri, 19 Jun 2015 16:21:41 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id ACA4120960 for ; Fri, 19 Jun 2015 16:21:40 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id B0EC520943 for ; Fri, 19 Jun 2015 16:21:39 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 45ACC6E1B1; Fri, 19 Jun 2015 09:21:38 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from regular1.263xmail.com (regular1.263xmail.com [211.150.99.139]) by gabe.freedesktop.org (Postfix) with ESMTP id 49A8F6E1B1 for ; Fri, 19 Jun 2015 09:21:33 -0700 (PDT) Received: from ykk?rock-chips.com (unknown [192.168.167.130]) by regular1.263xmail.com (Postfix) with SMTP id E4566463D; Sat, 20 Jun 2015 00:21:26 +0800 (CST) X-263anti-spam: KSV:0; X-MAIL-GRAY: 0 X-MAIL-DELIVERY: 1 X-KSVirus-check: 0 X-ABS-CHECKED: 4 X-ADDR-CHECKED: 0 Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.263.net (Postfix) with ESMTP id 33D453BA; Sat, 20 Jun 2015 00:21:25 +0800 (CST) X-RL-SENDER: ykk@rock-chips.com X-FST-TO: linux-rockchip@lists.infradead.org X-SENDER-IP: 112.111.49.167 X-LOGIN-NAME: ykk@rock-chips.com X-UNIQUE-TAG: <639640d0c2aa3c5f2e85fc2905ff0e43> X-ATTACHMENT-NUM: 0 X-SENDER: ykk@rock-chips.com X-DNS-TYPE: 0 Received: from localhost.localdomain (unknown [112.111.49.167]) by smtp.263.net (Postfix) whith ESMTP id 3664V1GYOG; Sat, 20 Jun 2015 00:21:26 +0800 (CST) From: Yakir Yang To: linux-rockchip@lists.infradead.org, dri-devel , linux-kernel@vger.kernel.org, linux-arm-kernel Subject: [PATCH v5 1/6] drm: bridge/dw_hdmi: add audio support for more display resolutions Date: Sat, 20 Jun 2015 00:19:12 +0800 Message-Id: <1434730752-10829-1-git-send-email-ykk@rock-chips.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1434730417-10629-1-git-send-email-ykk@rock-chips.com> References: <1434730417-10629-1-git-send-email-ykk@rock-chips.com> Cc: Fabio Estevam , Doug Anderson , Yakir Yang , Russell King , Andy Yan X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Spam-Status: No, score=-4.5 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Just like HDMISpecification 1.4 document descripted, the soure shall determine the fractional relationship between the TMDS clock an an audio reference clock, the sink may then recreate the audio clock from the TMDS clock by using an clock divider. So if we can make sink generate the correct samplerate, then we can say those display resolutions with this pixelclock could support audio play. The exact relationship between the two clocks will be: 128 * SampleRate = TmdsClock * N / CTS. So this patch would generate the correct N/CTS values, add audio support for the below tmds clocks: 25.175MHz, 40MHz, 54MHz, 65MHz, 74.25MHz, 83.5MHz, 106.5MHz, 108Mhz Signed-off-by: Yakir Yang --- Changes in v5: - make more words in commit message. Changes in v4: None Changes in v3: None Changes in v2: None drivers/gpu/drm/bridge/dw_hdmi.c | 56 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/drivers/gpu/drm/bridge/dw_hdmi.c b/drivers/gpu/drm/bridge/dw_hdmi.c index dc0aed1..f717a2a 100644 --- a/drivers/gpu/drm/bridge/dw_hdmi.c +++ b/drivers/gpu/drm/bridge/dw_hdmi.c @@ -222,8 +222,24 @@ static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk, case 44100: if (pixel_clk == 25170000) n = 7007; + else if (pixel_clk == 25175000) + n = 28224; + else if (pixel_clk == 40000000) + n = 7056; + else if (pixel_clk == 54000000) + n = 6272; + else if (pixel_clk == 65000000) + n = 7056; else if (pixel_clk == 74170000) n = 17836; + else if (pixel_clk == 74250000) + n = 6272; + else if (pixel_clk == 83500000) + n = 7056; + else if (pixel_clk == 106500000) + n = 4074; + else if (pixel_clk == 108000000) + n = 4018; else if (pixel_clk == 148350000) n = (ratio == 150) ? 17836 : 8918; else @@ -233,10 +249,26 @@ static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk, case 48000: if (pixel_clk == 25170000) n = (ratio == 150) ? 9152 : 6864; + else if (pixel_clk == 25175000) + n = 6144; else if (pixel_clk == 27020000) n = (ratio == 150) ? 8192 : 6144; + else if (pixel_clk == 40000000) + n = 6144; + else if (pixel_clk == 54000000) + n = 6144; + else if (pixel_clk == 65000000) + n = 6144; else if (pixel_clk == 74170000) n = 11648; + else if (pixel_clk == 74250000) + n = 6144; + else if (pixel_clk == 83500000) + n = 6144; + else if (pixel_clk == 106500000) + n = 6144; + else if (pixel_clk == 108000000) + n = 6144; else if (pixel_clk == 148350000) n = (ratio == 150) ? 11648 : 5824; else @@ -284,10 +316,16 @@ static unsigned int hdmi_compute_cts(unsigned int freq, unsigned long pixel_clk, case 96000: case 192000: switch (pixel_clk) { + case 25175000: case 25200000: case 27000000: + case 40000000: case 54000000: + case 65000000: case 74250000: + case 83500000: + case 106500000: + case 108000000: case 148500000: cts = pixel_clk / 1000; break; @@ -308,18 +346,36 @@ static unsigned int hdmi_compute_cts(unsigned int freq, unsigned long pixel_clk, case 88200: case 176400: switch (pixel_clk) { + case 25175000: + cts = 125875; + break; case 25200000: cts = 28000; break; case 27000000: cts = 30000; break; + case 40000000: + cts = 50000; + break; case 54000000: cts = 60000; break; + case 65000000: + cts = 81250; + break; case 74250000: cts = 82500; break; + case 83500000: + cts = 104375; + break; + case 106500000: + cts = 88750; + break; + case 108000000: + cts = 76875; + break; case 148500000: cts = 165000; break;