[alsa-devel] [PATCH] ALSA: Fix capturing for envy1724ht based "audiophile 192"

Takashi Iwai tiwai at suse.de
Mon Apr 21 13:11:50 CEST 2008


At Sun, 20 Apr 2008 00:52:51 +0200,
Karsten Wiese wrote:
> 
> The 1st hunk changes snd_ice1712_gpio_write_bits() to not affect the gpio's mask
> register. Lets gpio writers that are unaware of a changed mask register
> successfully write the gpio.
> The 2nd and 3rd hunks toggle "chip reset" and "eeprom based setup" sequence so
> "chip reset" becomes first. Increasement of the "chip reset" related timeout
> leads to correctly read eeprom's contents here.
> Also corrects some arguments in calls to snd_ice1712_gpio_write_bits() from
> ap192_set_rate_val().
> 
> Signed-off-by: Karsten Wiese <fzu at wemgehoertderstaat.de>

Thanks.  All changes look good to me, but I'd prefer separated
patches.  Could you split it to three patches and give a changelog for
each?


Takashi

> ---
> 
> Hi,
> 
> patch might hamper cards that actually relied on snd_ice1712_gpio_write_bits()
> setting the gpio's mask register. Cscope tells me terratec ews and m-audio
> rev51 are might be candidates. I guess they are ok ;-)
> 
> regards,
>       Karsten
> 
> diff -pur alsa.hg/alsa-kernel/pci/ice1712/ice1712.h fixed/alsa-kernel/pci/ice1712/ice1712.h
> --- alsa.hg/alsa-kernel/pci/ice1712/ice1712.h	2008-03-20 12:25:01.000000000 +0100
> +++ fixed/alsa-kernel/pci/ice1712/ice1712.h	2008-04-19 23:21:31.000000000 +0200
> @@ -438,10 +438,14 @@ int snd_ice1712_gpio_put(struct snd_kcon
>  static inline void snd_ice1712_gpio_write_bits(struct snd_ice1712 *ice,
>  					       unsigned int mask, unsigned int bits)
>  {
> +	unsigned val;
> +
>  	ice->gpio.direction |= mask;
>  	snd_ice1712_gpio_set_dir(ice, ice->gpio.direction);
> -	snd_ice1712_gpio_set_mask(ice, ~mask);
> -	snd_ice1712_gpio_write(ice, mask & bits);
> +	val = snd_ice1712_gpio_read(ice);
> +	val &= ~mask;
> +	val |= mask & bits;
> +	snd_ice1712_gpio_write(ice, val);
>  }
>  
>  static inline int snd_ice1712_gpio_read_bits(struct snd_ice1712 *ice,
> diff -pur alsa.hg/alsa-kernel/pci/ice1712/ice1724.c fixed/alsa-kernel/pci/ice1712/ice1724.c
> --- alsa.hg/alsa-kernel/pci/ice1712/ice1724.c	2008-03-20 12:25:01.000000000 +0100
> +++ fixed/alsa-kernel/pci/ice1712/ice1724.c	2008-04-19 23:07:29.000000000 +0200
> @@ -2045,12 +2045,16 @@ static int __devinit snd_vt1724_read_eep
>  
>  
>  
> -static int __devinit snd_vt1724_chip_init(struct snd_ice1712 *ice)
> +static void __devinit snd_vt1724_chip_reset(struct snd_ice1712 *ice)
>  {
>  	outb(VT1724_RESET , ICEREG1724(ice, CONTROL));
> -	udelay(200);
> +	msleep(10);
>  	outb(0, ICEREG1724(ice, CONTROL));
> -	udelay(200);
> +	msleep(10);
> +}
> +
> +static int __devinit snd_vt1724_chip_init(struct snd_ice1712 *ice)
> +{
>  	outb(ice->eeprom.data[ICE_EEP2_SYSCONF], ICEREG1724(ice, SYS_CFG));
>  	outb(ice->eeprom.data[ICE_EEP2_ACLINK], ICEREG1724(ice, AC97_CFG));
>  	outb(ice->eeprom.data[ICE_EEP2_I2S], ICEREG1724(ice, I2S_FEATURES));
> @@ -2223,6 +2227,7 @@ static int __devinit snd_vt1724_create(s
>  
>  	ice->irq = pci->irq;
>  
> +	snd_vt1724_chip_reset(ice);
>  	if (snd_vt1724_read_eeprom(ice, modelname) < 0) {
>  		snd_vt1724_free(ice);
>  		return -EIO;
> diff -pur alsa.hg/alsa-kernel/pci/ice1712/revo.c fixed/alsa-kernel/pci/ice1712/revo.c
> --- alsa.hg/alsa-kernel/pci/ice1712/revo.c	2008-03-17 09:25:02.000000000 +0100
> +++ fixed/alsa-kernel/pci/ice1712/revo.c	2008-04-19 23:12:33.000000000 +0200
> @@ -327,7 +327,7 @@ static void ap192_set_rate_val(struct sn
>  	revo_set_rate_val(ak, rate);
>  
>  	/* reset CKS */
> -	snd_ice1712_gpio_write_bits(ice, 1 << 8, rate > 96000 ? 1 : 0);
> +	snd_ice1712_gpio_write_bits(ice, 1 << 8, rate > 96000 ? 1 << 8 : 0);
>  	/* reset DFS pins of AK5385A for ADC, too */
>  	if (rate > 96000)
>  		dfs = 2;
> @@ -338,7 +338,7 @@ static void ap192_set_rate_val(struct sn
>  	snd_ice1712_gpio_write_bits(ice, 3 << 9, dfs << 9);
>  	/* reset ADC */
>  	snd_ice1712_gpio_write_bits(ice, 1 << 11, 0);
> -	snd_ice1712_gpio_write_bits(ice, 1 << 11, 1);
> +	snd_ice1712_gpio_write_bits(ice, 1 << 11, 1 << 11);
>  }
>  
>  static const struct snd_akm4xxx_dac_channel ap192_dac[] = {
> 


More information about the Alsa-devel mailing list