Skip to content

Commit

Permalink
Revert "ASoC: Intel: sof_sdw_rt711*: keep codec device reference unti…
Browse files Browse the repository at this point in the history
…l remove"

This reverts commit f8b6c2b.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
  • Loading branch information
plbossart committed Aug 13, 2021
1 parent 49079fd commit 2a0ab4d
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 38 deletions.
44 changes: 25 additions & 19 deletions sound/soc/intel/boards/sof_sdw_rt711.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,25 @@
* Note this MUST be called before snd_soc_register_card(), so that the props
* are in place before the codec component driver's probe function parses them.
*/
static int rt711_add_codec_device_props(struct device *sdw_dev)
static int rt711_add_codec_device_props(const char *sdw_dev_name)
{
struct property_entry props[MAX_NO_PROPS] = {};
struct device *sdw_dev;
int ret;

if (!SOF_RT711_JDSRC(sof_sdw_quirk))
return 0;
props[0] = PROPERTY_ENTRY_U32("realtek,jd-src", SOF_RT711_JDSRC(sof_sdw_quirk));
sdw_dev = bus_find_device_by_name(&sdw_bus_type, NULL, sdw_dev_name);
if (!sdw_dev)
return -EPROBE_DEFER;

return device_add_properties(sdw_dev, props);
if (SOF_RT711_JDSRC(sof_sdw_quirk)) {
props[0] = PROPERTY_ENTRY_U32("realtek,jd-src",
SOF_RT711_JDSRC(sof_sdw_quirk));
}

ret = device_add_properties(sdw_dev, props);
put_device(sdw_dev);

return ret;
}

static const struct snd_soc_dapm_widget rt711_widgets[] = {
Expand Down Expand Up @@ -127,10 +137,15 @@ static int rt711_rtd_init(struct snd_soc_pcm_runtime *rtd)

int sof_sdw_rt711_exit(struct snd_soc_card *card, struct snd_soc_dai_link *dai_link)
{
struct mc_private *ctx = snd_soc_card_get_drvdata(card);
struct device *sdw_dev;

sdw_dev = bus_find_device_by_name(&sdw_bus_type, NULL,
dai_link->codecs[0].name);
if (!sdw_dev)
return -EINVAL;

device_remove_properties(ctx->headset_codec_dev);
put_device(ctx->headset_codec_dev);
device_remove_properties(sdw_dev);
put_device(sdw_dev);

return 0;
}
Expand All @@ -141,8 +156,6 @@ int sof_sdw_rt711_init(struct snd_soc_card *card,
struct sof_sdw_codec_info *info,
bool playback)
{
struct mc_private *ctx = snd_soc_card_get_drvdata(card);
struct device *sdw_dev;
int ret;

/*
Expand All @@ -152,16 +165,9 @@ int sof_sdw_rt711_init(struct snd_soc_card *card,
if (!playback)
return 0;

sdw_dev = bus_find_device_by_name(&sdw_bus_type, NULL, dai_links->codecs[0].name);
if (!sdw_dev)
return -EPROBE_DEFER;

ret = rt711_add_codec_device_props(sdw_dev);
if (ret < 0) {
put_device(sdw_dev);
ret = rt711_add_codec_device_props(dai_links->codecs[0].name);
if (ret < 0)
return ret;
}
ctx->headset_codec_dev = sdw_dev;

dai_links->init = rt711_rtd_init;

Expand Down
43 changes: 24 additions & 19 deletions sound/soc/intel/boards/sof_sdw_rt711_sdca.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,25 @@
* Note this MUST be called before snd_soc_register_card(), so that the props
* are in place before the codec component driver's probe function parses them.
*/
static int rt711_sdca_add_codec_device_props(struct device *sdw_dev)
static int rt711_sdca_add_codec_device_props(const char *sdw_dev_name)
{
struct property_entry props[MAX_NO_PROPS] = {};
struct device *sdw_dev;
int ret;

if (!SOF_RT711_JDSRC(sof_sdw_quirk))
return 0;
sdw_dev = bus_find_device_by_name(&sdw_bus_type, NULL, sdw_dev_name);
if (!sdw_dev)
return -EPROBE_DEFER;

props[0] = PROPERTY_ENTRY_U32("realtek,jd-src", SOF_RT711_JDSRC(sof_sdw_quirk));
if (SOF_RT711_JDSRC(sof_sdw_quirk)) {
props[0] = PROPERTY_ENTRY_U32("realtek,jd-src",
SOF_RT711_JDSRC(sof_sdw_quirk));
}

ret = device_add_properties(sdw_dev, props);
put_device(sdw_dev);

return device_add_properties(sdw_dev, props);
return ret;
}

static const struct snd_soc_dapm_widget rt711_sdca_widgets[] = {
Expand Down Expand Up @@ -128,10 +137,15 @@ static int rt711_sdca_rtd_init(struct snd_soc_pcm_runtime *rtd)

int sof_sdw_rt711_sdca_exit(struct snd_soc_card *card, struct snd_soc_dai_link *dai_link)
{
struct mc_private *ctx = snd_soc_card_get_drvdata(card);
struct device *sdw_dev;

sdw_dev = bus_find_device_by_name(&sdw_bus_type, NULL,
dai_link->codecs[0].name);
if (!sdw_dev)
return -EINVAL;

device_remove_properties(ctx->headset_codec_dev);
put_device(ctx->headset_codec_dev);
device_remove_properties(sdw_dev);
put_device(sdw_dev);

return 0;
}
Expand All @@ -142,8 +156,6 @@ int sof_sdw_rt711_sdca_init(struct snd_soc_card *card,
struct sof_sdw_codec_info *info,
bool playback)
{
struct mc_private *ctx = snd_soc_card_get_drvdata(card);
struct device *sdw_dev;
int ret;

/*
Expand All @@ -153,16 +165,9 @@ int sof_sdw_rt711_sdca_init(struct snd_soc_card *card,
if (!playback)
return 0;

sdw_dev = bus_find_device_by_name(&sdw_bus_type, NULL, dai_links->codecs[0].name);
if (!sdw_dev)
return -EPROBE_DEFER;

ret = rt711_sdca_add_codec_device_props(sdw_dev);
if (ret < 0) {
put_device(sdw_dev);
ret = rt711_sdca_add_codec_device_props(dai_links->codecs[0].name);
if (ret < 0)
return ret;
}
ctx->headset_codec_dev = sdw_dev;

dai_links->init = rt711_sdca_rtd_init;

Expand Down

0 comments on commit 2a0ab4d

Please sign in to comment.