All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yakir Yang <ykk@rock-chips.com>
To: djkurtz@chromium.org, dianders@chromium.org,
	linux-rockchip@lists.infradead.org
Cc: David Airlie <airlied@linux.ie>,
	Philipp Zabel <p.zabel@pengutronix.de>,
	Russell King <rmk+kernel@arm.linux.org.uk>,
	Yakir Yang <ykk@rock-chips.com>,
	Andy Yan <andy.yan@rock-chips.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Fabio Estevam <fabio.estevam@freescale.com>,
	dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
	mmind00@googlemail.com, marcheu@chromium.org,
	mark.yao@rock-chips.com
Subject: [PATCH v4 06/15] drm: bridge/dw_hdmi: adjust n/cts setting order
Date: Sat, 28 Feb 2015 21:40:30 -0500	[thread overview]
Message-ID: <1425177630-2024-1-git-send-email-ykk@rock-chips.com> (raw)
In-Reply-To: <1425175834-24661-1-git-send-email-ykk@rock-chips.com>

From: Daniel Kurtz <djkurtz@chromium.org>

This patch changes the order to:
- write CTS3 CTS_manual (if supported) | N_shift | CTS[19:16]
- write CTS2 CTS[15:8]
- write CTS1 CTS[7:0]
- write N3 N[19:16]
- write N2 N[15:8]
- write N1 N[7:0]

Signed-off-by: Yakir Yang <ykk@rock-chips.com>
Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
---
Changes in v4:
- Combine CTS3 registers setting, reduce register operate times

Changes in v3:
- Only adjust the n/cts setting order

Changes in v2: None

 drivers/gpu/drm/bridge/dw_hdmi.c | 25 +++++++++++++++----------
 drivers/gpu/drm/bridge/dw_hdmi.h |  6 ++++--
 2 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/bridge/dw_hdmi.c b/drivers/gpu/drm/bridge/dw_hdmi.c
index 3d7c048..12d8b7e 100644
--- a/drivers/gpu/drm/bridge/dw_hdmi.c
+++ b/drivers/gpu/drm/bridge/dw_hdmi.c
@@ -199,19 +199,24 @@ static void hdmi_mask_writeb(struct dw_hdmi *hdmi, u8 data, unsigned int reg,
 static void hdmi_set_clock_regenerator(struct dw_hdmi *hdmi,
 				       unsigned int n, unsigned int cts)
 {
-	hdmi_writeb(hdmi, n & 0xff, HDMI_AUD_N1);
-	hdmi_writeb(hdmi, (n >> 8) & 0xff, HDMI_AUD_N2);
-	hdmi_writeb(hdmi, (n >> 16) & 0x0f, HDMI_AUD_N3);
+	u8 cts3 = 0;
 
-	/* nshift factor = 0 */
-	hdmi_modb(hdmi, 0, HDMI_AUD_CTS3_N_SHIFT_MASK, HDMI_AUD_CTS3);
-	/* Must be set/cleared first */
-	hdmi_modb(hdmi, 0, HDMI_AUD_CTS3_CTS_MANUAL, HDMI_AUD_CTS3);
+	/* set CTS_MANUAL (if present) */
+	if (hdmi->id.design == 0x20)
+		cts3 = HDMI_AUD_CTS3_CTS_MANUAL;
 
-	hdmi_writeb(hdmi, cts & 0xff, HDMI_AUD_CTS1);
+	cts3 |= HDMI_AUD_CTS3_N_SHIFT_1 << HDMI_AUD_CTS3_N_SHIFT_OFFSET;
+	cts3 |= (cts >> 16) & HDMI_AUD_CTS3_AUDCTS19_16_MASK;
+
+	/* write CTS values; CTS3 must be written first */
+	hdmi_writeb(hdmi, cts3, HDMI_AUD_CTS3);
 	hdmi_writeb(hdmi, (cts >> 8) & 0xff, HDMI_AUD_CTS2);
-	hdmi_writeb(hdmi, ((cts >> 16) & HDMI_AUD_CTS3_AUDCTS19_16_MASK) |
-		    HDMI_AUD_CTS3_CTS_MANUAL, HDMI_AUD_CTS3);
+	hdmi_writeb(hdmi, cts & 0xff, HDMI_AUD_CTS1);
+
+	/* write N values; N1 must be written last */
+	hdmi_writeb(hdmi, (n >> 16) & 0xf, HDMI_AUD_N3);
+	hdmi_writeb(hdmi, (n >> 8) & 0xff, HDMI_AUD_N2);
+	hdmi_writeb(hdmi, n & 0xff, HDMI_AUD_N1);
 }
 
 static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk,
diff --git a/drivers/gpu/drm/bridge/dw_hdmi.h b/drivers/gpu/drm/bridge/dw_hdmi.h
index e4ba634..c7ac538 100644
--- a/drivers/gpu/drm/bridge/dw_hdmi.h
+++ b/drivers/gpu/drm/bridge/dw_hdmi.h
@@ -916,8 +916,10 @@ enum {
 	HDMI_AUD_CTS3_N_SHIFT_64 = 0x60,
 	HDMI_AUD_CTS3_N_SHIFT_128 = 0x80,
 	HDMI_AUD_CTS3_N_SHIFT_256 = 0xa0,
-	/* note that the CTS3 MANUAL bit has been removed
-	   from our part. Can't set it, will read as 0. */
+	/*
+	 * Note: CTS_MANUAL is not present on iMX6 dw_hdmi, but is present on
+	 * rk3288 (design_id = 0x20).
+	 */
 	HDMI_AUD_CTS3_CTS_MANUAL = 0x10,
 	HDMI_AUD_CTS3_AUDCTS19_16_MASK = 0x0f,
 
-- 
2.1.2



  parent reply	other threads:[~2015-03-01  2:42 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-01  2:10 [PATCH v4 0/15] Those patches is used for dw_hdmi audio support Yakir Yang
2015-03-01  2:10 ` Yakir Yang
2015-03-01  2:10 ` Yakir Yang
2015-03-01  2:18 ` [PATCH v4 01/15] drm: bridge/dw_hdmi: add irq control to suspend/resume Yakir Yang
2015-03-01  2:28 ` [PATCH v4 02/15] drm: bridge/dw_hdmi: wrap irq control in fucntions Yakir Yang
2015-03-12 10:24   ` Philipp Zabel
2015-03-12 10:24     ` Philipp Zabel
2015-03-12 14:31     ` yakir
2015-03-12 14:41       ` Philipp Zabel
2015-03-12 14:41         ` Philipp Zabel
2015-03-12 14:54         ` yakir
2015-03-01  2:32 ` [PATCH v4 03/15] drm: rockchip/dw_hdmi_rockchip: add resume/suspend support Yakir Yang
2015-03-12 10:24   ` Philipp Zabel
2015-03-12 10:24     ` Philipp Zabel
2015-03-12 14:32     ` yakir
2015-03-01  2:35 ` [PATCH v4 04/15] drm: bridge/dw_hdmi: add identification registers parse and record Yakir Yang
2015-03-12 10:29   ` Philipp Zabel
2015-03-12 10:29     ` Philipp Zabel
2015-03-12 14:32     ` yakir
2015-03-01  2:38 ` [PATCH v4 05/15] drm: bridge/dw_hdmi: combine hdmi_set_clock_regenerator_n() and hdmi_regenerate_cts() Yakir Yang
2015-03-01  2:40 ` Yakir Yang [this message]
2015-03-01  2:43 ` [PATCH v4 07/15] drm: bridge/dw_hdmi: set ncts_atomic_write & cts_manual Yakir Yang
2015-03-01  2:45 ` [PATCH v4 08/15] drm: bridge/dw_hdmi: add audio support for more display resolutions Yakir Yang
2015-03-01  2:47 ` [PATCH v4 09/15] drm: bridge/dw_hdmi: enable audio support for No-CEA " Yakir Yang
2015-03-01  2:49 ` [PATCH v4 10/15] drm: bridge/dw_hdmi: add audio sample channel status setting Yakir Yang
2015-03-01  2:52 ` [PATCH v4 11/15] drm: bridge/dw_hdmi: add enable/disable to dw_hdmi_audio callbacks Yakir Yang
2015-03-01  2:57 ` [PATCH v4 12/15] drm: bridge/dw_hdmi: creat dw-hdmi-audio platform device Yakir Yang
2015-03-01  2:59 ` [PATCH v4 13/15] ASoC: codec/dw-hdmi-audio: add codec driver for dw hdmi audio Yakir Yang
2015-03-02  9:15   ` Paul Bolle
2015-03-02  9:15     ` Paul Bolle
2015-03-02 11:31     ` Yakir Yang
2015-03-02 11:31       ` Yakir Yang
2015-03-26 18:11   ` Mark Brown
2015-03-26 18:11     ` Mark Brown
2015-03-01  3:04 ` [PATCH v4 14/15] ASoC: rockchip/rockchip-hdmi-audio: add sound driver for " Yakir Yang
2015-03-02  9:07   ` Paul Bolle
2015-03-02  9:07     ` Paul Bolle
2015-03-02 11:32     ` Yakir Yang
2015-03-02 11:32       ` Yakir Yang
2015-03-26 18:16   ` Mark Brown
2015-03-26 18:16     ` Mark Brown
2015-03-27  1:16     ` yakir
2015-03-27  1:16       ` yakir
2015-03-27  1:19       ` Mark Brown
2015-03-27  1:19         ` Mark Brown
2015-03-01  3:07 ` [PATCH v4 15/15] dt-bindings: Add documentation for Rockchip dw-hdmi-audio Yakir Yang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1425177630-2024-1-git-send-email-ykk@rock-chips.com \
    --to=ykk@rock-chips.com \
    --cc=airlied@linux.ie \
    --cc=andy.yan@rock-chips.com \
    --cc=dianders@chromium.org \
    --cc=djkurtz@chromium.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=fabio.estevam@freescale.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=marcheu@chromium.org \
    --cc=mark.yao@rock-chips.com \
    --cc=mmind00@googlemail.com \
    --cc=p.zabel@pengutronix.de \
    --cc=rmk+kernel@arm.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.