提交 4d601c4c 编写于 作者: L Leonid Kegulskiy 提交者: Mauro Carvalho Chehab

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

[mchehab@redhat.com: CodingStyle fixes]
Signed-off-by: NLeonid Kegulskiy <leo@lumanate.com>
Signed-off-by: NHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: NMauro Carvalho Chehab <mchehab@redhat.com>
上级 ff29feb9
...@@ -45,20 +45,10 @@ int hdpvr_config_call(struct hdpvr_device *dev, uint value, u8 valbuf) ...@@ -45,20 +45,10 @@ int hdpvr_config_call(struct hdpvr_device *dev, uint value, u8 valbuf)
return ret < 0 ? ret : 0; 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; 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); mutex_lock(&dev->usbc_mutex);
ret = usb_control_msg(dev->udev, ret = usb_control_msg(dev->udev,
usb_rcvctrlpipe(dev->udev, 0), usb_rcvctrlpipe(dev->udev, 0),
...@@ -74,6 +64,7 @@ struct hdpvr_video_info *get_video_info(struct hdpvr_device *dev) ...@@ -74,6 +64,7 @@ struct hdpvr_video_info *get_video_info(struct hdpvr_device *dev)
#ifdef HDPVR_DEBUG #ifdef HDPVR_DEBUG
if (hdpvr_debug & MSG_INFO) { if (hdpvr_debug & MSG_INFO) {
char print_buf[15];
hex_dump_to_buffer(dev->usbc_buf, 5, 16, 1, print_buf, hex_dump_to_buffer(dev->usbc_buf, 5, 16, 1, print_buf,
sizeof(print_buf), 0); sizeof(print_buf), 0);
v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev, v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev,
...@@ -82,12 +73,14 @@ struct hdpvr_video_info *get_video_info(struct hdpvr_device *dev) ...@@ -82,12 +73,14 @@ struct hdpvr_video_info *get_video_info(struct hdpvr_device *dev)
#endif #endif
mutex_unlock(&dev->usbc_mutex); mutex_unlock(&dev->usbc_mutex);
if (!vidinf->width || !vidinf->height || !vidinf->fps) { if ((ret > 0 && ret != 5) ||/* fail if unexpected byte count returned */
kfree(vidinf); !vidinf->width || /* preserve original behavior - */
vidinf = NULL; !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) int get_input_lines_info(struct hdpvr_device *dev)
......
...@@ -277,20 +277,19 @@ static void hdpvr_transmit_buffers(struct work_struct *work) ...@@ -277,20 +277,19 @@ static void hdpvr_transmit_buffers(struct work_struct *work)
static int hdpvr_start_streaming(struct hdpvr_device *dev) static int hdpvr_start_streaming(struct hdpvr_device *dev)
{ {
int ret; int ret;
struct hdpvr_video_info *vidinf; struct hdpvr_video_info vidinf;
if (dev->status == STATUS_STREAMING) if (dev->status == STATUS_STREAMING)
return 0; return 0;
else if (dev->status != STATUS_IDLE) else if (dev->status != STATUS_IDLE)
return -EAGAIN; 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, v4l2_dbg(MSG_BUFFER, hdpvr_debug, &dev->v4l2_dev,
"video signal: %dx%d@%dhz\n", vidinf->width, "video signal: %dx%d@%dhz\n", vidinf.width,
vidinf->height, vidinf->fps); vidinf.height, vidinf.fps);
kfree(vidinf);
/* start streaming 2 request */ /* start streaming 2 request */
ret = usb_control_msg(dev->udev, ret = usb_control_msg(dev->udev,
...@@ -610,21 +609,22 @@ static int vidioc_g_std(struct file *file, void *_fh, ...@@ -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) static int vidioc_querystd(struct file *file, void *_fh, v4l2_std_id *a)
{ {
struct hdpvr_device *dev = video_drvdata(file); struct hdpvr_device *dev = video_drvdata(file);
struct hdpvr_video_info *vid_info; struct hdpvr_video_info vid_info;
struct hdpvr_fh *fh = _fh; struct hdpvr_fh *fh = _fh;
int ret;
*a = V4L2_STD_ALL; *a = V4L2_STD_ALL;
if (dev->options.video_input == HDPVR_COMPONENT) if (dev->options.video_input == HDPVR_COMPONENT)
return fh->legacy_mode ? 0 : -ENODATA; return fh->legacy_mode ? 0 : -ENODATA;
vid_info = get_video_info(dev); ret = get_video_info(dev, &vid_info);
if (vid_info == NULL) if (ret)
return 0; return 0;
if (vid_info->width == 720 && if (vid_info.width == 720 &&
(vid_info->height == 480 || vid_info->height == 576)) { (vid_info.height == 480 || vid_info.height == 576)) {
*a = (vid_info->height == 480) ? *a = (vid_info.height == 480) ?
V4L2_STD_525_60 : V4L2_STD_625_50; V4L2_STD_525_60 : V4L2_STD_625_50;
} }
kfree(vid_info);
return 0; return 0;
} }
...@@ -669,7 +669,7 @@ static int vidioc_query_dv_timings(struct file *file, void *_fh, ...@@ -669,7 +669,7 @@ static int vidioc_query_dv_timings(struct file *file, void *_fh,
{ {
struct hdpvr_device *dev = video_drvdata(file); struct hdpvr_device *dev = video_drvdata(file);
struct hdpvr_fh *fh = _fh; struct hdpvr_fh *fh = _fh;
struct hdpvr_video_info *vid_info; struct hdpvr_video_info vid_info;
bool interlaced; bool interlaced;
int ret = 0; int ret = 0;
int i; int i;
...@@ -677,10 +677,10 @@ static int vidioc_query_dv_timings(struct file *file, void *_fh, ...@@ -677,10 +677,10 @@ static int vidioc_query_dv_timings(struct file *file, void *_fh,
fh->legacy_mode = false; fh->legacy_mode = false;
if (dev->options.video_input) if (dev->options.video_input)
return -ENODATA; return -ENODATA;
vid_info = get_video_info(dev); ret = get_video_info(dev, &vid_info);
if (vid_info == NULL) if (ret)
return -ENOLCK; return -ENOLCK;
interlaced = vid_info->fps <= 30; interlaced = vid_info.fps <= 30;
for (i = 0; i < ARRAY_SIZE(hdpvr_dv_timings); i++) { for (i = 0; i < ARRAY_SIZE(hdpvr_dv_timings); i++) {
const struct v4l2_bt_timings *bt = &hdpvr_dv_timings[i].bt; const struct v4l2_bt_timings *bt = &hdpvr_dv_timings[i].bt;
unsigned hsize; unsigned hsize;
...@@ -692,17 +692,17 @@ static int vidioc_query_dv_timings(struct file *file, void *_fh, ...@@ -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->il_vfrontporch + bt->il_vsync + bt->il_vbackporch +
bt->height; bt->height;
fps = (unsigned)bt->pixelclock / (hsize * vsize); fps = (unsigned)bt->pixelclock / (hsize * vsize);
if (bt->width != vid_info->width || if (bt->width != vid_info.width ||
bt->height != vid_info->height || bt->height != vid_info.height ||
bt->interlaced != interlaced || bt->interlaced != interlaced ||
(fps != vid_info->fps && fps + 1 != vid_info->fps)) (fps != vid_info.fps && fps + 1 != vid_info.fps))
continue; continue;
*timings = hdpvr_dv_timings[i]; *timings = hdpvr_dv_timings[i];
break; break;
} }
if (i == ARRAY_SIZE(hdpvr_dv_timings)) if (i == ARRAY_SIZE(hdpvr_dv_timings))
ret = -ERANGE; ret = -ERANGE;
kfree(vid_info);
return ret; return ret;
} }
...@@ -992,6 +992,7 @@ static int vidioc_g_fmt_vid_cap(struct file *file, void *_fh, ...@@ -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_device *dev = video_drvdata(file);
struct hdpvr_fh *fh = _fh; struct hdpvr_fh *fh = _fh;
int ret;
/* /*
* The original driver would always returns the current detected * 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, ...@@ -1004,14 +1005,13 @@ static int vidioc_g_fmt_vid_cap(struct file *file, void *_fh,
* last set format. * last set format.
*/ */
if (fh->legacy_mode) { if (fh->legacy_mode) {
struct hdpvr_video_info *vid_info; struct hdpvr_video_info vid_info;
vid_info = get_video_info(dev); ret = get_video_info(dev, &vid_info);
if (!vid_info) if (ret)
return -EFAULT; return -EFAULT;
f->fmt.pix.width = vid_info->width; f->fmt.pix.width = vid_info.width;
f->fmt.pix.height = vid_info->height; f->fmt.pix.height = vid_info.height;
kfree(vid_info);
} else { } else {
f->fmt.pix.width = dev->width; f->fmt.pix.width = dev->width;
f->fmt.pix.height = dev->height; f->fmt.pix.height = dev->height;
......
...@@ -303,7 +303,7 @@ int hdpvr_set_audio(struct hdpvr_device *dev, u8 input, ...@@ -303,7 +303,7 @@ int hdpvr_set_audio(struct hdpvr_device *dev, u8 input,
int hdpvr_config_call(struct hdpvr_device *dev, uint value, int hdpvr_config_call(struct hdpvr_device *dev, uint value,
unsigned char valbuf); 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 s b8 81 1800 0003 0003 3 < */
/* :0 0 3 = 0301ff */ /* :0 0 3 = 0301ff */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册