static int ov7660_get_ctrl(struct sn9c102_device *cam, struct v4l2_control *ctrl) { int err = 0; switch (ctrl->id) { case V4L2_CID_EXPOSURE: ctrl->value = sn9c102_i2c_read(cam, 0x10); if (ctrl->value < 0) return -EIO; break; case V4L2_CID_DO_WHITE_BALANCE: ctrl->value = sn9c102_read_reg(cam, 0x02); if (ctrl->value < 0) return -EIO; ctrl->value = (ctrl->value & 0x04) ? 1 : 0; break; case V4L2_CID_RED_BALANCE: ctrl->value = sn9c102_read_reg(cam, 0x05); if (ctrl->value < 0) return -EIO; ctrl->value &= 0x7f; break; case V4L2_CID_BLUE_BALANCE: ctrl->value = sn9c102_read_reg(cam, 0x06); if (ctrl->value < 0) return -EIO; ctrl->value &= 0x7f; break; case SN9C102_V4L2_CID_GREEN_BALANCE: ctrl->value = sn9c102_read_reg(cam, 0x07); if (ctrl->value < 0) return -EIO; ctrl->value &= 0x7f; break; case SN9C102_V4L2_CID_BAND_FILTER: ctrl->value = sn9c102_i2c_read(cam, 0x3b); if (ctrl->value < 0) return -EIO; ctrl->value &= 0x08; break; case V4L2_CID_GAIN: ctrl->value = sn9c102_i2c_read(cam, 0x00); if (ctrl->value < 0) return -EIO; ctrl->value &= 0x1f; break; case V4L2_CID_AUTOGAIN: ctrl->value = sn9c102_i2c_read(cam, 0x13); if (ctrl->value < 0) return -EIO; ctrl->value &= 0x01; break; default: return -EINVAL; } return err ? -EIO : 0; }
static int ov7648_get_ctrl(struct sn9c102_device* cam, struct v4l2_control* ctrl) { switch (ctrl->id) { case V4L2_CID_EXPOSURE: if ((ctrl->value = sn9c102_i2c_read(cam, 0x10)) < 0) return -EIO; break; case V4L2_CID_DO_WHITE_BALANCE: if ((ctrl->value = sn9c102_read_reg(cam, 0x02)) < 0) return -EIO; ctrl->value = (ctrl->value & 0x04) ? 1 : 0; break; case V4L2_CID_RED_BALANCE: ctrl->value = sn9c102_read_reg(cam, 0x05); break; case V4L2_CID_BLUE_BALANCE: ctrl->value = sn9c102_read_reg(cam, 0x06); break; case SN9C102_V4L2_CID_GREEN_BALANCE: ctrl->value = sn9c102_read_reg(cam, 0x07); break; case V4L2_CID_GAIN: if ((ctrl->value = sn9c102_i2c_read(cam, 0x00)) < 0) return -EIO; ctrl->value &= 0x3f; break; case V4L2_CID_AUTOGAIN: if ((ctrl->value = sn9c102_i2c_read(cam, 0x13)) < 0) return -EIO; ctrl->value &= 0x01; break; case V4L2_CID_VFLIP: if ((ctrl->value = sn9c102_i2c_read(cam, 0x75)) < 0) return -EIO; ctrl->value = (ctrl->value & 0x80) ? 1 : 0; break; case SN9C102_V4L2_CID_BAND_FILTER: if ((ctrl->value = sn9c102_i2c_read(cam, 0x2d)) < 0) return -EIO; ctrl->value = (ctrl->value & 0x02) ? 1 : 0; break; default: return -EINVAL; } return 0; }