At Tue, 10 Mar 2009 10:00:13 +0100, Clemens Ladisch wrote: > > (CC alsa-devel) > > Viral Mehta wrote: > > Hi, > > > > I am trying to do gain control while RECORDING for my Audio Mic device. > > > > My application opens /dev/mixer device and calls ioctl(fdmixer, > > MIXER_WRITE(SOUND_MIXER_MIC), ...) > > > > But, the call fails. It traces to sound/core/oss/mixer_oss.c file and > > snd_mixer_oss_put_volume1() function. > > It never falls in "if (slot->present & SNDRV_MIXER_OSS_PRESENT_CVOLUME)" > > as condition "if (slot->present & SNDRV_MIXER_OSS_PRESENT_PVOLUME) " > > comes as false. > > > > I think there is a bug in kernel and I think it should be like as below, > > > > --- sound/core/oss/mixer_oss.c 2008-12-03 13:24:02.000000000 +0530 > > +++ sound/core/oss/mixer_oss.c 2009-03-09 16:22:06.548766896 +0530 > > @@ -688,7 +688,7 @@ static int snd_mixer_oss_put_volume1(str > > > > if (slot->present & SNDRV_MIXER_OSS_PRESENT_PVOLUME) { > > snd_mixer_oss_put_volume1_vol(fmixer, pslot, > > slot->numid[SNDRV_MIXER_OSS_ITEM_PVOLUME], left, right); > > - if (slot->present & SNDRV_MIXER_OSS_PRESENT_CVOLUME) > > + } else if (slot->present & SNDRV_MIXER_OSS_PRESENT_CVOLUME) { > > snd_mixer_oss_put_volume1_vol(fmixer, pslot, > > slot->numid[SNDRV_MIXER_OSS_ITEM_CVOLUME], left, right); > > } else if (slot->present & SNDRV_MIXER_OSS_PRESENT_GVOLUME) { > > snd_mixer_oss_put_volume1_vol(fmixer, pslot, > > slot->numid[SNDRV_MIXER_OSS_ITEM_GVOLUME], left, right); > > Your mailer mangled the patch; see linux/Documentation/email-clients.txt. Also, the current code behaves intentionally so (as it's designed for mic-loopback volume). A more feasible fix would be to add another if check for *_CVOLUME instead of moving it. Takashi _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel