Commit Graph

32 Commits

Author SHA1 Message Date
Alexey Khoroshilov 2e923a0527 [media] hdpvr: fix iteration over uninitialized lists in hdpvr_probe()
free_buff_list and rec_buff_list are initialized in the middle of hdpvr_probe(),
but if something bad happens before that, error handling code calls hdpvr_delete(),
which contains iteration over the lists (via hdpvr_free_buffers()).
The patch moves the lists initialization to the beginning and by the way fixes
goto label in error handling of registering videodev.
Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Cc: stable@vger.kernel.org
2013-09-03 09:24:20 -03:00
Hans Verkuil ef1ed8f5d3 [media] v4l2-dv-timings: rename v4l_match_dv_timings to v4l2_match_dv_timings
It's the only function in v4l2-dv-timings.c with the v4l prefix instead
of v4l2. Make it consistent with the other functions.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
2013-08-24 04:26:51 -03:00
Hans Verkuil eacf8f9aa8 [media] v4l2: use new V4L2_DV_BT_BLANKING/FRAME defines
Use the new defines to calculate the full blanking and frame sizes.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Acked-by: Scott Jiang <scott.jiang.linux@gmail.com>
Acked-by: Lad, Prabhakar <prabhakar.csengg@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
2013-08-18 08:19:03 -03:00
Hans Verkuil 2576415846 [media] v4l2: move dv-timings related code to v4l2-dv-timings.c
v4l2-common.c contained a bunch of dv-timings related functions.
Move that to the new v4l2-dv-timings.c which is a more appropriate
place for them.
There aren't many drivers that do HDTV, so it is a good idea to separate
common code related to that into a module of its own.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Acked-by: Lad, Prabhakar <prabhakar.csengg@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
2013-08-18 08:16:54 -03:00
Hans Verkuil 5f454d82e5 [media] hdpvr: improve error handling
get_video_info() should never return EFAULT, instead it should return
the low-level usb_control_msg() error. Add a valid field to the hdpvr_video_info
struct so the driver can easily check if a valid format was detected.
Whenever get_video_info is called and it returns an error (e.g. usb_control_msg
failed), then return that error to userspace as well.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2013-06-13 11:35:47 -03:00
Hans Verkuil 79f10b625e [media] hdpvr: code cleanup
Remove an unnecessary 'else' and invert a condition which makes the code
more readable.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2013-06-13 11:33:51 -03:00
Hans Verkuil ab6e134a48 [media] hdpvr: fix querystd 'unknown format' return
If no format has been detected, then querystd should return V4L2_STD_UNKNOWN,
not V4L2_STD_ALL.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2013-06-13 11:33:08 -03:00
Leonid Kegulskiy 4d601c4ca2 [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>
2013-05-27 08:51:51 -03:00
Randy Dunlap 99119595d9 [media] media: fix hdpvr kconfig/build errors
Fix hdpvr build errors when CONFIG_I2C=m and VIDEO_V4L2=m and
VIDEO_HDPVR=y.
drivers/built-in.o: In function `hdpvr_disconnect':
hdpvr-core.c:(.text+0xef542): undefined reference to `v4l2_device_disconnect'
hdpvr-core.c:(.text+0xef57e): undefined reference to `i2c_del_adapter'
hdpvr-core.c:(.text+0xef58a): undefined reference to `video_unregister_device'
drivers/built-in.o: In function `hdpvr_delete':
(.text+0xef5b9): undefined reference to `video_device_release'
drivers/built-in.o: In function `hdpvr_probe':
hdpvr-core.c:(.text+0xef63a): undefined reference to `v4l2_device_register'
hdpvr-core.c:(.text+0xefd97): undefined reference to `i2c_del_adapter'
drivers/built-in.o: In function `hdpvr_s_ctrl':
hdpvr-video.c:(.text+0xf03c0): undefined reference to `v4l2_ctrl_activate'
drivers/built-in.o: In function `hdpvr_device_release':
hdpvr-video.c:(.text+0xf0470): undefined reference to `v4l2_device_unregister'
hdpvr-video.c:(.text+0xf0479): undefined reference to `v4l2_ctrl_handler_free'
hdpvr-video.c:(.text+0xf048f): undefined reference to `i2c_del_adapter'
drivers/built-in.o: In function `hdpvr_open':
hdpvr-video.c:(.text+0xf0570): undefined reference to `video_devdata'
hdpvr-video.c:(.text+0xf057b): undefined reference to `v4l2_fh_init'
hdpvr-video.c:(.text+0xf0583): undefined reference to `v4l2_fh_add'
drivers/built-in.o: In function `video_drvdata':
hdpvr-video.c:(.text+0xf08a0): undefined reference to `video_devdata'
drivers/built-in.o: In function `vidioc_s_dv_timings':
hdpvr-video.c:(.text+0xf0d34): undefined reference to `v4l_match_dv_timings'
drivers/built-in.o: In function `hdpvr_poll':
hdpvr-video.c:(.text+0xf1455): undefined reference to `v4l2_ctrl_poll'
drivers/built-in.o: In function `hdpvr_release':
hdpvr-video.c:(.text+0xf18f6): undefined reference to `v4l2_fh_release'
drivers/built-in.o: In function `hdpvr_register_videodev':
(.text+0xf1be3): undefined reference to `v4l2_ctrl_handler_init_class'
drivers/built-in.o: In function `hdpvr_register_videodev':
(.text+0xf1c19): undefined reference to `v4l2_ctrl_new_std'
drivers/built-in.o: In function `hdpvr_register_videodev':
(.text+0xf1c42): undefined reference to `v4l2_ctrl_new_std'
drivers/built-in.o: In function `hdpvr_register_videodev':
(.text+0xf1c6b): undefined reference to `v4l2_ctrl_new_std'
drivers/built-in.o: In function `hdpvr_register_videodev':
(.text+0xf1cac): undefined reference to `v4l2_ctrl_new_std'
drivers/built-in.o: In function `hdpvr_register_videodev':
(.text+0xf1cd5): undefined reference to `v4l2_ctrl_new_std'
drivers/built-in.o:(.text+0xf1cfe): more undefined references to `v4l2_ctrl_new_std' follow
drivers/built-in.o: In function `hdpvr_register_videodev':
(.text+0xf1d75): undefined reference to `v4l2_ctrl_new_std_menu'
drivers/built-in.o: In function `hdpvr_register_videodev':
(.text+0xf1d9e): undefined reference to `v4l2_ctrl_new_std_menu'
drivers/built-in.o: In function `hdpvr_register_videodev':
(.text+0xf1dc3): undefined reference to `v4l2_ctrl_new_std_menu'
drivers/built-in.o: In function `hdpvr_register_videodev':
(.text+0xf1de5): undefined reference to `v4l2_ctrl_new_std_menu'
drivers/built-in.o: In function `hdpvr_register_videodev':
(.text+0xf1e18): undefined reference to `v4l2_ctrl_new_std'
drivers/built-in.o: In function `hdpvr_register_videodev':
(.text+0xf1e4b): undefined reference to `v4l2_ctrl_new_std'
drivers/built-in.o: In function `hdpvr_register_videodev':
(.text+0xf1e90): undefined reference to `v4l2_ctrl_cluster'
drivers/built-in.o: In function `hdpvr_register_videodev':
(.text+0xf1e98): undefined reference to `v4l2_ctrl_handler_setup'
drivers/built-in.o: In function `hdpvr_register_videodev':
(.text+0xf1ec1): undefined reference to `video_device_alloc'
drivers/built-in.o: In function `hdpvr_register_videodev':
(.text+0xf1f85): undefined reference to `__video_register_device'
drivers/built-in.o: In function `hdpvr_register_videodev':
(.text+0xf1fac): undefined reference to `v4l2_ctrl_handler_free'
drivers/built-in.o: In function `hdpvr_register_ir_tx_i2c':
(.text+0xf238f): undefined reference to `i2c_new_device'
drivers/built-in.o: In function `hdpvr_register_ir_rx_i2c':
(.text+0xf2434): undefined reference to `i2c_new_device'
drivers/built-in.o: In function `hdpvr_register_i2c_adapter':
(.text+0xf2514): undefined reference to `i2c_add_adapter'
drivers/built-in.o:(.rodata+0x1b368): undefined reference to `video_ioctl2'
drivers/built-in.o:(.rodata+0x1b690): undefined reference to `v4l2_ctrl_log_status'
drivers/built-in.o:(.rodata+0x1b6f8): undefined reference to `v4l2_ctrl_subscribe_event'
drivers/built-in.o:(.rodata+0x1b700): undefined reference to `v4l2_event_unsubscribe'

Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2013-05-27 08:51:27 -03:00
Leonid Kegulskiy f743687690 [media] hdpvr: Added some error handling in hdpvr_start_streaming()
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>
2013-05-21 08:20:24 -03:00
Leonid Kegulskiy ccc40ed755 [media] hdpvr: Removed unnecessary get_video_info() call from hdpvr_device_init()
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>
2013-05-21 08:19:41 -03:00
Hans Verkuil 5854bf8859 [media] hdpvr: allow g/s/enum/querystd when in legacy mode
Both MythTV and gstreamer expect that they can set/get/query/enumerate the
standards, even if the input is the component input for which standards
really do not apply.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2013-04-14 20:02:15 -03:00
Hans Verkuil 3315c59a45 [media] hdpvr: add dv_timings support
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2013-04-14 20:00:55 -03:00
Hans Verkuil 8f69da9558 [media] hdpvr: add g/querystd, remove deprecated current_norm
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2013-04-14 19:59:44 -03:00
Hans Verkuil c7a2c84af5 [media] hdpvr: recognize firmware version 0x1e
This is the latest firmware version and - it seems - the most reliable.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2013-04-14 19:59:18 -03:00
Hans Verkuil 280847b532 [media] hdpvr: register the video node at the end of probe
Video nodes can be used at once after registration, so make sure the full
initialization is done before registering them.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2013-04-14 19:58:59 -03:00
Hans Verkuil 97caa318b3 [media] hdpvr: small fixes
- return EBUSY instead of EAGAIN.
- add missing break.
- remove unnecessary buf type check (done by the core).

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2013-04-14 19:58:42 -03:00
Hans Verkuil 41022fcb3d [media] hdpvr: support device_caps in querycap
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2013-04-14 19:58:13 -03:00
Hans Verkuil 65fe42d605 [media] hdpvr: add prio and control event support
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2013-04-14 19:57:51 -03:00
Hans Verkuil ede197aac0 [media] hdpvr: remove hdpvr_fh and just use v4l2_fh
This prepares the driver for priority and control event handling.
This patch also checks for correct streaming ownership and it makes a
small improvement to the encoder_cmd ioctls: always zero 'flags' and
drop the memset of 'raw' as that is already done by the v4l2 core.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2013-04-14 19:57:32 -03:00
Hans Verkuil 99c77aa428 [media] hdpvr: convert to the control framework
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2013-04-14 19:57:10 -03:00
Hans Verkuil 314527acbb [media] v4l2: pass std by value to the write-only s_std ioctl
This ioctl is defined as IOW, so pass the argument by value instead of by
reference. I could have chosen to add const instead, but this is 1) easier
to handle in drivers and 2) consistent with the s_std subdev operation.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Jonathan Corbet <corbet@lwn.net>
Acked-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Acked-by: Lad, Prabhakar <prabhakar.csengg@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2013-03-24 06:47:00 -03:00
Mauro Carvalho Chehab 54d80904b4 [media] hdpvr-video: Use the proper check for I2C support
As reported by Geert Uytterhoeven <geert@linux-m68k.org>:
	drivers/media/usb/hdpvr/hdpvr-video.c: warning: "CONFIG_I2C_MODULE" is not defined [-Wundef]

Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
Thanks-to: Randy Dunlap <rdunlap@infradead.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2013-03-23 01:06:35 -03:00
Syam Sidhardhan 972b072a83 [media] hdpvr: Fix memory leak
This patch fixes the print_buf leaking.

Signed-off-by: Syam Sidhardhan <s.syam@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2013-03-18 16:39:08 -03:00
Peter Senna Tschudin 6a29b8080b [media] [V2,23/24] usb/hdpvr/hdpvr-i2c.c: use IS_ENABLED() macro
replace:
 #if defined(CONFIG_I2C) || \
     defined(CONFIG_I2C_MODULE)
with:
 #if IS_ENABLED(CONFIG_I2C)
This change was made for: CONFIG_I2C

Reported-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Signed-off-by: Peter Senna Tschudin <peter.senna@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2013-02-06 09:20:41 -02:00
Peter Senna Tschudin 9ecf9b085a [media] [V2,22/24] usb/hdpvr/hdpvr-core.c: use IS_ENABLED() macro
replace:
 #if defined(CONFIG_I2C) || \
     defined(CONFIG_I2C_MODULE)
with:
 #if IS_ENABLED(CONFIG_I2C)
This change was made for: CONFIG_I2C

Reported-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Signed-off-by: Peter Senna Tschudin <peter.senna@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2013-02-06 09:20:24 -02:00
Ezequiel Garcia d486b94b26 [media] hdpvr: Replace memcpy with struct assignment
This kind of memcpy() is error-prone. Its replacement with a struct
assignment is prefered because it's type-safe and much easier to read.
Found by coccinelle. Hand patched and reviewed.
Tested by compilation only.
A simplified version of the semantic match that finds this problem is as
follows: (http://coccinelle.lip6.fr/)
// <smpl>
@@
identifier struct_name;
struct struct_name to;
struct struct_name from;
expression E;
@@
-memcpy(&(to), &(from), E);
+to = from;
// </smpl>

Signed-off-by: Peter Senna Tschudin <peter.senna@gmail.com>
Signed-off-by: Ezequiel Garcia <elezegarcia@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2012-12-27 18:46:08 -02:00
Peter Senna Tschudin 304a0807a2 [media] drivers/media/usb/hdpvr/hdpvr-core.c: fix error return code
Convert a nonnegative error return code to a negative one, as returned
elsewhere in the function.
A simplified version of the semantic match that finds this problem is as
follows: (http://coccinelle.lip6.fr/)
// <smpl>
(
if@p1 (\(ret < 0\|ret != 0\))
 { ... return ret; }
|
ret@p1 = 0
)
... when != ret = e1
    when != &ret
*if(...)
{
  ... when != ret = e2
      when forall
 return ret;
}
// </smpl>

Signed-off-by: Peter Senna Tschudin <peter.senna@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2012-11-22 14:22:31 -02:00
David Härdeman c003ab1bed [media] rc-core: add separate defines for protocol bitmaps and numbers
The RC_TYPE_* defines are currently used both where a single protocol is
expected and where a bitmap of protocols is expected.

Functions like rc_keydown() and functions which add/remove entries to the
keytable want a single protocol. Future userspace APIs would also
benefit from numeric protocols (rather than bitmap ones). Keytables are
smaller if they can use a small(ish) integer rather than a bitmap.

Other functions or struct members (e.g. allowed_protos,
enabled_protocols, etc) accept multiple protocols and need a bitmap.

Using different types reduces the risk of programmer error. Using a
protocol enum whereever possible also makes for a more future-proof
user-space API as we don't need to worry about a sufficient number of
bits being available (e.g. in structs used for ioctl() calls).

The use of both a number and a corresponding bit is dalso one in e.g.
the input subsystem as well (see all the references to set/clear bit when
changing keytables for example).

This patch separate the different usages in preparation for
upcoming patches.

Where a single protocol is expected, enum rc_type is used; where one or more
protocol(s) are expected, something like u64 is used.

The patch has been rewritten so that the format of the sysfs "protocols"
file is no longer altered (at the loss of some detail). The file itself
should probably be deprecated in the future though.

Signed-off-by: David Härdeman <david@hardeman.nu>
Cc: Andy Walls <awalls@md.metrocast.net>
Cc: Maxim Levitsky <maximlevitsky@gmail.com>
Cc: Antti Palosaari <crope@iki.fi>
Cc: Mike Isely <isely@pobox.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2012-10-27 11:49:51 -02:00
Hans Verkuil 0e8025b9f6 [media] v4l2: make vidioc_s_audio const
Write-only ioctls should have a const argument in the ioctl op.
Do this conversion for vidioc_s_audio.
Adding const for write-only ioctls was decided during the 2012 Media Workshop.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2012-09-26 10:50:12 -03:00
Mauro Carvalho Chehab cb7a01ac32 [media] move i2c files into drivers/media/i2c
Move ancillary I2C drivers into drivers/media/i2c, in order to
better organize them.

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2012-08-15 16:42:14 -03:00
Mauro Carvalho Chehab 0c0d06cac6 [media] rename most media/video usb drivers to media/usb
Rename all USB drivers with their own directory under
drivers/media/video into drivers/media/usb and update the
building system.

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2012-08-15 16:25:07 -03:00