linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Charles Keepax <ckeepax@opensource.cirrus.com>
To: Vitaly Rodionov <vitalyr@opensource.cirrus.com>
Cc: Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
	Mark Brown <broonie@kernel.org>, <alsa-devel@alsa-project.org>,
	<patches@opensource.cirrus.com>, <linux-kernel@vger.kernel.org>,
	Stefan Binding <sbinding@opensource.cirrus.com>
Subject: Re: [PATCH v4 01/17] ALSA: hda: hda_cs_dsp_ctl: Add Library to support CS_DSP ALSA controls
Date: Thu, 26 May 2022 09:30:01 +0000	[thread overview]
Message-ID: <20220526093001.GP38351@ediswmail.ad.cirrus.com> (raw)
In-Reply-To: <20220525131638.5512-2-vitalyr@opensource.cirrus.com>

On Wed, May 25, 2022 at 02:16:22PM +0100, Vitaly Rodionov wrote:
> From: Stefan Binding <sbinding@opensource.cirrus.com>
> 
> The cs35l41 part contains a DSP which is able to run firmware.
> The cs_dsp library can be used to control the DSP.
> These controls can be exposed to userspace using ALSA controls.
> This library adds apis to be able to interface between
> cs_dsp and hda drivers and expose the relevant controls as
> ALSA controls.
> 
> The apis to add and remove the controls start new threads when
> adding/removing controls since it is possible that setting an ALSA
> control would end up calling this api, which would then deadlock.
> 
> In the future, it will be necessary to load/unload firmware (and
> firmware ALSA controls) using a separate ALSA control, which means
> that the ability to call these apis from another ALSA control is
> required.
> 
> Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com>
> Signed-off-by: Vitaly Rodionov <vitalyr@opensource.cirrus.com>
> ---
>  
> Changes since v2:
>  - Updated commit message to describe reasons
>    for adding/removing controls asynchronously
>  - Removed unnecessary code which handled unused
>    tlv or acked controls.
>  - Removed code which handled outdate firmware
>    versions when adding controls
>  
> +static unsigned int wmfw_convert_flags(unsigned int in, unsigned int len)
> +{
> +	unsigned int out, rd, wr, vol;
> +
> +	if (len > ADSP_MAX_STD_CTRL_SIZE) {
> +		rd = SNDRV_CTL_ELEM_ACCESS_TLV_READ;
> +		wr = SNDRV_CTL_ELEM_ACCESS_TLV_WRITE;
> +		vol = SNDRV_CTL_ELEM_ACCESS_VOLATILE;
> +
> +		out = SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK;
> +	} else {
> +		rd = SNDRV_CTL_ELEM_ACCESS_READ;
> +		wr = SNDRV_CTL_ELEM_ACCESS_WRITE;
> +		vol = SNDRV_CTL_ELEM_ACCESS_VOLATILE;
> +
> +		out = 0;
> +	}

This if should be changed if we are no longer supporting the TLV
controls, you want to report an error if we exceed the max
control size not switch to the TLV access flags.

> +static void hda_cs_dsp_ctl_add_work(struct work_struct *work)
> +{
> +	struct hda_cs_dsp_coeff_ctl *ctl = container_of(work,
> +							struct hda_cs_dsp_coeff_ctl,
> +							add_work);
> +	struct cs_dsp_coeff_ctl *cs_ctl = ctl->cs_ctl;
> +	struct snd_kcontrol_new *kcontrol;
> +
> +	kcontrol = kzalloc(sizeof(*kcontrol), GFP_KERNEL);
> +	if (!kcontrol)
> +		return;
> +
> +	kcontrol->name = ctl->name;
> +	kcontrol->info = hda_cs_dsp_coeff_info;
> +	kcontrol->iface = SNDRV_CTL_ELEM_IFACE_MIXER;
> +	kcontrol->tlv.c = snd_soc_bytes_tlv_callback;
> +	kcontrol->private_value = (unsigned long)&ctl->bytes_ext;

Don't need to set tlv.c or the private_value for bytes_ext if we
are not using TLVs.

> +struct hda_cs_dsp_ctl_info {
> +	struct snd_card *card;
> +	enum hda_cs_dsp_fw_id fw_type;
> +	const char *amp_name;

Might be better to call this something slightly more generic than
amp_name. Just incase this stuff gets used with a CODEC or
something in the future.

Thanks,
Charles

  reply	other threads:[~2022-05-26  9:30 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-25 13:16 [PATCH v4 00/17] ALSA: hda: cirrus: Add initial DSP support and firmware loading Vitaly Rodionov
2022-05-25 13:16 ` [PATCH v4 01/17] ALSA: hda: hda_cs_dsp_ctl: Add Library to support CS_DSP ALSA controls Vitaly Rodionov
2022-05-26  9:30   ` Charles Keepax [this message]
2022-05-25 13:16 ` [PATCH v4 02/17] ALSA: hda: hda_cs_dsp_ctl: Add apis to write the controls directly Vitaly Rodionov
2022-05-26  9:36   ` Charles Keepax
2022-05-25 13:16 ` [PATCH v4 03/17] ALSA: hda: cs35l41: Save codec object inside component struct Vitaly Rodionov
2022-05-25 13:16 ` [PATCH v4 04/17] ALSA: hda: cs35l41: Add initial DSP support and firmware loading Vitaly Rodionov
2022-05-25 13:16 ` [PATCH v4 05/17] ALSA: hda: cs35l41: Save Subsystem ID inside CS35L41 Driver Vitaly Rodionov
2022-05-25 13:16 ` [PATCH v4 06/17] ALSA: hda: cs35l41: Support reading subsystem id from ACPI Vitaly Rodionov
2022-05-25 13:16 ` [PATCH v4 07/17] ALSA: hda: cs35l41: Support multiple load paths for firmware Vitaly Rodionov
2022-05-25 13:16 ` [PATCH v4 08/17] ALSA: hda: cs35l41: Support Speaker ID for laptops Vitaly Rodionov
2022-05-25 13:16 ` [PATCH v4 09/17] ASoC: cs35l41: Move cs35l41 exit hibernate function into shared code Vitaly Rodionov
2022-05-25 13:16 ` [PATCH v4 10/17] ASoC: cs35l41: Do not print error when waking from hibernation Vitaly Rodionov
2022-05-26  9:08   ` Charles Keepax
2022-05-25 13:16 ` [PATCH v4 11/17] ASoC: cs35l41: Add common cs35l41 enter hibernate function Vitaly Rodionov
2022-05-25 13:16 ` [PATCH v4 12/17] ALSA: hda: cs35l41: Support Hibernation during Suspend Vitaly Rodionov
2022-05-25 13:16 ` [PATCH v4 13/17] ALSA: hda: cs35l41: Read Speaker Calibration data from UEFI variables Vitaly Rodionov
2022-05-25 13:16 ` [PATCH v4 14/17] ALSA: hda: hda_cs_dsp_ctl: Add fw id strings Vitaly Rodionov
2022-05-25 13:16 ` [PATCH v4 15/17] ALSA: hda: cs35l41: Add defaulted values into dsp bypass config sequence Vitaly Rodionov
2022-05-25 13:16 ` [PATCH v4 16/17] ALSA: hda: cs35l41: Support Firmware switching and reloading Vitaly Rodionov
2022-05-30 11:31   ` Jaroslav Kysela
2022-05-25 13:16 ` [PATCH v4 17/17] ALSA: hda: cs35l41: Add module parameter to control firmware load Vitaly Rodionov
2022-05-27 16:13 ` [PATCH v4 00/17] ALSA: hda: cirrus: Add initial DSP support and firmware loading Takashi Iwai
2022-05-30  9:08   ` Charles Keepax
2022-05-30  9:18     ` Takashi Iwai
2022-05-30  9:36       ` Charles Keepax
2022-05-30 10:14         ` Takashi Iwai
2022-05-30 10:34           ` Charles Keepax
2022-05-30 10:45             ` Takashi Iwai
2022-05-30 10:53               ` Charles Keepax
2022-05-30 11:07                 ` Takashi Iwai
2022-05-30 11:40                   ` Jaroslav Kysela
2022-06-01 16:43               ` Richard Fitzgerald
2022-06-01 19:13                 ` Takashi Iwai
2022-06-07 10:55 ` (subset) " Mark Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220526093001.GP38351@ediswmail.ad.cirrus.com \
    --to=ckeepax@opensource.cirrus.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=patches@opensource.cirrus.com \
    --cc=perex@perex.cz \
    --cc=sbinding@opensource.cirrus.com \
    --cc=tiwai@suse.com \
    --cc=vitalyr@opensource.cirrus.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).