Gerd Knorr wrote: > > David Balazic <david.balazic@xxxxxxxxx> writes: > > > > > They try to set the tuner to 400 MHz, but that is illegal for radio > > > > and is flaged as such deeper in the code. > > > > > > the tuner is switched to radio mode afterwards. > > > > Except if it is already in radio mode, then it prints the error message. > > Can't the driver check if the tuner is already in radio mode and then > > not execute this line ? > > switch to tv mode first maybe? Or move that hack into tuner.c ... So you are saying the the following change is very hard to do ? static int radio_open(struct video_device *dev, int flags) { struct bttv *btv = (struct bttv *)(dev-1); unsigned long v; down(&btv->lock); if (btv->user) goto busy_unlock; btv->user++; btv->radio = 1; if ( ! HW_ALREADY_IN_RADIO_MODE ) <--- the change { v = 400*16; // bttv_call_i2c_clients(btv,VIDIOCSFREQ,&v); bttv_call_i2c_clients(btv,AUDC_SET_RADIO,&btv->tuner_type); } bt848_muxsel(btv,0); up(&btv->lock); return 0; busy_unlock: up(&btv->lock); return -EBUSY; } If the hw is in TV mode when this is called, the two i2c calls are necessary, but if it is in radio mode , then : - VIDIOCSFREQ causes a "illegal freq" kernel message, otherwise harmless - AUDC_SET_RADIO , causes a short "blip" in the sound, if it is already playing ( like after running the "radio" application and exiting it with 'x' ( = exit and leave radio playing ) ) -- David Balazic -------------- "Be excellent to each other." - Bill S. Preston, Esq., & "Ted" Theodore Logan - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -