All of 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 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.