Commit eac000a9 authored by David Ellingsworth's avatar David Ellingsworth Committed by Mauro Carvalho Chehab

V4L/DVB (13065): radio-mr800: simplify locking in ioctl callbacks

Simplify locking in ioctl callbacks.
Signed-off-by: default avatarDavid Ellingsworth <david@identd.dyndns.org>
Acked-by: default avatarAlexey Klimov <klimov.linux@gmail.com>
Signed-off-by: default avatarDouglas Schilling Landgraf <dougsland@redhat.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent ceb99e1b
...@@ -299,18 +299,8 @@ static int vidioc_g_tuner(struct file *file, void *priv, ...@@ -299,18 +299,8 @@ static int vidioc_g_tuner(struct file *file, void *priv,
struct amradio_device *radio = file->private_data; struct amradio_device *radio = file->private_data;
int retval; int retval;
mutex_lock(&radio->lock); if (v->index > 0)
return -EINVAL;
/* safety check */
if (radio->removed) {
retval = -EIO;
goto unlock;
}
if (v->index > 0) {
retval = -EINVAL;
goto unlock;
}
/* TODO: Add function which look is signal stereo or not /* TODO: Add function which look is signal stereo or not
* amradio_getstat(radio); * amradio_getstat(radio);
...@@ -338,8 +328,6 @@ static int vidioc_g_tuner(struct file *file, void *priv, ...@@ -338,8 +328,6 @@ static int vidioc_g_tuner(struct file *file, void *priv,
v->signal = 0xffff; /* Can't get the signal strength, sad.. */ v->signal = 0xffff; /* Can't get the signal strength, sad.. */
v->afc = 0; /* Don't know what is this */ v->afc = 0; /* Don't know what is this */
unlock:
mutex_unlock(&radio->lock);
return retval; return retval;
} }
...@@ -348,20 +336,10 @@ static int vidioc_s_tuner(struct file *file, void *priv, ...@@ -348,20 +336,10 @@ static int vidioc_s_tuner(struct file *file, void *priv,
struct v4l2_tuner *v) struct v4l2_tuner *v)
{ {
struct amradio_device *radio = file->private_data; struct amradio_device *radio = file->private_data;
int retval; int retval = -EINVAL;
mutex_lock(&radio->lock);
/* safety check */
if (radio->removed) {
retval = -EIO;
goto unlock;
}
if (v->index > 0) { if (v->index > 0)
retval = -EINVAL; return -EINVAL;
goto unlock;
}
/* mono/stereo selector */ /* mono/stereo selector */
switch (v->audmode) { switch (v->audmode) {
...@@ -377,12 +355,8 @@ static int vidioc_s_tuner(struct file *file, void *priv, ...@@ -377,12 +355,8 @@ static int vidioc_s_tuner(struct file *file, void *priv,
amradio_dev_warn(&radio->videodev.dev, amradio_dev_warn(&radio->videodev.dev,
"set stereo failed\n"); "set stereo failed\n");
break; break;
default:
retval = -EINVAL;
} }
unlock:
mutex_unlock(&radio->lock);
return retval; return retval;
} }
...@@ -391,15 +365,7 @@ static int vidioc_s_frequency(struct file *file, void *priv, ...@@ -391,15 +365,7 @@ static int vidioc_s_frequency(struct file *file, void *priv,
struct v4l2_frequency *f) struct v4l2_frequency *f)
{ {
struct amradio_device *radio = file->private_data; struct amradio_device *radio = file->private_data;
int retval; int retval = 0;
mutex_lock(&radio->lock);
/* safety check */
if (radio->removed) {
retval = -EIO;
goto unlock;
}
radio->curfreq = f->frequency; radio->curfreq = f->frequency;
...@@ -408,8 +374,6 @@ static int vidioc_s_frequency(struct file *file, void *priv, ...@@ -408,8 +374,6 @@ static int vidioc_s_frequency(struct file *file, void *priv,
amradio_dev_warn(&radio->videodev.dev, amradio_dev_warn(&radio->videodev.dev,
"set frequency failed\n"); "set frequency failed\n");
unlock:
mutex_unlock(&radio->lock);
return retval; return retval;
} }
...@@ -418,22 +382,11 @@ static int vidioc_g_frequency(struct file *file, void *priv, ...@@ -418,22 +382,11 @@ static int vidioc_g_frequency(struct file *file, void *priv,
struct v4l2_frequency *f) struct v4l2_frequency *f)
{ {
struct amradio_device *radio = file->private_data; 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->type = V4L2_TUNER_RADIO;
f->frequency = radio->curfreq; f->frequency = radio->curfreq;
unlock: return 0;
mutex_unlock(&radio->lock);
return retval;
} }
/* vidioc_queryctrl - enumerate control items */ /* vidioc_queryctrl - enumerate control items */
...@@ -453,26 +406,14 @@ static int vidioc_g_ctrl(struct file *file, void *priv, ...@@ -453,26 +406,14 @@ static int vidioc_g_ctrl(struct file *file, void *priv,
struct v4l2_control *ctrl) struct v4l2_control *ctrl)
{ {
struct amradio_device *radio = file->private_data; 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) { switch (ctrl->id) {
case V4L2_CID_AUDIO_MUTE: case V4L2_CID_AUDIO_MUTE:
ctrl->value = radio->muted; ctrl->value = radio->muted;
retval = 0; return 0;
break;
} }
unlock: return -EINVAL;
mutex_unlock(&radio->lock);
return retval;
} }
/* vidioc_s_ctrl - set the value of a control */ /* vidioc_s_ctrl - set the value of a control */
...@@ -482,14 +423,6 @@ static int vidioc_s_ctrl(struct file *file, void *priv, ...@@ -482,14 +423,6 @@ static int vidioc_s_ctrl(struct file *file, void *priv,
struct amradio_device *radio = file->private_data; struct amradio_device *radio = file->private_data;
int retval = -EINVAL; int retval = -EINVAL;
mutex_lock(&radio->lock);
/* safety check */
if (radio->removed) {
retval = -EIO;
goto unlock;
}
switch (ctrl->id) { switch (ctrl->id) {
case V4L2_CID_AUDIO_MUTE: case V4L2_CID_AUDIO_MUTE:
if (ctrl->value) { if (ctrl->value) {
...@@ -508,8 +441,6 @@ static int vidioc_s_ctrl(struct file *file, void *priv, ...@@ -508,8 +441,6 @@ static int vidioc_s_ctrl(struct file *file, void *priv,
break; break;
} }
unlock:
mutex_unlock(&radio->lock);
return retval; return retval;
} }
...@@ -616,6 +547,26 @@ static int usb_amradio_close(struct file *file) ...@@ -616,6 +547,26 @@ static int usb_amradio_close(struct file *file)
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 */ /* Suspend device - stop device. Need to be checked and fixed */
static int usb_amradio_suspend(struct usb_interface *intf, pm_message_t message) static int usb_amradio_suspend(struct usb_interface *intf, pm_message_t message)
{ {
...@@ -657,7 +608,7 @@ static const struct v4l2_file_operations usb_amradio_fops = { ...@@ -657,7 +608,7 @@ static const struct v4l2_file_operations usb_amradio_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = usb_amradio_open, .open = usb_amradio_open,
.release = usb_amradio_close, .release = usb_amradio_close,
.ioctl = video_ioctl2, .ioctl = usb_amradio_ioctl,
}; };
static const struct v4l2_ioctl_ops usb_amradio_ioctl_ops = { static const struct v4l2_ioctl_ops usb_amradio_ioctl_ops = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment