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: 6646031 Return-Path: X-Original-To: patchwork-linux-arm@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 A7B7CC0020 for ; Fri, 19 Jun 2015 16:24:06 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id BF09520920 for ; Fri, 19 Jun 2015 16:24:05 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C992C2077A for ; Fri, 19 Jun 2015 16:24:04 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1Z5z3G-000255-TL; Fri, 19 Jun 2015 16:21:58 +0000 Received: from regular1.263xmail.com ([211.150.99.139]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1Z5z3C-00020q-HR; Fri, 19 Jun 2015 16:21:55 +0000 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> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20150619_092155_046141_AA9AFFF5 X-CRM114-Status: UNSURE ( 9.48 ) X-CRM114-Notice: Please train this message. X-Spam-Score: -0.0 (/) Cc: Fabio Estevam , David Airlie , Doug Anderson , Daniel Kurtz , Philipp Zabel , Yakir Yang , Russell King , Andy Yan X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org 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;