lkml.org 
[lkml]   [2019]   [Aug]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 1/8] drm/bridge: dw-hdmi-i2s: support more i2s format
    Date
    The dw-hdmi-i2s supports more formats than just regular i2s.
    Add support for left justified, right justified and dsp modes
    A and B.

    Reviewed-by: Jonas Karlman <jonas@kwiboo.se>
    Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
    ---
    .../drm/bridge/synopsys/dw-hdmi-i2s-audio.c | 26 ++++++++++++++++---
    drivers/gpu/drm/bridge/synopsys/dw-hdmi.h | 6 +++--
    2 files changed, 27 insertions(+), 5 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 5cbb71a866d5..2b624cff541d 100644
    --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c
    +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c
    @@ -44,9 +44,8 @@ static int dw_hdmi_i2s_hw_params(struct device *dev, void *data,
    u8 inputclkfs = 0;

    /* it cares I2S only */
    - if ((fmt->fmt != HDMI_I2S) ||
    - (fmt->bit_clk_master | fmt->frame_clk_master)) {
    - dev_err(dev, "unsupported format/settings\n");
    + if (fmt->bit_clk_master | fmt->frame_clk_master) {
    + dev_err(dev, "unsupported clock settings\n");
    return -EINVAL;
    }

    @@ -63,6 +62,27 @@ static int dw_hdmi_i2s_hw_params(struct device *dev, void *data,
    break;
    }

    + switch (fmt->fmt) {
    + case HDMI_I2S:
    + conf1 |= HDMI_AUD_CONF1_MODE_I2S;
    + break;
    + case HDMI_RIGHT_J:
    + conf1 |= HDMI_AUD_CONF1_MODE_RIGHT_J;
    + break;
    + case HDMI_LEFT_J:
    + conf1 |= HDMI_AUD_CONF1_MODE_LEFT_J;
    + break;
    + case HDMI_DSP_A:
    + conf1 |= HDMI_AUD_CONF1_MODE_BURST_1;
    + break;
    + case HDMI_DSP_B:
    + conf1 |= HDMI_AUD_CONF1_MODE_BURST_2;
    + break;
    + default:
    + dev_err(dev, "unsupported format\n");
    + return -EINVAL;
    + }
    +
    dw_hdmi_set_sample_rate(hdmi, hparms->sample_rate);

    hdmi_write(audio, inputclkfs, HDMI_AUD_INPUTCLKFS);
    diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.h b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.h
    index 4e3ec09d3ca4..091d7c28aa17 100644
    --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.h
    +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.h
    @@ -869,8 +869,10 @@ enum {

    /* AUD_CONF1 field values */
    HDMI_AUD_CONF1_MODE_I2S = 0x00,
    - HDMI_AUD_CONF1_MODE_RIGHT_J = 0x02,
    - HDMI_AUD_CONF1_MODE_LEFT_J = 0x04,
    + HDMI_AUD_CONF1_MODE_RIGHT_J = 0x20,
    + HDMI_AUD_CONF1_MODE_LEFT_J = 0x40,
    + HDMI_AUD_CONF1_MODE_BURST_1 = 0x60,
    + HDMI_AUD_CONF1_MODE_BURST_2 = 0x80,
    HDMI_AUD_CONF1_WIDTH_16 = 0x10,
    HDMI_AUD_CONF1_WIDTH_24 = 0x18,

    --
    2.21.0
    \
     
     \ /
      Last update: 2019-08-12 14:08    [W:5.902 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site