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; }
int cx23885_g_register(struct file *file, void *fh, struct v4l2_dbg_register *reg) { struct cx23885_dev *dev = ((struct cx23885_fh *)fh)->dev; if (!capable(CAP_SYS_ADMIN)) return -EPERM; if (reg->match.type == V4L2_CHIP_MATCH_HOST) { switch (reg->match.addr) { case 0: return cx23885_g_host_register(dev, reg); case 1: return cx23417_g_register(dev, reg); default: break; } } /* FIXME - any error returns should not be ignored */ call_all(dev, core, g_register, reg); return 0; }