Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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

parent 4aebc289
Loading
Loading
Loading
Loading
+21 −32
Original line number Diff line number Diff line
@@ -129,7 +129,7 @@ static int usb_amradio_resume(struct usb_interface *intf);
struct amradio_device {
	/* reference to USB and video device */
	struct usb_device *usbdev;
	struct video_device *videodev;
	struct video_device videodev;
	struct v4l2_device v4l2_dev;

	unsigned char *buffer;
@@ -272,7 +272,7 @@ static void usb_amradio_disconnect(struct usb_interface *intf)
	mutex_unlock(&radio->lock);

	usb_set_intfdata(intf, NULL);
	video_unregister_device(radio->videodev);
	video_unregister_device(&radio->videodev);
	v4l2_device_disconnect(&radio->v4l2_dev);
}

@@ -320,7 +320,7 @@ static int vidioc_g_tuner(struct file *file, void *priv,
 */
	retval = amradio_set_stereo(radio, WANT_STEREO);
	if (retval < 0)
		amradio_dev_warn(&radio->videodev->dev,
		amradio_dev_warn(&radio->videodev.dev,
			"set stereo failed\n");

	strcpy(v->name, "FM");
@@ -366,13 +366,13 @@ static int vidioc_s_tuner(struct file *file, void *priv,
	case V4L2_TUNER_MODE_MONO:
		retval = amradio_set_stereo(radio, WANT_MONO);
		if (retval < 0)
			amradio_dev_warn(&radio->videodev->dev,
			amradio_dev_warn(&radio->videodev.dev,
				"set mono failed\n");
		break;
	case V4L2_TUNER_MODE_STEREO:
		retval = amradio_set_stereo(radio, WANT_STEREO);
		if (retval < 0)
			amradio_dev_warn(&radio->videodev->dev,
			amradio_dev_warn(&radio->videodev.dev,
				"set stereo failed\n");
		break;
	default:
@@ -403,7 +403,7 @@ static int vidioc_s_frequency(struct file *file, void *priv,

	retval = amradio_setfreq(radio, radio->curfreq);
	if (retval < 0)
		amradio_dev_warn(&radio->videodev->dev,
		amradio_dev_warn(&radio->videodev.dev,
			"set frequency failed\n");

unlock:
@@ -493,13 +493,13 @@ static int vidioc_s_ctrl(struct file *file, void *priv,
		if (ctrl->value) {
			retval = amradio_set_mute(radio, AMRADIO_STOP);
			if (retval < 0) {
				amradio_dev_warn(&radio->videodev->dev,
				amradio_dev_warn(&radio->videodev.dev,
					"amradio_stop failed\n");
			}
		} else {
			retval = amradio_set_mute(radio, AMRADIO_START);
			if (retval < 0) {
				amradio_dev_warn(&radio->videodev->dev,
				amradio_dev_warn(&radio->videodev.dev,
					"amradio_start failed\n");
			}
		}
@@ -565,7 +565,7 @@ static int usb_amradio_open(struct file *file)

	retval = amradio_set_mute(radio, AMRADIO_START);
	if (retval < 0) {
		amradio_dev_warn(&radio->videodev->dev,
		amradio_dev_warn(&radio->videodev.dev,
			"radio did not start up properly\n");
		radio->users = 0;
		goto unlock;
@@ -573,12 +573,12 @@ static int usb_amradio_open(struct file *file)

	retval = amradio_set_stereo(radio, WANT_STEREO);
	if (retval < 0)
		amradio_dev_warn(&radio->videodev->dev,
		amradio_dev_warn(&radio->videodev.dev,
			"set stereo failed\n");

	retval = amradio_setfreq(radio, radio->curfreq);
	if (retval < 0)
		amradio_dev_warn(&radio->videodev->dev,
		amradio_dev_warn(&radio->videodev.dev,
			"set frequency failed\n");

unlock:
@@ -604,7 +604,7 @@ static int usb_amradio_close(struct file *file)
	if (!radio->removed) {
		retval = amradio_set_mute(radio, AMRADIO_STOP);
		if (retval < 0)
			amradio_dev_warn(&radio->videodev->dev,
			amradio_dev_warn(&radio->videodev.dev,
				"amradio_stop failed\n");
	}

@@ -676,9 +676,6 @@ static void usb_amradio_video_device_release(struct video_device *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);

	/* free rest memory */
@@ -718,20 +715,12 @@ static int usb_amradio_probe(struct usb_interface *intf,
		return retval;
	}

	radio->videodev = video_device_alloc();

	if (!radio->videodev) {
		dev_err(&intf->dev, "video_device_alloc failed\n");
		kfree(radio->buffer);
		kfree(radio);
		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;
	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->users = 0;
@@ -741,12 +730,12 @@ static int usb_amradio_probe(struct usb_interface *intf,

	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) {
		dev_err(&intf->dev, "could not register video device\n");
		video_device_release(radio->videodev);
		v4l2_device_unregister(v4l2_dev);
		kfree(radio->buffer);
		kfree(radio);