tuner_dbg("Unimplemented IOCTL 0x%08x(dir=%d,tp=0x%02x,nr=%d,sz=%d)\n", 
tuner_dbg("Unimplemented IOCTL 0x%08x(dir=%d,tp='%c',nr=%d,sz=%d)\n", 
static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg){	struct tuner *t = i2c_get_clientdata(client);	unsigned int *iarg = (int *)arg;	switch (cmd) {	/* --- configuration --- */	case TUNER_SET_TYPE_ADDR:		tuner_dbg ("Calling set_type_addr for type=%d, addr=0x%02x, mode=0x%02x\n",				((struct tuner_setup *)arg)->type,				((struct tuner_setup *)arg)->addr,				((struct tuner_setup *)arg)->mode_mask);		set_addr(client, (struct tuner_setup *)arg);		break;	case AUDC_SET_RADIO:		set_mode(client,t,V4L2_TUNER_RADIO, "AUDC_SET_RADIO");		break;	case TUNER_SET_STANDBY:		{			if (check_mode(t, "TUNER_SET_STANDBY") == EINVAL)				return 0;			if (t->standby)				t->standby (client);			break;		}	case AUDC_CONFIG_PINNACLE:		if (check_mode(t, "AUDC_CONFIG_PINNACLE") == EINVAL)			return 0;		switch (*iarg) {		case 2:			tuner_dbg("pinnacle pal\n");			t->radio_if2 = 33300 * 1000;			break;		case 3:			tuner_dbg("pinnacle ntsc\n");			t->radio_if2 = 41300 * 1000;			break;		}		break;	case VIDIOCSAUDIO:		if (check_mode(t, "VIDIOCSAUDIO") == EINVAL)			return 0;		if (check_v4l2(t) == EINVAL)			return 0;		/* Should be implemented, since bttv calls it */		tuner_dbg("VIDIOCSAUDIO not implemented.\n");		break;	case MSP_SET_MATRIX:	case TDA9887_SET_CONFIG:		break;	/* --- v4l ioctls --- */	/* take care: bttv does userspace copying, we'll get a	   kernel pointer here... */	case VIDIOCSCHAN:		{			static const v4l2_std_id map[] = {				[VIDEO_MODE_PAL] = V4L2_STD_PAL,				[VIDEO_MODE_NTSC] = V4L2_STD_NTSC_M,				[VIDEO_MODE_SECAM] = V4L2_STD_SECAM,				[4 /* bttv */ ] = V4L2_STD_PAL_M,				[5 /* bttv */ ] = V4L2_STD_PAL_N,				[6 /* bttv */ ] = V4L2_STD_NTSC_M_JP,			};			struct video_channel *vc = arg;			if (check_v4l2(t) == EINVAL)				return 0;			if (set_mode(client,t,V4L2_TUNER_ANALOG_TV, "VIDIOCSCHAN")==EINVAL)				return 0;			if (vc->norm < ARRAY_SIZE(map))				t->std = map[vc->norm];			tuner_fixup_std(t);			if (t->freq)				set_tv_freq(client, t->freq);			return 0;		}	case VIDIOCSFREQ:		{			unsigned long *v = arg;			if (check_mode(t, "VIDIOCSFREQ") == EINVAL)				return 0;			if (check_v4l2(t) == EINVAL)				return 0;			set_freq(client, *v);			return 0;		}	case VIDIOCGTUNER:		{			struct video_tuner *vt = arg;			if (check_mode(t, "VIDIOCGTUNER") == EINVAL)				return 0;			if (check_v4l2(t) == EINVAL)				return 0;			if (V4L2_TUNER_RADIO == t->mode) {				if (t->has_signal)					vt->signal = t->has_signal(client);				if (t->is_stereo) {					if (t->is_stereo(client))						vt->flags |=						    VIDEO_TUNER_STEREO_ON;					else						vt->flags &=						    ~VIDEO_TUNER_STEREO_ON;				}				vt->flags |= VIDEO_TUNER_LOW;	/* Allow freqs at 62.5 Hz */				vt->rangelow = radio_range[0] * 16000;				vt->rangehigh = radio_range[1] * 16000;			} else {				vt->rangelow = tv_range[0] * 16;				vt->rangehigh = tv_range[1] * 16;			}			return 0;		}	case VIDIOCGAUDIO:		{			struct video_audio *va = arg;			if (check_mode(t, "VIDIOCGAUDIO") == EINVAL)				return 0;			if (check_v4l2(t) == EINVAL)				return 0;			if (V4L2_TUNER_RADIO == t->mode && t->is_stereo)				va->mode = t->is_stereo(client)				    ? VIDEO_SOUND_STEREO : VIDEO_SOUND_MONO;			return 0;		}	case VIDIOC_S_STD:		{			v4l2_std_id *id = arg;			if (set_mode (client, t, V4L2_TUNER_ANALOG_TV, "VIDIOC_S_STD")					== EINVAL)				return 0;			switch_v4l2();			t->std = *id;			tuner_fixup_std(t);			if (t->freq)				set_freq(client, t->freq);			break;		}	case VIDIOC_S_FREQUENCY:		{			struct v4l2_frequency *f = arg;			t->freq = f->frequency;			switch_v4l2();			if (V4L2_TUNER_RADIO == f->type &&			    V4L2_TUNER_RADIO != t->mode) {			        if (set_mode (client, t, f->type, "VIDIOC_S_FREQUENCY")					    == EINVAL)					return 0;			}			set_freq(client,t->freq);			break;		}	case VIDIOC_G_FREQUENCY:		{			struct v4l2_frequency *f = arg;			if (check_mode(t, "VIDIOC_G_FREQUENCY") == EINVAL)				return 0;			switch_v4l2();			f->type = t->mode;			f->frequency = t->freq;			break;		}	case VIDIOC_G_TUNER:		{			struct v4l2_tuner *tuner = arg;			if (check_mode(t, "VIDIOC_G_TUNER") == EINVAL)				return 0;			switch_v4l2();			if (V4L2_TUNER_RADIO == t->mode) {				if (t->has_signal)					tuner->signal = t->has_signal(client);				if (t->is_stereo) {					if (t->is_stereo(client)) {						tuner->rxsubchans =						    V4L2_TUNER_SUB_STEREO |						    V4L2_TUNER_SUB_MONO;					} else {						tuner->rxsubchans =						    V4L2_TUNER_SUB_MONO;					}				}				tuner->capability |=				    V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_STEREO;				tuner->audmode = t->audmode;				tuner->rangelow = radio_range[0] * 16000;				tuner->rangehigh = radio_range[1] * 16000;			} else {				tuner->rangelow = tv_range[0] * 16;				tuner->rangehigh = tv_range[1] * 16;			}			break;		}	case VIDIOC_S_TUNER:		{			struct v4l2_tuner *tuner = arg;			if (check_mode(t, "VIDIOC_S_TUNER") == EINVAL)				return 0;			switch_v4l2();			if (V4L2_TUNER_RADIO == t->mode) {				t->audmode = tuner->audmode;				set_radio_freq(client, t->freq);			}			break;		}	default:		tuner_dbg("Unimplemented IOCTL 0x%08x(dir=%d,tp=0x%02x,nr=%d,sz=%d)\n",					 cmd, _IOC_DIR(cmd), _IOC_TYPE(cmd),					_IOC_NR(cmd), _IOC_SIZE(cmd));		break;	}	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/fd1c388125d713b403569d96d9845470142884a2/tuner-core.c/buggy/drivers/media/video/tuner-core.c