Merge remote-tracking branches 'asoc/topic/fsl', 'asoc/topic/hdmi', 'asoc/topic/hisi...
authorMark Brown <broonie@kernel.org>
Mon, 3 Jul 2017 15:15:11 +0000 (16:15 +0100)
committerMark Brown <broonie@kernel.org>
Mon, 3 Jul 2017 15:15:11 +0000 (16:15 +0100)
include/sound/hdmi-codec.h
sound/soc/codecs/hdmi-codec.c
sound/soc/codecs/max9867.c
sound/soc/fsl/mpc5200_dma.c
sound/soc/hisilicon/hi6210-i2s.c

index 915c4357945c27992aa3b7561ab705dedff082ad..9483c55f871b992b78e8059f70017848c3d2ad09 100644 (file)
 #ifndef __HDMI_CODEC_H__
 #define __HDMI_CODEC_H__
 
+#include <linux/of_graph.h>
 #include <linux/hdmi.h>
 #include <drm/drm_edid.h>
 #include <sound/asoundef.h>
+#include <sound/soc.h>
 #include <uapi/sound/asound.h>
 
 /*
@@ -87,6 +89,13 @@ struct hdmi_codec_ops {
         */
        int (*get_eld)(struct device *dev, void *data,
                       uint8_t *buf, size_t len);
+
+       /*
+        * Getting DAI ID
+        * Optional
+        */
+       int (*get_dai_id)(struct snd_soc_component *comment,
+                         struct device_node *endpoint);
 };
 
 /* HDMI codec initalization data */
index 8c5ae1fc23a9b9edd0c5d088ca27bec41f4be7ea..22ed0dc88f0a1d42b541d3efa66a863fe0b35eb6 100644 (file)
 
 #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 {
@@ -293,7 +282,6 @@ struct hdmi_codec_priv {
        struct hdmi_codec_daifmt daifmt[2];
        struct mutex current_stream_lock;
        struct snd_pcm_substream *current_stream;
-       struct snd_pcm_hw_constraint_list ratec;
        uint8_t eld[MAX_ELD_BYTES];
        struct snd_pcm_chmap *chmap_info;
        unsigned int chmap_idx;
@@ -702,6 +690,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 +705,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,30 +718,16 @@ 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)
+static int hdmi_of_xlate_dai_id(struct snd_soc_component *component,
+                                struct device_node *endpoint)
 {
-       int id;
+       struct hdmi_codec_priv *hcp = snd_soc_component_get_drvdata(component);
+       int ret = -ENOTSUPP; /* see snd_soc_get_dai_id() */
 
-       if (args->args_count)
-               id = args->args[0];
-       else
-               id = 0;
+       if (hcp->hcd.ops->get_dai_id)
+               ret = hcp->hcd.ops->get_dai_id(component, endpoint);
 
-       if (id < ARRAY_SIZE(hdmi_dai_name)) {
-               *dai_name = hdmi_dai_name[id];
-               return 0;
-       }
-
-       return -EAGAIN;
+       return ret;
 }
 
 static struct snd_soc_codec_driver hdmi_codec = {
@@ -762,7 +738,7 @@ 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,
+               .of_xlate_dai_id        = hdmi_of_xlate_dai_id,
        },
 };
 
@@ -771,8 +747,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 +768,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 deteced\n");
-               return -EINVAL;
-       }
-
        hcp->hcd = *hcd;
        mutex_init(&hcp->current_stream_lock);
 
@@ -835,14 +780,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 +801,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);
index 0247edc9c84ebebfc0e9150e3b1b7c408659b1a6..2a40a69a7513817fe65753f774078f26e0aefec6 100644 (file)
@@ -132,7 +132,7 @@ enum rates {
        pcm_rate_48, max_pcm_rate,
 };
 
-struct ni_div_rates {
+static const struct ni_div_rates {
        u32 mclk;
        u16 ni[max_pcm_rate];
 } ni_div[] = {
index 0b82e209b6e38d9a10723b5f27fb62af7f6481f1..1f7e70bfbd5506a4088143d8ee9dfff0e059ee2d 100644 (file)
@@ -302,7 +302,6 @@ static int psc_dma_new(struct snd_soc_pcm_runtime *rtd)
        struct snd_card *card = rtd->card->snd_card;
        struct snd_soc_dai *dai = rtd->cpu_dai;
        struct snd_pcm *pcm = rtd->pcm;
-       struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(rtd->cpu_dai);
        size_t size = psc_dma_hardware.buffer_bytes_max;
        int rc;
 
index 45163e5202f546faec545fb65fd0e60b1decc74b..b193d3beb25330ca6fe8ccb73cda9f8987eefb32 100644 (file)
@@ -97,8 +97,8 @@ static inline u32 hi6210_read_reg(struct hi6210_i2s *i2s, int reg)
        return readl(i2s->base + reg);
 }
 
-int hi6210_i2s_startup(struct snd_pcm_substream *substream,
-                    struct snd_soc_dai *cpu_dai)
+static int hi6210_i2s_startup(struct snd_pcm_substream *substream,
+                             struct snd_soc_dai *cpu_dai)
 {
        struct hi6210_i2s *i2s = dev_get_drvdata(cpu_dai->dev);
        int ret, n;
@@ -175,8 +175,9 @@ int hi6210_i2s_startup(struct snd_pcm_substream *substream,
 
        return 0;
 }
-void hi6210_i2s_shutdown(struct snd_pcm_substream *substream,
-                      struct snd_soc_dai *cpu_dai)
+
+static void hi6210_i2s_shutdown(struct snd_pcm_substream *substream,
+                               struct snd_soc_dai *cpu_dai)
 {
        struct hi6210_i2s *i2s = dev_get_drvdata(cpu_dai->dev);
        int n;
@@ -524,7 +525,7 @@ static struct snd_soc_dai_ops hi6210_i2s_dai_ops = {
        .shutdown       = hi6210_i2s_shutdown,
 };
 
-struct snd_soc_dai_driver hi6210_i2s_dai_init = {
+static const struct snd_soc_dai_driver hi6210_i2s_dai_init = {
        .probe          = hi6210_i2s_dai_probe,
        .playback = {
                .channels_min = 2,