Enable the i2s lanes depending on the number of channel in the stream

Cc: Jonas Karlman <jo...@kwiboo.se>
Signed-off-by: Jerome Brunet <jbru...@baylibre.com>
---
 .../gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c   | 15 ++++++++++++++-
 drivers/gpu/drm/bridge/synopsys/dw-hdmi.h         |  6 +++++-
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c 
b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c
index 41bee0099578..b8ece9c1ba2c 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c
@@ -54,7 +54,20 @@ static int dw_hdmi_i2s_hw_params(struct device *dev, void 
*data,
        hdmi_write(audio, (u8)~HDMI_MC_SWRSTZ_I2SSWRST_REQ, HDMI_MC_SWRSTZ);
 
        inputclkfs      = HDMI_AUD_INPUTCLKFS_64FS;
-       conf0           = HDMI_AUD_CONF0_I2S_ALL_ENABLE;
+       conf0           = (HDMI_AUD_CONF0_I2S_SELECT | HDMI_AUD_CONF0_I2S_EN0);
+
+       /* Enable the required i2s lanes */
+       switch (hparms->channels) {
+       case 7 ... 8:
+               conf0 |= HDMI_AUD_CONF0_I2S_EN3;
+               /* Fall-thru */
+       case 5 ... 6:
+               conf0 |= HDMI_AUD_CONF0_I2S_EN2;
+               /* Fall-thru */
+       case 3 ... 4:
+               conf0 |= HDMI_AUD_CONF0_I2S_EN1;
+               /* Fall-thru */
+       }
 
        switch (hparms->sample_width) {
        case 16:
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.h 
b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.h
index a272fa393ae6..6988f12d89d9 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.h
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.h
@@ -865,7 +865,11 @@ enum {
 
 /* AUD_CONF0 field values */
        HDMI_AUD_CONF0_SW_RESET = 0x80,
-       HDMI_AUD_CONF0_I2S_ALL_ENABLE = 0x2F,
+       HDMI_AUD_CONF0_I2S_SELECT = 0x20,
+       HDMI_AUD_CONF0_I2S_EN3 = 0x08,
+       HDMI_AUD_CONF0_I2S_EN2 = 0x04,
+       HDMI_AUD_CONF0_I2S_EN1 = 0x02,
+       HDMI_AUD_CONF0_I2S_EN0 = 0x01,
 
 /* AUD_CONF1 field values */
        HDMI_AUD_CONF1_MODE_I2S = 0x00,
-- 
2.21.0

Reply via email to