video: rockchip: hdmi: v2: improved the hdmi nlpcm_mode for bitstream output
authorsmj <smj@rock-chips.com>
Mon, 19 Sep 2016 03:08:35 +0000 (11:08 +0800)
committerHuang, Tao <huangtao@rock-chips.com>
Mon, 19 Sep 2016 12:25:26 +0000 (20:25 +0800)
- Add the corresponding to samplerate for bitstream
- Add the audio type judgement when open the mode

Change-Id: Ic5bbd2ee214e707fd3695f1a1f359cd43fed9618
Signed-off-by: smj <smj@rock-chips.com>
Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
drivers/video/rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2_hw.c

index 3b75d7143337ec86b9831085775f2f39ab4bd950..14a3a3067cd6edee12230bf30650dfa7022b13d4 100644 (file)
@@ -1899,15 +1899,35 @@ static int hdmi_dev_config_audio(struct hdmi *hdmi, struct hdmi_audio *audio)
                else
                        hdmi_writel(hdmi_dev, AUD_CONF2, 0x0);
                usleep_range(90, 100);
-               if (channel == I2S_CHANNEL_7_8) {
-                       HDMIDBG("hbr mode.\n");
-                       hdmi_writel(hdmi_dev, AUD_CONF2, 0x1);
-                       word_length = I2S_24BIT_SAMPLE;
-               } else if ((audio->rate == HDMI_AUDIO_FS_48000) ||
-                          (audio->rate == HDMI_AUDIO_FS_192000)) {
-                       HDMIDBG("nlpcm mode.\n");
-                       hdmi_writel(hdmi_dev, AUD_CONF2, 0x2);
-                       word_length = I2S_24BIT_SAMPLE;
+               /*
+                * when we try to use hdmi nlpcm mode
+                * we should use set AUD_CONF2 to open this route and set
+                * word_length to 24bit for b.p.c.u.v with 16bit raw data
+                * when the bitstream data  up to 8 channel, we should use
+                * the hdmi hbr mode
+                * HBR Mode : Dolby TrueHD
+                *            Dolby Atmos
+                *            DTS-HDMA
+                * NLPCM Mode :
+                * FS_32000 FS_44100 FS_48000 : Dolby Digital &  DTS
+                * FS_176400 FS_192000        : Dolby Digital Plus
+                */
+               if (audio->type == HDMI_AUDIO_NLPCM) {
+                       if (channel == I2S_CHANNEL_7_8) {
+                               HDMIDBG("hbr mode.\n");
+                               hdmi_writel(hdmi_dev, AUD_CONF2, 0x1);
+                               word_length = I2S_24BIT_SAMPLE;
+                       } else if ((audio->rate == HDMI_AUDIO_FS_32000) ||
+                                  (audio->rate == HDMI_AUDIO_FS_44100) ||
+                                  (audio->rate == HDMI_AUDIO_FS_48000) ||
+                                  (audio->rate == HDMI_AUDIO_FS_176400) ||
+                                  (audio->rate == HDMI_AUDIO_FS_192000)) {
+                               HDMIDBG("nlpcm mode.\n");
+                               hdmi_writel(hdmi_dev, AUD_CONF2, 0x2);
+                               word_length = I2S_24BIT_SAMPLE;
+                       } else {
+                               hdmi_writel(hdmi_dev, AUD_CONF2, 0x0);
+                       }
                } else {
                        if (design_id >= 0x21)
                                hdmi_writel(hdmi_dev, AUD_CONF2, 0x4);