Title: [9707] trunk/sound/soc/codecs: driver:audio codec:task[#6322]clean up code according to the comments from LKML
Revision
9707
Author
cliff
Date
2011-03-15 06:28:39 -0400 (Tue, 15 Mar 2011)

Log Message

driver:audio codec:task[#6322]clean up code according to the comments from LKML

Modified Paths

Diff

Modified: trunk/sound/soc/codecs/Kconfig (9706 => 9707)


--- trunk/sound/soc/codecs/Kconfig	2011-03-14 22:25:35 UTC (rev 9706)
+++ trunk/sound/soc/codecs/Kconfig	2011-03-15 10:28:39 UTC (rev 9707)
@@ -21,7 +21,7 @@
 	select SND_SOC_ADAU1381 if I2C
 	select SND_SOC_ADAU1761 if I2C
 	select SND_SOC_ADAV80X if SND_SOC_I2C_AND_SPI
-	select SND_SOC_ADAU1701 if I2C
+	select SND_SOC_ADAU1701 if (I2C && SIGMA)
 	select SND_SOC_ADS117X
 	select SND_SOC_AK4104 if SPI_MASTER
 	select SND_SOC_AK4535 if I2C
@@ -136,6 +136,7 @@
 
 config SND_SOC_ADAU1701
 	tristate
+	select SIGMA
 
 config SND_SOC_ADS117X
 	tristate

Modified: trunk/sound/soc/codecs/adau1701.c (9706 => 9707)


--- trunk/sound/soc/codecs/adau1701.c	2011-03-14 22:25:35 UTC (rev 9706)
+++ trunk/sound/soc/codecs/adau1701.c	2011-03-15 10:28:39 UTC (rev 9707)
@@ -26,66 +26,125 @@
 
 #include "adau1701.h"
 
-#define AUDIO_NAME "adau1701"
-#define ADAU1701_VERSION "0.10"
-#define ADAU1701_FIRMWARE "SigmaDSP_fw.bin"
-
+#define ADAU1701_FIRMWARE "adau1701.bin"
+#define USE_OSCILLATOR	1
 /* codec private data */
 struct adau1701_priv {
 	struct snd_soc_codec *codec;
 	enum snd_soc_control_type control_type;
 };
 
+struct register_lut {
+	u16 address;
+	int length;
+};
+
+static const struct register_lut register_table[] = {
+
+	{ADAU1701_IFACE0, 4},
+	{ADAU1701_IFACE1, 4},
+	{ADAU1701_IFACE2, 4},
+	{ADAU1701_IFACE3, 4},
+	{ADAU1701_IFACE4, 4},
+	{ADAU1701_IFACE5, 4},
+	{ADAU1701_IFACE6, 4},
+	{ADAU1701_IFACE7, 4},
+
+	{ADAU1701_GPIOSET, 2},
+
+	{ADAU1701_AUXADC0, 2},
+	{ADAU1701_AUXADC1, 2},
+	{ADAU1701_AUXADC2, 2},
+	{ADAU1701_AUXADC3, 2},
+
+	{ADAU1701_DATCAP0, 2},
+	{ADAU1701_DATCAP1, 2},
+
+	{ADAU1701_DSPCTRL, 2},
+	{ADAU1701_DSPRES, 1},
+	{ADAU1701_SEROCTL, 1},
+	{ADAU1701_SERITL1, 1},
+
+	{ADAU1701_MPCONF0, 3},
+	{ADAU1701_MPCONF1, 3},
+
+	{ADAU1701_AUXNPOW, 2},
+	{ADAU1701_AUXADCE, 2},
+
+	{ADAU1701_OSCIPOW, 2},
+	{ADAU1701_DACSET, 2},
+};
 /*
  * Write a ADAU1701 register,since the register length is from 1 to 5,
  * So, use our own read/write functions instead of snd_soc_read/write.
  */
 static int adau1701_write_register(struct snd_soc_codec *codec,
-	u16 reg_address, u8 length, u32 value)
+	u16 reg_address, u32 value)
 {
-	int ret;
-	int count = length + 2; /*data plus 16bit register address*/
-	u8 buf[8] = {0, 0, 0, 0, 0, 0, 0, 0};
+	int i;
+	int length, count;
+	u8 buf[8];
 
-	if (length == 0)
-		return -1;
-	buf[0] = (reg_address >> 8) & 0xFF;
-	buf[1] = reg_address & 0xFF;
+	for (i = 0; i < ARRAY_SIZE(register_table); i++) {
+		if (register_table[i].address == reg_address)
+			break;
+	}
+	if (i == ARRAY_SIZE(register_table)) {
+		dev_err(codec->dev, "Wrong Register Address\n");
+		return -EINVAL;
+	}
+	length = register_table[i].length;
+	count = length + 2; /*data plus 16bit register address*/
+
+	buf[0] = reg_address >> 8;
+	buf[1] = reg_address;
 	if (length == 1)
-		buf[2] = value & 0xFF;
+		buf[2] = value;
 	else if (length == 2) {
-		buf[2] = (value >> 8) & 0xFF;
-		buf[3] = value & 0xFF;
+		buf[2] = value >> 8;
+		buf[3] = value;
 	} else if (length == 3) {
-		buf[2] = (value >> 16) & 0xFF;
-		buf[3] = (value >> 8) & 0xFF;
-		buf[4] = value & 0xFF;
+		buf[2] = value >> 16;
+		buf[3] = value >> 8;
+		buf[4] = value;
+	} else if (length == 4) {
+		buf[2] = value >> 24;
+		buf[3] = value >> 16;
+		buf[4] = value >> 8;
+		buf[5] = value;
 	}
-	ret = i2c_master_send(codec->control_data, buf, count);
-
-	return ret;
-
+	return i2c_master_send(codec->control_data, buf, count);
 }
 
 /*
  * read ADAU1701 hw register
  */
 static u32 adau1701_read_register(struct snd_soc_codec *codec,
-	u16 reg_address, u8 length)
+	u16 reg_address)
 {
 	u8 addr[2];
-	u8 buf[2];
+	u8 buf[3];
+	int ret, i, length;
 	u32 value = 0;
-	int ret;
 
+	for (i = 0; i < ARRAY_SIZE(register_table); i++) {
+		if (register_table[i].address == reg_address)
+			break;
+	}
+	if (i == ARRAY_SIZE(register_table)) {
+		dev_err(codec->dev, "Wrong Register Address\n");
+		return -EINVAL;
+	}
+	length = register_table[i].length;
+
 	if (reg_address < ADAU1701_FIRSTREG)
 		reg_address = reg_address + ADAU1701_FIRSTREG;
 
 	if ((reg_address < ADAU1701_FIRSTREG) || (reg_address > ADAU1701_LASTREG))
 		return -EIO;
 
-	addr[0] = (reg_address >> 8) & 0xFF;
-	addr[1] = reg_address & 0xFF;
+	addr[0] = reg_address >> 8;
+	addr[1] = reg_address;
 
 	/* write the 2byte read address */
 	ret = i2c_master_send(codec->control_data, addr, 2);
@@ -100,13 +159,17 @@
 		if (i2c_master_recv(codec->control_data, buf, 2) != 2)
 			return -EIO;
 		value = (buf[0] << 8) | buf[1];
+	} else if (length == 3) {
+		if (i2c_master_recv(codec->control_data, buf, 3) != 3)
+			return -EIO;
+		value = (buf[0] << 16) | (buf[1] << 8) | buf[2];
 	}
 	return value;
 }
 
 static int adau1701_setprogram(struct snd_soc_codec *codec)
 {
-	int ret = 0;
+	int ret;
 
 	ret = process_sigma_firmware(codec->control_data, ADAU1701_FIRMWARE);
 
@@ -117,10 +180,11 @@
 				struct snd_soc_dai *dai)
 {
 	struct snd_soc_codec *codec = dai->codec;
-	int reg = 0;
+	u16 reg;
 
-	reg = SEROCTL_MASTER | SEROCTL_OBF16 | SEROCTL_OLF1024;
-	adau1701_write_register(codec, ADAU1701_SEROCTL, 2, reg);
+	reg = ADAU1701_SEROCTL_MASTER | ADAU1701_SEROCTL_OBF16 |
+		ADAU1701_SEROCTL_OLF1024;
+	adau1701_write_register(codec, ADAU1701_SEROCTL, reg);
 
 	return 0;
 }
@@ -130,46 +194,27 @@
 {
 	struct snd_soc_codec *codec = dai->codec;
 
-	adau1701_write_register(codec, ADAU1701_SEROCTL, 2, 0);
+	adau1701_write_register(codec, ADAU1701_SEROCTL, 0);
 }
 
-static int adau1701_mute(struct snd_soc_dai *dai, int mute)
-{
-	struct snd_soc_codec *codec = dai->codec;
-	u16 reg = 0;
-
-	if (mute) {
-		/* mute inputs/outputs */
-		reg = adau1701_read_register(codec, ADAU1701_AUXNPOW, 2);
-		reg |= AUXNPOW_AAPD | AUXNPOW_D0PD | AUXNPOW_D1PD | AUXNPOW_D2PD | AUXNPOW_D3PD;
-		adau1701_write_register(codec, ADAU1701_AUXNPOW, 2, reg);
-	} else {
-		/* unmute inputs/outputs */
-		reg = adau1701_read_register(codec, ADAU1701_AUXNPOW, 2);
-		reg &= ~(AUXNPOW_AAPD | AUXNPOW_D0PD | AUXNPOW_D1PD | AUXNPOW_D2PD | AUXNPOW_D3PD);
-		adau1701_write_register(codec, ADAU1701_AUXNPOW, 2, reg);
-	}
-
-	return 0;
-}
-
 static int adau1701_set_dai_fmt(struct snd_soc_dai *codec_dai,
 		unsigned int fmt)
 {
 	struct snd_soc_codec *codec = codec_dai->codec;
-	u32 reg = 0;
+	u8 reg;
 
-	reg = adau1701_read_register(codec, ADAU1701_SERITL1, 1);
+	reg = adau1701_read_register(codec, ADAU1701_SERITL1);
 	/* interface format */
 	switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
 	case SND_SOC_DAIFMT_I2S:
+		reg &= ~ADAU1701_SERITL1_MSK;
 		break;
 	case SND_SOC_DAIFMT_LEFT_J:
-		reg |= SERITL1_LEFTJ;
+		reg |= ADAU1701_SERITL1_LEFTJ;
 		break;
 	/* TODO: support TDM */
 	default:
-		return 0;
+		return -EINVAL;
 	}
 
 	/* clock inversion */
@@ -178,11 +223,11 @@
 		break;
 	/* TODO: support signal inversions */
 	default:
-		return 0;
+		return -EINVAL;
 	}
 
 	/* set iface format*/
-	adau1701_write_register(codec, ADAU1701_SERITL1, 1, reg);
+	adau1701_write_register(codec, ADAU1701_SERITL1, reg);
 	return 0;
 }
 
@@ -192,10 +237,12 @@
 	u16 reg;
 	switch (level) {
 	case SND_SOC_BIAS_ON:
-		reg = adau1701_read_register(codec, ADAU1701_AUXNPOW, 2);
-		reg &= ~(AUXNPOW_AAPD | AUXNPOW_D0PD | AUXNPOW_D1PD |  AUXNPOW_D2PD |
-			 AUXNPOW_D3PD | AUXNPOW_VBPD | AUXNPOW_VRPD);
-		adau1701_write_register(codec, ADAU1701_AUXNPOW, 2, reg);
+		reg = adau1701_read_register(codec, ADAU1701_AUXNPOW);
+		reg &= ~(ADAU1701_AUXNPOW_AAPD | ADAU1701_AUXNPOW_D0PD |
+			ADAU1701_AUXNPOW_D1PD |  ADAU1701_AUXNPOW_D2PD |
+			ADAU1701_AUXNPOW_D3PD | ADAU1701_AUXNPOW_VBPD |
+			ADAU1701_AUXNPOW_VRPD);
+		adau1701_write_register(codec, ADAU1701_AUXNPOW, reg);
 		break;
 	case SND_SOC_BIAS_PREPARE:
 		break;
@@ -203,10 +250,12 @@
 		break;
 	case SND_SOC_BIAS_OFF:
 		/* everything off, dac mute, inactive */
-		reg = adau1701_read_register(codec, ADAU1701_AUXNPOW, 2);
-		reg |= AUXNPOW_AAPD | AUXNPOW_D0PD | AUXNPOW_D1PD |  AUXNPOW_D2PD |
-			 AUXNPOW_D3PD | AUXNPOW_VBPD | AUXNPOW_VRPD;
-		adau1701_write_register(codec, ADAU1701_AUXNPOW, 2, reg);
+		reg = adau1701_read_register(codec, ADAU1701_AUXNPOW);
+		reg |= ADAU1701_AUXNPOW_AAPD | ADAU1701_AUXNPOW_D0PD |
+			ADAU1701_AUXNPOW_D1PD |  ADAU1701_AUXNPOW_D2PD |
+			ADAU1701_AUXNPOW_D3PD | ADAU1701_AUXNPOW_VBPD |
+			ADAU1701_AUXNPOW_VRPD;
+		adau1701_write_register(codec, ADAU1701_AUXNPOW, reg);
 		break;
 
 	}
@@ -222,12 +271,11 @@
 static struct snd_soc_dai_ops adau1701_dai_ops = {
 	.prepare	= adau1701_pcm_prepare,
 	.shutdown	= adau1701_shutdown,
-	.digital_mute	= adau1701_mute,
 	.set_fmt	= adau1701_set_dai_fmt,
 };
 
 struct snd_soc_dai_driver adau1701_dai = {
-	.name = "ADAU1701",
+	.name = "adau1701",
 	.playback = {
 		.stream_name = "Playback",
 		.channels_min = 2,
@@ -244,7 +292,6 @@
 	},
 	.ops = &adau1701_dai_ops,
 };
-EXPORT_SYMBOL_GPL(adau1701_dai);
 
 static int adau1701_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
@@ -262,10 +309,16 @@
 				  struct device_attribute *attr,
 				  const char *buf, size_t count)
 {
-	int ret = 0;
+	int ret;
+	u32 reg;
 	struct adau1701_priv *adau1701 = dev_get_drvdata(dev);
 	struct snd_soc_codec *codec = adau1701->codec;
+
+	reg = ADAU1701_DSPCTRL_DAM | ADAU1701_DSPCTRL_ADM;
+	adau1701_write_register(codec, ADAU1701_DSPCTRL, reg);
 	ret = adau1701_setprogram(codec);
+	reg = ADAU1701_DSPCTRL_DAM | ADAU1701_DSPCTRL_ADM;
+	adau1701_write_register(codec, ADAU1701_DSPCTRL, reg);
 	if (ret)
 		return ret;
 	else
@@ -276,37 +329,36 @@
 static int adau1701_reg_init(struct snd_soc_codec *codec)
 {
 	u32 reg;
-	int ret = 0;
+	int ret;
 
-	reg = DSPCTRL_DAM | DSPCTRL_ADM;
-	adau1701_write_register(codec, ADAU1701_DSPCTRL, 2, reg);
 	/* Load default program */
 	ret = adau1701_setprogram(codec);
 	if (ret < 0) {
-		printk(KERN_ERR "Loading program data failed\n");
+		dev_err(codec->dev, "Loading program data failed\n");
 		goto error;
 	}
-	reg = DSPCTRL_DAM | DSPCTRL_ADM;
-	adau1701_write_register(codec, ADAU1701_DSPCTRL, 2, reg);
 	reg = 0x08;
-	adau1701_write_register(codec, ADAU1701_DSPRES, 1, reg);
-	adau1701_write_register(codec, ADAU1701_SEROCTL, 2, 0);
-	adau1701_write_register(codec, ADAU1701_SERITL1, 1, 0);
+	adau1701_write_register(codec, ADAU1701_DSPRES, reg);
+	adau1701_write_register(codec, ADAU1701_SEROCTL, 0);
+	adau1701_write_register(codec, ADAU1701_SERITL1, 0);
 	/* Configure the multipurpose pins as serial in/out pins */
-	reg = MPCONF_SDATAP | MPCONF_SDATAP << 16 | MPCONF_SDATAP << 20;
-	adau1701_write_register(codec, ADAU1701_MPCONF0, 3, reg);
-	reg = MPCONF_AUXADC << 8 | MPCONF_SDATAP << 12 | MPCONF_SDATAP << 16 |
-		MPCONF_SDATAP << 20;
-	adau1701_write_register(codec, ADAU1701_MPCONF1, 3, reg);
-	adau1701_write_register(codec, ADAU1701_AUXNPOW, 2, 0);
-	reg = AUXADCE_AAEN;
-	adau1701_write_register(codec, ADAU1701_AUXADCE, 2, reg);
-	reg = DACSET_DACEN;
-	adau1701_write_register(codec, ADAU1701_DACSET, 2, reg);
-	reg = DSPCTRL_DAM | DSPCTRL_ADM | DSPCTRL_CR;
-	adau1701_write_register(codec, ADAU1701_DSPCTRL, 2, reg);
+	reg = ADAU1701_MPCONF_SDATAP | ADAU1701_MPCONF_SDATAP << 16 |
+		ADAU1701_MPCONF_SDATAP << 20;
+	adau1701_write_register(codec, ADAU1701_MPCONF0, reg);
+	reg = ADAU1701_MPCONF_AUXADC << 8 | ADAU1701_MPCONF_SDATAP << 12 |
+		ADAU1701_MPCONF_SDATAP << 16 | ADAU1701_MPCONF_SDATAP << 20;
+	adau1701_write_register(codec, ADAU1701_MPCONF1, reg);
+	adau1701_write_register(codec, ADAU1701_AUXNPOW, 0);
+	reg = ADAU1701_AUXADCE_AAEN;
+	adau1701_write_register(codec, ADAU1701_AUXADCE, reg);
+	reg = ADAU1701_DACSET_DACEN;
+	adau1701_write_register(codec, ADAU1701_DACSET, reg);
+	reg = ADAU1701_DSPCTRL_DAM | ADAU1701_DSPCTRL_ADM | ADAU1701_DSPCTRL_CR;
+	adau1701_write_register(codec, ADAU1701_DSPCTRL, reg);
+#ifdef USE_OSCILLATOR
 	/* Power-up the oscillator */
-	adau1701_write_register(codec, ADAU1701_OSCIPOW, 2, 0);
+	adau1701_write_register(codec, ADAU1701_OSCIPOW, 0);
+#endif
 error:
 	return ret;
 }
@@ -337,8 +389,7 @@
 
 static int adau1701_remove(struct snd_soc_codec *codec)
 {
-	adau1701_set_bias_level(codec, SND_SOC_BIAS_OFF);
-	return 0;
+	return adau1701_set_bias_level(codec, SND_SOC_BIAS_OFF);
 }
 
 struct snd_soc_codec_driver soc_codec_dev_adau1701 = {
@@ -397,10 +448,9 @@
 	int ret;
 
 	ret = i2c_add_driver(&adau1701_i2c_driver);
-	if (ret != 0) {
+	if (ret != 0)
 		printk(KERN_ERR "Failed to register adau1701 I2C driver: %d\n",
 		       ret);
-	}
 
 	return ret;
 }

Modified: trunk/sound/soc/codecs/adau1701.h (9706 => 9707)


--- trunk/sound/soc/codecs/adau1701.h	2011-03-14 22:25:35 UTC (rev 9706)
+++ trunk/sound/soc/codecs/adau1701.h	2011-03-15 10:28:39 UTC (rev 9707)
@@ -62,50 +62,51 @@
 #define ADAU1701_NUMCACHEREG	0x29
 
 /* Bit fields */
-#define DSPCTRL_CR		(1 << 2)
-#define DSPCTRL_DAM		(1 << 3)
-#define DSPCTRL_ADM		(1 << 4)
-#define DSPCTRL_IST		(1 << 5)
-#define DSPCTRL_IFCW		(1 << 6)
-#define DSPCTRL_GPCW		(1 << 7)
-#define DSPCTRL_AACW		(1 << 8)
+#define ADAU1701_DSPCTRL_CR		(1 << 2)
+#define ADAU1701_DSPCTRL_DAM		(1 << 3)
+#define ADAU1701_DSPCTRL_ADM		(1 << 4)
+#define ADAU1701_DSPCTRL_IST		(1 << 5)
+#define ADAU1701_DSPCTRL_IFCW		(1 << 6)
+#define ADAU1701_DSPCTRL_GPCW		(1 << 7)
+#define ADAU1701_DSPCTRL_AACW		(1 << 8)
 
-#define MPCONF_GPIOIDE		(0)
-#define MPCONF_GPIOINDE		(1)
-#define MPCONF_GPIOOPT		(2)
-#define MPCONF_OCOPT		(3)
-#define MPCONF_SDATAP		(4)
-#define MPCONF_GPIOIDEI		(8)
-#define MPCONF_GPIOINDEI	(9)
-#define MPCONF_GPIOOPTI		(0xA)
-#define MPCONF_OCOPTI		(0xB)
-#define MPCONF_SDATAPI		(0xC)
-#define MPCONF_AUXADC		(0xF)
+#define ADAU1701_MPCONF_GPIOIDE		0
+#define ADAU1701_MPCONF_GPIOINDE	1
+#define ADAU1701_MPCONF_GPIOOPT		2
+#define ADAU1701_MPCONF_OCOPT		3
+#define ADAU1701_MPCONF_SDATAP		4
+#define ADAU1701_MPCONF_GPIOIDEI	8
+#define ADAU1701_MPCONF_GPIOINDEI	9
+#define ADAU1701_MPCONF_GPIOOPTI	0xA
+#define ADAU1701_MPCONF_OCOPTI		0xB
+#define ADAU1701_MPCONF_SDATAPI		0xC
+#define ADAU1701_MPCONF_AUXADC		0xF
 
-#define SEROCTL_MASTER		(0x0800)
-#define SEROCTL_OBF16		(0x0000)
-#define SEROCTL_OBF8		(0x0200)
-#define SEROCTL_OBF4		(0x0400)
-#define SEROCTL_OBF2		(0x0600)
+#define ADAU1701_SEROCTL_MASTER		0x0800
+#define ADAU1701_SEROCTL_OBF16		0x0000
+#define ADAU1701_SEROCTL_OBF8		0x0200
+#define ADAU1701_SEROCTL_OBF4		0x0400
+#define ADAU1701_SEROCTL_OBF2		0x0600
 
-#define SEROCTL_OLF1024		(0x0000)
-#define SEROCTL_OLF512		(0x0080)
-#define SEROCTL_OLF256		(0x0100)
-#define SEROCTL_OLFRSV		(0x0180)
+#define ADAU1701_SEROCTL_OLF1024	0x0000
+#define ADAU1701_SEROCTL_OLF512		0x0080
+#define ADAU1701_SEROCTL_OLF256		0x0100
+#define ADAU1701_SEROCTL_OLFRSV		0x0180
 
-#define AUXNPOW_AAPD		(0x80)
-#define AUXNPOW_VBPD		(0x40)
-#define AUXNPOW_VRPD		(0x20)
-#define AUXNPOW_D3PD		(0x1)
-#define AUXNPOW_D2PD		(0x2)
-#define AUXNPOW_D1PD		(0x4)
-#define AUXNPOW_D0PD		(0x8)
+#define ADAU1701_AUXNPOW_AAPD		0x80
+#define ADAU1701_AUXNPOW_VBPD		0x40
+#define ADAU1701_AUXNPOW_VRPD		0x20
+#define ADAU1701_AUXNPOW_D3PD		0x1
+#define ADAU1701_AUXNPOW_D2PD		0x2
+#define ADAU1701_AUXNPOW_D1PD		0x4
+#define ADAU1701_AUXNPOW_D0PD		0x8
 
-#define SERITL1_LEFTJ		(1)
-#define SERITL1_TDM		(2)
+#define ADAU1701_SERITL1_LEFTJ		1
+#define ADAU1701_SERITL1_TDM		2
+#define ADAU1701_SERITL1_MSK		7
 
-#define	AUXADCE_AAEN		(1 << 15)
-#define OSCIPOW_OPD		(0x04)
-#define	DACSET_DACEN		(1)
+#define	ADAU1701_AUXADCE_AAEN		(1 << 15)
+#define ADAU1701_OSCIPOW_OPD		0x04
+#define	ADAU1701_DACSET_DACEN		1
 
 #endif
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to