mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.2 KiB
98 lines
2.2 KiB
// SPDX-License-Identifier: GPL-2.0-or-later |
|
/* |
|
* Driver for the Conexant CX23885/7/8 PCIe bridge |
|
* |
|
* Various common ioctl() support functions |
|
* |
|
* Copyright (c) 2009 Andy Walls <[email protected]> |
|
*/ |
|
|
|
#include "cx23885.h" |
|
#include "cx23885-ioctl.h" |
|
|
|
#ifdef CONFIG_VIDEO_ADV_DEBUG |
|
int cx23885_g_chip_info(struct file *file, void *fh, |
|
struct v4l2_dbg_chip_info *chip) |
|
{ |
|
struct cx23885_dev *dev = video_drvdata(file); |
|
|
|
if (chip->match.addr > 1) |
|
return -EINVAL; |
|
if (chip->match.addr == 1) { |
|
if (dev->v4l_device == NULL) |
|
return -EINVAL; |
|
strscpy(chip->name, "cx23417", sizeof(chip->name)); |
|
} else { |
|
strscpy(chip->name, dev->v4l2_dev.name, sizeof(chip->name)); |
|
} |
|
return 0; |
|
} |
|
|
|
static int cx23417_g_register(struct cx23885_dev *dev, |
|
struct v4l2_dbg_register *reg) |
|
{ |
|
u32 value; |
|
|
|
if (dev->v4l_device == NULL) |
|
return -EINVAL; |
|
|
|
if ((reg->reg & 0x3) != 0 || reg->reg >= 0x10000) |
|
return -EINVAL; |
|
|
|
if (mc417_register_read(dev, (u16) reg->reg, &value)) |
|
return -EINVAL; /* V4L2 spec, but -EREMOTEIO really */ |
|
|
|
reg->size = 4; |
|
reg->val = value; |
|
return 0; |
|
} |
|
|
|
int cx23885_g_register(struct file *file, void *fh, |
|
struct v4l2_dbg_register *reg) |
|
{ |
|
struct cx23885_dev *dev = video_drvdata(file); |
|
|
|
if (reg->match.addr > 1) |
|
return -EINVAL; |
|
if (reg->match.addr) |
|
return cx23417_g_register(dev, reg); |
|
|
|
if ((reg->reg & 0x3) != 0 || reg->reg >= pci_resource_len(dev->pci, 0)) |
|
return -EINVAL; |
|
|
|
reg->size = 4; |
|
reg->val = cx_read(reg->reg); |
|
return 0; |
|
} |
|
|
|
static int cx23417_s_register(struct cx23885_dev *dev, |
|
const struct v4l2_dbg_register *reg) |
|
{ |
|
if (dev->v4l_device == NULL) |
|
return -EINVAL; |
|
|
|
if ((reg->reg & 0x3) != 0 || reg->reg >= 0x10000) |
|
return -EINVAL; |
|
|
|
if (mc417_register_write(dev, (u16) reg->reg, (u32) reg->val)) |
|
return -EINVAL; /* V4L2 spec, but -EREMOTEIO really */ |
|
return 0; |
|
} |
|
|
|
int cx23885_s_register(struct file *file, void *fh, |
|
const struct v4l2_dbg_register *reg) |
|
{ |
|
struct cx23885_dev *dev = video_drvdata(file); |
|
|
|
if (reg->match.addr > 1) |
|
return -EINVAL; |
|
if (reg->match.addr) |
|
return cx23417_s_register(dev, reg); |
|
|
|
if ((reg->reg & 0x3) != 0 || reg->reg >= pci_resource_len(dev->pci, 0)) |
|
return -EINVAL; |
|
|
|
cx_write(reg->reg, reg->val); |
|
return 0; |
|
} |
|
#endif
|
|
|