mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-11 07:30:16 +00:00
[media] hdpvr: Removed unnecessary use of kzalloc() in get_video_info()
[mchehab@redhat.com: CodingStyle fixes] Signed-off-by: Leonid Kegulskiy <leo@lumanate.com> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
ff29feb914
commit
4d601c4ca2
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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 */
|
||||
|
Loading…
x
Reference in New Issue
Block a user