lkml.org 
[lkml]   [2023]   [Nov]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RESEND] ASoC: cs43130: Allow configuration of bit clock and frame inversion
    Date
    Signed-off-by: Maciej Strozek <mstrozek@opensource.cirrus.com>
    ---
    Resending patch which previously broke x86 allmodconfig [1], now rebased on
    for-next branch

    [1]: https://lore.kernel.org/all/ZVfLMIbCpShVAYBf@finisterre.sirena.org.uk/

    sound/soc/codecs/cs43130.c | 42 ++++++++++++++++++++++++++++++++++++--
    sound/soc/codecs/cs43130.h | 1 +
    2 files changed, 41 insertions(+), 2 deletions(-)

    diff --git a/sound/soc/codecs/cs43130.c b/sound/soc/codecs/cs43130.c
    index 4f16baf4eafb..0f3ead84665f 100644
    --- a/sound/soc/codecs/cs43130.c
    +++ b/sound/soc/codecs/cs43130.c
    @@ -620,6 +620,27 @@ static int cs43130_set_sp_fmt(int dai_id, unsigned int bitwidth_sclk,
    return -EINVAL;
    }

    + switch (cs43130->dais[dai_id].dai_invert) {
    + case SND_SOC_DAIFMT_NB_NF:
    + sclk_edge = 1;
    + lrck_edge = 0;
    + break;
    + case SND_SOC_DAIFMT_IB_NF:
    + sclk_edge = 0;
    + lrck_edge = 0;
    + break;
    + case SND_SOC_DAIFMT_NB_IF:
    + sclk_edge = 1;
    + lrck_edge = 1;
    + break;
    + case SND_SOC_DAIFMT_IB_IF:
    + sclk_edge = 0;
    + lrck_edge = 1;
    + break;
    + default:
    + return -EINVAL;
    + }
    +
    switch (cs43130->dais[dai_id].dai_mode) {
    case SND_SOC_DAIFMT_CBS_CFS:
    dai_mode_val = 0;
    @@ -632,8 +653,6 @@ static int cs43130_set_sp_fmt(int dai_id, unsigned int bitwidth_sclk,
    }

    frm_size = bitwidth_sclk * params_channels(params);
    - sclk_edge = 1;
    - lrck_edge = 0;
    loc_ch1 = 0;
    loc_ch2 = bitwidth_sclk * (params_channels(params) - 1);

    @@ -1516,6 +1535,25 @@ static int cs43130_pcm_set_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
    return -EINVAL;
    }

    + switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
    + case SND_SOC_DAIFMT_NB_NF:
    + cs43130->dais[codec_dai->id].dai_invert = SND_SOC_DAIFMT_NB_NF;
    + break;
    + case SND_SOC_DAIFMT_IB_NF:
    + cs43130->dais[codec_dai->id].dai_invert = SND_SOC_DAIFMT_IB_NF;
    + break;
    + case SND_SOC_DAIFMT_NB_IF:
    + cs43130->dais[codec_dai->id].dai_invert = SND_SOC_DAIFMT_NB_IF;
    + break;
    + case SND_SOC_DAIFMT_IB_IF:
    + cs43130->dais[codec_dai->id].dai_invert = SND_SOC_DAIFMT_IB_IF;
    + break;
    + default:
    + dev_err(cs43130->dev, "Unsupported invert mode 0x%x\n",
    + fmt & SND_SOC_DAIFMT_INV_MASK);
    + return -EINVAL;
    + }
    +
    switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
    case SND_SOC_DAIFMT_I2S:
    cs43130->dais[codec_dai->id].dai_format = SND_SOC_DAIFMT_I2S;
    diff --git a/sound/soc/codecs/cs43130.h b/sound/soc/codecs/cs43130.h
    index 694286b78d03..dbdb5b262f1b 100644
    --- a/sound/soc/codecs/cs43130.h
    +++ b/sound/soc/codecs/cs43130.h
    @@ -497,6 +497,7 @@ struct cs43130_dai {
    unsigned int sclk;
    unsigned int dai_format;
    unsigned int dai_mode;
    + unsigned int dai_invert;
    };

    struct cs43130_private {
    --
    2.34.1
    \
     
     \ /
      Last update: 2023-11-24 10:52    [W:6.539 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site