Title: [9618] trunk/sound/soc: [!no_src_qa!]
Revision
9618
Author
scott
Date
2011-02-16 05:18:16 -0500 (Wed, 16 Feb 2011)

Log Message

[!no_src_qa!]
asoc: ad74111 driver update to 2.6.37

Modified Paths


Diff

Modified: trunk/sound/soc/blackfin/Kconfig (9617 => 9618)


--- trunk/sound/soc/blackfin/Kconfig	2011-02-16 03:55:09 UTC (rev 9617)
+++ trunk/sound/soc/blackfin/Kconfig	2011-02-16 10:18:16 UTC (rev 9618)
@@ -18,7 +18,7 @@
 	  Say Y if you want to add support for SoC audio on BF527-EZKIT.
 
 config SND_BF5XX_SOC_AD73311
-	tristate "SoC AD73311 Audio support for Blackfin"
+	tristate "SoC AD73311/AD74111 Audio support for Blackfin"
 	depends on SND_BF5XX_I2S
 	select SND_BF5XX_SOC_I2S
 	select SND_SOC_AD73311
@@ -33,6 +33,21 @@
 	  Enter the GPIO used to control AD73311's SE pin. Acceptable
 	  values are 0 to 7
 
+config SND_BFIN_AD73311_RESET
+	int "RESET pin for AD73311L Chip Select"
+	depends on SND_BF5XX_SOC_AD73311
+	default 4
+	help
+	  Enter the GPIO used to control AD73311's RESET pin. Acceptable
+	  values are 0 to 7
+
+config SND_AD7XXXX_SELECT
+	int "Select AD73311 or AD74111"
+	depends on SND_SOC_AD73311
+	default 0
+	help
+	  Set 0 for AD73311, 1 for AD74111.
+
 config SND_BF5XX_SOC_ADAU1361
 	tristate "SoC ADAU1361 Audio support"
 	depends on SND_BF5XX_I2S

Modified: trunk/sound/soc/blackfin/bf5xx-ad73311.c (9617 => 9618)


--- trunk/sound/soc/blackfin/bf5xx-ad73311.c	2011-02-16 03:55:09 UTC (rev 9617)
+++ trunk/sound/soc/blackfin/bf5xx-ad73311.c	2011-02-16 10:18:16 UTC (rev 9618)
@@ -63,24 +63,33 @@
 #endif
 
 #define GPIO_SE CONFIG_SND_BFIN_AD73311_SE
+#define GPIO_RESET CONFIG_SND_BFIN_AD73311_RESET
 
 static struct snd_soc_card bf5xx_ad73311;
 
-static int snd_ad73311_startup(void)
+static void snd_ad73311_reset(void)
 {
+	gpio_set_value(GPIO_RESET, 0);
+	udelay(100);
+	gpio_set_value(GPIO_RESET, 1);
+}
+
+static void snd_ad73311_startup(void)
+{
 	pr_debug("%s enter\n", __func__);
 
 	/* Pull up SE pin on AD73311L */
 	gpio_set_value(GPIO_SE, 1);
-	return 0;
+	udelay(1);
 }
 
 static int snd_ad73311_configure(void)
 {
-	unsigned short ctrl_regs[6];
+	unsigned short ctrl_regs[7];
 	unsigned short status = 0;
 	int count = 0;
 
+#if CONFIG_SND_AD7XXXX_SELECT == 0
 	/* DMCLK = MCLK = 16.384 MHz
 	 * SCLK = DMCLK/8 = 2.048 MHz
 	 * Sample Rate = DMCLK/2048  = 8 KHz
@@ -94,10 +103,26 @@
 	ctrl_regs[3] = AD_CONTROL | AD_WRITE | CTRL_REG_E | REGE_DA(0x1f);
 	ctrl_regs[4] = AD_CONTROL | AD_WRITE | CTRL_REG_F | REGF_SEEN ;
 	ctrl_regs[5] = AD_CONTROL | AD_WRITE | CTRL_REG_A | REGA_MODE_DATA;
-
+#elif CONFIG_SND_AD7XXXX_SELECT == 1
+	/* MCLK = MCLK = 12.288 MHz
+	 * Sample Rate = 8 KHz
+	 * IMCLK = MCLK/6 = 2.048 MHz = 8kHz * 256
+	 */
+	ctrl_regs[0] = AD_WRITE | CTRL_REG_A | REGA_REFAMP | REGA_REF |\
+			REGA_DAC | REGA_ADC_INPAMP;
+	ctrl_regs[1] = AD_WRITE | CTRL_REG_B | REGB_FCLKDIV(2) | \
+			REGB_SCLKDIV(1) | REGB_TCLKDIV(0);
+	ctrl_regs[2] = AD_WRITE | CTRL_REG_C | REGC_ADC_HP | \
+			REGC_WORD_WIDTH(0);
+	ctrl_regs[3] = AD_WRITE | CTRL_REG_D | REGD_MASTER | \
+			REGD_FDCLK | REGD_DSP_MODE;
+	ctrl_regs[4] = AD_WRITE | CTRL_REG_E;
+	ctrl_regs[5] = AD_WRITE | CTRL_REG_F;
+	ctrl_regs[6] = AD_WRITE | CTRL_REG_G;
+#endif
 	local_irq_disable();
+	snd_ad73311_reset();
 	snd_ad73311_startup();
-	udelay(1);
 
 	bfin_write_SPORT_TCR1(TFSR);
 	bfin_write_SPORT_TCR2(0xF);
@@ -137,7 +162,16 @@
 		return -EBUSY;
 	}
 
+	if (GPIO_SE != GPIO_RESET) {
+		if (gpio_request(GPIO_RESET, "AD73311_RESET")) {
+			printk(KERN_ERR "%s: Failed ro request GPIO_%d\n", __func__, GPIO_RESET);
+			gpio_free(GPIO_SE);
+			return -EBUSY;
+		}
+	}
+
 	gpio_direction_output(GPIO_SE, 0);
+	gpio_direction_output(GPIO_RESET, 0);
 
 	err = snd_ad73311_configure();
 	if (err < 0)

Modified: trunk/sound/soc/codecs/ad73311.h (9617 => 9618)


--- trunk/sound/soc/codecs/ad73311.h	2011-02-16 03:55:09 UTC (rev 9617)
+++ trunk/sound/soc/codecs/ad73311.h	2011-02-16 10:18:16 UTC (rev 9618)
@@ -31,6 +31,8 @@
 #ifndef __AD73311_H__
 #define __AD73311_H__
 
+#if CONFIG_SND_AD7XXXX_SELECT == 0
+
 #define AD_CONTROL	0x8000
 #define AD_DATA		0x0000
 #define AD_READ		0x4000
@@ -85,4 +87,58 @@
 #define REGF_INV		(1 << 6)
 #define REGF_ALB		(1 << 7)
 
+#elif CONFIG_SND_AD7XXXX_SELECT == 1
+
+#define AD_READ         0x0000
+#define AD_WRITE        0x8000
+
+/* Control register A */
+#define CTRL_REG_A      (0 << 11)
+
+#define REGA_REFAMP     (1 << 2)
+#define REGA_REF        (1 << 3)
+#define REGA_DAC        (1 << 4)
+#define REGA_ADC        (1 << 5)
+#define REGA_ADC_INPAMP (1 << 6)
+
+/* Control register B */
+#define CTRL_REG_B      (1 << 11)
+
+#define REGB_FCLKDIV(x) (x & 0x3)
+#define REGB_SCLKDIV(x) ((x & 0x3) << 2)
+#define REGB_TCLKDIV(x) ((x & 0x3) << 4)
+
+/* Control register C */
+#define CTRL_REG_C      (2 << 11)
+
+#define REGC_ADC_HP             (1 << 0)
+#define REGC_DAC_DEEMPH(x)      ((x & 0x3) << 1)
+#define REGC_LG_DELAY           (1 << 3)
+#define REGC_WORD_WIDTH(x)      ((x & 0x3) << 4)
+
+/* Control register D */
+#define CTRL_REG_D      (3 << 11)
+
+#define REGD_MASTER             (1 << 0)
+#define REGD_FDCLK              (1 << 1)
+#define REGD_DSP_MODE           (1 << 2)
+#define REGD_MIX_MODE           (1 << 3)
+#define REGD_MFS                (1 << 9)
+
+/* Control register E */
+#define CTRL_REG_E      (4 << 11)
+
+#define REGE_DAC_MUTE           (1 << 0)
+#define REGE_ADC_MUTE           (1 << 1)
+#define REGE_ADC_GAIN(x)        ((x & 0x7) << 2)
+#define REGE_ADC_PEAKEN         (1 << 5)
+
+/* Control register F */
+#define CTRL_REG_F      (5 << 11)
+#define REGF_DAC_VOL(x)         (x & 0x3F)
+
+/* Control register G */
+#define CTRL_REG_G      (6 << 11)
 #endif
+
+#endif
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to