Alsa-Devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/9] ASoC: tas2552: Fixes, cleanups and improvements
@ 2015-06-08 12:19 Peter Ujfalusi
  2015-06-08 12:19 ` [PATCH v3 1/9] ASoC: tas2552: Correct the PLL configuration Peter Ujfalusi
                   ` (9 more replies)
  0 siblings, 10 replies; 11+ messages in thread
From: Peter Ujfalusi @ 2015-06-08 12:19 UTC (permalink / raw)
  To: broonie, lgirdwood, dmurphy; +Cc: alsa-devel

Hi,

Changes since v02:
- Dropped already applied patches from v02
- Fix bit shift in the PLL configuration patch (1/9) and add macro for it for
  readability
- New patches since v02:
 - fix module removing and loading issue by calling pm_runtime_disable when the
   module is removed
 - Remove extra semicolon
 - Consitent naming for 'struct tas2552_data': tas_data -> tas2552
 - Binding document update regarding to the added header file for clock
   selection

Changes since v01:
- missing patch found. It was merged with the previous patch while fixing
  checkpatch errors (patch 19 got squashed to patch 18)
- Sorry for this.

I have used the TAS2552-EVM to verify that my setup is in working condition for
a work on other audio product.
During the bringup of the EVM I have faced some issues and limitation with the
driver. The result is this series against the tas2552 driver.

Notable changes:
- Fixes for kernel crashes
- The enable-gpio was not optional as it was documented in the DTS
- Register bit definitions were not correct in several places
- Adding recommended startup/stop sequence
- Handling of sample formats the driver claims to support
- PLL configuration fixes and reference clock selection
- TDM support
- Gain control fix and control to select DIN source

Regards,
Peter
---
Peter Ujfalusi (9):
  ASoC: tas2552: Correct the PLL configuration
  ASoC: tas2552: Add control for selecting DIN source
  ASoC: tas2552: Correct Output Data register usage
  ASoC: tas2552: Correct Boost Auto-Pass Through Control register usage
  ASoC: tas2552: Code, define alignment changes for uniformity
  ASoC: tas2552: Call pm_runtime_disable when the module is removed
  ASoC: tas2552: Remove unneeded semicolon
  ASoC: tas2552: Use consistent name for 'struct tas2552_data'
  ASoC: tas2552: Update DT binding document regarding clkock
    configuration

 .../devicetree/bindings/sound/tas2552.txt          |   6 +
 sound/soc/codecs/tas2552.c                         | 173 ++++++++++++++-------
 sound/soc/codecs/tas2552.h                         |  61 ++++----
 3 files changed, 155 insertions(+), 85 deletions(-)

-- 
2.4.2

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v3 1/9] ASoC: tas2552: Correct the PLL configuration
  2015-06-08 12:19 [PATCH v3 0/9] ASoC: tas2552: Fixes, cleanups and improvements Peter Ujfalusi
@ 2015-06-08 12:19 ` Peter Ujfalusi
  2015-06-08 12:19 ` [PATCH v3 2/9] ASoC: tas2552: Add control for selecting DIN source Peter Ujfalusi
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Peter Ujfalusi @ 2015-06-08 12:19 UTC (permalink / raw)
  To: broonie, lgirdwood, dmurphy; +Cc: alsa-devel

Do not restrict the sampling rate to 44.1/48KHz. The pll_clk clock should
be (sampling rate * 512) in all cases.
Correct the J.D calculation (the D part was incorrectly calculated).
Restore PLL enable status after we are done with the configuration.
Implement hardware constraint handling towards the pll_clkin:
if D != 0 (in J.D) then 1.1MHz <= pll_clkin <= 9.2MHz needs to be checked.
If the PLL setup does not met with this constraint, fall back to BCLK as
reference clock, if BCLK fails, use the internal 1.8MHz clock.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
---
 sound/soc/codecs/tas2552.c | 138 ++++++++++++++++++++++++++++++---------------
 sound/soc/codecs/tas2552.h |  11 ++--
 2 files changed, 95 insertions(+), 54 deletions(-)

diff --git a/sound/soc/codecs/tas2552.c b/sound/soc/codecs/tas2552.c
index 891e2c529df3..0ca55aaeaaf2 100644
--- a/sound/soc/codecs/tas2552.c
+++ b/sound/soc/codecs/tas2552.c
@@ -77,7 +77,9 @@ struct tas2552_data {
 	struct gpio_desc *enable_gpio;
 	unsigned char regs[TAS2552_VBAT_DATA];
 	unsigned int pll_clkin;
+	int pll_clk_id;
 	unsigned int pdm_clk;
+	int pdm_clk_id;
 
 	unsigned int dai_fmt;
 	unsigned int tdm_delay;
@@ -158,16 +160,90 @@ static void tas2552_sw_shutdown(struct tas2552_data *tas_data, int sw_shutdown)
 }
 #endif
 
+static int tas2552_setup_pll(struct snd_soc_codec *codec,
+			     struct snd_pcm_hw_params *params)
+{
+	struct tas2552_data *tas2552 = dev_get_drvdata(codec->dev);
+	bool bypass_pll = false;
+	unsigned int pll_clk = params_rate(params) * 512;
+	unsigned int pll_clkin = tas2552->pll_clkin;
+	u8 pll_enable;
+
+	if (!pll_clkin) {
+		if (tas2552->pll_clk_id != TAS2552_PLL_CLKIN_BCLK)
+			return -EINVAL;
+
+		pll_clkin = snd_soc_params_to_bclk(params);
+		pll_clkin += tas2552->tdm_delay;
+	}
+
+	pll_enable = snd_soc_read(codec, TAS2552_CFG_2) & TAS2552_PLL_ENABLE;
+	snd_soc_update_bits(codec, TAS2552_CFG_2, TAS2552_PLL_ENABLE, 0);
+
+	if (pll_clkin == pll_clk)
+		bypass_pll = true;
+
+	if (bypass_pll) {
+		/* By pass the PLL configuration */
+		snd_soc_update_bits(codec, TAS2552_PLL_CTRL_2,
+				    TAS2552_PLL_BYPASS, TAS2552_PLL_BYPASS);
+	} else {
+		/* Fill in the PLL control registers for J & D
+		 * pll_clk = (.5 * pll_clkin * J.D) / 2^p
+		 * Need to fill in J and D here based on incoming freq
+		 */
+		unsigned int d;
+		u8 j;
+		u8 pll_sel = (tas2552->pll_clk_id << 3) & TAS2552_PLL_SRC_MASK;
+		u8 p = snd_soc_read(codec, TAS2552_PLL_CTRL_1);
+
+		p = (p >> 7);
+
+recalc:
+		j = (pll_clk * 2 * (1 << p)) / pll_clkin;
+		d = (pll_clk * 2 * (1 << p)) % pll_clkin;
+		d /= (pll_clkin / 10000);
+
+		if (d && (pll_clkin < 512000 || pll_clkin > 9200000)) {
+			if (tas2552->pll_clk_id == TAS2552_PLL_CLKIN_BCLK) {
+				pll_clkin = 1800000;
+				pll_sel = (TAS2552_PLL_CLKIN_1_8_FIXED << 3) &
+							TAS2552_PLL_SRC_MASK;
+			} else {
+				pll_clkin = snd_soc_params_to_bclk(params);
+				pll_clkin += tas2552->tdm_delay;
+				pll_sel = (TAS2552_PLL_CLKIN_BCLK << 3) &
+							TAS2552_PLL_SRC_MASK;
+			}
+			goto recalc;
+		}
+
+		snd_soc_update_bits(codec, TAS2552_CFG_1, TAS2552_PLL_SRC_MASK,
+				    pll_sel);
+
+		snd_soc_update_bits(codec, TAS2552_PLL_CTRL_1,
+				    TAS2552_PLL_J_MASK, j);
+		/* Will clear the PLL_BYPASS bit */
+		snd_soc_write(codec, TAS2552_PLL_CTRL_2,
+			      TAS2552_PLL_D_UPPER(d));
+		snd_soc_write(codec, TAS2552_PLL_CTRL_3,
+			      TAS2552_PLL_D_LOWER(d));
+	}
+
+	/* Restore PLL status */
+	snd_soc_update_bits(codec, TAS2552_CFG_2, TAS2552_PLL_ENABLE,
+			    pll_enable);
+
+	return 0;
+}
+
 static int tas2552_hw_params(struct snd_pcm_substream *substream,
 			     struct snd_pcm_hw_params *params,
 			     struct snd_soc_dai *dai)
 {
 	struct snd_soc_codec *codec = dai->codec;
 	struct tas2552_data *tas2552 = dev_get_drvdata(codec->dev);
-	int sample_rate, pll_clk;
-	int d;
 	int cpf;
-	u8 p, j;
 	u8 ser_ctrl1_reg, wclk_rate;
 
 	switch (params_width(params)) {
@@ -245,49 +321,7 @@ static int tas2552_hw_params(struct snd_pcm_substream *substream,
 	snd_soc_update_bits(codec, TAS2552_CFG_3, TAS2552_WCLK_FREQ_MASK,
 			    wclk_rate);
 
-	if (!tas2552->pll_clkin)
-		return -EINVAL;
-
-	snd_soc_update_bits(codec, TAS2552_CFG_2, TAS2552_PLL_ENABLE, 0);
-
-	if (tas2552->pll_clkin == TAS2552_245MHZ_CLK ||
-	    tas2552->pll_clkin == TAS2552_225MHZ_CLK) {
-		/* By pass the PLL configuration */
-		snd_soc_update_bits(codec, TAS2552_PLL_CTRL_2,
-				    TAS2552_PLL_BYPASS_MASK,
-				    TAS2552_PLL_BYPASS);
-	} else {
-		/* Fill in the PLL control registers for J & D
-		 * PLL_CLK = (.5 * freq * J.D) / 2^p
-		 * Need to fill in J and D here based on incoming freq
-		 */
-		p = snd_soc_read(codec, TAS2552_PLL_CTRL_1);
-		p = (p >> 7);
-		sample_rate = params_rate(params);
-
-		if (sample_rate == 48000)
-			pll_clk = TAS2552_245MHZ_CLK;
-		else if (sample_rate == 44100)
-			pll_clk = TAS2552_225MHZ_CLK;
-		else {
-			dev_vdbg(codec->dev, "Substream sample rate is not found %i\n",
-					params_rate(params));
-			return -EINVAL;
-		}
-
-		j = (pll_clk * 2 * (1 << p)) / tas2552->pll_clkin;
-		d = (pll_clk * 2 * (1 << p)) % tas2552->pll_clkin;
-
-		snd_soc_update_bits(codec, TAS2552_PLL_CTRL_1,
-				TAS2552_PLL_J_MASK, j);
-		snd_soc_write(codec, TAS2552_PLL_CTRL_2,
-					(d >> 7) & TAS2552_PLL_D_UPPER_MASK);
-		snd_soc_write(codec, TAS2552_PLL_CTRL_3,
-				d & TAS2552_PLL_D_LOWER_MASK);
-
-	}
-
-	return 0;
+	return tas2552_setup_pll(codec, params);
 }
 
 #define TAS2552_DAI_FMT_MASK	(TAS2552_BCLKDIR | \
@@ -370,12 +404,21 @@ static int tas2552_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
 
 	switch (clk_id) {
 	case TAS2552_PLL_CLKIN_MCLK:
-	case TAS2552_PLL_CLKIN_BCLK:
 	case TAS2552_PLL_CLKIN_IVCLKIN:
+		if (freq < 512000 || freq > 24576000) {
+			/* out of range PLL_CLKIN, fall back to use BCLK */
+			dev_warn(codec->dev, "Out of range PLL_CLKIN: %u\n",
+				 freq);
+			clk_id = TAS2552_PLL_CLKIN_BCLK;
+			freq = 0;
+		}
+		/* fall through */
+	case TAS2552_PLL_CLKIN_BCLK:
 	case TAS2552_PLL_CLKIN_1_8_FIXED:
 		mask = TAS2552_PLL_SRC_MASK;
 		val = (clk_id << 3) & mask; /* bit 4:5 in the register */
 		reg = TAS2552_CFG_1;
+		tas2552->pll_clk_id = clk_id;
 		tas2552->pll_clkin = freq;
 		break;
 	case TAS2552_PDM_CLK_PLL:
@@ -385,6 +428,7 @@ static int tas2552_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
 		mask = TAS2552_PDM_CLK_SEL_MASK;
 		val = (clk_id >> 1) & mask; /* bit 0:1 in the register */
 		reg = TAS2552_PDM_CFG;
+		tas2552->pdm_clk_id = clk_id;
 		tas2552->pdm_clk = freq;
 		break;
 	default:
diff --git a/sound/soc/codecs/tas2552.h b/sound/soc/codecs/tas2552.h
index bbb820495516..6806516a62cd 100644
--- a/sound/soc/codecs/tas2552.h
+++ b/sound/soc/codecs/tas2552.h
@@ -128,12 +128,9 @@
 #define TAS2552_APT_THRESH_2_1_7	(0x11 << 2)
 
 /* PLL Control Register */
-#define TAS2552_245MHZ_CLK			24576000
-#define TAS2552_225MHZ_CLK			22579200
-#define TAS2552_PLL_J_MASK			0x7f
-#define TAS2552_PLL_D_UPPER_MASK	0x3f
-#define TAS2552_PLL_D_LOWER_MASK	0xff
-#define TAS2552_PLL_BYPASS_MASK		0x80
-#define TAS2552_PLL_BYPASS			0x80
+#define TAS2552_PLL_J_MASK		0x7f
+#define TAS2552_PLL_D_UPPER(x)		(((x) >> 8) & 0x3f)
+#define TAS2552_PLL_D_LOWER(x)		((x) & 0xff)
+#define TAS2552_PLL_BYPASS		(1 << 7)
 
 #endif
-- 
2.4.2

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v3 2/9] ASoC: tas2552: Add control for selecting DIN source
  2015-06-08 12:19 [PATCH v3 0/9] ASoC: tas2552: Fixes, cleanups and improvements Peter Ujfalusi
  2015-06-08 12:19 ` [PATCH v3 1/9] ASoC: tas2552: Correct the PLL configuration Peter Ujfalusi
@ 2015-06-08 12:19 ` Peter Ujfalusi
  2015-06-08 12:19 ` [PATCH v3 3/9] ASoC: tas2552: Correct Output Data register usage Peter Ujfalusi
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Peter Ujfalusi @ 2015-06-08 12:19 UTC (permalink / raw)
  To: broonie, lgirdwood, dmurphy; +Cc: alsa-devel

'DIN source' enum can be used to select the DIN Source (muted, left, right
or average of left and right channels).

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
---
 sound/soc/codecs/tas2552.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/sound/soc/codecs/tas2552.c b/sound/soc/codecs/tas2552.c
index 0ca55aaeaaf2..067ea6e5e521 100644
--- a/sound/soc/codecs/tas2552.c
+++ b/sound/soc/codecs/tas2552.c
@@ -553,9 +553,20 @@ static struct snd_soc_dai_driver tas2552_dai[] = {
  */
 static DECLARE_TLV_DB_SCALE(dac_tlv, -7, 100, 0);
 
+static const char * const tas2552_din_source_select[] = {
+	"Muted",
+	"Left",
+	"Right",
+	"Left + Right average",
+};
+static SOC_ENUM_SINGLE_DECL(tas2552_din_source_enum,
+			    TAS2552_CFG_3, 3,
+			    tas2552_din_source_select);
+
 static const struct snd_kcontrol_new tas2552_snd_controls[] = {
 	SOC_SINGLE_TLV("Speaker Driver Playback Volume",
 			 TAS2552_PGA_GAIN, 0, 0x1f, 0, dac_tlv),
+	SOC_ENUM("DIN source", tas2552_din_source_enum),
 };
 
 static int tas2552_codec_probe(struct snd_soc_codec *codec)
-- 
2.4.2

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v3 3/9] ASoC: tas2552: Correct Output Data register usage
  2015-06-08 12:19 [PATCH v3 0/9] ASoC: tas2552: Fixes, cleanups and improvements Peter Ujfalusi
  2015-06-08 12:19 ` [PATCH v3 1/9] ASoC: tas2552: Correct the PLL configuration Peter Ujfalusi
  2015-06-08 12:19 ` [PATCH v3 2/9] ASoC: tas2552: Add control for selecting DIN source Peter Ujfalusi
@ 2015-06-08 12:19 ` Peter Ujfalusi
  2015-06-08 12:19 ` [PATCH v3 4/9] ASoC: tas2552: Correct Boost Auto-Pass Through Control " Peter Ujfalusi
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Peter Ujfalusi @ 2015-06-08 12:19 UTC (permalink / raw)
  To: broonie, lgirdwood, dmurphy; +Cc: alsa-devel

Do not write to DOUT Tristate register at probe time, specially not write
data which is defined to be used in Output Data Register.
Fix the defines for the Output Data Register and correct the register write
at probe time.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
---
 sound/soc/codecs/tas2552.c |  5 +++--
 sound/soc/codecs/tas2552.h | 19 +++++++++++++++----
 2 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/sound/soc/codecs/tas2552.c b/sound/soc/codecs/tas2552.c
index 067ea6e5e521..e4c02ee42966 100644
--- a/sound/soc/codecs/tas2552.c
+++ b/sound/soc/codecs/tas2552.c
@@ -598,8 +598,9 @@ static int tas2552_codec_probe(struct snd_soc_codec *codec)
 	snd_soc_update_bits(codec, TAS2552_CFG_1, TAS2552_MUTE, TAS2552_MUTE);
 	snd_soc_write(codec, TAS2552_CFG_3, TAS2552_I2S_OUT_SEL |
 					    TAS2552_DIN_SRC_SEL_AVG_L_R);
-	snd_soc_write(codec, TAS2552_DOUT, TAS2552_PDM_DATA_I);
-	snd_soc_write(codec, TAS2552_OUTPUT_DATA, TAS2552_PDM_DATA_V_I | 0x8);
+	snd_soc_write(codec, TAS2552_OUTPUT_DATA,
+		      TAS2552_PDM_DATA_SEL_V_I |
+		      TAS2552_R_DATA_OUT(TAS2552_DATA_OUT_V_DATA));
 	snd_soc_write(codec, TAS2552_BOOST_PT_CTRL, TAS2552_APT_DELAY_200 |
 				TAS2552_APT_THRESH_2_1_7);
 
diff --git a/sound/soc/codecs/tas2552.h b/sound/soc/codecs/tas2552.h
index 6806516a62cd..4a22f598ecb6 100644
--- a/sound/soc/codecs/tas2552.h
+++ b/sound/soc/codecs/tas2552.h
@@ -103,10 +103,21 @@
 #define TAS2552_WCLKDIR			(1 << 7)
 
 /* OUTPUT_DATA register */
-#define TAS2552_PDM_DATA_I		0x00
-#define TAS2552_PDM_DATA_V		(1 << 6)
-#define TAS2552_PDM_DATA_I_V	(1 << 7)
-#define TAS2552_PDM_DATA_V_I	(0x11 << 6)
+#define TAS2552_DATA_OUT_I_DATA		(0x0)
+#define TAS2552_DATA_OUT_V_DATA		(0x1)
+#define TAS2552_DATA_OUT_VBAT_DATA	(0x2)
+#define TAS2552_DATA_OUT_VBOOST_DATA	(0x3)
+#define TAS2552_DATA_OUT_PGA_GAIN	(0x4)
+#define TAS2552_DATA_OUT_IV_DATA	(0x5)
+#define TAS2552_DATA_OUT_VBAT_VBOOST_GAIN	(0x6)
+#define TAS2552_DATA_OUT_DISABLED	(0x7)
+#define TAS2552_L_DATA_OUT(x)		((x) << 0)
+#define TAS2552_R_DATA_OUT(x)		((x) << 3)
+#define TAS2552_PDM_DATA_SEL_I		(0x0 << 6)
+#define TAS2552_PDM_DATA_SEL_V		(0x1 << 6)
+#define TAS2552_PDM_DATA_SEL_I_V	(0x2 << 6)
+#define TAS2552_PDM_DATA_SEL_V_I	(0x3 << 6)
+#define TAS2552_PDM_DATA_SEL_MASK	TAS2552_PDM_DATA_SEL_V_I
 
 /* PDM CFG Register */
 #define TAS2552_PDM_CLK_SEL_PLL		(0x0 << 0)
-- 
2.4.2

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v3 4/9] ASoC: tas2552: Correct Boost Auto-Pass Through Control register usage
  2015-06-08 12:19 [PATCH v3 0/9] ASoC: tas2552: Fixes, cleanups and improvements Peter Ujfalusi
                   ` (2 preceding siblings ...)
  2015-06-08 12:19 ` [PATCH v3 3/9] ASoC: tas2552: Correct Output Data register usage Peter Ujfalusi
@ 2015-06-08 12:19 ` Peter Ujfalusi
  2015-06-08 12:19 ` [PATCH v3 5/9] ASoC: tas2552: Code, define alignment changes for uniformity Peter Ujfalusi
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Peter Ujfalusi @ 2015-06-08 12:19 UTC (permalink / raw)
  To: broonie, lgirdwood, dmurphy; +Cc: alsa-devel

Correct the bit definition so the code will change the bits what it
supposed to change. Also rename the register define to
TAS2552_BOOST_APT_CTRL.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
---
 sound/soc/codecs/tas2552.c |  6 +++---
 sound/soc/codecs/tas2552.h | 21 ++++++++++-----------
 2 files changed, 13 insertions(+), 14 deletions(-)

diff --git a/sound/soc/codecs/tas2552.c b/sound/soc/codecs/tas2552.c
index e4c02ee42966..202c3f4a6390 100644
--- a/sound/soc/codecs/tas2552.c
+++ b/sound/soc/codecs/tas2552.c
@@ -45,7 +45,7 @@ static struct reg_default tas2552_reg_defs[] = {
 	{TAS2552_OUTPUT_DATA, 0xc0},
 	{TAS2552_PDM_CFG, 0x01},
 	{TAS2552_PGA_GAIN, 0x00},
-	{TAS2552_BOOST_PT_CTRL, 0x0f},
+	{TAS2552_BOOST_APT_CTRL, 0x0f},
 	{TAS2552_RESERVED_0D, 0xbe},
 	{TAS2552_LIMIT_RATE_HYS, 0x08},
 	{TAS2552_CFG_2, 0xef},
@@ -601,8 +601,8 @@ static int tas2552_codec_probe(struct snd_soc_codec *codec)
 	snd_soc_write(codec, TAS2552_OUTPUT_DATA,
 		      TAS2552_PDM_DATA_SEL_V_I |
 		      TAS2552_R_DATA_OUT(TAS2552_DATA_OUT_V_DATA));
-	snd_soc_write(codec, TAS2552_BOOST_PT_CTRL, TAS2552_APT_DELAY_200 |
-				TAS2552_APT_THRESH_2_1_7);
+	snd_soc_write(codec, TAS2552_BOOST_APT_CTRL, TAS2552_APT_DELAY_200 |
+						     TAS2552_APT_THRESH_20_17);
 
 	snd_soc_write(codec, TAS2552_CFG_2, TAS2552_BOOST_EN |
 				  TAS2552_APT_EN | TAS2552_LIM_EN);
diff --git a/sound/soc/codecs/tas2552.h b/sound/soc/codecs/tas2552.h
index 4a22f598ecb6..f62a1bcb2e49 100644
--- a/sound/soc/codecs/tas2552.h
+++ b/sound/soc/codecs/tas2552.h
@@ -39,7 +39,7 @@
 #define TAS2552_PDM_CFG			0x11
 #define TAS2552_PGA_GAIN		0x12
 #define TAS2552_EDGE_RATE_CTRL	0x13
-#define TAS2552_BOOST_PT_CTRL	0x14
+#define TAS2552_BOOST_APT_CTRL		0x14
 #define TAS2552_VER_NUM			0x16
 #define TAS2552_VBAT_DATA		0x19
 #define TAS2552_MAX_REG			0x20
@@ -127,16 +127,15 @@
 #define TAS2552_PDM_CLK_SEL_MASK	TAS2552_PDM_CLK_SEL_MCLK
 #define TAS2552_PDM_DATA_ES	 	(1 << 2)
 
-/* Boost pass-through register */
-#define TAS2552_APT_DELAY_50	0x00
-#define TAS2552_APT_DELAY_75	(1 << 1)
-#define TAS2552_APT_DELAY_125	(1 << 2)
-#define TAS2552_APT_DELAY_200	(1 << 3)
-
-#define TAS2552_APT_THRESH_2_5		0x00
-#define TAS2552_APT_THRESH_1_7		(1 << 3)
-#define TAS2552_APT_THRESH_1_4_1_1	(1 << 4)
-#define TAS2552_APT_THRESH_2_1_7	(0x11 << 2)
+/* Boost Auto-pass through register */
+#define TAS2552_APT_DELAY_50		(0x0 << 0)
+#define TAS2552_APT_DELAY_75		(0x1 << 0)
+#define TAS2552_APT_DELAY_125		(0x2 << 0)
+#define TAS2552_APT_DELAY_200		(0x3 << 0)
+#define TAS2552_APT_THRESH_05_02	(0x0 << 2)
+#define TAS2552_APT_THRESH_10_07	(0x1 << 2)
+#define TAS2552_APT_THRESH_14_11	(0x2 << 2)
+#define TAS2552_APT_THRESH_20_17	(0x3 << 2)
 
 /* PLL Control Register */
 #define TAS2552_PLL_J_MASK		0x7f
-- 
2.4.2

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v3 5/9] ASoC: tas2552: Code, define alignment changes for uniformity
  2015-06-08 12:19 [PATCH v3 0/9] ASoC: tas2552: Fixes, cleanups and improvements Peter Ujfalusi
                   ` (3 preceding siblings ...)
  2015-06-08 12:19 ` [PATCH v3 4/9] ASoC: tas2552: Correct Boost Auto-Pass Through Control " Peter Ujfalusi
@ 2015-06-08 12:19 ` Peter Ujfalusi
  2015-06-08 12:19 ` [PATCH v3 6/9] ASoC: tas2552: Call pm_runtime_disable when the module is removed Peter Ujfalusi
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Peter Ujfalusi @ 2015-06-08 12:19 UTC (permalink / raw)
  To: broonie, lgirdwood, dmurphy; +Cc: alsa-devel

Align the numbers in the header file to the same column.
At the same time change the wrapping of CFG_2 register write in the probe
function to be uniform with the other calls.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
---
 sound/soc/codecs/tas2552.c |  4 ++--
 sound/soc/codecs/tas2552.h | 10 +++++-----
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/sound/soc/codecs/tas2552.c b/sound/soc/codecs/tas2552.c
index 202c3f4a6390..5e6490c19b7e 100644
--- a/sound/soc/codecs/tas2552.c
+++ b/sound/soc/codecs/tas2552.c
@@ -604,8 +604,8 @@ static int tas2552_codec_probe(struct snd_soc_codec *codec)
 	snd_soc_write(codec, TAS2552_BOOST_APT_CTRL, TAS2552_APT_DELAY_200 |
 						     TAS2552_APT_THRESH_20_17);
 
-	snd_soc_write(codec, TAS2552_CFG_2, TAS2552_BOOST_EN |
-				  TAS2552_APT_EN | TAS2552_LIM_EN);
+	snd_soc_write(codec, TAS2552_CFG_2, TAS2552_BOOST_EN | TAS2552_APT_EN |
+					    TAS2552_LIM_EN);
 
 	return 0;
 
diff --git a/sound/soc/codecs/tas2552.h b/sound/soc/codecs/tas2552.h
index f62a1bcb2e49..5746f8fd0afd 100644
--- a/sound/soc/codecs/tas2552.h
+++ b/sound/soc/codecs/tas2552.h
@@ -19,7 +19,7 @@
 #define __TAS2552_H__
 
 /* Register Address Map */
-#define TAS2552_DEVICE_STATUS	0x00
+#define TAS2552_DEVICE_STATUS		0x00
 #define TAS2552_CFG_1			0x01
 #define TAS2552_CFG_2			0x02
 #define TAS2552_CFG_3			0x03
@@ -33,12 +33,12 @@
 #define TAS2552_BTIP			0x0b
 #define TAS2552_BTS_CTRL		0x0c
 #define TAS2552_RESERVED_0D		0x0d
-#define TAS2552_LIMIT_RATE_HYS	0x0e
-#define TAS2552_LIMIT_RELEASE	0x0f
-#define TAS2552_LIMIT_INT_COUNT	0x10
+#define TAS2552_LIMIT_RATE_HYS		0x0e
+#define TAS2552_LIMIT_RELEASE		0x0f
+#define TAS2552_LIMIT_INT_COUNT		0x10
 #define TAS2552_PDM_CFG			0x11
 #define TAS2552_PGA_GAIN		0x12
-#define TAS2552_EDGE_RATE_CTRL	0x13
+#define TAS2552_EDGE_RATE_CTRL		0x13
 #define TAS2552_BOOST_APT_CTRL		0x14
 #define TAS2552_VER_NUM			0x16
 #define TAS2552_VBAT_DATA		0x19
-- 
2.4.2

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v3 6/9] ASoC: tas2552: Call pm_runtime_disable when the module is removed
  2015-06-08 12:19 [PATCH v3 0/9] ASoC: tas2552: Fixes, cleanups and improvements Peter Ujfalusi
                   ` (4 preceding siblings ...)
  2015-06-08 12:19 ` [PATCH v3 5/9] ASoC: tas2552: Code, define alignment changes for uniformity Peter Ujfalusi
@ 2015-06-08 12:19 ` Peter Ujfalusi
  2015-06-08 12:19 ` [PATCH v3 7/9] ASoC: tas2552: Remove unneeded semicolon Peter Ujfalusi
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Peter Ujfalusi @ 2015-06-08 12:19 UTC (permalink / raw)
  To: broonie, lgirdwood, dmurphy; +Cc: alsa-devel

The module can not be loaded again after it has been removed.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
---
 sound/soc/codecs/tas2552.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sound/soc/codecs/tas2552.c b/sound/soc/codecs/tas2552.c
index 5e6490c19b7e..7e65294f5244 100644
--- a/sound/soc/codecs/tas2552.c
+++ b/sound/soc/codecs/tas2552.c
@@ -751,6 +751,7 @@ static int tas2552_probe(struct i2c_client *client,
 static int tas2552_i2c_remove(struct i2c_client *client)
 {
 	snd_soc_unregister_codec(&client->dev);
+	pm_runtime_disable(&client->dev);
 	return 0;
 }
 
-- 
2.4.2

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v3 7/9] ASoC: tas2552: Remove unneeded semicolon
  2015-06-08 12:19 [PATCH v3 0/9] ASoC: tas2552: Fixes, cleanups and improvements Peter Ujfalusi
                   ` (5 preceding siblings ...)
  2015-06-08 12:19 ` [PATCH v3 6/9] ASoC: tas2552: Call pm_runtime_disable when the module is removed Peter Ujfalusi
@ 2015-06-08 12:19 ` Peter Ujfalusi
  2015-06-08 12:19 ` [PATCH v3 8/9] ASoC: tas2552: Use consistent name for 'struct tas2552_data' Peter Ujfalusi
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Peter Ujfalusi @ 2015-06-08 12:19 UTC (permalink / raw)
  To: broonie, lgirdwood, dmurphy; +Cc: alsa-devel

Double semicolon was added by the following commit:
ea178d1456dc ASoC: tas2552: Make the enable-gpio really optional

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
---
 sound/soc/codecs/tas2552.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sound/soc/codecs/tas2552.c b/sound/soc/codecs/tas2552.c
index 7e65294f5244..534b57bff03d 100644
--- a/sound/soc/codecs/tas2552.c
+++ b/sound/soc/codecs/tas2552.c
@@ -708,7 +708,7 @@ static int tas2552_probe(struct i2c_client *client,
 		if (PTR_ERR(data->enable_gpio) == -EPROBE_DEFER)
 			return -EPROBE_DEFER;
 
-		data->enable_gpio = NULL;;
+		data->enable_gpio = NULL;
 	}
 
 	data->tas2552_client = client;
-- 
2.4.2

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v3 8/9] ASoC: tas2552: Use consistent name for 'struct tas2552_data'
  2015-06-08 12:19 [PATCH v3 0/9] ASoC: tas2552: Fixes, cleanups and improvements Peter Ujfalusi
                   ` (6 preceding siblings ...)
  2015-06-08 12:19 ` [PATCH v3 7/9] ASoC: tas2552: Remove unneeded semicolon Peter Ujfalusi
@ 2015-06-08 12:19 ` Peter Ujfalusi
  2015-06-08 12:19 ` [PATCH v3 9/9] ASoC: tas2552: Update DT binding document regarding clkock configuration Peter Ujfalusi
  2015-06-08 17:53 ` [PATCH v3 0/9] ASoC: tas2552: Fixes, cleanups and improvements Mark Brown
  9 siblings, 0 replies; 11+ messages in thread
From: Peter Ujfalusi @ 2015-06-08 12:19 UTC (permalink / raw)
  To: broonie, lgirdwood, dmurphy; +Cc: alsa-devel

In tas2552_sw_shutdown() tas_data is used while the rest of the driver uses
tas2552 when dealing with the 'struct tas2552_data'

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
---
 sound/soc/codecs/tas2552.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/sound/soc/codecs/tas2552.c b/sound/soc/codecs/tas2552.c
index 534b57bff03d..169a7035d7e3 100644
--- a/sound/soc/codecs/tas2552.c
+++ b/sound/soc/codecs/tas2552.c
@@ -145,17 +145,17 @@ static const struct snd_soc_dapm_route tas2552_audio_map[] = {
 };
 
 #ifdef CONFIG_PM
-static void tas2552_sw_shutdown(struct tas2552_data *tas_data, int sw_shutdown)
+static void tas2552_sw_shutdown(struct tas2552_data *tas2552, int sw_shutdown)
 {
 	u8 cfg1_reg = 0;
 
-	if (!tas_data->codec)
+	if (!tas2552->codec)
 		return;
 
 	if (sw_shutdown)
 		cfg1_reg = TAS2552_SWS;
 
-	snd_soc_update_bits(tas_data->codec, TAS2552_CFG_1, TAS2552_SWS,
+	snd_soc_update_bits(tas2552->codec, TAS2552_CFG_1, TAS2552_SWS,
 			    cfg1_reg);
 }
 #endif
-- 
2.4.2

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v3 9/9] ASoC: tas2552: Update DT binding document regarding clkock configuration
  2015-06-08 12:19 [PATCH v3 0/9] ASoC: tas2552: Fixes, cleanups and improvements Peter Ujfalusi
                   ` (7 preceding siblings ...)
  2015-06-08 12:19 ` [PATCH v3 8/9] ASoC: tas2552: Use consistent name for 'struct tas2552_data' Peter Ujfalusi
@ 2015-06-08 12:19 ` Peter Ujfalusi
  2015-06-08 17:53 ` [PATCH v3 0/9] ASoC: tas2552: Fixes, cleanups and improvements Mark Brown
  9 siblings, 0 replies; 11+ messages in thread
From: Peter Ujfalusi @ 2015-06-08 12:19 UTC (permalink / raw)
  To: broonie, lgirdwood, dmurphy; +Cc: alsa-devel

Add overview of tas2552's clock configuration and selection.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
---
 Documentation/devicetree/bindings/sound/tas2552.txt | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/Documentation/devicetree/bindings/sound/tas2552.txt b/Documentation/devicetree/bindings/sound/tas2552.txt
index 55e2a0af5645..c49992c0b62a 100644
--- a/Documentation/devicetree/bindings/sound/tas2552.txt
+++ b/Documentation/devicetree/bindings/sound/tas2552.txt
@@ -14,6 +14,12 @@ Required properties:
 Optional properties:
 	- enable-gpio - gpio pin to enable/disable the device
 
+tas2552 can receive it's reference clock via MCLK, BCLK, IVCLKIN pin or use the
+internal 1.8MHz. This CLKIN is used by the PLL. In addition to PLL, the PDM
+reference clock is also selectable: PLL, IVCLKIN, BCLK or MCLK.
+For system integration the dt-bindings/sound/tas2552.h header file provides
+defined values to selct and configure the PLL and PDM reference clocks.
+
 Example:
 
 tas2552: tas2552@41 {
-- 
2.4.2

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 0/9] ASoC: tas2552: Fixes, cleanups and improvements
  2015-06-08 12:19 [PATCH v3 0/9] ASoC: tas2552: Fixes, cleanups and improvements Peter Ujfalusi
                   ` (8 preceding siblings ...)
  2015-06-08 12:19 ` [PATCH v3 9/9] ASoC: tas2552: Update DT binding document regarding clkock configuration Peter Ujfalusi
@ 2015-06-08 17:53 ` Mark Brown
  9 siblings, 0 replies; 11+ messages in thread
From: Mark Brown @ 2015-06-08 17:53 UTC (permalink / raw)
  To: Peter Ujfalusi; +Cc: alsa-devel, lgirdwood, dmurphy


[-- Attachment #1.1: Type: text/plain, Size: 266 bytes --]

On Mon, Jun 08, 2015 at 03:19:47PM +0300, Peter Ujfalusi wrote:
> Hi,
> 
> Changes since v02:
> - Dropped already applied patches from v02
> - Fix bit shift in the PLL configuration patch (1/9) and add macro for it for
>   readability

Applied all, thanks.

[-- Attachment #1.2: Digital signature --]
[-- Type: application/pgp-signature, Size: 473 bytes --]

[-- Attachment #2: Type: text/plain, Size: 0 bytes --]



^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2015-06-08 17:53 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-06-08 12:19 [PATCH v3 0/9] ASoC: tas2552: Fixes, cleanups and improvements Peter Ujfalusi
2015-06-08 12:19 ` [PATCH v3 1/9] ASoC: tas2552: Correct the PLL configuration Peter Ujfalusi
2015-06-08 12:19 ` [PATCH v3 2/9] ASoC: tas2552: Add control for selecting DIN source Peter Ujfalusi
2015-06-08 12:19 ` [PATCH v3 3/9] ASoC: tas2552: Correct Output Data register usage Peter Ujfalusi
2015-06-08 12:19 ` [PATCH v3 4/9] ASoC: tas2552: Correct Boost Auto-Pass Through Control " Peter Ujfalusi
2015-06-08 12:19 ` [PATCH v3 5/9] ASoC: tas2552: Code, define alignment changes for uniformity Peter Ujfalusi
2015-06-08 12:19 ` [PATCH v3 6/9] ASoC: tas2552: Call pm_runtime_disable when the module is removed Peter Ujfalusi
2015-06-08 12:19 ` [PATCH v3 7/9] ASoC: tas2552: Remove unneeded semicolon Peter Ujfalusi
2015-06-08 12:19 ` [PATCH v3 8/9] ASoC: tas2552: Use consistent name for 'struct tas2552_data' Peter Ujfalusi
2015-06-08 12:19 ` [PATCH v3 9/9] ASoC: tas2552: Update DT binding document regarding clkock configuration Peter Ujfalusi
2015-06-08 17:53 ` [PATCH v3 0/9] ASoC: tas2552: Fixes, cleanups and improvements Mark Brown

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox