mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	ASoC: hdmi-codec: remove multi detection support
DesignWare HDMI driver (= dw-hdmi) is supporting HDMI sound, and its probe function was calling sound binding function multiple times as same HDMI device different port. Because of this behavior, commit9731f82d60("ASoC: hdmi-codec: enable multi probe for ...") was added for multi detection case. But, this DesignWare HDMI detection/bind code was exchanged/adjusted by commit69497eb923("drm: bridge: dw-hdmi: Implement DRM bridge..."). Now, all DesignWare HDMI sound ports are detected as 1 bindng function. Because of this, hdmi-codec multi detection support is no longer needed. Thus, this patch removes commit9731f82d60("ASoC: hdmi-codec: enable multi probe for ..."), and its related commit340327a62c("ASoC: hdmi-codec: Fix hdmi_of_xlate_dai_name...") commit8480ac5679("ASoC: hdmi-codec: remove HDMI device unregister") commit0c343a35bf("ASoC: hdmi-codec: fix spelling mistake: ...) Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
		
							parent
							
								
									e82f1f7907
								
							
						
					
					
						commit
						24069b589b
					
				
					 1 changed files with 3 additions and 85 deletions
				
			
		| 
						 | 
				
			
			@ -25,17 +25,6 @@
 | 
			
		|||
 | 
			
		||||
#include <drm/drm_crtc.h> /* This is only to get MAX_ELD_BYTES */
 | 
			
		||||
 | 
			
		||||
struct hdmi_device {
 | 
			
		||||
	struct device *dev;
 | 
			
		||||
	struct list_head list;
 | 
			
		||||
	int cnt;
 | 
			
		||||
};
 | 
			
		||||
#define pos_to_hdmi_device(pos)	container_of((pos), struct hdmi_device, list)
 | 
			
		||||
LIST_HEAD(hdmi_device_list);
 | 
			
		||||
static DEFINE_MUTEX(hdmi_mutex);
 | 
			
		||||
 | 
			
		||||
#define DAI_NAME_SIZE 16
 | 
			
		||||
 | 
			
		||||
#define HDMI_CODEC_CHMAP_IDX_UNKNOWN  -1
 | 
			
		||||
 | 
			
		||||
struct hdmi_codec_channel_map_table {
 | 
			
		||||
| 
						 | 
				
			
			@ -702,6 +691,7 @@ static int hdmi_codec_pcm_new(struct snd_soc_pcm_runtime *rtd,
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
static struct snd_soc_dai_driver hdmi_i2s_dai = {
 | 
			
		||||
	.name = "i2s-hifi",
 | 
			
		||||
	.id = DAI_ID_I2S,
 | 
			
		||||
	.playback = {
 | 
			
		||||
		.stream_name = "Playback",
 | 
			
		||||
| 
						 | 
				
			
			@ -716,6 +706,7 @@ static struct snd_soc_dai_driver hdmi_i2s_dai = {
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
static const struct snd_soc_dai_driver hdmi_spdif_dai = {
 | 
			
		||||
	.name = "spdif-hifi",
 | 
			
		||||
	.id = DAI_ID_SPDIF,
 | 
			
		||||
	.playback = {
 | 
			
		||||
		.stream_name = "Playback",
 | 
			
		||||
| 
						 | 
				
			
			@ -728,32 +719,6 @@ static const struct snd_soc_dai_driver hdmi_spdif_dai = {
 | 
			
		|||
	.pcm_new = hdmi_codec_pcm_new,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static char hdmi_dai_name[][DAI_NAME_SIZE] = {
 | 
			
		||||
	"hdmi-hifi.0",
 | 
			
		||||
	"hdmi-hifi.1",
 | 
			
		||||
	"hdmi-hifi.2",
 | 
			
		||||
	"hdmi-hifi.3",
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static int hdmi_of_xlate_dai_name(struct snd_soc_component *component,
 | 
			
		||||
				  struct of_phandle_args *args,
 | 
			
		||||
				  const char **dai_name)
 | 
			
		||||
{
 | 
			
		||||
	int id;
 | 
			
		||||
 | 
			
		||||
	if (args->args_count)
 | 
			
		||||
		id = args->args[0];
 | 
			
		||||
	else
 | 
			
		||||
		id = 0;
 | 
			
		||||
 | 
			
		||||
	if (id < ARRAY_SIZE(hdmi_dai_name)) {
 | 
			
		||||
		*dai_name = hdmi_dai_name[id];
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return -EAGAIN;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct snd_soc_codec_driver hdmi_codec = {
 | 
			
		||||
	.component_driver = {
 | 
			
		||||
		.controls		= hdmi_controls,
 | 
			
		||||
| 
						 | 
				
			
			@ -762,7 +727,6 @@ static struct snd_soc_codec_driver hdmi_codec = {
 | 
			
		|||
		.num_dapm_widgets	= ARRAY_SIZE(hdmi_widgets),
 | 
			
		||||
		.dapm_routes		= hdmi_routes,
 | 
			
		||||
		.num_dapm_routes	= ARRAY_SIZE(hdmi_routes),
 | 
			
		||||
		.of_xlate_dai_name	= hdmi_of_xlate_dai_name,
 | 
			
		||||
	},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -771,8 +735,6 @@ static int hdmi_codec_probe(struct platform_device *pdev)
 | 
			
		|||
	struct hdmi_codec_pdata *hcd = pdev->dev.platform_data;
 | 
			
		||||
	struct device *dev = &pdev->dev;
 | 
			
		||||
	struct hdmi_codec_priv *hcp;
 | 
			
		||||
	struct hdmi_device *hd;
 | 
			
		||||
	struct list_head *pos;
 | 
			
		||||
	int dai_count, i = 0;
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -794,35 +756,6 @@ static int hdmi_codec_probe(struct platform_device *pdev)
 | 
			
		|||
	if (!hcp)
 | 
			
		||||
		return -ENOMEM;
 | 
			
		||||
 | 
			
		||||
	hd = NULL;
 | 
			
		||||
	mutex_lock(&hdmi_mutex);
 | 
			
		||||
	list_for_each(pos, &hdmi_device_list) {
 | 
			
		||||
		struct hdmi_device *tmp = pos_to_hdmi_device(pos);
 | 
			
		||||
 | 
			
		||||
		if (tmp->dev == dev->parent) {
 | 
			
		||||
			hd = tmp;
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!hd) {
 | 
			
		||||
		hd = devm_kzalloc(dev, sizeof(*hd), GFP_KERNEL);
 | 
			
		||||
		if (!hd) {
 | 
			
		||||
			mutex_unlock(&hdmi_mutex);
 | 
			
		||||
			return -ENOMEM;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		hd->dev = dev->parent;
 | 
			
		||||
 | 
			
		||||
		list_add_tail(&hd->list, &hdmi_device_list);
 | 
			
		||||
	}
 | 
			
		||||
	mutex_unlock(&hdmi_mutex);
 | 
			
		||||
 | 
			
		||||
	if (hd->cnt >= ARRAY_SIZE(hdmi_dai_name)) {
 | 
			
		||||
		dev_err(dev, "too many hdmi codec are detected\n");
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	hcp->hcd = *hcd;
 | 
			
		||||
	mutex_init(&hcp->current_stream_lock);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -835,14 +768,11 @@ static int hdmi_codec_probe(struct platform_device *pdev)
 | 
			
		|||
		hcp->daidrv[i] = hdmi_i2s_dai;
 | 
			
		||||
		hcp->daidrv[i].playback.channels_max =
 | 
			
		||||
			hcd->max_i2s_channels;
 | 
			
		||||
		hcp->daidrv[i].name = hdmi_dai_name[hd->cnt++];
 | 
			
		||||
		i++;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (hcd->spdif) {
 | 
			
		||||
	if (hcd->spdif)
 | 
			
		||||
		hcp->daidrv[i] = hdmi_spdif_dai;
 | 
			
		||||
		hcp->daidrv[i].name = hdmi_dai_name[hd->cnt++];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ret = snd_soc_register_codec(dev, &hdmi_codec, hcp->daidrv,
 | 
			
		||||
				     dai_count);
 | 
			
		||||
| 
						 | 
				
			
			@ -859,20 +789,8 @@ static int hdmi_codec_probe(struct platform_device *pdev)
 | 
			
		|||
static int hdmi_codec_remove(struct platform_device *pdev)
 | 
			
		||||
{
 | 
			
		||||
	struct device *dev = &pdev->dev;
 | 
			
		||||
	struct list_head *pos;
 | 
			
		||||
	struct hdmi_codec_priv *hcp;
 | 
			
		||||
 | 
			
		||||
	mutex_lock(&hdmi_mutex);
 | 
			
		||||
	list_for_each(pos, &hdmi_device_list) {
 | 
			
		||||
		struct hdmi_device *tmp = pos_to_hdmi_device(pos);
 | 
			
		||||
 | 
			
		||||
		if (tmp->dev == dev->parent) {
 | 
			
		||||
			list_del(pos);
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	mutex_unlock(&hdmi_mutex);
 | 
			
		||||
 | 
			
		||||
	hcp = dev_get_drvdata(dev);
 | 
			
		||||
	kfree(hcp->chmap_info);
 | 
			
		||||
	snd_soc_unregister_codec(dev);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue