summaryrefslogtreecommitdiff
path: root/linux/drivers/media/video/saa7127.c
diff options
context:
space:
mode:
authorHans Verkuil <hverkuil@xs4all.nl>2007-02-24 01:27:26 +0100
committerHans Verkuil <hverkuil@xs4all.nl>2007-02-24 01:27:26 +0100
commit2be3674b75c83865e9a131c6c54aaee005df47ed (patch)
treecc5e7a7c47afcd0254c0a40459f5c5629574c26e /linux/drivers/media/video/saa7127.c
parentf3e6f8836e980f471dbd3e9746a40199cd121f72 (diff)
downloadmediapointer-dvb-s2-2be3674b75c83865e9a131c6c54aaee005df47ed.tar.gz
mediapointer-dvb-s2-2be3674b75c83865e9a131c6c54aaee005df47ed.tar.bz2
Add support for VIDIOC_G_CHIP_IDENT
From: Hans Verkuil <hverkuil@xs4all.nl> VIDIOC_G_CHIP_IDENT improves debugging of card problems: it can be used to detect which chips are on the board and based on that information selected register dumps can be made, making it easy to debug complicated media chips containing tens or hundreds of registers. This ioctl replaces the internal VIDIOC_INT_G_CHIP_IDENT ioctl. Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> CC: Jonathan Corbet <corbet@lwn.net>
Diffstat (limited to 'linux/drivers/media/video/saa7127.c')
-rw-r--r--linux/drivers/media/video/saa7127.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/linux/drivers/media/video/saa7127.c b/linux/drivers/media/video/saa7127.c
index 455c6f74a..28306f15d 100644
--- a/linux/drivers/media/video/saa7127.c
+++ b/linux/drivers/media/video/saa7127.c
@@ -54,6 +54,7 @@
#include <linux/i2c.h>
#include <linux/videodev2.h>
#include <media/v4l2-common.h>
+#include <media/v4l2-chip-ident.h>
#include <media/saa7127.h>
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
#include "i2c-compat.h"
@@ -246,7 +247,7 @@ static struct i2c_reg_value saa7127_init_config_50hz[] = {
struct saa7127_state {
v4l2_std_id std;
- enum v4l2_chip_ident ident;
+ u32 ident;
enum saa7127_input_type input_type;
enum saa7127_output_type output_type;
int video_enable;
@@ -662,9 +663,16 @@ static int saa7127_command(struct i2c_client *client,
break;
}
- case VIDIOC_INT_G_CHIP_IDENT:
- *(enum v4l2_chip_ident *)arg = state->ident;
+ case VIDIOC_G_CHIP_IDENT:
+ {
+ struct v4l2_chip_ident *chip = arg;
+
+ if (!v4l2_chip_match_i2c_client(client, chip->match_type, chip->match_chip))
+ return -EINVAL;
+ chip->ident = state->ident;
+ chip->revision = 0;
break;
+ }
default:
return -EINVAL;