Mailing List archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[linux-dvb] Re: Possible bug(s) in av7110.c:SetVolume



Wolfgang Fritz wrote:
> Hi,
> 
> I am using vdr-1.1.20 with DVB drivers from CVS (some days old).
> 
> If I am changing the sound volume in vdr, I get the following error in 
> syslog:
> 
> Dec 30 07:31:03 eddie vdr[1650]: ERROR (dvbdevice.c,660): Operation not 
> permitted
> 
> The volume setting is working.
> 
> I tracked that down to the function SetVolume in av7110.c which I show 
> below for illustration.
> I've inserted some printks to see what's going on.
> 
> static int
> SetVolume(av7110_t *av7110, int volleft, int volright)
> {
>         int err=0;
>         int chleft, chright;
>         
>         switch (av7110->adac_type) {
>         case DVB_ADAC_TI:
>           printk ("av7110: SetVolume DVB_ADAC_TI l=%d r=%d\n", volleft, 
> volright);
>                 chleft=(volleft*256)/946;
>                 chright=(volright*256)/946;
>                 if (chleft > 0x45)
>                         chleft=0x45;
>                 if (chright > 0x45)
>                         chright=0x45;
>                 err=SendDAC(av7110, 3, 0x80 + chleft);
>                 if (err)
>                         return err;
>                 err=SendDAC(av7110, 4, chright);
>                 break;
>                 
>         case DVB_ADAC_CRYSTAL:
>           printk ("av7110: SetVolume DVB_ADAC_CRYSTAL l=%d r=%d\n", 
> volleft, volright);
>                 chleft=127-volleft/2;
>                 chright=127-volright/2;
>                 i2c_writereg(av7110, 0x20, 0x03, chleft);
>                 i2c_writereg(av7110, 0x20, 0x04, chright);
> 
>         default:
>                 err = -1;
>         }
> 
>         if(!err) {
>                 av7110->audiostate.mixer_state.volume_left = volleft;
>                 av7110->audiostate.mixer_state.volume_right = volright;
>         }
>         printk ("av7110: SetVolume err=%d\n", err); 
>         return err;
> }
> 
> What I see in the syslog when I do a make insmod is:
> 
> Dec 30 07:53:04 eddie kernel: Linux video capture interface: v1.00
> Dec 30 07:53:04 eddie kernel: DVB: registering new adapter 
> (Technotrend/Hauppauge PCI rev2.1 or 2.2).
> Dec 30 07:53:04 eddie kernel: DVB: registering frontend 0:0 (stv0299 
> based (e.g. Alps BSRU6 or LG TDQB-S00x))...
> Dec 30 07:53:08 eddie kernel: DVB: AV7111(0) - firm f0240009, rtsl 
> b0250018, vid 71010068, app 00012502
> Dec 30 07:53:08 eddie kernel: av7110: SetVolume DVB_ADAC_TI l=255 r=255
> Dec 30 07:53:08 eddie kernel: av7110: SetVolume err=0
> 
> When I start vdr I get:
> Dec 30 07:54:35 eddie vdr[2056]: switching to channel 1
> Dec 30 07:54:35 eddie kernel: av7110: SetVolume DVB_ADAC_CRYSTAL l=220 
> r=220
> Dec 30 07:54:35 eddie kernel: av7110: SetVolume err=-1
> Dec 30 07:54:35 eddie vdr[2056]: ERROR (dvbdevice.c,660): Operation not 
> permitted
> 
> Question 1: Why is av7110->adac_type == DVB_ADAC_TI on startup, and == 
> DVB_ADAC_CRYSTAL later? I have not tracked that down but will try it 
> later.

this is ok.

> Question 2: Is it OK that the case DVB_ADAC_CRYSTAL falls through to the 
> default case and therefore always returns err=-1? Or is it simply a 
> missing break statement?

it's a missing break statement. Fixed in CVS.

btw: the get-audiostatus-patch is still not in the 2.5 kernel driver. 
Somebody has to do this, Honza?

Holger



-- 
Info:
To unsubscribe send a mail to listar@linuxtv.org with "unsubscribe linux-dvb" as subject.



Home | Main Index | Thread Index