diff options
Diffstat (limited to 'drivers/media/video/cx18/cx18-ioctl.c')
-rw-r--r-- | drivers/media/video/cx18/cx18-ioctl.c | 49 |
1 files changed, 19 insertions, 30 deletions
diff --git a/drivers/media/video/cx18/cx18-ioctl.c b/drivers/media/video/cx18/cx18-ioctl.c index e6087486f889..7086aaba77d6 100644 --- a/drivers/media/video/cx18/cx18-ioctl.c +++ b/drivers/media/video/cx18/cx18-ioctl.c | |||
@@ -254,30 +254,24 @@ static int cx18_s_fmt_sliced_vbi_cap(struct file *file, void *fh, | |||
254 | } | 254 | } |
255 | 255 | ||
256 | static int cx18_g_chip_ident(struct file *file, void *fh, | 256 | static int cx18_g_chip_ident(struct file *file, void *fh, |
257 | struct v4l2_chip_ident *chip) | 257 | struct v4l2_dbg_chip_ident *chip) |
258 | { | 258 | { |
259 | struct cx18 *cx = ((struct cx18_open_id *)fh)->cx; | 259 | struct cx18 *cx = ((struct cx18_open_id *)fh)->cx; |
260 | 260 | ||
261 | chip->ident = V4L2_IDENT_NONE; | 261 | chip->ident = V4L2_IDENT_NONE; |
262 | chip->revision = 0; | 262 | chip->revision = 0; |
263 | if (chip->match_type == V4L2_CHIP_MATCH_HOST) { | 263 | if (v4l2_chip_match_host(&chip->match)) { |
264 | if (v4l2_chip_match_host(chip->match_type, chip->match_chip)) | 264 | chip->ident = V4L2_IDENT_CX23418; |
265 | chip->ident = V4L2_IDENT_CX23418; | ||
266 | return 0; | 265 | return 0; |
267 | } | 266 | } |
268 | if (chip->match_type == V4L2_CHIP_MATCH_I2C_DRIVER) | 267 | cx18_call_i2c_clients(cx, VIDIOC_DBG_G_CHIP_IDENT, chip); |
269 | return cx18_i2c_id(cx, chip->match_chip, VIDIOC_G_CHIP_IDENT, | 268 | return 0; |
270 | chip); | ||
271 | if (chip->match_type == V4L2_CHIP_MATCH_I2C_ADDR) | ||
272 | return cx18_call_i2c_client(cx, chip->match_chip, | ||
273 | VIDIOC_G_CHIP_IDENT, chip); | ||
274 | return -EINVAL; | ||
275 | } | 269 | } |
276 | 270 | ||
277 | #ifdef CONFIG_VIDEO_ADV_DEBUG | 271 | #ifdef CONFIG_VIDEO_ADV_DEBUG |
278 | static int cx18_cxc(struct cx18 *cx, unsigned int cmd, void *arg) | 272 | static int cx18_cxc(struct cx18 *cx, unsigned int cmd, void *arg) |
279 | { | 273 | { |
280 | struct v4l2_register *regs = arg; | 274 | struct v4l2_dbg_register *regs = arg; |
281 | unsigned long flags; | 275 | unsigned long flags; |
282 | 276 | ||
283 | if (!capable(CAP_SYS_ADMIN)) | 277 | if (!capable(CAP_SYS_ADMIN)) |
@@ -286,6 +280,7 @@ static int cx18_cxc(struct cx18 *cx, unsigned int cmd, void *arg) | |||
286 | return -EINVAL; | 280 | return -EINVAL; |
287 | 281 | ||
288 | spin_lock_irqsave(&cx18_cards_lock, flags); | 282 | spin_lock_irqsave(&cx18_cards_lock, flags); |
283 | regs->size = 4; | ||
289 | if (cmd == VIDIOC_DBG_G_REGISTER) | 284 | if (cmd == VIDIOC_DBG_G_REGISTER) |
290 | regs->val = cx18_read_enc(cx, regs->reg); | 285 | regs->val = cx18_read_enc(cx, regs->reg); |
291 | else | 286 | else |
@@ -295,31 +290,25 @@ static int cx18_cxc(struct cx18 *cx, unsigned int cmd, void *arg) | |||
295 | } | 290 | } |
296 | 291 | ||
297 | static int cx18_g_register(struct file *file, void *fh, | 292 | static int cx18_g_register(struct file *file, void *fh, |
298 | struct v4l2_register *reg) | 293 | struct v4l2_dbg_register *reg) |
299 | { | 294 | { |
300 | struct cx18 *cx = ((struct cx18_open_id *)fh)->cx; | 295 | struct cx18 *cx = ((struct cx18_open_id *)fh)->cx; |
301 | 296 | ||
302 | if (v4l2_chip_match_host(reg->match_type, reg->match_chip)) | 297 | if (v4l2_chip_match_host(®->match)) |
303 | return cx18_cxc(cx, VIDIOC_DBG_G_REGISTER, reg); | 298 | return cx18_cxc(cx, VIDIOC_DBG_G_REGISTER, reg); |
304 | if (reg->match_type == V4L2_CHIP_MATCH_I2C_DRIVER) | 299 | cx18_call_i2c_clients(cx, VIDIOC_DBG_G_REGISTER, reg); |
305 | return cx18_i2c_id(cx, reg->match_chip, VIDIOC_DBG_G_REGISTER, | 300 | return 0; |
306 | reg); | ||
307 | return cx18_call_i2c_client(cx, reg->match_chip, VIDIOC_DBG_G_REGISTER, | ||
308 | reg); | ||
309 | } | 301 | } |
310 | 302 | ||
311 | static int cx18_s_register(struct file *file, void *fh, | 303 | static int cx18_s_register(struct file *file, void *fh, |
312 | struct v4l2_register *reg) | 304 | struct v4l2_dbg_register *reg) |
313 | { | 305 | { |
314 | struct cx18 *cx = ((struct cx18_open_id *)fh)->cx; | 306 | struct cx18 *cx = ((struct cx18_open_id *)fh)->cx; |
315 | 307 | ||
316 | if (v4l2_chip_match_host(reg->match_type, reg->match_chip)) | 308 | if (v4l2_chip_match_host(®->match)) |
317 | return cx18_cxc(cx, VIDIOC_DBG_S_REGISTER, reg); | 309 | return cx18_cxc(cx, VIDIOC_DBG_S_REGISTER, reg); |
318 | if (reg->match_type == V4L2_CHIP_MATCH_I2C_DRIVER) | 310 | cx18_call_i2c_clients(cx, VIDIOC_DBG_S_REGISTER, reg); |
319 | return cx18_i2c_id(cx, reg->match_chip, VIDIOC_DBG_S_REGISTER, | 311 | return 0; |
320 | reg); | ||
321 | return cx18_call_i2c_client(cx, reg->match_chip, VIDIOC_DBG_S_REGISTER, | ||
322 | reg); | ||
323 | } | 312 | } |
324 | #endif | 313 | #endif |
325 | 314 | ||
@@ -755,7 +744,7 @@ static int cx18_log_status(struct file *file, void *fh) | |||
755 | return 0; | 744 | return 0; |
756 | } | 745 | } |
757 | 746 | ||
758 | static int cx18_default(struct file *file, void *fh, int cmd, void *arg) | 747 | static long cx18_default(struct file *file, void *fh, int cmd, void *arg) |
759 | { | 748 | { |
760 | struct cx18 *cx = ((struct cx18_open_id *)fh)->cx; | 749 | struct cx18 *cx = ((struct cx18_open_id *)fh)->cx; |
761 | 750 | ||
@@ -783,19 +772,19 @@ static int cx18_default(struct file *file, void *fh, int cmd, void *arg) | |||
783 | return 0; | 772 | return 0; |
784 | } | 773 | } |
785 | 774 | ||
786 | int cx18_v4l2_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, | 775 | long cx18_v4l2_ioctl(struct file *filp, unsigned int cmd, |
787 | unsigned long arg) | 776 | unsigned long arg) |
788 | { | 777 | { |
789 | struct video_device *vfd = video_devdata(filp); | 778 | struct video_device *vfd = video_devdata(filp); |
790 | struct cx18_open_id *id = (struct cx18_open_id *)filp->private_data; | 779 | struct cx18_open_id *id = (struct cx18_open_id *)filp->private_data; |
791 | struct cx18 *cx = id->cx; | 780 | struct cx18 *cx = id->cx; |
792 | int res; | 781 | long res; |
793 | 782 | ||
794 | mutex_lock(&cx->serialize_lock); | 783 | mutex_lock(&cx->serialize_lock); |
795 | 784 | ||
796 | if (cx18_debug & CX18_DBGFLG_IOCTL) | 785 | if (cx18_debug & CX18_DBGFLG_IOCTL) |
797 | vfd->debug = V4L2_DEBUG_IOCTL | V4L2_DEBUG_IOCTL_ARG; | 786 | vfd->debug = V4L2_DEBUG_IOCTL | V4L2_DEBUG_IOCTL_ARG; |
798 | res = video_ioctl2(inode, filp, cmd, arg); | 787 | res = video_ioctl2(filp, cmd, arg); |
799 | vfd->debug = 0; | 788 | vfd->debug = 0; |
800 | mutex_unlock(&cx->serialize_lock); | 789 | mutex_unlock(&cx->serialize_lock); |
801 | return res; | 790 | return res; |