struct amradio_device *radio = file->private_data;
int retval;
- mutex_lock(&radio->lock);
-
- /* safety check */
- if (radio->removed) {
- retval = -EIO;
- goto unlock;
- }
-
- if (v->index > 0) {
- retval = -EINVAL;
- goto unlock;
- }
+ if (v->index > 0)
+ return -EINVAL;
/* TODO: Add function which look is signal stereo or not
* amradio_getstat(radio);
v->signal = 0xffff; /* Can't get the signal strength, sad.. */
v->afc = 0; /* Don't know what is this */
-unlock:
- mutex_unlock(&radio->lock);
return retval;
}
struct v4l2_tuner *v)
{
struct amradio_device *radio = file->private_data;
- int retval;
-
- mutex_lock(&radio->lock);
-
- /* safety check */
- if (radio->removed) {
- retval = -EIO;
- goto unlock;
- }
+ int retval = -EINVAL;
- if (v->index > 0) {
- retval = -EINVAL;
- goto unlock;
- }
+ if (v->index > 0)
+ return -EINVAL;
/* mono/stereo selector */
switch (v->audmode) {
amradio_dev_warn(&radio->videodev.dev,
"set stereo failed\n");
break;
- default:
- retval = -EINVAL;
}
-unlock:
- mutex_unlock(&radio->lock);
return retval;
}
struct v4l2_frequency *f)
{
struct amradio_device *radio = file->private_data;
- int retval;
-
- mutex_lock(&radio->lock);
-
- /* safety check */
- if (radio->removed) {
- retval = -EIO;
- goto unlock;
- }
+ int retval = 0;
radio->curfreq = f->frequency;
amradio_dev_warn(&radio->videodev.dev,
"set frequency failed\n");
-unlock:
- mutex_unlock(&radio->lock);
return retval;
}
struct v4l2_frequency *f)
{
struct amradio_device *radio = file->private_data;
- int retval = 0;
-
- mutex_lock(&radio->lock);
-
- /* safety check */
- if (radio->removed) {
- retval = -EIO;
- goto unlock;
- }
f->type = V4L2_TUNER_RADIO;
f->frequency = radio->curfreq;
-unlock:
- mutex_unlock(&radio->lock);
- return retval;
+ return 0;
}
/* vidioc_queryctrl - enumerate control items */
struct v4l2_control *ctrl)
{
struct amradio_device *radio = file->private_data;
- int retval = -EINVAL;
-
- mutex_lock(&radio->lock);
-
- /* safety check */
- if (radio->removed) {
- retval = -EIO;
- goto unlock;
- }
switch (ctrl->id) {
case V4L2_CID_AUDIO_MUTE:
ctrl->value = radio->muted;
- retval = 0;
- break;
+ return 0;
}
-unlock:
- mutex_unlock(&radio->lock);
- return retval;
+ return -EINVAL;
}
/* vidioc_s_ctrl - set the value of a control */
struct amradio_device *radio = file->private_data;
int retval = -EINVAL;
- mutex_lock(&radio->lock);
-
- /* safety check */
- if (radio->removed) {
- retval = -EIO;
- goto unlock;
- }
-
switch (ctrl->id) {
case V4L2_CID_AUDIO_MUTE:
if (ctrl->value) {
break;
}
-unlock:
- mutex_unlock(&radio->lock);
return retval;
}
return retval;
}
+static long usb_amradio_ioctl(struct file *file, unsigned int cmd,
+ unsigned long arg)
+{
+ struct amradio_device *radio = file->private_data;
+ long retval = 0;
+
+ mutex_lock(&radio->lock);
+
+ if (radio->removed) {
+ retval = -EIO;
+ goto unlock;
+ }
+
+ retval = video_ioctl2(file, cmd, arg);
+
+unlock:
+ mutex_unlock(&radio->lock);
+ return retval;
+}
+
/* Suspend device - stop device. Need to be checked and fixed */
static int usb_amradio_suspend(struct usb_interface *intf, pm_message_t message)
{
.owner = THIS_MODULE,
.open = usb_amradio_open,
.release = usb_amradio_close,
- .ioctl = video_ioctl2,
+ .ioctl = usb_amradio_ioctl,
};
static const struct v4l2_ioctl_ops usb_amradio_ioctl_ops = {