[alsa-devel] [PATCH - ice1724 1/4] ALSA: ice1724 - Create capture pcm only for ADC-enabled configurations

Takashi Iwai tiwai at suse.de
Mon Jan 9 10:27:09 CET 2012


At Mon, 09 Jan 2012 08:36:54 +0100,
Pavel Hofman wrote:
> 
> 
> 
> Dne 8.1.2012 10:12, Takashi Iwai napsal(a):
> > At Thu,  5 Jan 2012 22:01:55 +0100,
> > pavel.hofman at ivitera.com wrote:
> >>
> >> From: Pavel Hofman <pavel.hofman at ivitera.com>
> >>
> >> Add the capture pcm only if there is at least one ADC configured in
> >> the SYSCONF register.
> >>
> >> Signed-off-by: Pavel Hofman <pavel.hofman at ivitera.com>
> >>
> >> diff --git a/pci/ice1712/ice1724.c b/pci/ice1712/ice1724.c
> >> index 4353e76..2a0be2c 100644
> >> --- a/pci/ice1712/ice1724.c
> >> +++ b/pci/ice1712/ice1724.c
> >> @@ -1117,14 +1117,18 @@ static struct snd_pcm_ops snd_vt1724_capture_pro_ops = {
> >>  static int __devinit snd_vt1724_pcm_profi(struct snd_ice1712 *ice, int device)
> >>  {
> >>  	struct snd_pcm *pcm;
> >> -	int err;
> >> +	int capt, err;
> >>  
> >> -	err = snd_pcm_new(ice->card, "ICE1724", device, 1, 1, &pcm);
> >> +	capt = (~ice->eeprom.data[ICE_EEP2_SYSCONF] & VT1724_CFG_ADC_MASK) ?
> >> +		1 : 0;
> > 
> > Are you sure that this is correct?  I thought the value 0 means 1 ADC,
> > 1 is two ADCS, etc.
> > 
> 
> I think it is correct. This is what the datasheet says:
> 
> CCS04: System Configuration Register
> 
> bits 3:2
> 
> 00: one stereo ADC connected
> 01: two stereo ADCs connected
> 10: one stereo ADC and a S/PDIF receiver connected
> 11: No physical inputs
> 
> 
> I have two soundcards, one with 10 (ADC + SPDIF in), another with 11 (no
> ADC), the code seems to work fine.

Ah, then I misunderstood your code.  The bit-wise operation is
confusing for such a case.

It should be rather more easy-readable like:

	if ((ice->eeprom.data[ICE_EEP2_SYSCONF] & VT1724_CFG_ADC_MASK) ==
	    VT1724_CFG_ADC_NONE)
		capt = 0;
	else
		capt = 1;

Could you revise the patch?


thanks,

Takashi


More information about the Alsa-devel mailing list