All of lore.kernel.org
 help / color / mirror / Atom feed
From: Takashi Iwai <tiwai@suse.de>
To: Lucas Tanure <tanureal@opensource.cirrus.com>
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Elia Devito <eliadevito@gmail.com>,
	"Rafael J . Wysocki" <rafael@kernel.org>,
	alsa-devel@alsa-project.org,
	Werner Sembach <wse@tuxedocomputers.com>,
	Liam Girdwood <lgirdwood@gmail.com>,
	Shuming Fan <shumingf@realtek.com>,
	Lars-Peter Clausen <lars@metafoo.de>,
	Vitaly Rodionov <vitalyr@opensource.cirrus.com>,
	Jeremy Szu <jeremy.szu@canonical.com>,
	Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>,
	Hui Wang <hui.wang@canonical.com>,
	linux-acpi@vger.kernel.org, Sami Loone <sami@loone.fi>,
	Len Brown <lenb@kernel.org>,
	platform-driver-x86@vger.kernel.org,
	Chris Chiu <chris.chiu@canonical.com>,
	Arnd Bergmann <arnd@arndb.de>, Mark Gross <markgross@kernel.org>,
	Hans de Goede <hdegoede@redhat.com>,
	Mark Brown <broonie@kernel.org>,
	Cameron Berkenpas <cam@neo-zeon.de>,
	Jack Yu <jack.yu@realtek.com>, Kailang Yang <kailang@realtek.com>,
	patches@opensource.cirrus.com, Takashi Iwai <tiwai@suse.com>,
	linux-kernel@vger.kernel.org,
	David Rhodes <david.rhodes@cirrus.com>
Subject: Re: [PATCH 10/11] hda: cs35l41: Add support for CS35L41 in HDA systems
Date: Tue, 23 Nov 2021 17:52:34 +0100	[thread overview]
Message-ID: <s5hzgpu95m5.wl-tiwai@suse.de> (raw)
In-Reply-To: <20211123163149.1530535-11-tanureal@opensource.cirrus.com>

On Tue, 23 Nov 2021 17:31:48 +0100,
Lucas Tanure wrote:
> 
> --- a/sound/pci/hda/Makefile
> +++ b/sound/pci/hda/Makefile
> @@ -13,25 +13,27 @@ snd-hda-codec-$(CONFIG_SND_HDA_INPUT_BEEP) += hda_beep.o
>  CFLAGS_hda_controller.o := -I$(src)
>  CFLAGS_hda_intel.o := -I$(src)
>  
> -snd-hda-codec-generic-objs :=	hda_generic.o
> -snd-hda-codec-realtek-objs :=	patch_realtek.o
> -snd-hda-codec-cmedia-objs :=	patch_cmedia.o
> -snd-hda-codec-analog-objs :=	patch_analog.o
> -snd-hda-codec-idt-objs :=	patch_sigmatel.o
> -snd-hda-codec-si3054-objs :=	patch_si3054.o
> -snd-hda-codec-cirrus-objs :=	patch_cirrus.o
> -snd-hda-codec-cs8409-objs :=	patch_cs8409.o patch_cs8409-tables.o
> -snd-hda-codec-ca0110-objs :=	patch_ca0110.o
> -snd-hda-codec-ca0132-objs :=	patch_ca0132.o
> -snd-hda-codec-conexant-objs :=	patch_conexant.o
> -snd-hda-codec-via-objs :=	patch_via.o
> -snd-hda-codec-hdmi-objs :=	patch_hdmi.o hda_eld.o
> +snd-hda-codec-generic-objs :=		hda_generic.o

You don't need to change other lines because of the newly added driver
below...

> +snd-hda-codec-cs35l41-i2c-objs :=	cs35l41_hda_i2c.o cs35l41_hda.o ../../soc/codecs/cs35l41-lib.o

Linking the object in a different level of directory is too ugly and
would be problematic if multiple drivers want the cs35l41-lib stuff.
IMO, it's better to make symbols in cs35l41-lib exported and select
the corresponding Kconfig from HD-audio driver.

And, snd-hda-codec-cs35l41-i2c is not really a codec driver.  It's
rather some bridge for i2c over HD-audio.  So, better to avoid
snd-hda-codec-* but have some different name.  Otherwise people may
misunderstand.

> --- a/sound/pci/hda/patch_realtek.c
> +++ b/sound/pci/hda/patch_realtek.c
(snip)
> @@ -6497,6 +6502,98 @@ static void alc287_fixup_legion_15imhg05_speakers(struct hda_codec *codec,
>  	}
>  }
>  
> +static int comp_match_dev_name(struct device *dev, void *data)
> +{
> +	if (strcmp(dev_name(dev), data) == 0)
> +		return 1;
> +
> +	return 0;
> +}
> +
> +static int find_comp_by_dev_name(struct alc_spec *spec, const char *name)
> +{
> +	int i;
> +
> +	for (i = 0; i < HDA_MAX_COMPONENTS; i++) {
> +		if (strcmp(spec->comps[i].name, name) == 0)
> +			return i;
> +	}
> +
> +	return -ENODEV;
> +}
> +
> +static int comp_bind(struct device *dev)
> +{
> +	struct hda_codec *codec = dev_to_hda_codec(dev);
> +	struct alc_spec *spec = codec->spec;
> +
> +	return component_bind_all(dev, spec->comps);
> +}
> +
> +static void comp_unbind(struct device *dev)
> +{
> +	struct hda_codec *codec = dev_to_hda_codec(dev);
> +	struct alc_spec *spec = codec->spec;
> +
> +	component_unbind_all(dev, spec->comps);
> +}
> +
> +static const struct component_master_ops comp_master_ops = {
> +	.bind = comp_bind,
> +	.unbind = comp_unbind,
> +};
> +
> +void alc287_legion_16achg6_playback_hook(struct hda_pcm_stream *hinfo, struct hda_codec *codec,
> +					 struct snd_pcm_substream *sub, int action)
> +{
> +	struct alc_spec *spec = codec->spec;
> +	unsigned int rx_slot;
> +	int i = 0;
> +
> +	switch (action) {
> +	case HDA_GEN_PCM_ACT_PREPARE:
> +		rx_slot = 0;
> +		i = find_comp_by_dev_name(spec, "i2c-CLSA0100:00-cs35l41-hda.0");
> +		if (i >= 0)
> +			spec->comps[i].set_channel_map(spec->comps[i].dev, 0, NULL, 1, &rx_slot);
> +
> +		rx_slot = 1;
> +		i = find_comp_by_dev_name(spec, "i2c-CLSA0100:00-cs35l41-hda.1");
> +		if (i >= 0)
> +			spec->comps[i].set_channel_map(spec->comps[i].dev, 0, NULL, 1, &rx_slot);
> +		break;
> +	}
> +
> +	for (i = 0; i < HDA_MAX_COMPONENTS; i++) {
> +		if (spec->comps[i].dev)
> +			spec->comps[i].playback_hook(spec->comps[i].dev, action);
> +	}
> +
> +
> +}
> +
> +static void alc287_fixup_legion_16achg6_speakers(struct hda_codec *codec,
> +						 const struct hda_fixup *fix, int action)
> +{
> +	struct device *dev = hda_codec_dev(codec);
> +	struct alc_spec *spec = codec->spec;
> +	int ret;
> +
> +	switch (action) {
> +	case HDA_FIXUP_ACT_PRE_PROBE:
> +		component_match_add(dev, &spec->match, comp_match_dev_name,
> +				    "i2c-CLSA0100:00-cs35l41-hda.0");
> +		component_match_add(dev, &spec->match, comp_match_dev_name,
> +				    "i2c-CLSA0100:00-cs35l41-hda.1");
> +		ret = component_master_add_with_match(dev, &comp_master_ops, spec->match);
> +		if (ret)
> +			codec_err(codec, "Fail to register component aggregator %d\n", ret);
> +		else
> +			spec->gen.pcm_playback_hook = alc287_legion_16achg6_playback_hook;
> +		break;
> +	}
> +}
> +

Those are needed only if the new cs35l41 stuff is enabled, so they can
be wrapped with #if IS_REACHABLE(xxx).


thanks,

Takashi

WARNING: multiple messages have this Message-ID (diff)
From: Takashi Iwai <tiwai@suse.de>
To: Lucas Tanure <tanureal@opensource.cirrus.com>
Cc: "Rafael J . Wysocki" <rafael@kernel.org>,
	Len Brown <lenb@kernel.org>, Hans de Goede <hdegoede@redhat.com>,
	Mark Gross <markgross@kernel.org>,
	"Liam Girdwood" <lgirdwood@gmail.com>,
	Jaroslav Kysela <perex@perex.cz>, Mark Brown <broonie@kernel.org>,
	Takashi Iwai <tiwai@suse.com>, Kailang Yang <kailang@realtek.com>,
	Shuming Fan <shumingf@realtek.com>,
	"Pierre-Louis Bossart" <pierre-louis.bossart@linux.intel.com>,
	David Rhodes <david.rhodes@cirrus.com>,
	Vitaly Rodionov <vitalyr@opensource.cirrus.com>,
	Jeremy Szu <jeremy.szu@canonical.com>,
	Hui Wang <hui.wang@canonical.com>,
	Werner Sembach <wse@tuxedocomputers.com>,
	Chris Chiu <chris.chiu@canonical.com>,
	Cameron Berkenpas <cam@neo-zeon.de>, Sami Loone <sami@loone.fi>,
	Elia Devito <eliadevito@gmail.com>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Jack Yu <jack.yu@realtek.com>, "Arnd Bergmann" <arnd@arndb.de>,
	Lars-Peter Clausen <lars@metafoo.de>,
	"Alexandre Belloni" <alexandre.belloni@bootlin.com>,
	<alsa-devel@alsa-project.org>, <linux-acpi@vger.kernel.org>,
	<patches@opensource.cirrus.com>,
	<platform-driver-x86@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 10/11] hda: cs35l41: Add support for CS35L41 in HDA systems
Date: Tue, 23 Nov 2021 17:52:34 +0100	[thread overview]
Message-ID: <s5hzgpu95m5.wl-tiwai@suse.de> (raw)
In-Reply-To: <20211123163149.1530535-11-tanureal@opensource.cirrus.com>

On Tue, 23 Nov 2021 17:31:48 +0100,
Lucas Tanure wrote:
> 
> --- a/sound/pci/hda/Makefile
> +++ b/sound/pci/hda/Makefile
> @@ -13,25 +13,27 @@ snd-hda-codec-$(CONFIG_SND_HDA_INPUT_BEEP) += hda_beep.o
>  CFLAGS_hda_controller.o := -I$(src)
>  CFLAGS_hda_intel.o := -I$(src)
>  
> -snd-hda-codec-generic-objs :=	hda_generic.o
> -snd-hda-codec-realtek-objs :=	patch_realtek.o
> -snd-hda-codec-cmedia-objs :=	patch_cmedia.o
> -snd-hda-codec-analog-objs :=	patch_analog.o
> -snd-hda-codec-idt-objs :=	patch_sigmatel.o
> -snd-hda-codec-si3054-objs :=	patch_si3054.o
> -snd-hda-codec-cirrus-objs :=	patch_cirrus.o
> -snd-hda-codec-cs8409-objs :=	patch_cs8409.o patch_cs8409-tables.o
> -snd-hda-codec-ca0110-objs :=	patch_ca0110.o
> -snd-hda-codec-ca0132-objs :=	patch_ca0132.o
> -snd-hda-codec-conexant-objs :=	patch_conexant.o
> -snd-hda-codec-via-objs :=	patch_via.o
> -snd-hda-codec-hdmi-objs :=	patch_hdmi.o hda_eld.o
> +snd-hda-codec-generic-objs :=		hda_generic.o

You don't need to change other lines because of the newly added driver
below...

> +snd-hda-codec-cs35l41-i2c-objs :=	cs35l41_hda_i2c.o cs35l41_hda.o ../../soc/codecs/cs35l41-lib.o

Linking the object in a different level of directory is too ugly and
would be problematic if multiple drivers want the cs35l41-lib stuff.
IMO, it's better to make symbols in cs35l41-lib exported and select
the corresponding Kconfig from HD-audio driver.

And, snd-hda-codec-cs35l41-i2c is not really a codec driver.  It's
rather some bridge for i2c over HD-audio.  So, better to avoid
snd-hda-codec-* but have some different name.  Otherwise people may
misunderstand.

> --- a/sound/pci/hda/patch_realtek.c
> +++ b/sound/pci/hda/patch_realtek.c
(snip)
> @@ -6497,6 +6502,98 @@ static void alc287_fixup_legion_15imhg05_speakers(struct hda_codec *codec,
>  	}
>  }
>  
> +static int comp_match_dev_name(struct device *dev, void *data)
> +{
> +	if (strcmp(dev_name(dev), data) == 0)
> +		return 1;
> +
> +	return 0;
> +}
> +
> +static int find_comp_by_dev_name(struct alc_spec *spec, const char *name)
> +{
> +	int i;
> +
> +	for (i = 0; i < HDA_MAX_COMPONENTS; i++) {
> +		if (strcmp(spec->comps[i].name, name) == 0)
> +			return i;
> +	}
> +
> +	return -ENODEV;
> +}
> +
> +static int comp_bind(struct device *dev)
> +{
> +	struct hda_codec *codec = dev_to_hda_codec(dev);
> +	struct alc_spec *spec = codec->spec;
> +
> +	return component_bind_all(dev, spec->comps);
> +}
> +
> +static void comp_unbind(struct device *dev)
> +{
> +	struct hda_codec *codec = dev_to_hda_codec(dev);
> +	struct alc_spec *spec = codec->spec;
> +
> +	component_unbind_all(dev, spec->comps);
> +}
> +
> +static const struct component_master_ops comp_master_ops = {
> +	.bind = comp_bind,
> +	.unbind = comp_unbind,
> +};
> +
> +void alc287_legion_16achg6_playback_hook(struct hda_pcm_stream *hinfo, struct hda_codec *codec,
> +					 struct snd_pcm_substream *sub, int action)
> +{
> +	struct alc_spec *spec = codec->spec;
> +	unsigned int rx_slot;
> +	int i = 0;
> +
> +	switch (action) {
> +	case HDA_GEN_PCM_ACT_PREPARE:
> +		rx_slot = 0;
> +		i = find_comp_by_dev_name(spec, "i2c-CLSA0100:00-cs35l41-hda.0");
> +		if (i >= 0)
> +			spec->comps[i].set_channel_map(spec->comps[i].dev, 0, NULL, 1, &rx_slot);
> +
> +		rx_slot = 1;
> +		i = find_comp_by_dev_name(spec, "i2c-CLSA0100:00-cs35l41-hda.1");
> +		if (i >= 0)
> +			spec->comps[i].set_channel_map(spec->comps[i].dev, 0, NULL, 1, &rx_slot);
> +		break;
> +	}
> +
> +	for (i = 0; i < HDA_MAX_COMPONENTS; i++) {
> +		if (spec->comps[i].dev)
> +			spec->comps[i].playback_hook(spec->comps[i].dev, action);
> +	}
> +
> +
> +}
> +
> +static void alc287_fixup_legion_16achg6_speakers(struct hda_codec *codec,
> +						 const struct hda_fixup *fix, int action)
> +{
> +	struct device *dev = hda_codec_dev(codec);
> +	struct alc_spec *spec = codec->spec;
> +	int ret;
> +
> +	switch (action) {
> +	case HDA_FIXUP_ACT_PRE_PROBE:
> +		component_match_add(dev, &spec->match, comp_match_dev_name,
> +				    "i2c-CLSA0100:00-cs35l41-hda.0");
> +		component_match_add(dev, &spec->match, comp_match_dev_name,
> +				    "i2c-CLSA0100:00-cs35l41-hda.1");
> +		ret = component_master_add_with_match(dev, &comp_master_ops, spec->match);
> +		if (ret)
> +			codec_err(codec, "Fail to register component aggregator %d\n", ret);
> +		else
> +			spec->gen.pcm_playback_hook = alc287_legion_16achg6_playback_hook;
> +		break;
> +	}
> +}
> +

Those are needed only if the new cs35l41 stuff is enabled, so they can
be wrapped with #if IS_REACHABLE(xxx).


thanks,

Takashi

  reply	other threads:[~2021-11-24  7:12 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-23 16:31 [PATCH v3 00/11] Add support for Legion 7 16ACHg6 laptop Lucas Tanure
2021-11-23 16:31 ` Lucas Tanure
2021-11-23 16:31 ` [PATCH 01/11] ASoC: cs35l41: Set the max SPI speed for the whole device Lucas Tanure
2021-11-23 16:31   ` Lucas Tanure
2021-11-23 18:02   ` Charles Keepax
2021-11-23 18:02     ` Charles Keepax
2021-11-23 16:31 ` [PATCH 02/11] ASoC: cs35l41: Convert tables to shared source code Lucas Tanure
2021-11-23 16:31   ` Lucas Tanure
2021-11-23 17:53   ` Mark Brown
2021-11-23 17:53     ` Mark Brown
2021-11-23 18:05     ` Charles Keepax
2021-11-23 18:05       ` Charles Keepax
2021-11-24  1:34   ` kernel test robot
2021-11-24  1:34     ` kernel test robot
2021-11-23 16:31 ` [PATCH 03/11] ASoC: cs35l41: Move regmap config struct to shared code Lucas Tanure
2021-11-23 16:31   ` Lucas Tanure
2021-11-23 17:20   ` Mark Brown
2021-11-23 17:20     ` Mark Brown
2021-11-23 16:31 ` [PATCH 04/11] ASoC: cs35l41: Create function for init array of Supplies Lucas Tanure
2021-11-23 16:31   ` Lucas Tanure
2021-11-23 17:58   ` Mark Brown
2021-11-23 17:58     ` Mark Brown
2021-11-24 13:31     ` Mark Brown
2021-11-23 16:31 ` [PATCH 05/11] ASoC: cs35l41: Move cs35l41_otp_unpack to shared code Lucas Tanure
2021-11-23 16:31   ` Lucas Tanure
2021-11-23 16:31 ` [PATCH 06/11] ASoC: cs35l41: Move power initializations to reg_sequence Lucas Tanure
2021-11-23 16:31   ` Lucas Tanure
2021-11-23 16:31 ` [PATCH 07/11] ASoC: cs35l41: Create shared function for errata patches Lucas Tanure
2021-11-23 16:31   ` Lucas Tanure
2021-11-23 16:31 ` [PATCH 08/11] ASoC: cs35l41: Create shared function for setting channels Lucas Tanure
2021-11-23 16:31   ` Lucas Tanure
2021-11-23 16:31 ` [PATCH 09/11] ASoC: cs35l41: Create shared function for boost configuration Lucas Tanure
2021-11-23 16:31   ` Lucas Tanure
2021-11-23 16:31 ` [PATCH 10/11] hda: cs35l41: Add support for CS35L41 in HDA systems Lucas Tanure
2021-11-23 16:31   ` Lucas Tanure
2021-11-23 16:52   ` Takashi Iwai [this message]
2021-11-23 16:52     ` Takashi Iwai
2021-11-23 16:59   ` Pierre-Louis Bossart
2021-11-23 16:59     ` Pierre-Louis Bossart
2021-11-23 17:06     ` tanureal
2021-11-23 17:16       ` Pierre-Louis Bossart
2021-11-23 17:15   ` Mark Brown
2021-11-23 17:15     ` Mark Brown
2021-11-24  3:18   ` kernel test robot
2021-11-23 16:31 ` [PATCH 11/11] ACPI / scan: Create platform device for CLSA0100 ACPI nodes Lucas Tanure
2021-11-23 16:31   ` Lucas Tanure
2021-11-23 17:05   ` Hans de Goede
2021-11-23 17:05     ` Hans de Goede
2021-11-23 17:11     ` Lucas tanure
2021-11-23 17:11       ` Lucas tanure
2021-11-23 18:35       ` Hans de Goede
2021-11-23 18:35         ` Hans de Goede
2021-11-23 23:01         ` Andy Shevchenko
2021-11-23 23:01           ` Andy Shevchenko
2021-11-24 17:36 ` (subset) [PATCH v3 00/11] Add support for Legion 7 16ACHg6 laptop 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=s5hzgpu95m5.wl-tiwai@suse.de \
    --to=tiwai@suse.de \
    --cc=alexandre.belloni@bootlin.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=arnd@arndb.de \
    --cc=broonie@kernel.org \
    --cc=cam@neo-zeon.de \
    --cc=chris.chiu@canonical.com \
    --cc=david.rhodes@cirrus.com \
    --cc=eliadevito@gmail.com \
    --cc=hdegoede@redhat.com \
    --cc=hui.wang@canonical.com \
    --cc=jack.yu@realtek.com \
    --cc=jeremy.szu@canonical.com \
    --cc=kailang@realtek.com \
    --cc=lars@metafoo.de \
    --cc=lenb@kernel.org \
    --cc=lgirdwood@gmail.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=markgross@kernel.org \
    --cc=patches@opensource.cirrus.com \
    --cc=pierre-louis.bossart@linux.intel.com \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=rafael@kernel.org \
    --cc=sami@loone.fi \
    --cc=shumingf@realtek.com \
    --cc=tanureal@opensource.cirrus.com \
    --cc=tiwai@suse.com \
    --cc=vitalyr@opensource.cirrus.com \
    --cc=wse@tuxedocomputers.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.