const struct sd_desc *sd_desc; /* subdriver description */
unsigned ctrl_dis; /* disabled controls (bit map) */
unsigned ctrl_inac; /* inactive controls (bit map) */
+ struct v4l2_ctrl_handler ctrl_handler;
/* autogain and exposure or gain control cluster, these are global as
the autogain/exposure functions in autogain_functions.c use them */
struct sd {
struct gspca_dev gspca_dev; /* !! must be the first item */
- struct v4l2_ctrl_handler ctrl_handler;
struct v4l2_ctrl *brightness;
struct v4l2_ctrl *saturation;
struct v4l2_ctrl *sharpness;
static int mars_s_ctrl(struct v4l2_ctrl *ctrl)
{
- struct sd *sd = container_of(ctrl->handler, struct sd, ctrl_handler);
- struct gspca_dev *gspca_dev = &sd->gspca_dev;
+ struct gspca_dev *gspca_dev =
+ container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
+ struct sd *sd = (struct sd *)gspca_dev;
gspca_dev->usb_err = 0;
switch (ctrl->id) {
case V4L2_CID_BRIGHTNESS:
- setbrightness(&sd->gspca_dev, ctrl->val);
+ setbrightness(gspca_dev, ctrl->val);
break;
case V4L2_CID_SATURATION:
- setcolors(&sd->gspca_dev, ctrl->val);
+ setcolors(gspca_dev, ctrl->val);
break;
case V4L2_CID_GAMMA:
- setgamma(&sd->gspca_dev, ctrl->val);
+ setgamma(gspca_dev, ctrl->val);
break;
case V4L2_CID_ILLUMINATORS_1:
- setilluminators(&sd->gspca_dev, sd->illum_top->val,
- sd->illum_bottom->val);
+ setilluminators(gspca_dev, sd->illum_top->val,
+ sd->illum_bottom->val);
break;
case V4L2_CID_SHARPNESS:
- setsharpness(&sd->gspca_dev, ctrl->val);
+ setsharpness(gspca_dev, ctrl->val);
break;
case V4L2_CID_JPEG_COMPRESSION_QUALITY:
jpeg_set_qual(sd->jpeg_hdr, ctrl->val);
static int sd_init_controls(struct gspca_dev *gspca_dev)
{
struct sd *sd = (struct sd *) gspca_dev;
- struct v4l2_ctrl_handler *hdl = &sd->ctrl_handler;
+ struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
gspca_dev->vdev.ctrl_handler = hdl;
v4l2_ctrl_handler_init(hdl, 7);
struct sd {
struct gspca_dev gspca_dev;
- struct v4l2_ctrl_handler ctrl_handler;
struct { /* color control cluster */
struct v4l2_ctrl *brightness;
struct v4l2_ctrl *contrast;
static int sd_s_ctrl(struct v4l2_ctrl *ctrl)
{
- struct sd *sd = container_of(ctrl->handler, struct sd, ctrl_handler);
- struct gspca_dev *gspca_dev = &sd->gspca_dev;
+ struct gspca_dev *gspca_dev =
+ container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
+ struct sd *sd = (struct sd *)gspca_dev;
gspca_dev->usb_err = 0;
switch (ctrl->id) {
/* color control cluster */
case V4L2_CID_BRIGHTNESS:
- set_cmatrix(&sd->gspca_dev, sd->brightness->val,
+ set_cmatrix(gspca_dev, sd->brightness->val,
sd->contrast->val, sd->saturation->val, sd->hue->val);
break;
case V4L2_CID_GAMMA:
- set_gamma(&sd->gspca_dev, ctrl->val);
+ set_gamma(gspca_dev, ctrl->val);
break;
/* blue/red balance cluster */
case V4L2_CID_BLUE_BALANCE:
- set_redblue(&sd->gspca_dev, sd->blue->val, sd->red->val);
+ set_redblue(gspca_dev, sd->blue->val, sd->red->val);
break;
/* h/vflip cluster */
case V4L2_CID_HFLIP:
- set_hvflip(&sd->gspca_dev, sd->hflip->val, sd->vflip->val);
+ set_hvflip(gspca_dev, sd->hflip->val, sd->vflip->val);
break;
/* standalone exposure control */
case V4L2_CID_EXPOSURE:
- set_exposure(&sd->gspca_dev, ctrl->val);
+ set_exposure(gspca_dev, ctrl->val);
break;
/* standalone gain control */
case V4L2_CID_GAIN:
- set_gain(&sd->gspca_dev, ctrl->val);
+ set_gain(gspca_dev, ctrl->val);
break;
/* autogain + exposure or gain control cluster */
case V4L2_CID_AUTOGAIN:
if (sd->sensor == SENSOR_SOI968)
- set_gain(&sd->gspca_dev, sd->gain->val);
+ set_gain(gspca_dev, sd->gain->val);
else
- set_exposure(&sd->gspca_dev, sd->exposure->val);
+ set_exposure(gspca_dev, sd->exposure->val);
break;
case V4L2_CID_JPEG_COMPRESSION_QUALITY:
- set_quality(&sd->gspca_dev, ctrl->val);
+ set_quality(gspca_dev, ctrl->val);
break;
}
return gspca_dev->usb_err;
static int sd_init_controls(struct gspca_dev *gspca_dev)
{
struct sd *sd = (struct sd *) gspca_dev;
- struct v4l2_ctrl_handler *hdl = &sd->ctrl_handler;
+ struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
gspca_dev->vdev.ctrl_handler = hdl;
v4l2_ctrl_handler_init(hdl, 13);
PDEBUG(D_PROBE, "Initializing controls");
- gspca_dev->vdev.ctrl_handler = &sd->ctrl_handler;
+ gspca_dev->vdev.ctrl_handler = &gspca_dev->ctrl_handler;
return sd->sensor->init_controls(sd);
}
/* A pointer to the currently connected sensor */
const struct stv06xx_sensor *sensor;
- /* Control handler */
- struct v4l2_ctrl_handler ctrl_handler;
-
/* Sensor private data */
void *sensor_priv;
static int hdcs_s_ctrl(struct v4l2_ctrl *ctrl)
{
- struct sd *sd = container_of(ctrl->handler, struct sd, ctrl_handler);
+ struct gspca_dev *gspca_dev =
+ container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
int err = -EINVAL;
switch (ctrl->id) {
case V4L2_CID_GAIN:
- err = hdcs_set_gain(&sd->gspca_dev, ctrl->val);
+ err = hdcs_set_gain(gspca_dev, ctrl->val);
break;
case V4L2_CID_EXPOSURE:
- err = hdcs_set_exposure(&sd->gspca_dev, ctrl->val);
+ err = hdcs_set_exposure(gspca_dev, ctrl->val);
break;
}
return err;
static int hdcs_init_controls(struct sd *sd)
{
- struct v4l2_ctrl_handler *hdl = &sd->ctrl_handler;
+ struct v4l2_ctrl_handler *hdl = &sd->gspca_dev.ctrl_handler;
v4l2_ctrl_handler_init(hdl, 2);
v4l2_ctrl_new_std(hdl, &hdcs_ctrl_ops,
static int pb0100_s_ctrl(struct v4l2_ctrl *ctrl)
{
- struct sd *sd = container_of(ctrl->handler, struct sd, ctrl_handler);
+ struct gspca_dev *gspca_dev =
+ container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
+ struct sd *sd = (struct sd *)gspca_dev;
struct pb0100_ctrls *ctrls = sd->sensor_priv;
int err = -EINVAL;
switch (ctrl->id) {
case V4L2_CID_AUTOGAIN:
- err = pb0100_set_autogain(&sd->gspca_dev, ctrl->val);
+ err = pb0100_set_autogain(gspca_dev, ctrl->val);
if (err)
break;
if (ctrl->val)
break;
- err = pb0100_set_gain(&sd->gspca_dev, ctrls->gain->val);
+ err = pb0100_set_gain(gspca_dev, ctrls->gain->val);
if (err)
break;
- err = pb0100_set_exposure(&sd->gspca_dev, ctrls->exposure->val);
+ err = pb0100_set_exposure(gspca_dev, ctrls->exposure->val);
break;
case V4L2_CTRL_CLASS_USER + 0x1001:
- err = pb0100_set_autogain_target(&sd->gspca_dev, ctrl->val);
+ err = pb0100_set_autogain_target(gspca_dev, ctrl->val);
break;
}
return err;
static int pb0100_init_controls(struct sd *sd)
{
- struct v4l2_ctrl_handler *hdl = &sd->ctrl_handler;
+ struct v4l2_ctrl_handler *hdl = &sd->gspca_dev.ctrl_handler;
struct pb0100_ctrls *ctrls;
static const struct v4l2_ctrl_config autogain_target = {
.ops = &pb0100_ctrl_ops,
static int st6422_s_ctrl(struct v4l2_ctrl *ctrl)
{
- struct sd *sd = container_of(ctrl->handler, struct sd, ctrl_handler);
+ struct gspca_dev *gspca_dev =
+ container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
+ struct sd *sd = (struct sd *)gspca_dev;
int err = -EINVAL;
switch (ctrl->id) {
static int st6422_init_controls(struct sd *sd)
{
- struct v4l2_ctrl_handler *hdl = &sd->ctrl_handler;
+ struct v4l2_ctrl_handler *hdl = &sd->gspca_dev.ctrl_handler;
v4l2_ctrl_handler_init(hdl, 4);
v4l2_ctrl_new_std(hdl, &st6422_ctrl_ops,
static int vv6410_s_ctrl(struct v4l2_ctrl *ctrl)
{
- struct sd *sd = container_of(ctrl->handler, struct sd, ctrl_handler);
+ struct gspca_dev *gspca_dev =
+ container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
int err = -EINVAL;
switch (ctrl->id) {
case V4L2_CID_HFLIP:
- err = vv6410_set_hflip(&sd->gspca_dev, ctrl->val);
+ err = vv6410_set_hflip(gspca_dev, ctrl->val);
break;
case V4L2_CID_VFLIP:
- err = vv6410_set_vflip(&sd->gspca_dev, ctrl->val);
+ err = vv6410_set_vflip(gspca_dev, ctrl->val);
break;
case V4L2_CID_GAIN:
- err = vv6410_set_analog_gain(&sd->gspca_dev, ctrl->val);
+ err = vv6410_set_analog_gain(gspca_dev, ctrl->val);
break;
case V4L2_CID_EXPOSURE:
- err = vv6410_set_exposure(&sd->gspca_dev, ctrl->val);
+ err = vv6410_set_exposure(gspca_dev, ctrl->val);
break;
}
return err;
static int vv6410_init_controls(struct sd *sd)
{
- struct v4l2_ctrl_handler *hdl = &sd->ctrl_handler;
+ struct v4l2_ctrl_handler *hdl = &sd->gspca_dev.ctrl_handler;
v4l2_ctrl_handler_init(hdl, 4);
v4l2_ctrl_new_std(hdl, &vv6410_ctrl_ops,
struct sd {
struct gspca_dev gspca_dev; /* !! must be the first item */
- struct v4l2_ctrl_handler ctrl_handler;
struct { /* gamma/brightness/contrast control cluster */
struct v4l2_ctrl *gamma;
struct v4l2_ctrl *brightness;
static int zcxx_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
{
- struct sd *sd = container_of(ctrl->handler, struct sd, ctrl_handler);
- struct gspca_dev *gspca_dev = &sd->gspca_dev;
+ struct gspca_dev *gspca_dev =
+ container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
+ struct sd *sd = (struct sd *)gspca_dev;
switch (ctrl->id) {
case V4L2_CID_AUTOGAIN:
static int zcxx_s_ctrl(struct v4l2_ctrl *ctrl)
{
- struct sd *sd = container_of(ctrl->handler, struct sd, ctrl_handler);
- struct gspca_dev *gspca_dev = &sd->gspca_dev;
+ struct gspca_dev *gspca_dev =
+ container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
+ struct sd *sd = (struct sd *)gspca_dev;
int i, qual;
gspca_dev->usb_err = 0;
static int sd_init_controls(struct gspca_dev *gspca_dev)
{
struct sd *sd = (struct sd *)gspca_dev;
- struct v4l2_ctrl_handler *hdl = &sd->ctrl_handler;
+ struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
static const u8 gamma[SENSOR_MAX] = {
[SENSOR_ADCM2700] = 4,
[SENSOR_CS2102] = 4,