* [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