OSDN Git Service

drm/bridge: dw-hdmi-i2s: enable only the required i2s lanes
authorJerome Brunet <jbrunet@baylibre.com>
Mon, 12 Aug 2019 12:07:25 +0000 (14:07 +0200)
committerNeil Armstrong <narmstrong@baylibre.com>
Wed, 14 Aug 2019 13:03:33 +0000 (15:03 +0200)
Enable the i2s lanes depending on the number of channel in the stream

Reviewed-by: Jonas Karlman <jonas@kwiboo.se>
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
Reviewed-by: Neil Armstrong <narmstrong@baylibre.com>
Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190812120726.1528-8-jbrunet@baylibre.com
drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c
drivers/gpu/drm/bridge/synopsys/dw-hdmi.h

index 41bee00..b8ece9c 100644 (file)
@@ -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:
index a272fa3..6988f12 100644 (file)
@@ -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,