29 Sep, 2020

1 commit

  • soc_pcm_open() does rollback when failed (A),
    but, it is almost same as soc_pcm_close().

    static int soc_pcm_open(xxx)
    {
    ...
    if (ret < 0)
    goto xxx_err;
    ...
    return 0;

    ^ config_err:
    | ...
    | rtd_startup_err:
    (A) ...
    | component_err:
    | ...
    v return ret;
    }

    The difference is
    soc_pcm_close() is for all dai/component/substream,
    rollback is for succeeded part only.

    This kind of duplicated code can be a hotbed of bugs,
    thus, we want to share soc_pcm_close() and rollback.

    Now, soc_pcm_open/close() are handling
    => 1) snd_soc_dai_startup/shutdown()
    2) snd_soc_link_startup/shutdown()
    3) snd_soc_component_module_get/put()
    4) snd_soc_component_open/close()
    5) pm_runtime_put/get()

    This patch is for 1) snd_soc_dai_startup/shutdown().

    The idea of having bit-flag or counter is not enough for this purpose.
    For example if one DAI is used for 2xPlaybacks for some reasons,
    and if 1st Playback was succeeded but 2nd Playback was failed,
    2nd Playback rollback doesn't need to call shutdown.
    But it has succeeded bit-flag or counter via 1st Playback,
    thus, 2nd Playback rollback will call unneeded shutdown.
    And 1st Playback's necessary shutdown will not be called,
    because bit-flag or counter was cleared by wrong 2nd Playback rollback.

    To avoid such case, this patch marks substream pointer when startup() was
    succeeded. If rollback needed, it will check rollback flag and marked
    substream pointer.

    One note here is that it cares *current* startup() only now.
    but we might want to check *whole* marked substream in the future.
    This patch is using macro named "push/pop", so that it can be easily
    update.

    Signed-off-by: Kuninori Morimoto
    Link: https://lore.kernel.org/r/87lfgubwoc.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     

27 Aug, 2020

1 commit

  • commit 25612477d20b52 ("ASoC: soc-dai: set dai_link dpcm_ flags with a helper")
    added snd_soc_dai_link_set_capabilities().
    But it is using snd_soc_find_dai() (A) which is required client_mutex (B).
    And client_mutex is soc-core.c local.

    struct snd_soc_dai *snd_soc_find_dai(xxx)
    {
    ...
    (B) lockdep_assert_held(&client_mutex);
    ...
    }

    void snd_soc_dai_link_set_capabilities(xxx)
    {
    ...
    for_each_pcm_streams(direction) {
    ...
    for_each_link_cpus(dai_link, i, cpu) {
    (A) dai = snd_soc_find_dai(cpu);
    ...
    }
    ...
    for_each_link_codecs(dai_link, i, codec) {
    (A) dai = snd_soc_find_dai(codec);
    ...
    }
    }
    ...
    }

    Because of these background, we will get WARNING if .config has CONFIG_LOCKDEP.

    WARNING: CPU: 2 PID: 53 at sound/soc/soc-core.c:814 snd_soc_find_dai+0xf8/0x100
    CPU: 2 PID: 53 Comm: kworker/2:1 Not tainted 5.7.0-rc1+ #328
    Hardware name: Renesas H3ULCB Kingfisher board based on r8a77951 (DT)
    Workqueue: events deferred_probe_work_func
    pstate: 60000005 (nZCv daif -PAN -UAO)
    pc : snd_soc_find_dai+0xf8/0x100
    lr : snd_soc_find_dai+0xf4/0x100
    ...
    Call trace:
    snd_soc_find_dai+0xf8/0x100
    snd_soc_dai_link_set_capabilities+0xa0/0x16c
    graph_dai_link_of_dpcm+0x390/0x3c0
    graph_for_each_link+0x134/0x200
    graph_probe+0x144/0x230
    platform_drv_probe+0x5c/0xb0
    really_probe+0xe4/0x430
    driver_probe_device+0x60/0xf4

    snd_soc_find_dai() will be used from (X) CPU/Codec/Platform driver with
    mutex lock, and (Y) Card driver without mutex lock.
    This snd_soc_dai_link_set_capabilities() is for Card driver,
    this means called without mutex.
    This patch adds snd_soc_find_dai_with_mutex() to solve it.

    Fixes: 25612477d20b52 ("ASoC: soc-dai: set dai_link dpcm_ flags with a helper")
    Signed-off-by: Kuninori Morimoto
    Link: https://lore.kernel.org/r/87blixvuab.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     

01 Aug, 2020

2 commits

  • Mark Brown
     
  • Previous updates to set dailink capabilities and check dailink
    capabilities were based on a flawed assumption that all dais support
    the same capabilities as the dailink. This is true for TDM
    configurations but existing configurations use an amplifier and a
    capture device on the same dailink, and the tests would prevent the
    card from probing.

    This patch modifies the snd_soc_dai_link_set_capabilities()
    helper so that the dpcm_playback (resp. dpcm_capture) dailink
    capabilities are set if at least one dai supports playback (resp. capture).

    Likewise the checks are modified so that an error is reported only
    when dpcm_playback (resp. dpcm_capture) is set but none of the CPU
    DAIs support playback (resp. capture).

    Fixes: 25612477d20b5 ('ASoC: soc-dai: set dai_link dpcm_ flags with a helper')
    Fixes: b73287f0b0745 ('ASoC: soc-pcm: dpcm: fix playback/capture checks')
    Suggested-by: Jerome Brunet
    Signed-off-by: Pierre-Louis Bossart
    Link: https://lore.kernel.org/r/20200723180533.220312-1-pierre-louis.bossart@linux.intel.com
    Signed-off-by: Mark Brown

    Pierre-Louis Bossart
     

24 Jul, 2020

1 commit

  • Current soc-xxx are getting rtd from substream by

    rtd = substream->private_data;

    But, getting data from "private_data" is very unclear.
    This patch adds asoc_substream_to_rtd() macro which is
    easy to understand that rtd from substream.

    Signed-off-by: Kuninori Morimoto
    Link: https://lore.kernel.org/r/87wo2z0yve.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     

20 Jul, 2020

2 commits

  • …sart <pierre-louis.bossart@linux.intel.com>:

    Small patchset to harden the SoundWire machine driver, change bad
    HIDs, update PLL settings and avoid memory leaks. Given that the
    SoundWire core parts are not upstream it's probably not necessary to
    provide the patches to stable branches.

    Bard Liao (1):
    ASoC: Intel: sof_sdw_rt711: remove hard-coded codec name

    Kai Vehmanen (2):
    ASoC: Intel: sof_sdw: add support for systems without i915 audio
    ASoC: Intel: sof_sdw: avoid crash if invalid DSP topology loaded

    Libin Yang (1):
    ASoC: Intel: common: change match table ehl-rt5660

    Pierre-Louis Bossart (1):
    ASoC: Intel: sof_sdw_rt711: remove properties in card remove

    Yong Zhi (1):
    ASoC: intel: board: sof_rt5682: Update rt1015 pll input clk freq

    sound/soc/intel/boards/sof_rt5682.c | 9 +++++-
    sound/soc/intel/boards/sof_sdw.c | 31 +++++++++++++------
    sound/soc/intel/boards/sof_sdw_common.h | 2 ++
    sound/soc/intel/boards/sof_sdw_hdmi.c | 6 ++++
    sound/soc/intel/boards/sof_sdw_rt711.c | 17 +++++++++-
    .../intel/common/soc-acpi-intel-ehl-match.c | 2 +-
    6 files changed, 54 insertions(+), 13 deletions(-)

    base-commit: 22e9b54307987787efa0ee534aa9e31982ec1161
    --
    2.25.1

    Mark Brown
     
  • All drivers are now using .mute_stream.
    Let's remove .digital_mute.

    Signed-off-by: Kuninori Morimoto
    Reviewed-by: Peter Ujfalusi
    Link: https://lore.kernel.org/r/87h7u72dqz.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     

17 Jul, 2020

1 commit

  • snd_soc_dai_digital_mute() is internally using both
    mute_stream() (1) or digital_mute() (2), but the difference between
    these 2 are only handling "direction".
    We can merge digital_mute() into mute_stream

    int snd_soc_dai_digital_mute(xxx, int direction)
    {
    ...
    else if (dai->driver->ops->mute_stream)
    (1) return dai->driver->ops->mute_stream(xxx, direction);
    else if (direction == SNDRV_PCM_STREAM_PLAYBACK &&
    dai->driver->ops->digital_mute)
    (2) return dai->driver->ops->digital_mute(xxx);
    ...
    }

    To prepare merging mute_stream()/digital_mute(),
    this patch adds .no_capture_mute support to emulate .digital_mute().

    Signed-off-by: Kuninori Morimoto
    Link: https://lore.kernel.org/r/87eeplxxj7.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     

08 Jul, 2020

1 commit

  • Add a helper to walk through all the DAIs and set dpcm_playback and
    dpcm_capture flags based on the DAIs capabilities, and use this helper
    to avoid setting these flags arbitrarily in generic cards.

    The commit referenced in the Fixes tag did not introduce the
    configuration issue but will prevent the card from probing when
    detecting invalid configurations.

    Fixes: b73287f0b0745 ('ASoC: soc-pcm: dpcm: fix playback/capture checks')
    Signed-off-by: Pierre-Louis Bossart
    Reviewed-by: Kai Vehmanen
    Reviewed-by: Guennadi Liakhovetski
    Link: https://lore.kernel.org/r/20200707210439.115300-2-pierre-louis.bossart@linux.intel.com
    Signed-off-by: Mark Brown

    Pierre-Louis Bossart
     

29 May, 2020

1 commit

  • Recent changes result in multiple dmesg traces such as:

    [ 14.410435] Audio Port: ASoC: error at snd_soc_link_startup on Audio
    Port: 1

    [ 14.410446] sst-mfld-platform sst-mfld-platform: ASoC: error at
    snd_soc_dai_startup on media-cpu-dai: 1

    These messages are not really errors, when dai and dai-link callbacks
    return the value of e.g. snd_pcm_hw_constraint_single() the result is
    "Positive if the value is changed, zero if it's not changed, or a
    negative error code"

    Add a simple test to skip the checks for positive returned values

    Suggested-by: Kuninori Morimoto
    Signed-off-by: Pierre-Louis Bossart
    Link: https://lore.kernel.org/r/20200529123613.13447-1-pierre-louis.bossart@linux.intel.com
    Signed-off-by: Mark Brown

    Pierre-Louis Bossart
     

25 May, 2020

1 commit

  • dai_link related function should be implemented at soc-link.c.
    This patch adds snd_soc_link_be_hw_params_fixup().

    Signed-off-by: Kuninori Morimoto
    Reviewed-by: Ranjani Sridharan
    Reviewed-by: Pierre-Louis Bossart
    Link: https://lore.kernel.org/r/87wo503k73.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     

18 May, 2020

5 commits

  • No one is using dai->active, snd_soc_component_is_active().
    Let's remove these.

    Signed-off-by: Kuninori Morimoto
    Reviewed-by: Ranjani Sridharan
    Link: https://lore.kernel.org/r/87imgy58hp.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     
  • Signed-off-by: Kuninori Morimoto
    Reviewed-by: Ranjani Sridharan
    Link: https://lore.kernel.org/r/874ksi6n48.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     
  • Signed-off-by: Kuninori Morimoto
    Reviewed-by: Ranjani Sridharan
    Link: https://lore.kernel.org/r/875zcy6n4d.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     
  • Current snd_soc_dai_action() is updating
    dai->stream_active for Playback/Capture (A),
    dai->active for DAI (B)

    void snd_soc_dai_action(struct snd_soc_dai *dai,
    int stream, int action)
    {
    (A) dai->stream_active[stream] += action;
    (B) dai->active += action;
    dai->component->active += action;
    }

    But, these are very verbose, because we can calculate
    DAI active from stream_active.

    This patch adds snd_soc_dai_active() which calculate
    DAI active from DAI stream_active.

    Signed-off-by: Kuninori Morimoto
    Reviewed-by: Ranjani Sridharan
    Link: https://lore.kernel.org/r/877dxe6n4i.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     
  • snd_soc_runtime_action() updates DAI's xxx_active.
    We should update these in the same time, and
    it can be implemented at soc-dai.c.
    This patch adds snd_soc_dai_action() for it.
    This is prepare for xxx_active cleanup.

    Signed-off-by: Kuninori Morimoto
    Reviewed-by: Ranjani Sridharan
    Link: https://lore.kernel.org/r/87a72a6n4s.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     

29 Apr, 2020

17 commits

  • dai related function should be implemented at soc-dai.c.
    This patch adds snd_soc_dai_compr_get_metadata().

    Signed-off-by: Kuninori Morimoto
    Reviewed-By: Ranjani Sridharan
    Link: https://lore.kernel.org/r/87eesdssi8.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     
  • dai related function should be implemented at soc-dai.c.
    This patch adds snd_soc_dai_compr_set_metadata().

    Signed-off-by: Kuninori Morimoto
    Reviewed-By: Ranjani Sridharan
    Link: https://lore.kernel.org/r/87ftctssid.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     
  • dai related function should be implemented at soc-dai.c.
    This patch adds snd_soc_dai_compr_pointer().

    Signed-off-by: Kuninori Morimoto
    Reviewed-By: Ranjani Sridharan
    Link: https://lore.kernel.org/r/87h7x9ssii.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     
  • dai related function should be implemented at soc-dai.c.
    This patch adds snd_soc_dai_compr_ack().

    Signed-off-by: Kuninori Morimoto
    Reviewed-By: Ranjani Sridharan
    Link: https://lore.kernel.org/r/87imhpssim.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     
  • dai related function should be implemented at soc-dai.c.
    This patch adds snd_soc_dai_compr_get_params().

    Signed-off-by: Kuninori Morimoto
    Reviewed-By: Ranjani Sridharan
    Link: https://lore.kernel.org/r/87k125ssir.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     
  • dai related function should be implemented at soc-dai.c.
    This patch adds snd_soc_dai_compr_set_params().

    Signed-off-by: Kuninori Morimoto
    Reviewed-By: Ranjani Sridharan
    Link: https://lore.kernel.org/r/87lfmlssiv.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     
  • dai related function should be implemented at soc-dai.c.
    This patch adds snd_soc_dai_compr_trigger().

    Signed-off-by: Kuninori Morimoto
    Reviewed-By: Ranjani Sridharan
    Link: https://lore.kernel.org/r/87mu71ssiz.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     
  • dai related function should be implemented at soc-dai.c.
    This patch adds snd_soc_dai_compr_shutdown().

    Signed-off-by: Kuninori Morimoto
    Reviewed-By: Ranjani Sridharan
    Link: https://lore.kernel.org/r/87o8rhssj3.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     
  • dai related function should be implemented at soc-dai.c.
    This patch adds snd_soc_dai_compr_start().

    Signed-off-by: Kuninori Morimoto
    Reviewed-By: Ranjani Sridharan
    Link: https://lore.kernel.org/r/87pnbxssj7.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     
  • We have 2 type of component functions
    snd_soc_dai_xxx() is focusing to dai itself,
    snd_soc_pcm_dai_xxx() is focusing to rtd related dai.

    Now we can update snd_soc_dai_remove() to
    snd_soc_pcm_dai_remove(). This patch do it.

    Signed-off-by: Kuninori Morimoto
    Reviewed-By: Ranjani Sridharan
    Link: https://lore.kernel.org/r/87r1wdssjc.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     
  • We have 2 type of component functions
    snd_soc_dai_xxx() is focusing to dai itself,
    snd_soc_pcm_dai_xxx() is focusing to rtd related dai.

    Now we can update snd_soc_dai_probe() to
    snd_soc_pcm_dai_probe(). This patch do it.

    Signed-off-by: Kuninori Morimoto
    Reviewed-By: Ranjani Sridharan
    Link: https://lore.kernel.org/r/87sggtssjg.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     
  • We have 2 type of component functions
    snd_soc_dai_xxx() is focusing to dai itself,
    snd_soc_pcm_dai_xxx() is focusing to rtd related dai.

    Now we can update soc_pcm_bespoke_trigger() to
    snd_soc_pcm_dai_bespoke_trigger(). This patch do it.

    Signed-off-by: Kuninori Morimoto
    Reviewed-By: Ranjani Sridharan
    Link: https://lore.kernel.org/r/87tv19ssjm.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     
  • We have 2 type of component functions
    snd_soc_dai_xxx() is focusing to dai itself,
    snd_soc_pcm_dai_xxx() is focusing to rtd related dai.

    Now we can update snd_soc_dai_trigger() to
    snd_soc_pcm_dai_trigger(). This patch do it.

    Signed-off-by: Kuninori Morimoto
    Reviewed-By: Ranjani Sridharan
    Link: https://lore.kernel.org/r/87v9lpssjr.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     
  • We have 2 type of component functions
    snd_soc_dai_xxx() is focusing to dai itself,
    snd_soc_pcm_dai_xxx() is focusing to rtd related dai.

    Now we can update snd_soc_dai_prepare() to
    snd_soc_pcm_dai_prepare(). This patch do it.

    Signed-off-by: Kuninori Morimoto
    Reviewed-By: Ranjani Sridharan
    Link: https://lore.kernel.org/r/87wo65ssk2.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     
  • We have 2 type of component functions
    snd_soc_dai_xxx() is focusing to dai itself,
    snd_soc_pcm_dai_xxx() is focusing to rtd related dai.

    Now we can update soc_dai_pcm_new() to
    snd_soc_pcm_dai_new(). This patch do it.

    Signed-off-by: Kuninori Morimoto
    Reviewed-By: Ranjani Sridharan
    Link: https://lore.kernel.org/r/87y2qlssk7.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     
  • Current ASoC overwrites null_dai_ops to dai->driver->ops if it
    was NULL. But, we can remove it if framework always checks
    dai->driver->ops when it uses DAI callbacks.
    This patch do it, and removes null_dai_ops.

    Signed-off-by: Kuninori Morimoto
    Reviewed-By: Ranjani Sridharan
    Link: https://lore.kernel.org/r/87zhb1sskc.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     
  • At soc-dai.c, it is good idea to indicate error function and
    its component name if there was error.
    This patch adds soc_dai_err() for it.

    Signed-off-by: Kuninori Morimoto
    Reviewed-By: Ranjani Sridharan
    Link: https://lore.kernel.org/r/871rodu74x.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     

16 Apr, 2020

1 commit

  • On Baytrail/Cherrytrail, the Atom/SST driver fails miserably:

    [ 9.741953] intel_sst_acpi 80860F28:00: FW Version 01.0c.00.01
    [ 9.832992] intel_sst_acpi 80860F28:00: FW sent error response 0x40034
    [ 9.833019] intel_sst_acpi 80860F28:00: FW alloc failed ret -4
    [ 9.833028] intel_sst_acpi 80860F28:00: sst_get_stream returned err -5
    [ 9.833033] sst-mfld-platform sst-mfld-platform: ASoC: DAI prepare error: -5
    [ 9.833037] Baytrail Audio Port: ASoC: prepare FE Baytrail Audio Port failed
    [ 9.853942] intel_sst_acpi 80860F28:00: FW sent error response 0x40034
    [ 9.853974] intel_sst_acpi 80860F28:00: FW alloc failed ret -4
    [ 9.853984] intel_sst_acpi 80860F28:00: sst_get_stream returned err -5
    [ 9.853990] sst-mfld-platform sst-mfld-platform: ASoC: DAI prepare error: -5
    [ 9.853994] Baytrail Audio Port: ASoC: prepare FE Baytrail Audio Port failed

    Commit b56be800f1292 ("ASoC: soc-pcm: call
    snd_soc_dai_startup()/shutdown() once") was the initial problematic
    commit.

    Commit 1ba616bd1a6d5e ("ASoC: soc-dai: fix DAI startup/shutdown sequence")
    was an attempt to fix things but it does not work on Baytrail,
    reverting all changes seems necessary for now.

    Fixes: 1ba616bd1a6d5e ("ASoC: soc-dai: fix DAI startup/shutdown sequence")
    Signed-off-by: Pierre-Louis Bossart
    Tested-by: Hans de Goede
    Link: https://lore.kernel.org/r/20200415030437.23803-1-pierre-louis.bossart@linux.intel.com
    Signed-off-by: Mark Brown

    Pierre-Louis Bossart
     

31 Mar, 2020

1 commit

  • The addition of a single flag to track the DAI status prevents the DAI
    startup sequence from being called on capture if the DAI is already
    used for playback.

    Fix by extending the existing code with one flag per direction.

    Fixes: b56be800f1292 ("ASoC: soc-pcm: call snd_soc_dai_startup()/shutdown() once")
    Reported-by: Amadeusz Sławiński
    Signed-off-by: Pierre-Louis Bossart
    Tested-by: Amadeusz Sławiński
    Link: https://lore.kernel.org/r/20200330160602.10180-1-pierre-louis.bossart@linux.intel.com
    Signed-off-by: Mark Brown

    Pierre-Louis Bossart
     

25 Feb, 2020

1 commit

  • DAI driver has playback/capture stream.
    OTOH, we have SNDRV_PCM_STREAM_PLAYBACK/CAPTURE.
    Because of this kind of implementation,
    ALSA SoC needs to have many verbose code.

    To solve this issue, this patch adds snd_soc_dai_get_pcm_stream() macro
    to get playback/capture stream pointer from stream.

    Signed-off-by: Kuninori Morimoto
    Link: https://lore.kernel.org/r/87ftf7jcab.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     

11 Feb, 2020

1 commit

  • Current soc_pcm_open() calls snd_soc_dai_startup() under loop.
    Thus, it needs to care about started/not-yet-started codec DAI.

    But, if soc-dai.c is handling it, soc-pcm.c don't need to care
    about it.
    This patch adds started flag to soc-dai.h, and simplify soc-pcm.c.
    This is one of prepare for cleanup soc-pcm-open()

    Signed-off-by: Kuninori Morimoto
    Link: https://lore.kernel.org/r/875zgfcey5.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     

22 Jan, 2020

1 commit

  • Historically, CPU and Codec were implemented different, but now it is
    merged as Component.
    ALSA SoC is supporting suspend/resume at DAI and Component level.
    The method is like below.

    1) Suspend/Resume all CPU DAI if bus-control was 0
    2) Suspend/Resume all Component
    3) Suspend/Resume all CPU DAI if bus-control was 1

    Historically 2) was Codec special operation.
    Because CPU and Codec were merged into Component,
    CPU suspend/resume has 3 chance to suspend(= 1/2/3), but
    Codec suspend/resume has 1 chance (= 2).

    Here, DAI side suspend/resume is caring bus-control, but no driver
    which is supporting suspend/resume is setting bus-control.
    This means 3) was never used.

    Here, used parameter for suspend/resume component->dev and dai->dev are
    same pointer.
    For that reason, we can merge DAI and Component suspend/resume.
    One note is that we should use 2), because it is caring BIAS level.

    This patch removes 1) and 3).

    Signed-off-by: Kuninori Morimoto
    Link: https://lore.kernel.org/r/87r1zvx7i8.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     

24 Jul, 2019

2 commits

  • snd_soc_dai_stream_valid() is function to check stream validity.
    But, some code is using it, some code are checking stream->channels_min
    directly. Doing samethings by different method is confusable.
    This patch uses same funcntion for same purpose.

    Signed-off-by: Kuninori Morimoto
    Link: https://lore.kernel.org/r/87ftmyhmzz.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto
     
  • Current ALSA SoC is directly using dai->driver->xxx,
    thus, it has deep nested bracket, and it makes code unreadable.
    This patch adds new snd_soc_dai_compress_new() and use it.

    Signed-off-by: Kuninori Morimoto
    Link: https://lore.kernel.org/r/87h87ehn1a.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown

    Kuninori Morimoto