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

Commit 4d601c4c authored by Leonid Kegulskiy's avatar Leonid Kegulskiy Committed by Mauro Carvalho Chehab
Browse files

[media] hdpvr: Removed unnecessary use of kzalloc() in get_video_info()



[mchehab@redhat.com: CodingStyle fixes]
Signed-off-by: default avatarLeonid Kegulskiy <leo@lumanate.com>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent ff29feb9
Loading
Loading
Loading
Loading
+9 −16
Original line number Diff line number Diff line
@@ -45,20 +45,10 @@ int hdpvr_config_call(struct hdpvr_device *dev, uint value, u8 valbuf)
	return ret < 0 ? ret : 0;
}

struct hdpvr_video_info *get_video_info(struct hdpvr_device *dev)
int get_video_info(struct hdpvr_device *dev, struct hdpvr_video_info *vidinf)
{
	struct hdpvr_video_info *vidinf = NULL;
#ifdef HDPVR_DEBUG
	char print_buf[15];
#endif
	int ret;

	vidinf = kzalloc(sizeof(struct hdpvr_video_info), GFP_KERNEL);
	if (!vidinf) {
		v4l2_err(&dev->v4l2_dev, "out of memory\n");
		goto err;
	}

	mutex_lock(&dev->usbc_mutex);
	ret = usb_control_msg(dev->udev,
			      usb_rcvctrlpipe(dev->udev, 0),
@@ -74,6 +64,7 @@ struct hdpvr_video_info *get_video_info(struct hdpvr_device *dev)

#ifdef HDPVR_DEBUG
	if (hdpvr_debug & MSG_INFO) {
		char print_buf[15];
		hex_dump_to_buffer(dev->usbc_buf, 5, 16, 1, print_buf,
				   sizeof(print_buf), 0);
		v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev,
@@ -82,12 +73,14 @@ struct hdpvr_video_info *get_video_info(struct hdpvr_device *dev)
#endif
	mutex_unlock(&dev->usbc_mutex);

	if (!vidinf->width || !vidinf->height || !vidinf->fps) {
		kfree(vidinf);
		vidinf = NULL;
	if ((ret > 0 && ret != 5) ||/* fail if unexpected byte count returned */
	    !vidinf->width ||	/* preserve original behavior -  */
	    !vidinf->height ||	/* fail if no signal is detected */
	    !vidinf->fps) {
		ret = -EFAULT;
	}
err:
	return vidinf;

	return ret < 0 ? ret : 0;
}

int get_input_lines_info(struct hdpvr_device *dev)
+27 −27
Original line number Diff line number Diff line
@@ -277,20 +277,19 @@ error:
static int hdpvr_start_streaming(struct hdpvr_device *dev)
{
	int ret;
	struct hdpvr_video_info *vidinf;
	struct hdpvr_video_info vidinf;

	if (dev->status == STATUS_STREAMING)
		return 0;
	else if (dev->status != STATUS_IDLE)
		return -EAGAIN;

	vidinf = get_video_info(dev);
	ret = get_video_info(dev, &vidinf);

	if (vidinf) {
	if (!ret) {
		v4l2_dbg(MSG_BUFFER, hdpvr_debug, &dev->v4l2_dev,
			 "video signal: %dx%d@%dhz\n", vidinf->width,
			 vidinf->height, vidinf->fps);
		kfree(vidinf);
			 "video signal: %dx%d@%dhz\n", vidinf.width,
			 vidinf.height, vidinf.fps);

		/* start streaming 2 request */
		ret = usb_control_msg(dev->udev,
@@ -610,21 +609,22 @@ static int vidioc_g_std(struct file *file, void *_fh,
static int vidioc_querystd(struct file *file, void *_fh, v4l2_std_id *a)
{
	struct hdpvr_device *dev = video_drvdata(file);
	struct hdpvr_video_info *vid_info;
	struct hdpvr_video_info vid_info;
	struct hdpvr_fh *fh = _fh;
	int ret;

	*a = V4L2_STD_ALL;
	if (dev->options.video_input == HDPVR_COMPONENT)
		return fh->legacy_mode ? 0 : -ENODATA;
	vid_info = get_video_info(dev);
	if (vid_info == NULL)
	ret = get_video_info(dev, &vid_info);
	if (ret)
		return 0;
	if (vid_info->width == 720 &&
	    (vid_info->height == 480 || vid_info->height == 576)) {
		*a = (vid_info->height == 480) ?
	if (vid_info.width == 720 &&
	    (vid_info.height == 480 || vid_info.height == 576)) {
		*a = (vid_info.height == 480) ?
			V4L2_STD_525_60 : V4L2_STD_625_50;
	}
	kfree(vid_info);

	return 0;
}

@@ -669,7 +669,7 @@ static int vidioc_query_dv_timings(struct file *file, void *_fh,
{
	struct hdpvr_device *dev = video_drvdata(file);
	struct hdpvr_fh *fh = _fh;
	struct hdpvr_video_info *vid_info;
	struct hdpvr_video_info vid_info;
	bool interlaced;
	int ret = 0;
	int i;
@@ -677,10 +677,10 @@ static int vidioc_query_dv_timings(struct file *file, void *_fh,
	fh->legacy_mode = false;
	if (dev->options.video_input)
		return -ENODATA;
	vid_info = get_video_info(dev);
	if (vid_info == NULL)
	ret = get_video_info(dev, &vid_info);
	if (ret)
		return -ENOLCK;
	interlaced = vid_info->fps <= 30;
	interlaced = vid_info.fps <= 30;
	for (i = 0; i < ARRAY_SIZE(hdpvr_dv_timings); i++) {
		const struct v4l2_bt_timings *bt = &hdpvr_dv_timings[i].bt;
		unsigned hsize;
@@ -692,17 +692,17 @@ static int vidioc_query_dv_timings(struct file *file, void *_fh,
			bt->il_vfrontporch + bt->il_vsync + bt->il_vbackporch +
			bt->height;
		fps = (unsigned)bt->pixelclock / (hsize * vsize);
		if (bt->width != vid_info->width ||
		    bt->height != vid_info->height ||
		if (bt->width != vid_info.width ||
		    bt->height != vid_info.height ||
		    bt->interlaced != interlaced ||
		    (fps != vid_info->fps && fps + 1 != vid_info->fps))
		    (fps != vid_info.fps && fps + 1 != vid_info.fps))
			continue;
		*timings = hdpvr_dv_timings[i];
		break;
	}
	if (i == ARRAY_SIZE(hdpvr_dv_timings))
		ret = -ERANGE;
	kfree(vid_info);

	return ret;
}

@@ -992,6 +992,7 @@ static int vidioc_g_fmt_vid_cap(struct file *file, void *_fh,
{
	struct hdpvr_device *dev = video_drvdata(file);
	struct hdpvr_fh *fh = _fh;
	int ret;

	/*
	 * The original driver would always returns the current detected
@@ -1004,14 +1005,13 @@ static int vidioc_g_fmt_vid_cap(struct file *file, void *_fh,
	 * last set format.
	 */
	if (fh->legacy_mode) {
		struct hdpvr_video_info *vid_info;
		struct hdpvr_video_info vid_info;

		vid_info = get_video_info(dev);
		if (!vid_info)
		ret = get_video_info(dev, &vid_info);
		if (ret)
			return -EFAULT;
		f->fmt.pix.width = vid_info->width;
		f->fmt.pix.height = vid_info->height;
		kfree(vid_info);
		f->fmt.pix.width = vid_info.width;
		f->fmt.pix.height = vid_info.height;
	} else {
		f->fmt.pix.width = dev->width;
		f->fmt.pix.height = dev->height;
+1 −1
Original line number Diff line number Diff line
@@ -303,7 +303,7 @@ int hdpvr_set_audio(struct hdpvr_device *dev, u8 input,
int hdpvr_config_call(struct hdpvr_device *dev, uint value,
		      unsigned char valbuf);

struct hdpvr_video_info *get_video_info(struct hdpvr_device *dev);
int get_video_info(struct hdpvr_device *dev, struct hdpvr_video_info *vid_info);

/* :0 s b8 81 1800 0003 0003 3 < */
/* :0 0 3 = 0301ff */