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

V4L/DVB (13061): radio-mr800: simplify video_device allocation

simplify video_device allocation
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 4aebc289
...@@ -129,7 +129,7 @@ static int usb_amradio_resume(struct usb_interface *intf); ...@@ -129,7 +129,7 @@ static int usb_amradio_resume(struct usb_interface *intf);
struct amradio_device { struct amradio_device {
/* reference to USB and video device */ /* reference to USB and video device */
struct usb_device *usbdev; struct usb_device *usbdev;
struct video_device *videodev; struct video_device videodev;
struct v4l2_device v4l2_dev; struct v4l2_device v4l2_dev;
unsigned char *buffer; unsigned char *buffer;
...@@ -272,7 +272,7 @@ static void usb_amradio_disconnect(struct usb_interface *intf) ...@@ -272,7 +272,7 @@ static void usb_amradio_disconnect(struct usb_interface *intf)
mutex_unlock(&radio->lock); mutex_unlock(&radio->lock);
usb_set_intfdata(intf, NULL); usb_set_intfdata(intf, NULL);
video_unregister_device(radio->videodev); video_unregister_device(&radio->videodev);
v4l2_device_disconnect(&radio->v4l2_dev); v4l2_device_disconnect(&radio->v4l2_dev);
} }
...@@ -320,7 +320,7 @@ static int vidioc_g_tuner(struct file *file, void *priv, ...@@ -320,7 +320,7 @@ static int vidioc_g_tuner(struct file *file, void *priv,
*/ */
retval = amradio_set_stereo(radio, WANT_STEREO); retval = amradio_set_stereo(radio, WANT_STEREO);
if (retval < 0) if (retval < 0)
amradio_dev_warn(&radio->videodev->dev, amradio_dev_warn(&radio->videodev.dev,
"set stereo failed\n"); "set stereo failed\n");
strcpy(v->name, "FM"); strcpy(v->name, "FM");
...@@ -366,13 +366,13 @@ static int vidioc_s_tuner(struct file *file, void *priv, ...@@ -366,13 +366,13 @@ static int vidioc_s_tuner(struct file *file, void *priv,
case V4L2_TUNER_MODE_MONO: case V4L2_TUNER_MODE_MONO:
retval = amradio_set_stereo(radio, WANT_MONO); retval = amradio_set_stereo(radio, WANT_MONO);
if (retval < 0) if (retval < 0)
amradio_dev_warn(&radio->videodev->dev, amradio_dev_warn(&radio->videodev.dev,
"set mono failed\n"); "set mono failed\n");
break; break;
case V4L2_TUNER_MODE_STEREO: case V4L2_TUNER_MODE_STEREO:
retval = amradio_set_stereo(radio, WANT_STEREO); retval = amradio_set_stereo(radio, WANT_STEREO);
if (retval < 0) if (retval < 0)
amradio_dev_warn(&radio->videodev->dev, amradio_dev_warn(&radio->videodev.dev,
"set stereo failed\n"); "set stereo failed\n");
break; break;
default: default:
...@@ -403,7 +403,7 @@ static int vidioc_s_frequency(struct file *file, void *priv, ...@@ -403,7 +403,7 @@ static int vidioc_s_frequency(struct file *file, void *priv,
retval = amradio_setfreq(radio, radio->curfreq); retval = amradio_setfreq(radio, radio->curfreq);
if (retval < 0) if (retval < 0)
amradio_dev_warn(&radio->videodev->dev, amradio_dev_warn(&radio->videodev.dev,
"set frequency failed\n"); "set frequency failed\n");
unlock: unlock:
...@@ -493,13 +493,13 @@ static int vidioc_s_ctrl(struct file *file, void *priv, ...@@ -493,13 +493,13 @@ static int vidioc_s_ctrl(struct file *file, void *priv,
if (ctrl->value) { if (ctrl->value) {
retval = amradio_set_mute(radio, AMRADIO_STOP); retval = amradio_set_mute(radio, AMRADIO_STOP);
if (retval < 0) { if (retval < 0) {
amradio_dev_warn(&radio->videodev->dev, amradio_dev_warn(&radio->videodev.dev,
"amradio_stop failed\n"); "amradio_stop failed\n");
} }
} else { } else {
retval = amradio_set_mute(radio, AMRADIO_START); retval = amradio_set_mute(radio, AMRADIO_START);
if (retval < 0) { if (retval < 0) {
amradio_dev_warn(&radio->videodev->dev, amradio_dev_warn(&radio->videodev.dev,
"amradio_start failed\n"); "amradio_start failed\n");
} }
} }
...@@ -565,7 +565,7 @@ static int usb_amradio_open(struct file *file) ...@@ -565,7 +565,7 @@ static int usb_amradio_open(struct file *file)
retval = amradio_set_mute(radio, AMRADIO_START); retval = amradio_set_mute(radio, AMRADIO_START);
if (retval < 0) { if (retval < 0) {
amradio_dev_warn(&radio->videodev->dev, amradio_dev_warn(&radio->videodev.dev,
"radio did not start up properly\n"); "radio did not start up properly\n");
radio->users = 0; radio->users = 0;
goto unlock; goto unlock;
...@@ -573,12 +573,12 @@ static int usb_amradio_open(struct file *file) ...@@ -573,12 +573,12 @@ static int usb_amradio_open(struct file *file)
retval = amradio_set_stereo(radio, WANT_STEREO); retval = amradio_set_stereo(radio, WANT_STEREO);
if (retval < 0) if (retval < 0)
amradio_dev_warn(&radio->videodev->dev, amradio_dev_warn(&radio->videodev.dev,
"set stereo failed\n"); "set stereo failed\n");
retval = amradio_setfreq(radio, radio->curfreq); retval = amradio_setfreq(radio, radio->curfreq);
if (retval < 0) if (retval < 0)
amradio_dev_warn(&radio->videodev->dev, amradio_dev_warn(&radio->videodev.dev,
"set frequency failed\n"); "set frequency failed\n");
unlock: unlock:
...@@ -604,7 +604,7 @@ static int usb_amradio_close(struct file *file) ...@@ -604,7 +604,7 @@ static int usb_amradio_close(struct file *file)
if (!radio->removed) { if (!radio->removed) {
retval = amradio_set_mute(radio, AMRADIO_STOP); retval = amradio_set_mute(radio, AMRADIO_STOP);
if (retval < 0) if (retval < 0)
amradio_dev_warn(&radio->videodev->dev, amradio_dev_warn(&radio->videodev.dev,
"amradio_stop failed\n"); "amradio_stop failed\n");
} }
...@@ -676,9 +676,6 @@ static void usb_amradio_video_device_release(struct video_device *videodev) ...@@ -676,9 +676,6 @@ static void usb_amradio_video_device_release(struct video_device *videodev)
{ {
struct amradio_device *radio = video_get_drvdata(videodev); struct amradio_device *radio = video_get_drvdata(videodev);
/* we call v4l to free radio->videodev */
video_device_release(videodev);
v4l2_device_unregister(&radio->v4l2_dev); v4l2_device_unregister(&radio->v4l2_dev);
/* free rest memory */ /* free rest memory */
...@@ -718,20 +715,12 @@ static int usb_amradio_probe(struct usb_interface *intf, ...@@ -718,20 +715,12 @@ static int usb_amradio_probe(struct usb_interface *intf,
return retval; return retval;
} }
radio->videodev = video_device_alloc(); strlcpy(radio->videodev.name, v4l2_dev->name,
sizeof(radio->videodev.name));
if (!radio->videodev) { radio->videodev.v4l2_dev = v4l2_dev;
dev_err(&intf->dev, "video_device_alloc failed\n"); radio->videodev.fops = &usb_amradio_fops;
kfree(radio->buffer); radio->videodev.ioctl_ops = &usb_amradio_ioctl_ops;
kfree(radio); radio->videodev.release = usb_amradio_video_device_release;
return -ENOMEM;
}
strlcpy(radio->videodev->name, v4l2_dev->name, sizeof(radio->videodev->name));
radio->videodev->v4l2_dev = v4l2_dev;
radio->videodev->fops = &usb_amradio_fops;
radio->videodev->ioctl_ops = &usb_amradio_ioctl_ops;
radio->videodev->release = usb_amradio_video_device_release;
radio->removed = 0; radio->removed = 0;
radio->users = 0; radio->users = 0;
...@@ -741,12 +730,12 @@ static int usb_amradio_probe(struct usb_interface *intf, ...@@ -741,12 +730,12 @@ static int usb_amradio_probe(struct usb_interface *intf,
mutex_init(&radio->lock); mutex_init(&radio->lock);
video_set_drvdata(radio->videodev, radio); video_set_drvdata(&radio->videodev, radio);
retval = video_register_device(radio->videodev, VFL_TYPE_RADIO, radio_nr); retval = video_register_device(&radio->videodev, VFL_TYPE_RADIO,
radio_nr);
if (retval < 0) { if (retval < 0) {
dev_err(&intf->dev, "could not register video device\n"); dev_err(&intf->dev, "could not register video device\n");
video_device_release(radio->videodev);
v4l2_device_unregister(v4l2_dev); v4l2_device_unregister(v4l2_dev);
kfree(radio->buffer); kfree(radio->buffer);
kfree(radio); kfree(radio);
......
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