All of lore.kernel.org
 help / color / mirror / Atom feed
* can anyone test ibook (snapper) ?
@ 2003-07-14 18:34 Takashi Iwai
  0 siblings, 0 replies; only message in thread
From: Takashi Iwai @ 2003-07-14 18:34 UTC (permalink / raw)
  To: alsa-devel

[-- Attachment #1: Type: text/plain, Size: 564 bytes --]

Hi,

can anyone test the attached patch for ibook/powerbook g4 with
"Snapper" chip?
(you can see the chip model via /proc/asound/cards.  there is a string
 AWACS, Screamer, DACA, Tumbler and Snapper.)

this will add the capture function.  i know at least the interrupts
generated but the volume was too.  you might need to tune some volumes
(e.g. Mix), or the capture volume might be too loud.  i don't see any
relevant register for ADC volume on this TAS chip...

note that this is just a test patch, and it is quite unsure that it
works as expected :)


Takashi

[-- Attachment #2: snapper-capture.dif --]
[-- Type: application/octet-stream, Size: 3521 bytes --]

Index: alsa-kernel/ppc/pmac.c
===================================================================
RCS file: /suse/tiwai/cvs/alsa/alsa-kernel/ppc/pmac.c,v
retrieving revision 1.32
diff -u -r1.32 pmac.c
--- alsa-kernel/ppc/pmac.c	18 Jun 2003 10:41:17 -0000	1.32
+++ alsa-kernel/ppc/pmac.c	14 Jul 2003 18:29:58 -0000
@@ -923,8 +923,6 @@
 	}
 	if (device_is_compatible(sound, "snapper")) {
 		chip->model = PMAC_SNAPPER;
-		chip->can_capture = 0;  /* no capture */
-		chip->can_duplex = 0;
 		// chip->can_byte_swap = 0; /* FIXME: check this */
 		chip->num_freqs = 2;
 		chip->freq_table = tumbler_freqs;
Index: alsa-kernel/ppc/tumbler.c
===================================================================
RCS file: /suse/tiwai/cvs/alsa/alsa-kernel/ppc/tumbler.c,v
retrieving revision 1.29
diff -u -r1.29 tumbler.c
--- alsa-kernel/ppc/tumbler.c	18 Jun 2003 10:41:17 -0000	1.29
+++ alsa-kernel/ppc/tumbler.c	14 Jul 2003 18:29:21 -0000
@@ -42,7 +42,7 @@
 #define TAS_I2C_ADDR	0x34
 
 /* registers */
-#define TAS_REG_MCS	0x01
+#define TAS_REG_MCS	0x01	/* main control */
 #define TAS_REG_DRC	0x02
 #define TAS_REG_VOL	0x04
 #define TAS_REG_TREBLE	0x05
@@ -56,6 +56,8 @@
 /* tas3004 */
 #define TAS_REG_LMIX	TAS_REG_INPUT1
 #define TAS_REG_RMIX	TAS_REG_INPUT2
+#define TAS_REG_MCS2	0x43		/* main control 2 */
+#define TAS_REG_ACS	0x40		/* analog control */
 
 /* mono volumes for tas3001c/tas3004 */
 enum {
@@ -98,21 +100,48 @@
 /*
  */
 
-static int tumbler_init_client(pmac_keywest_t *i2c)
+static int send_init_client(pmac_keywest_t *i2c, unsigned int *regs)
 {
-	int err, count = 10;
-	do {
-		/* normal operation, SCLK=64fps, i2s output, i2s input, 16bit width */
-		err =  snd_pmac_keywest_write_byte(i2c, TAS_REG_MCS,
-						   (1<<6)+(2<<4)+(2<<2)+0);
-		if (err >= 0)
-			return err;
-		mdelay(10);
-	} while (count--);
-	return -ENXIO;
+	while (*regs > 0) {
+		int err, count = 10;
+		do {
+			err =  snd_pmac_keywest_write_byte(i2c, regs[0], regs[1]);
+			if (err >= 0)
+				break;
+			mdelay(10);
+		} while (count--);
+		if (err < 0)
+			return -ENXIO;
+		regs += 2;
+	}
+	return 0;
 }
 
 
+static int tumbler_init_client(pmac_keywest_t *i2c)
+{
+	static unsigned int regs[] = {
+		/* normal operation, SCLK=64fps, i2s output, i2s input, 16bit width */
+		TAS_REG_MCS, (1<<6)|(2<<4)|(2<<2)|0,
+		0, /* terminator */
+	};
+	return send_init_client(i2c, regs);
+}
+
+static int snapper_init_client(pmac_keywest_t *i2c)
+{
+	static unsigned int regs[] = {
+		/* normal operation, SCLK=64fps, i2s output, 16bit width */
+		TAS_REG_MCS, (1<<6)|(2<<4)|0,
+		/* normal operation, all-pass mode */
+		TAS_REG_MCS2, (1<<1),
+		/* normal output, no deemphasis, A input, power-up */
+		TAS_REG_ACS, 0,
+		0, /* terminator */
+	};
+	return send_init_client(i2c, regs);
+}
+	
 /*
  * gpio access
  */
@@ -882,8 +911,8 @@
 	snd_assert(mix, return);
 
 	tumbler_reset_audio(chip);
-	if (mix->i2c.client) {
-		if (tumbler_init_client(&mix->i2c) < 0)
+	if (mix->i2c.client && mix->i2c.init_client) {
+		if (mix->i2c.init_client(&mix->i2c) < 0)
 			printk(KERN_ERR "tumbler_init_client error\n");
 	} else
 		printk(KERN_ERR "tumbler: i2c is not initialized\n");
@@ -987,11 +1016,12 @@
 	else
 		mix->i2c.addr = TAS_I2C_ADDR;
 
-	mix->i2c.init_client = tumbler_init_client;
 	if (chip->model == PMAC_TUMBLER) {
+		mix->i2c.init_client = tumbler_init_client;
 		mix->i2c.name = "TAS3001c";
 		chipname = "Tumbler";
 	} else {
+		mix->i2c.init_client = snapper_init_client;
 		mix->i2c.name = "TAS3004";
 		chipname = "Snapper";
 	}

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2003-07-14 18:34 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-07-14 18:34 can anyone test ibook (snapper) ? Takashi Iwai

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.