All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Trimarchi <michael-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
To: Mark Brown <broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Cc: lgirdwood-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw@public.gmane.org,
	Jacob Siverskog
	<jacob-EZCvousvhKUZux3j3Bed6dkegs52MxvZ@public.gmane.org>,
	Johan Hovold <johan-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Subject: [PATCH V3] ASoC: pcm179x: Add support for pcm1795 and pcm1796
Date: Fri, 5 Feb 2016 18:24:57 +0100	[thread overview]
Message-ID: <20160205172451.GA30542@panicking> (raw)
In-Reply-To: <20160110173812.GA16304@panicking>


Signed-off-by: Michael Trimarchi <michael-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
---
Not get time to retest

Changes v3 -> v2:
	- rebase after i2c support

Changes v1 -> v2:
	- Use switch for support new variants
	- sort the compatible list

 sound/soc/codecs/pcm179x-i2c.c |  6 ----
 sound/soc/codecs/pcm179x-spi.c |  6 ----
 sound/soc/codecs/pcm179x.c     | 62 ++++++++++++++++++++++++++++++++++++++++--
 sound/soc/codecs/pcm179x.h     |  9 ++++--
 4 files changed, 66 insertions(+), 17 deletions(-)

diff --git a/sound/soc/codecs/pcm179x-i2c.c b/sound/soc/codecs/pcm179x-i2c.c
index 4118106..609f07f 100644
--- a/sound/soc/codecs/pcm179x-i2c.c
+++ b/sound/soc/codecs/pcm179x-i2c.c
@@ -44,12 +44,6 @@ static int pcm179x_i2c_remove(struct i2c_client *client)
 	return pcm179x_common_exit(&client->dev);
 }
 
-static const struct of_device_id pcm179x_of_match[] = {
-	{ .compatible = "ti,pcm1792a", },
-	{ }
-};
-MODULE_DEVICE_TABLE(of, pcm179x_of_match);
-
 static const struct i2c_device_id pcm179x_i2c_ids[] = {
 	{ "pcm179x", 0 },
 	{ }
diff --git a/sound/soc/codecs/pcm179x-spi.c b/sound/soc/codecs/pcm179x-spi.c
index da924d4..6ae0e4d 100644
--- a/sound/soc/codecs/pcm179x-spi.c
+++ b/sound/soc/codecs/pcm179x-spi.c
@@ -43,12 +43,6 @@ static int pcm179x_spi_remove(struct spi_device *spi)
 	return pcm179x_common_exit(&spi->dev);
 }
 
-static const struct of_device_id pcm179x_of_match[] = {
-	{ .compatible = "ti,pcm1792a", },
-	{ }
-};
-MODULE_DEVICE_TABLE(of, pcm179x_of_match);
-
 static const struct spi_device_id pcm179x_spi_ids[] = {
 	{ "pcm179x", 0 },
 	{ },
diff --git a/sound/soc/codecs/pcm179x.c b/sound/soc/codecs/pcm179x.c
index 06a6657..73c80d3 100644
--- a/sound/soc/codecs/pcm179x.c
+++ b/sound/soc/codecs/pcm179x.c
@@ -20,6 +20,8 @@
 #include <linux/slab.h>
 #include <linux/kernel.h>
 #include <linux/device.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
 
 #include <sound/core.h>
 #include <sound/pcm.h>
@@ -72,8 +74,31 @@ struct pcm179x_private {
 	struct regmap *regmap;
 	unsigned int format;
 	unsigned int rate;
+#define PCM1795	1
+	unsigned int codec_model;
 };
 
+static int pcm179x_startup(struct snd_pcm_substream *substream,
+			    struct snd_soc_dai *dai)
+{
+	struct snd_soc_codec *codec = dai->codec;
+	struct pcm179x_private *priv = snd_soc_codec_get_drvdata(codec);
+	u64 formats = PCM1792A_FORMATS;
+
+	switch (priv->codec_model) {
+	case PCM1795:
+		formats = PCM1795_FORMATS;
+		break;
+	default:
+		break;
+	}
+
+	snd_pcm_hw_constraint_mask64(substream->runtime,
+				     SNDRV_PCM_HW_PARAM_FORMAT, formats);
+
+	return 0;
+}
+
 static int pcm179x_set_dai_fmt(struct snd_soc_dai *codec_dai,
                              unsigned int format)
 {
@@ -112,8 +137,10 @@ static int pcm179x_hw_params(struct snd_pcm_substream *substream,
 	switch (priv->format & SND_SOC_DAIFMT_FORMAT_MASK) {
 	case SND_SOC_DAIFMT_RIGHT_J:
 		switch (params_width(params)) {
-		case 24:
 		case 32:
+			val = 1;
+			break;
+		case 24:
 			val = 2;
 			break;
 		case 16:
@@ -125,8 +152,10 @@ static int pcm179x_hw_params(struct snd_pcm_substream *substream,
 		break;
 	case SND_SOC_DAIFMT_I2S:
 		switch (params_width(params)) {
-		case 24:
 		case 32:
+			val = 4;
+			break;
+		case 24:
 			val = 5;
 			break;
 		case 16:
@@ -152,6 +181,7 @@ static int pcm179x_hw_params(struct snd_pcm_substream *substream,
 }
 
 static const struct snd_soc_dai_ops pcm179x_dai_ops = {
+	.startup	= pcm179x_startup,
 	.set_fmt	= pcm179x_set_dai_fmt,
 	.hw_params	= pcm179x_hw_params,
 	.digital_mute	= pcm179x_digital_mute,
@@ -190,7 +220,7 @@ static struct snd_soc_dai_driver pcm179x_dai = {
 		.rates = SNDRV_PCM_RATE_CONTINUOUS,
 		.rate_min = 10000,
 		.rate_max = 200000,
-		.formats = PCM1792A_FORMATS, },
+		.formats = PCM179X_FORMATS, },
 	.ops = &pcm179x_dai_ops,
 };
 
@@ -214,15 +244,41 @@ static struct snd_soc_codec_driver soc_codec_dev_pcm179x = {
 	.num_dapm_routes	= ARRAY_SIZE(pcm179x_dapm_routes),
 };
 
+static const unsigned int codec_model = PCM1795;
+
+const struct of_device_id pcm179x_of_match[] = {
+	{ .compatible = "ti,pcm1792a", },
+	{ .compatible = "ti,pcm1795",
+	  .data = &codec_model,
+	},
+	{ .compatible = "ti,pcm1796", },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, pcm179x_of_match);
+EXPORT_SYMBOL_GPL(pcm179x_of_match);
+
 int pcm179x_common_init(struct device *dev, struct regmap *regmap)
 {
 	struct pcm179x_private *pcm179x;
+	struct device_node *np = dev->of_node;
+	const unsigned int *codec_model = NULL;
 
 	pcm179x = devm_kzalloc(dev, sizeof(struct pcm179x_private),
 				GFP_KERNEL);
 	if (!pcm179x)
 		return -ENOMEM;
 
+	if (np) {
+		const struct of_device_id *of_id;
+
+		of_id = of_match_device(pcm179x_of_match, dev);
+		if (of_id)
+			codec_model = of_id->data;
+	}
+
+	if (codec_model)
+		pcm179x->codec_model =  *codec_model;
+
 	pcm179x->regmap = regmap;
 	dev_set_drvdata(dev, pcm179x);
 
diff --git a/sound/soc/codecs/pcm179x.h b/sound/soc/codecs/pcm179x.h
index 11e3312..4c00047 100644
--- a/sound/soc/codecs/pcm179x.h
+++ b/sound/soc/codecs/pcm179x.h
@@ -17,10 +17,15 @@
 #ifndef __PCM179X_H__
 #define __PCM179X_H__
 
-#define PCM1792A_FORMATS (SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S24_LE | \
-			  SNDRV_PCM_FMTBIT_S16_LE)
+#define PCM179X_FORMATS (SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S24_LE | \
+			 SNDRV_PCM_FMTBIT_S16_LE)
+
+#define PCM1792A_FORMATS (SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S16_LE)
+
+#define PCM1795_FORMATS (SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S24_LE)
 
 extern const struct regmap_config pcm179x_regmap_config;
+extern const struct of_device_id pcm179x_of_match[];
 
 int pcm179x_common_init(struct device *dev, struct regmap *regmap);
 int pcm179x_common_exit(struct device *dev);
-- 
2.7.0

-- 
| Michael Nazzareno Trimarchi                     Amarula Solutions BV |
| COO  -  Founder                                      Cruquiuskade 47 |
| +31(0)851119172                                 Amsterdam 1018 AM NL |
|                  [`as] http://www.amarulasolutions.com               |
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2016-02-05 17:24 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-09 23:38 [RFC PATCH 0/3] ASoC: pcm1792a: Add support for pcm1795 and pcm1796 Michael Trimarchi
     [not found] ` <1452382685-18009-1-git-send-email-michael-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2016-01-09 23:38   ` [RFC PATCH 1/3] ASoC: pcm1792a: Rename internal data and function to pcm179x Michael Trimarchi
2016-01-10 12:07     ` Applied "ASoC: pcm1792a: Rename internal data and function to pcm179x" to the asoc tree Mark Brown
2016-01-09 23:38   ` [RFC PATCH 2/3] ASoC: pcm1792a: Rename pcm1792a to pcm179x Michael Trimarchi
     [not found]     ` <1452382685-18009-3-git-send-email-michael-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2016-01-11  3:06       ` Rob Herring
2016-01-09 23:38   ` [RFC PATCH 3/3] ASoC: pcm179x: Add support for pcm1795 and pcm1796 Michael Trimarchi
     [not found]     ` <1452382685-18009-4-git-send-email-michael-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2016-01-10 12:00       ` Mark Brown
     [not found]         ` <20160110120045.GW6588-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2016-01-10 17:38           ` [PATCH V2] " Michael Trimarchi
2016-02-05 17:24             ` Michael Trimarchi [this message]
2016-02-20  9:27               ` [PATCH V3] " Michael Trimarchi
     [not found]                 ` <CAOf5uwnpY8J=NC82rtZ_q50mWmHqEf2gteJxZe+cXVs_3FNmrw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-02-22  8:17                   ` Jacob Siverskog
2016-02-22  3:19               ` Mark Brown
     [not found]                 ` <20160222031944.GT18327-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2016-03-10  9:59                   ` Michael Trimarchi
2016-03-11 22:59                 ` [PATCH V4] " Michael Trimarchi
2016-03-11 23:09                   ` [PATCH V5] " Michael Trimarchi
2016-03-11 23:29                     ` [PATCH V6] " Michael Trimarchi
2016-03-12  5:53                       ` Mark Brown
     [not found]                         ` <20160312055317.GT3898-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2016-03-13  8:53                           ` Michael Trimarchi
2016-03-13  9:10                             ` Michael Trimarchi
2016-03-14 16:24                             ` Mark Brown
2016-03-18 20:08                       ` Rob Herring
2016-03-12  2:50                   ` [PATCH V4] " 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=20160205172451.GA30542@panicking \
    --to=michael-dyjbcgdgk7pe9whmmfpqlfatqe2ktcn/@public.gmane.org \
    --cc=alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw@public.gmane.org \
    --cc=broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=jacob-EZCvousvhKUZux3j3Bed6dkegs52MxvZ@public.gmane.org \
    --cc=johan-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=lgirdwood-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    /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.