Alsa-Devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 1/3] ASoC: alc5632: Remove unrelevant registers and name the relevant
@ 2011-11-17 10:01 Leon Romanovsky
  2011-11-17 10:01 ` [PATCH v2 2/3] ASoC: alc5632: Added support of two undocumented registers Leon Romanovsky
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Leon Romanovsky @ 2011-11-17 10:01 UTC (permalink / raw)
  To: broonie, lrg; +Cc: alsa-devel, Leon Romanovsky

Signed-off-by: Leon Romanovsky <leon@leon.nu>
---
 sound/soc/codecs/alc5632.c |  161 +++++++++++++------------------------------
 1 files changed, 49 insertions(+), 112 deletions(-)

diff --git a/sound/soc/codecs/alc5632.c b/sound/soc/codecs/alc5632.c
index 6bfbbc7..9660542 100644
--- a/sound/soc/codecs/alc5632.c
+++ b/sound/soc/codecs/alc5632.c
@@ -36,118 +36,55 @@
  * ALC5632 register cache
  */
 static struct reg_default  alc5632_reg_defaults[] = {
-	{   0, 0x59B4 },
-	{   1, 0x0000 },
-	{   2, 0x8080 },
-	{   3, 0x0000 },
-	{   4, 0x8080 },
-	{   5, 0x0000 },
-	{   6, 0x8080 },
-	{   7, 0x0000 },
-	{   8, 0xC800 },
-	{   9, 0x0000 },
-	{  10, 0xE808 },
-	{  11, 0x0000 },
-	{  12, 0x1010 },
-	{  13, 0x0000 },
-	{  14, 0x0808 },
-	{  15, 0x0000 },
-	{  16, 0xEE0F },
-	{  17, 0x0000 },
-	{  18, 0xCBCB },
-	{  19, 0x0000 },
-	{  20, 0x7F7F },
-	{  21, 0x0000 },
-	{  22, 0x0000 },
-	{  23, 0x0000 },
-	{  24, 0xE010 },
-	{  25, 0x0000 },
-	{  26, 0x0000 },
-	{  27, 0x0000 },
-	{  28, 0x8008 },
-	{  29, 0x0000 },
-	{  30, 0x0000 },
-	{  31, 0x0000 },
-	{  32, 0x0000 },
-	{  33, 0x0000 },
-	{  34, 0x0000 },
-	{  35, 0x0000 },
-	{  36, 0x00C0 },
-	{  37, 0x0000 },
-	{  38, 0xEF00 },
-	{  39, 0x0000 },
-	{  40, 0x0000 },
-	{  41, 0x0000 },
-	{  42, 0x0000 },
-	{  43, 0x0000 },
-	{  44, 0x0000 },
-	{  45, 0x0000 },
-	{  46, 0x0000 },
-	{  47, 0x0000 },
-	{  48, 0x0000 },
-	{  49, 0x0000 },
-	{  50, 0x0000 },
-	{  51, 0x0000 },
-	{  52, 0x8000 },
-	{  53, 0x0000 },
-	{  54, 0x0000 },
-	{  55, 0x0000 },
-	{  56, 0x0000 },
-	{  57, 0x0000 },
-	{  58, 0x0000 },
-	{  59, 0x0000 },
-	{  60, 0x0000 },
-	{  61, 0x0000 },
-	{  62, 0x8000 },
-	{  63, 0x0000 },
-	{  64, 0x0C0A },
-	{  65, 0x0000 },
-	{  66, 0x0000 },
-	{  67, 0x0000 },
-	{  68, 0x0000 },
-	{  69, 0x0000 },
-	{  70, 0x0000 },
-	{  71, 0x0000 },
-	{  72, 0x0000 },
-	{  73, 0x0000 },
-	{  74, 0x0000 },
-	{  75, 0x0000 },
-	{  76, 0xBE3E },
-	{  77, 0x0000 },
-	{  78, 0xBE3E },
-	{  79, 0x0000 },
-	{  80, 0x0000 },
-	{  81, 0x0000 },
-	{  82, 0x0000 },
-	{  83, 0x0000 },
-	{  84, 0x803A },
-	{  85, 0x0000 },
-	{  86, 0x0000 },
-	{  87, 0x0000 },
-	{  88, 0x0000 },
-	{  89, 0x0000 },
-	{  90, 0x0009 },
-	{  91, 0x0000 },
-	{  92, 0x0000 },
-	{  93, 0x0000 },
-	{  94, 0x3000 },
-	{  95, 0x0000 },
-	{  96, 0x3075 },
-	{  97, 0x0000 },
-	{  98, 0x1010 },
-	{  99, 0x0000 },
-	{ 100, 0x3110 },
-	{ 101, 0x0000 },
-	{ 102, 0x0000 },
-	{ 103, 0x0000 },
-	{ 104, 0x0553 },
-	{ 105, 0x0000 },
-	{ 106, 0x0000 },
-	{ 107, 0x0000 },
-	{ 108, 0x0000 },
-	{ 109, 0x0000 },
-	{ 110, 0x0000 },
-	{ 111, 0x0000 },
+	{   0, 0x59B4 },	/* R0   - Reset */
+	{   2, 0x8080 },	/* R2   - Speaker Output Volume */
+	{   4, 0x8080 },	/* R4   - Headphone Output Volume */
+	{   6, 0x8080 },	/* R6   - AUXOUT Volume */
+	{   8, 0xC800 },	/* R8   - Phone Input */
+	{  10, 0xE808 },	/* R10  - LINE_IN Volume */
+	{  12, 0x1010 },	/* R12  - STEREO DAC Input Volume */
+	{  14, 0x0808 },	/* R14  - MIC Input Volume */
+	{  16, 0xEE0F },	/* R16  - Stereo DAC and MIC Routing Control */
+	{  18, 0xCBCB },	/* R18  - ADC Record Gain */
+	{  20, 0x7F7F },	/* R20  - ADC Record Mixer Control */
+	{  24, 0xE010 },	/* R24  - Voice DAC Volume */
+	{  28, 0x8008 },	/* R28  - Output Mixer Control */
+	{  34, 0x0000 },	/* R34  - Microphone Control */
+	{  36, 0x00C0 },    /* R36  - Codec Digital MIC/Digital Boost
+						   Control */
+	{  38, 0xEF00 },	/* R38  - Power Down Control/Status */
+	{  46, 0x0000 },	/* R46  - Stereo DAC/Voice DAC/Stereo ADC
+						   Function Select */
+	{  52, 0x8000 },	/* R52  - Main Serial Data Port Control
+						   (Stereo I2S) */
+	{  54, 0x0000 },	/* R54  - Extend Serial Data Port Control
+						   (VoDAC_I2S/PCM) */
+	{  58, 0x0000 },	/* R58  - Power Management Addition 1 */
+	{  60, 0x0000 },	/* R60  - Power Management Addition 2 */
+	{  62, 0x8000 },	/* R62  - Power Management Addition 3 */
+	{  64, 0x0C0A },	/* R64  - General Purpose Control Register 1 */
+	{  66, 0x0000 },	/* R66  - General Purpose Control Register 2 */
+	{  68, 0x0000 },	/* R68  - PLL1 Control */
+	{  70, 0x0000 },	/* R70  - PLL2 Control */
+	{  76, 0xBE3E },	/* R76  - GPIO Pin Configuration */
+	{  78, 0xBE3E },	/* R78  - GPIO Pin Polarity */
+	{  80, 0x0000 },	/* R80  - GPIO Pin Sticky */
+	{  82, 0x0000 },	/* R82  - GPIO Pin Wake Up */
+	{  84, 0x803A },	/* R84  - GPIO Pin Status */
+	{  86, 0x0000 },	/* R86  - Pin Sharing */
+	{  88, 0x0000 },	/* R88  - Over-Temp/Current Status */
+	{  90, 0x0009 },	/* R90  - Soft Volume Control Setting */
+	{  92, 0x0000 },	/* R92  - GPIO_Output Pin Control */
+	{  94, 0x3000 },	/* R94  - MISC Control */
+	{  96, 0x3075 },	/* R96  - Stereo DAC Clock Control_1 */
+	{  98, 0x1010 },	/* R98  - Stereo DAC Clock Control_2 */
+	{ 100, 0x3110 },	/* R100 - VoDAC_PCM Clock Control_1 */
+	{ 104, 0x0553 },	/* R104 - Pseudo Stereo and Spatial Effect
+						   Block Control */
+	{ 106, 0x0000 },	/* R106 - Private Register Address */
+	{ 108, 0x0000 },	/* R108 - Private Register Data */
+	{ 110, 0x0000 },	/* R110 - EQ Control and Status/ADC
+							HPF Control */
 };
 
 /* codec private data */
-- 
1.7.3.4

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

* [PATCH v2 2/3] ASoC: alc5632: Added support of two undocumented registers
  2011-11-17 10:01 [PATCH v2 1/3] ASoC: alc5632: Remove unrelevant registers and name the relevant Leon Romanovsky
@ 2011-11-17 10:01 ` Leon Romanovsky
  2011-11-17 10:01 ` [PATCH v2 3/3] ASoC: alc5632: Update of i2c_probe function to use regmap API only Leon Romanovsky
  2011-11-17 16:48 ` [PATCH v2 1/3] ASoC: alc5632: Remove unrelevant registers and name the relevant Mark Brown
  2 siblings, 0 replies; 4+ messages in thread
From: Leon Romanovsky @ 2011-11-17 10:01 UTC (permalink / raw)
  To: broonie, lrg; +Cc: alsa-devel, Leon Romanovsky

There are two undocumented registers in use in alc5632_i2c_probe
function. It must be added to support future rewrite of this
function to use regmap API completely.

Signed-off-by: Leon Romanovsky <leon@leon.nu>
---
 sound/soc/codecs/alc5632.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/sound/soc/codecs/alc5632.c b/sound/soc/codecs/alc5632.c
index 9660542..be10228 100644
--- a/sound/soc/codecs/alc5632.c
+++ b/sound/soc/codecs/alc5632.c
@@ -104,6 +104,8 @@ static bool alc5632_volatile_register(struct device *dev,
 	case ALC5632_OVER_CURR_STATUS:
 	case ALC5632_HID_CTRL_DATA:
 	case ALC5632_EQ_CTRL:
+	case ALC5632_VENDOR_ID1:
+	case ALC5632_VENDOR_ID2:
 		return true;
 
 	default:
-- 
1.7.3.4

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

* [PATCH v2 3/3] ASoC: alc5632: Update of i2c_probe function to use regmap API only
  2011-11-17 10:01 [PATCH v2 1/3] ASoC: alc5632: Remove unrelevant registers and name the relevant Leon Romanovsky
  2011-11-17 10:01 ` [PATCH v2 2/3] ASoC: alc5632: Added support of two undocumented registers Leon Romanovsky
@ 2011-11-17 10:01 ` Leon Romanovsky
  2011-11-17 16:48 ` [PATCH v2 1/3] ASoC: alc5632: Remove unrelevant registers and name the relevant Mark Brown
  2 siblings, 0 replies; 4+ messages in thread
From: Leon Romanovsky @ 2011-11-17 10:01 UTC (permalink / raw)
  To: broonie, lrg; +Cc: alsa-devel, Leon Romanovsky

Signed-off-by: Leon Romanovsky <leon@leon.nu>
---
 sound/soc/codecs/alc5632.c |   67 +++++++++++++++++++------------------------
 1 files changed, 30 insertions(+), 37 deletions(-)

diff --git a/sound/soc/codecs/alc5632.c b/sound/soc/codecs/alc5632.c
index be10228..c32eade 100644
--- a/sound/soc/codecs/alc5632.c
+++ b/sound/soc/codecs/alc5632.c
@@ -1053,48 +1053,14 @@ static __devinit int alc5632_i2c_probe(struct i2c_client *client,
 				const struct i2c_device_id *id)
 {
 	struct alc5632_priv *alc5632;
-	int ret, vid1, vid2;
-
-	vid1 = i2c_smbus_read_word_data(client, ALC5632_VENDOR_ID1);
-	if (vid1 < 0) {
-		dev_err(&client->dev, "failed to read I2C\n");
-		return -EIO;
-	} else {
-		dev_info(&client->dev, "got vid1: %x\n", vid1);
-	}
-	vid1 = ((vid1 & 0xff) << 8) | (vid1 >> 8);
-
-	vid2 = i2c_smbus_read_word_data(client, ALC5632_VENDOR_ID2);
-	if (vid2 < 0) {
-		dev_err(&client->dev, "failed to read I2C\n");
-		return -EIO;
-	} else {
-		dev_info(&client->dev, "got vid2: %x\n", vid2);
-	}
-	vid2 = (vid2 & 0xff);
-
-	if ((vid1 != 0x10ec) || (vid2 != id->driver_data)) {
-		dev_err(&client->dev, "unknown or wrong codec\n");
-		dev_err(&client->dev, "Expected %x:%lx, got %x:%x\n",
-				0x10ec, id->driver_data,
-				vid1, vid2);
-		return -ENODEV;
-	}
+	int ret, ret1, ret2;
+	unsigned int vid1, vid2;
 
 	alc5632 = devm_kzalloc(&client->dev,
 			 sizeof(struct alc5632_priv), GFP_KERNEL);
 	if (alc5632 == NULL)
 		return -ENOMEM;
 
-	alc5632->id = vid2;
-	switch (alc5632->id) {
-	case 0x5c:
-		alc5632_dai.name = "alc5632-hifi";
-		break;
-	default:
-		return -EINVAL;
-	}
-
 	i2c_set_clientdata(client, alc5632);
 
 	alc5632->regmap = regmap_init_i2c(client, &alc5632_regmap);
@@ -1104,6 +1070,24 @@ static __devinit int alc5632_i2c_probe(struct i2c_client *client,
 		return ret;
 	}
 
+	ret1 = regmap_read(alc5632->regmap, ALC5632_VENDOR_ID1, &vid1);
+	ret2 = regmap_read(alc5632->regmap, ALC5632_VENDOR_ID2, &vid2);
+	if (ret1 != 0 || ret2 != 0) {
+		dev_err(&client->dev,
+		"Failed to read chip ID: ret1=%d, ret2=%d\n", ret1, ret2);
+		regmap_exit(alc5632->regmap);
+		return -EIO;
+	}
+
+	vid2 >>= 8;
+
+	if ((vid1 != 0x10EC) || (vid2 != id->driver_data)) {
+		dev_err(&client->dev,
+		"Device is not a ALC5632: VID1=0x%x, VID2=0x%x\n", vid1, vid2);
+		regmap_exit(alc5632->regmap);
+		return -EINVAL;
+	}
+
 	ret = alc5632_reset(alc5632->regmap);
 	if (ret < 0) {
 		dev_err(&client->dev, "Failed to issue reset\n");
@@ -1111,7 +1095,16 @@ static __devinit int alc5632_i2c_probe(struct i2c_client *client,
 		return ret;
 	}
 
-	ret =  snd_soc_register_codec(&client->dev,
+	alc5632->id = vid2;
+	switch (alc5632->id) {
+	case 0x5c:
+		alc5632_dai.name = "alc5632-hifi";
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	ret = snd_soc_register_codec(&client->dev,
 		&soc_codec_device_alc5632, &alc5632_dai, 1);
 
 	if (ret < 0) {
-- 
1.7.3.4

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

* Re: [PATCH v2 1/3] ASoC: alc5632: Remove unrelevant registers and name the relevant
  2011-11-17 10:01 [PATCH v2 1/3] ASoC: alc5632: Remove unrelevant registers and name the relevant Leon Romanovsky
  2011-11-17 10:01 ` [PATCH v2 2/3] ASoC: alc5632: Added support of two undocumented registers Leon Romanovsky
  2011-11-17 10:01 ` [PATCH v2 3/3] ASoC: alc5632: Update of i2c_probe function to use regmap API only Leon Romanovsky
@ 2011-11-17 16:48 ` Mark Brown
  2 siblings, 0 replies; 4+ messages in thread
From: Mark Brown @ 2011-11-17 16:48 UTC (permalink / raw)
  To: Leon Romanovsky; +Cc: alsa-devel, lrg

On Thu, Nov 17, 2011 at 12:01:28PM +0200, Leon Romanovsky wrote:
> Signed-off-by: Leon Romanovsky <leon@leon.nu>

Applied all three, thanks.

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

end of thread, other threads:[~2011-11-17 16:48 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-11-17 10:01 [PATCH v2 1/3] ASoC: alc5632: Remove unrelevant registers and name the relevant Leon Romanovsky
2011-11-17 10:01 ` [PATCH v2 2/3] ASoC: alc5632: Added support of two undocumented registers Leon Romanovsky
2011-11-17 10:01 ` [PATCH v2 3/3] ASoC: alc5632: Update of i2c_probe function to use regmap API only Leon Romanovsky
2011-11-17 16:48 ` [PATCH v2 1/3] ASoC: alc5632: Remove unrelevant registers and name the relevant Mark Brown

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