From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2992684AbbHHQKy (ORCPT ); Sat, 8 Aug 2015 12:10:54 -0400 Received: from pandora.arm.linux.org.uk ([78.32.30.218]:45250 "EHLO pandora.arm.linux.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2992543AbbHHQKw (ORCPT ); Sat, 8 Aug 2015 12:10:52 -0400 In-Reply-To: <20150808160936.GN7557@n2100.arm.linux.org.uk> References: <20150808160936.GN7557@n2100.arm.linux.org.uk> From: Russell King To: linux-rockchip@lists.infradead.org, alsa-devel@alsa-project.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: Philipp Zabel , Andy Yan , Yakir Yang , Fabio Estevam , Mark Brown , Takashi Iwai , Jaroslav Kysela , Sascha Hauer , Jon Nettleton , David Airlie Subject: [PATCH 5/9] drm: bridge/dw_hdmi: avoid being recursive in N calculation MIME-Version: 1.0 Content-Disposition: inline Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="utf-8" Message-Id: Date: Sat, 08 Aug 2015 17:10:27 +0100 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org There's no need to be recursive when computing the N value for the ACR packet - we can instead calculate the multiplier prior to our switch() based lookup, and multiply the N value appropriately afterwards. Signed-off-by: Russell King --- drivers/gpu/drm/bridge/dw_hdmi.c | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/bridge/dw_hdmi.c b/drivers/gpu/drm/bridge/dw_hdmi.c index a8b243278774..f0e6059f818a 100644 --- a/drivers/gpu/drm/bridge/dw_hdmi.c +++ b/drivers/gpu/drm/bridge/dw_hdmi.c @@ -221,6 +221,12 @@ static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk, unsigned int ratio) { unsigned int n = (128 * freq) / 1000; + unsigned int mult = 1; + + while (freq > 48000) { + mult *= 2; + freq /= 2; + } switch (freq) { case 32000: @@ -232,6 +238,7 @@ static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk, n = 11648; else n = 4096; + n *= mult; break; case 44100: @@ -243,6 +250,7 @@ static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk, n = (ratio == 150) ? 17836 : 8918; else n = 6272; + n *= mult; break; case 48000: @@ -256,22 +264,7 @@ static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk, n = (ratio == 150) ? 11648 : 5824; else n = 6144; - break; - - case 88200: - n = hdmi_compute_n(44100, pixel_clk, ratio) * 2; - break; - - case 96000: - n = hdmi_compute_n(48000, pixel_clk, ratio) * 2; - break; - - case 176400: - n = hdmi_compute_n(44100, pixel_clk, ratio) * 4; - break; - - case 192000: - n = hdmi_compute_n(48000, pixel_clk, ratio) * 4; + n *= mult; break; default: -- 2.1.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Russell King Subject: [PATCH 5/9] drm: bridge/dw_hdmi: avoid being recursive in N calculation Date: Sat, 08 Aug 2015 17:10:27 +0100 Message-ID: References: <20150808160936.GN7557@n2100.arm.linux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20150808160936.GN7557@n2100.arm.linux.org.uk> Content-Disposition: inline List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-rockchip@lists.infradead.org, alsa-devel@alsa-project.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: Fabio Estevam , Jaroslav Kysela , Mark Brown , Yakir Yang , Andy Yan List-Id: alsa-devel@alsa-project.org VGhlcmUncyBubyBuZWVkIHRvIGJlIHJlY3Vyc2l2ZSB3aGVuIGNvbXB1dGluZyB0aGUgTiB2YWx1 ZSBmb3IgdGhlIEFDUgpwYWNrZXQgLSB3ZSBjYW4gaW5zdGVhZCBjYWxjdWxhdGUgdGhlIG11bHRp cGxpZXIgcHJpb3IgdG8gb3VyIHN3aXRjaCgpCmJhc2VkIGxvb2t1cCwgYW5kIG11bHRpcGx5IHRo ZSBOIHZhbHVlIGFwcHJvcHJpYXRlbHkgYWZ0ZXJ3YXJkcy4KClNpZ25lZC1vZmYtYnk6IFJ1c3Nl bGwgS2luZyA8cm1rK2tlcm5lbEBhcm0ubGludXgub3JnLnVrPgotLS0KIGRyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvZHdfaGRtaS5jIHwgMjUgKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxl IGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kd19oZG1pLmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L2R3X2hkbWkuYwppbmRleCBhOGIyNDMyNzg3NzQuLmYwZTYwNTlmODE4YSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kd19oZG1pLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9kd19oZG1pLmMKQEAgLTIyMSw2ICsyMjEsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGludCBo ZG1pX2NvbXB1dGVfbih1bnNpZ25lZCBpbnQgZnJlcSwgdW5zaWduZWQgbG9uZyBwaXhlbF9jbGss CiAJCQkJICAgdW5zaWduZWQgaW50IHJhdGlvKQogewogCXVuc2lnbmVkIGludCBuID0gKDEyOCAq IGZyZXEpIC8gMTAwMDsKKwl1bnNpZ25lZCBpbnQgbXVsdCA9IDE7CisKKwl3aGlsZSAoZnJlcSA+ IDQ4MDAwKSB7CisJCW11bHQgKj0gMjsKKwkJZnJlcSAvPSAyOworCX0KIAogCXN3aXRjaCAoZnJl cSkgewogCWNhc2UgMzIwMDA6CkBAIC0yMzIsNiArMjM4LDcgQEAgc3RhdGljIHVuc2lnbmVkIGlu dCBoZG1pX2NvbXB1dGVfbih1bnNpZ25lZCBpbnQgZnJlcSwgdW5zaWduZWQgbG9uZyBwaXhlbF9j bGssCiAJCQluID0gMTE2NDg7CiAJCWVsc2UKIAkJCW4gPSA0MDk2OworCQluICo9IG11bHQ7CiAJ CWJyZWFrOwogCiAJY2FzZSA0NDEwMDoKQEAgLTI0Myw2ICsyNTAsNyBAQCBzdGF0aWMgdW5zaWdu ZWQgaW50IGhkbWlfY29tcHV0ZV9uKHVuc2lnbmVkIGludCBmcmVxLCB1bnNpZ25lZCBsb25nIHBp eGVsX2NsaywKIAkJCW4gPSAocmF0aW8gPT0gMTUwKSA/IDE3ODM2IDogODkxODsKIAkJZWxzZQog CQkJbiA9IDYyNzI7CisJCW4gKj0gbXVsdDsKIAkJYnJlYWs7CiAKIAljYXNlIDQ4MDAwOgpAQCAt MjU2LDIyICsyNjQsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGhkbWlfY29tcHV0ZV9uKHVuc2ln bmVkIGludCBmcmVxLCB1bnNpZ25lZCBsb25nIHBpeGVsX2NsaywKIAkJCW4gPSAocmF0aW8gPT0g MTUwKSA/IDExNjQ4IDogNTgyNDsKIAkJZWxzZQogCQkJbiA9IDYxNDQ7Ci0JCWJyZWFrOwotCi0J Y2FzZSA4ODIwMDoKLQkJbiA9IGhkbWlfY29tcHV0ZV9uKDQ0MTAwLCBwaXhlbF9jbGssIHJhdGlv KSAqIDI7Ci0JCWJyZWFrOwotCi0JY2FzZSA5NjAwMDoKLQkJbiA9IGhkbWlfY29tcHV0ZV9uKDQ4 MDAwLCBwaXhlbF9jbGssIHJhdGlvKSAqIDI7Ci0JCWJyZWFrOwotCi0JY2FzZSAxNzY0MDA6Ci0J CW4gPSBoZG1pX2NvbXB1dGVfbig0NDEwMCwgcGl4ZWxfY2xrLCByYXRpbykgKiA0OwotCQlicmVh azsKLQotCWNhc2UgMTkyMDAwOgotCQluID0gaGRtaV9jb21wdXRlX24oNDgwMDAsIHBpeGVsX2Ns aywgcmF0aW8pICogNDsKKwkJbiAqPSBtdWx0OwogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0tIAoy LjEuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJp LWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 From: rmk+kernel@arm.linux.org.uk (Russell King) Date: Sat, 08 Aug 2015 17:10:27 +0100 Subject: [PATCH 5/9] drm: bridge/dw_hdmi: avoid being recursive in N calculation In-Reply-To: <20150808160936.GN7557@n2100.arm.linux.org.uk> References: <20150808160936.GN7557@n2100.arm.linux.org.uk> Message-ID: To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org There's no need to be recursive when computing the N value for the ACR packet - we can instead calculate the multiplier prior to our switch() based lookup, and multiply the N value appropriately afterwards. Signed-off-by: Russell King --- drivers/gpu/drm/bridge/dw_hdmi.c | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/bridge/dw_hdmi.c b/drivers/gpu/drm/bridge/dw_hdmi.c index a8b243278774..f0e6059f818a 100644 --- a/drivers/gpu/drm/bridge/dw_hdmi.c +++ b/drivers/gpu/drm/bridge/dw_hdmi.c @@ -221,6 +221,12 @@ static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk, unsigned int ratio) { unsigned int n = (128 * freq) / 1000; + unsigned int mult = 1; + + while (freq > 48000) { + mult *= 2; + freq /= 2; + } switch (freq) { case 32000: @@ -232,6 +238,7 @@ static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk, n = 11648; else n = 4096; + n *= mult; break; case 44100: @@ -243,6 +250,7 @@ static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk, n = (ratio == 150) ? 17836 : 8918; else n = 6272; + n *= mult; break; case 48000: @@ -256,22 +264,7 @@ static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk, n = (ratio == 150) ? 11648 : 5824; else n = 6144; - break; - - case 88200: - n = hdmi_compute_n(44100, pixel_clk, ratio) * 2; - break; - - case 96000: - n = hdmi_compute_n(48000, pixel_clk, ratio) * 2; - break; - - case 176400: - n = hdmi_compute_n(44100, pixel_clk, ratio) * 4; - break; - - case 192000: - n = hdmi_compute_n(48000, pixel_clk, ratio) * 4; + n *= mult; break; default: -- 2.1.0