aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/video/gspca/gspca.h1
-rw-r--r--drivers/media/video/gspca/mars.c20
-rw-r--r--drivers/media/video/gspca/sn9c20x.c26
-rw-r--r--drivers/media/video/gspca/stv06xx/stv06xx.c2
-rw-r--r--drivers/media/video/gspca/stv06xx/stv06xx.h3
-rw-r--r--drivers/media/video/gspca/stv06xx/stv06xx_hdcs.c9
-rw-r--r--drivers/media/video/gspca/stv06xx/stv06xx_pb0100.c14
-rw-r--r--drivers/media/video/gspca/stv06xx/stv06xx_st6422.c6
-rw-r--r--drivers/media/video/gspca/stv06xx/stv06xx_vv6410.c13
-rw-r--r--drivers/media/video/gspca/zc3xx.c13
10 files changed, 56 insertions, 51 deletions
diff --git a/drivers/media/video/gspca/gspca.h b/drivers/media/video/gspca/gspca.h
index 449ff8e37fe7..dd15e07d4666 100644
--- a/drivers/media/video/gspca/gspca.h
+++ b/drivers/media/video/gspca/gspca.h
@@ -174,6 +174,7 @@ struct gspca_dev {
174 const struct sd_desc *sd_desc; /* subdriver description */ 174 const struct sd_desc *sd_desc; /* subdriver description */
175 unsigned ctrl_dis; /* disabled controls (bit map) */ 175 unsigned ctrl_dis; /* disabled controls (bit map) */
176 unsigned ctrl_inac; /* inactive controls (bit map) */ 176 unsigned ctrl_inac; /* inactive controls (bit map) */
177 struct v4l2_ctrl_handler ctrl_handler;
177 178
178 /* autogain and exposure or gain control cluster, these are global as 179 /* autogain and exposure or gain control cluster, these are global as
179 the autogain/exposure functions in autogain_functions.c use them */ 180 the autogain/exposure functions in autogain_functions.c use them */
diff --git a/drivers/media/video/gspca/mars.c b/drivers/media/video/gspca/mars.c
index 2950347b8265..ec7b21ee79fb 100644
--- a/drivers/media/video/gspca/mars.c
+++ b/drivers/media/video/gspca/mars.c
@@ -34,7 +34,6 @@ MODULE_LICENSE("GPL");
34struct sd { 34struct sd {
35 struct gspca_dev gspca_dev; /* !! must be the first item */ 35 struct gspca_dev gspca_dev; /* !! must be the first item */
36 36
37 struct v4l2_ctrl_handler ctrl_handler;
38 struct v4l2_ctrl *brightness; 37 struct v4l2_ctrl *brightness;
39 struct v4l2_ctrl *saturation; 38 struct v4l2_ctrl *saturation;
40 struct v4l2_ctrl *sharpness; 39 struct v4l2_ctrl *sharpness;
@@ -161,8 +160,9 @@ static void setilluminators(struct gspca_dev *gspca_dev, bool top, bool bottom)
161 160
162static int mars_s_ctrl(struct v4l2_ctrl *ctrl) 161static int mars_s_ctrl(struct v4l2_ctrl *ctrl)
163{ 162{
164 struct sd *sd = container_of(ctrl->handler, struct sd, ctrl_handler); 163 struct gspca_dev *gspca_dev =
165 struct gspca_dev *gspca_dev = &sd->gspca_dev; 164 container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
165 struct sd *sd = (struct sd *)gspca_dev;
166 166
167 gspca_dev->usb_err = 0; 167 gspca_dev->usb_err = 0;
168 168
@@ -179,20 +179,20 @@ static int mars_s_ctrl(struct v4l2_ctrl *ctrl)
179 179
180 switch (ctrl->id) { 180 switch (ctrl->id) {
181 case V4L2_CID_BRIGHTNESS: 181 case V4L2_CID_BRIGHTNESS:
182 setbrightness(&sd->gspca_dev, ctrl->val); 182 setbrightness(gspca_dev, ctrl->val);
183 break; 183 break;
184 case V4L2_CID_SATURATION: 184 case V4L2_CID_SATURATION:
185 setcolors(&sd->gspca_dev, ctrl->val); 185 setcolors(gspca_dev, ctrl->val);
186 break; 186 break;
187 case V4L2_CID_GAMMA: 187 case V4L2_CID_GAMMA:
188 setgamma(&sd->gspca_dev, ctrl->val); 188 setgamma(gspca_dev, ctrl->val);
189 break; 189 break;
190 case V4L2_CID_ILLUMINATORS_1: 190 case V4L2_CID_ILLUMINATORS_1:
191 setilluminators(&sd->gspca_dev, sd->illum_top->val, 191 setilluminators(gspca_dev, sd->illum_top->val,
192 sd->illum_bottom->val); 192 sd->illum_bottom->val);
193 break; 193 break;
194 case V4L2_CID_SHARPNESS: 194 case V4L2_CID_SHARPNESS:
195 setsharpness(&sd->gspca_dev, ctrl->val); 195 setsharpness(gspca_dev, ctrl->val);
196 break; 196 break;
197 case V4L2_CID_JPEG_COMPRESSION_QUALITY: 197 case V4L2_CID_JPEG_COMPRESSION_QUALITY:
198 jpeg_set_qual(sd->jpeg_hdr, ctrl->val); 198 jpeg_set_qual(sd->jpeg_hdr, ctrl->val);
@@ -211,7 +211,7 @@ static const struct v4l2_ctrl_ops mars_ctrl_ops = {
211static int sd_init_controls(struct gspca_dev *gspca_dev) 211static int sd_init_controls(struct gspca_dev *gspca_dev)
212{ 212{
213 struct sd *sd = (struct sd *) gspca_dev; 213 struct sd *sd = (struct sd *) gspca_dev;
214 struct v4l2_ctrl_handler *hdl = &sd->ctrl_handler; 214 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
215 215
216 gspca_dev->vdev.ctrl_handler = hdl; 216 gspca_dev->vdev.ctrl_handler = hdl;
217 v4l2_ctrl_handler_init(hdl, 7); 217 v4l2_ctrl_handler_init(hdl, 7);
diff --git a/drivers/media/video/gspca/sn9c20x.c b/drivers/media/video/gspca/sn9c20x.c
index 1758ed98cf16..ad098202d7f0 100644
--- a/drivers/media/video/gspca/sn9c20x.c
+++ b/drivers/media/video/gspca/sn9c20x.c
@@ -70,7 +70,6 @@ MODULE_LICENSE("GPL");
70struct sd { 70struct sd {
71 struct gspca_dev gspca_dev; 71 struct gspca_dev gspca_dev;
72 72
73 struct v4l2_ctrl_handler ctrl_handler;
74 struct { /* color control cluster */ 73 struct { /* color control cluster */
75 struct v4l2_ctrl *brightness; 74 struct v4l2_ctrl *brightness;
76 struct v4l2_ctrl *contrast; 75 struct v4l2_ctrl *contrast;
@@ -1694,8 +1693,9 @@ static int sd_config(struct gspca_dev *gspca_dev,
1694 1693
1695static int sd_s_ctrl(struct v4l2_ctrl *ctrl) 1694static int sd_s_ctrl(struct v4l2_ctrl *ctrl)
1696{ 1695{
1697 struct sd *sd = container_of(ctrl->handler, struct sd, ctrl_handler); 1696 struct gspca_dev *gspca_dev =
1698 struct gspca_dev *gspca_dev = &sd->gspca_dev; 1697 container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
1698 struct sd *sd = (struct sd *)gspca_dev;
1699 1699
1700 gspca_dev->usb_err = 0; 1700 gspca_dev->usb_err = 0;
1701 1701
@@ -1705,37 +1705,37 @@ static int sd_s_ctrl(struct v4l2_ctrl *ctrl)
1705 switch (ctrl->id) { 1705 switch (ctrl->id) {
1706 /* color control cluster */ 1706 /* color control cluster */
1707 case V4L2_CID_BRIGHTNESS: 1707 case V4L2_CID_BRIGHTNESS:
1708 set_cmatrix(&sd->gspca_dev, sd->brightness->val, 1708 set_cmatrix(gspca_dev, sd->brightness->val,
1709 sd->contrast->val, sd->saturation->val, sd->hue->val); 1709 sd->contrast->val, sd->saturation->val, sd->hue->val);
1710 break; 1710 break;
1711 case V4L2_CID_GAMMA: 1711 case V4L2_CID_GAMMA:
1712 set_gamma(&sd->gspca_dev, ctrl->val); 1712 set_gamma(gspca_dev, ctrl->val);
1713 break; 1713 break;
1714 /* blue/red balance cluster */ 1714 /* blue/red balance cluster */
1715 case V4L2_CID_BLUE_BALANCE: 1715 case V4L2_CID_BLUE_BALANCE:
1716 set_redblue(&sd->gspca_dev, sd->blue->val, sd->red->val); 1716 set_redblue(gspca_dev, sd->blue->val, sd->red->val);
1717 break; 1717 break;
1718 /* h/vflip cluster */ 1718 /* h/vflip cluster */
1719 case V4L2_CID_HFLIP: 1719 case V4L2_CID_HFLIP:
1720 set_hvflip(&sd->gspca_dev, sd->hflip->val, sd->vflip->val); 1720 set_hvflip(gspca_dev, sd->hflip->val, sd->vflip->val);
1721 break; 1721 break;
1722 /* standalone exposure control */ 1722 /* standalone exposure control */
1723 case V4L2_CID_EXPOSURE: 1723 case V4L2_CID_EXPOSURE:
1724 set_exposure(&sd->gspca_dev, ctrl->val); 1724 set_exposure(gspca_dev, ctrl->val);
1725 break; 1725 break;
1726 /* standalone gain control */ 1726 /* standalone gain control */
1727 case V4L2_CID_GAIN: 1727 case V4L2_CID_GAIN:
1728 set_gain(&sd->gspca_dev, ctrl->val); 1728 set_gain(gspca_dev, ctrl->val);
1729 break; 1729 break;
1730 /* autogain + exposure or gain control cluster */ 1730 /* autogain + exposure or gain control cluster */
1731 case V4L2_CID_AUTOGAIN: 1731 case V4L2_CID_AUTOGAIN:
1732 if (sd->sensor == SENSOR_SOI968) 1732 if (sd->sensor == SENSOR_SOI968)
1733 set_gain(&sd->gspca_dev, sd->gain->val); 1733 set_gain(gspca_dev, sd->gain->val);
1734 else 1734 else
1735 set_exposure(&sd->gspca_dev, sd->exposure->val); 1735 set_exposure(gspca_dev, sd->exposure->val);
1736 break; 1736 break;
1737 case V4L2_CID_JPEG_COMPRESSION_QUALITY: 1737 case V4L2_CID_JPEG_COMPRESSION_QUALITY:
1738 set_quality(&sd->gspca_dev, ctrl->val); 1738 set_quality(gspca_dev, ctrl->val);
1739 break; 1739 break;
1740 } 1740 }
1741 return gspca_dev->usb_err; 1741 return gspca_dev->usb_err;
@@ -1748,7 +1748,7 @@ static const struct v4l2_ctrl_ops sd_ctrl_ops = {
1748static int sd_init_controls(struct gspca_dev *gspca_dev) 1748static int sd_init_controls(struct gspca_dev *gspca_dev)
1749{ 1749{
1750 struct sd *sd = (struct sd *) gspca_dev; 1750 struct sd *sd = (struct sd *) gspca_dev;
1751 struct v4l2_ctrl_handler *hdl = &sd->ctrl_handler; 1751 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
1752 1752
1753 gspca_dev->vdev.ctrl_handler = hdl; 1753 gspca_dev->vdev.ctrl_handler = hdl;
1754 v4l2_ctrl_handler_init(hdl, 13); 1754 v4l2_ctrl_handler_init(hdl, 13);
diff --git a/drivers/media/video/gspca/stv06xx/stv06xx.c b/drivers/media/video/gspca/stv06xx/stv06xx.c
index cebd615effeb..999ec7764449 100644
--- a/drivers/media/video/gspca/stv06xx/stv06xx.c
+++ b/drivers/media/video/gspca/stv06xx/stv06xx.c
@@ -268,7 +268,7 @@ static int stv06xx_init_controls(struct gspca_dev *gspca_dev)
268 268
269 PDEBUG(D_PROBE, "Initializing controls"); 269 PDEBUG(D_PROBE, "Initializing controls");
270 270
271 gspca_dev->vdev.ctrl_handler = &sd->ctrl_handler; 271 gspca_dev->vdev.ctrl_handler = &gspca_dev->ctrl_handler;
272 return sd->sensor->init_controls(sd); 272 return sd->sensor->init_controls(sd);
273} 273}
274 274
diff --git a/drivers/media/video/gspca/stv06xx/stv06xx.h b/drivers/media/video/gspca/stv06xx/stv06xx.h
index b7cbc6b878d3..34957a4ec150 100644
--- a/drivers/media/video/gspca/stv06xx/stv06xx.h
+++ b/drivers/media/video/gspca/stv06xx/stv06xx.h
@@ -89,9 +89,6 @@ struct sd {
89 /* A pointer to the currently connected sensor */ 89 /* A pointer to the currently connected sensor */
90 const struct stv06xx_sensor *sensor; 90 const struct stv06xx_sensor *sensor;
91 91
92 /* Control handler */
93 struct v4l2_ctrl_handler ctrl_handler;
94
95 /* Sensor private data */ 92 /* Sensor private data */
96 void *sensor_priv; 93 void *sensor_priv;
97 94
diff --git a/drivers/media/video/gspca/stv06xx/stv06xx_hdcs.c b/drivers/media/video/gspca/stv06xx/stv06xx_hdcs.c
index 74cbd386600b..06fa54c5efb2 100644
--- a/drivers/media/video/gspca/stv06xx/stv06xx_hdcs.c
+++ b/drivers/media/video/gspca/stv06xx/stv06xx_hdcs.c
@@ -335,15 +335,16 @@ static int hdcs_set_size(struct sd *sd,
335 335
336static int hdcs_s_ctrl(struct v4l2_ctrl *ctrl) 336static int hdcs_s_ctrl(struct v4l2_ctrl *ctrl)
337{ 337{
338 struct sd *sd = container_of(ctrl->handler, struct sd, ctrl_handler); 338 struct gspca_dev *gspca_dev =
339 container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
339 int err = -EINVAL; 340 int err = -EINVAL;
340 341
341 switch (ctrl->id) { 342 switch (ctrl->id) {
342 case V4L2_CID_GAIN: 343 case V4L2_CID_GAIN:
343 err = hdcs_set_gain(&sd->gspca_dev, ctrl->val); 344 err = hdcs_set_gain(gspca_dev, ctrl->val);
344 break; 345 break;
345 case V4L2_CID_EXPOSURE: 346 case V4L2_CID_EXPOSURE:
346 err = hdcs_set_exposure(&sd->gspca_dev, ctrl->val); 347 err = hdcs_set_exposure(gspca_dev, ctrl->val);
347 break; 348 break;
348 } 349 }
349 return err; 350 return err;
@@ -355,7 +356,7 @@ static const struct v4l2_ctrl_ops hdcs_ctrl_ops = {
355 356
356static int hdcs_init_controls(struct sd *sd) 357static int hdcs_init_controls(struct sd *sd)
357{ 358{
358 struct v4l2_ctrl_handler *hdl = &sd->ctrl_handler; 359 struct v4l2_ctrl_handler *hdl = &sd->gspca_dev.ctrl_handler;
359 360
360 v4l2_ctrl_handler_init(hdl, 2); 361 v4l2_ctrl_handler_init(hdl, 2);
361 v4l2_ctrl_new_std(hdl, &hdcs_ctrl_ops, 362 v4l2_ctrl_new_std(hdl, &hdcs_ctrl_ops,
diff --git a/drivers/media/video/gspca/stv06xx/stv06xx_pb0100.c b/drivers/media/video/gspca/stv06xx/stv06xx_pb0100.c
index c03b13e70b56..cdfc3d05ab6b 100644
--- a/drivers/media/video/gspca/stv06xx/stv06xx_pb0100.c
+++ b/drivers/media/video/gspca/stv06xx/stv06xx_pb0100.c
@@ -87,24 +87,26 @@ static struct v4l2_pix_format pb0100_mode[] = {
87 87
88static int pb0100_s_ctrl(struct v4l2_ctrl *ctrl) 88static int pb0100_s_ctrl(struct v4l2_ctrl *ctrl)
89{ 89{
90 struct sd *sd = container_of(ctrl->handler, struct sd, ctrl_handler); 90 struct gspca_dev *gspca_dev =
91 container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
92 struct sd *sd = (struct sd *)gspca_dev;
91 struct pb0100_ctrls *ctrls = sd->sensor_priv; 93 struct pb0100_ctrls *ctrls = sd->sensor_priv;
92 int err = -EINVAL; 94 int err = -EINVAL;
93 95
94 switch (ctrl->id) { 96 switch (ctrl->id) {
95 case V4L2_CID_AUTOGAIN: 97 case V4L2_CID_AUTOGAIN:
96 err = pb0100_set_autogain(&sd->gspca_dev, ctrl->val); 98 err = pb0100_set_autogain(gspca_dev, ctrl->val);
97 if (err) 99 if (err)
98 break; 100 break;
99 if (ctrl->val) 101 if (ctrl->val)
100 break; 102 break;
101 err = pb0100_set_gain(&sd->gspca_dev, ctrls->gain->val); 103 err = pb0100_set_gain(gspca_dev, ctrls->gain->val);
102 if (err) 104 if (err)
103 break; 105 break;
104 err = pb0100_set_exposure(&sd->gspca_dev, ctrls->exposure->val); 106 err = pb0100_set_exposure(gspca_dev, ctrls->exposure->val);
105 break; 107 break;
106 case V4L2_CTRL_CLASS_USER + 0x1001: 108 case V4L2_CTRL_CLASS_USER + 0x1001:
107 err = pb0100_set_autogain_target(&sd->gspca_dev, ctrl->val); 109 err = pb0100_set_autogain_target(gspca_dev, ctrl->val);
108 break; 110 break;
109 } 111 }
110 return err; 112 return err;
@@ -116,7 +118,7 @@ static const struct v4l2_ctrl_ops pb0100_ctrl_ops = {
116 118
117static int pb0100_init_controls(struct sd *sd) 119static int pb0100_init_controls(struct sd *sd)
118{ 120{
119 struct v4l2_ctrl_handler *hdl = &sd->ctrl_handler; 121 struct v4l2_ctrl_handler *hdl = &sd->gspca_dev.ctrl_handler;
120 struct pb0100_ctrls *ctrls; 122 struct pb0100_ctrls *ctrls;
121 static const struct v4l2_ctrl_config autogain_target = { 123 static const struct v4l2_ctrl_config autogain_target = {
122 .ops = &pb0100_ctrl_ops, 124 .ops = &pb0100_ctrl_ops,
diff --git a/drivers/media/video/gspca/stv06xx/stv06xx_st6422.c b/drivers/media/video/gspca/stv06xx/stv06xx_st6422.c
index bbfe8210d590..8a57990dfe0f 100644
--- a/drivers/media/video/gspca/stv06xx/stv06xx_st6422.c
+++ b/drivers/media/video/gspca/stv06xx/stv06xx_st6422.c
@@ -67,7 +67,9 @@ static int setexposure(struct sd *sd, s16 expo);
67 67
68static int st6422_s_ctrl(struct v4l2_ctrl *ctrl) 68static int st6422_s_ctrl(struct v4l2_ctrl *ctrl)
69{ 69{
70 struct sd *sd = container_of(ctrl->handler, struct sd, ctrl_handler); 70 struct gspca_dev *gspca_dev =
71 container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
72 struct sd *sd = (struct sd *)gspca_dev;
71 int err = -EINVAL; 73 int err = -EINVAL;
72 74
73 switch (ctrl->id) { 75 switch (ctrl->id) {
@@ -98,7 +100,7 @@ static const struct v4l2_ctrl_ops st6422_ctrl_ops = {
98 100
99static int st6422_init_controls(struct sd *sd) 101static int st6422_init_controls(struct sd *sd)
100{ 102{
101 struct v4l2_ctrl_handler *hdl = &sd->ctrl_handler; 103 struct v4l2_ctrl_handler *hdl = &sd->gspca_dev.ctrl_handler;
102 104
103 v4l2_ctrl_handler_init(hdl, 4); 105 v4l2_ctrl_handler_init(hdl, 4);
104 v4l2_ctrl_new_std(hdl, &st6422_ctrl_ops, 106 v4l2_ctrl_new_std(hdl, &st6422_ctrl_ops,
diff --git a/drivers/media/video/gspca/stv06xx/stv06xx_vv6410.c b/drivers/media/video/gspca/stv06xx/stv06xx_vv6410.c
index 1b7a68a5a43d..748e1421d6d8 100644
--- a/drivers/media/video/gspca/stv06xx/stv06xx_vv6410.c
+++ b/drivers/media/video/gspca/stv06xx/stv06xx_vv6410.c
@@ -46,21 +46,22 @@ static struct v4l2_pix_format vv6410_mode[] = {
46 46
47static int vv6410_s_ctrl(struct v4l2_ctrl *ctrl) 47static int vv6410_s_ctrl(struct v4l2_ctrl *ctrl)
48{ 48{
49 struct sd *sd = container_of(ctrl->handler, struct sd, ctrl_handler); 49 struct gspca_dev *gspca_dev =
50 container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
50 int err = -EINVAL; 51 int err = -EINVAL;
51 52
52 switch (ctrl->id) { 53 switch (ctrl->id) {
53 case V4L2_CID_HFLIP: 54 case V4L2_CID_HFLIP:
54 err = vv6410_set_hflip(&sd->gspca_dev, ctrl->val); 55 err = vv6410_set_hflip(gspca_dev, ctrl->val);
55 break; 56 break;
56 case V4L2_CID_VFLIP: 57 case V4L2_CID_VFLIP:
57 err = vv6410_set_vflip(&sd->gspca_dev, ctrl->val); 58 err = vv6410_set_vflip(gspca_dev, ctrl->val);
58 break; 59 break;
59 case V4L2_CID_GAIN: 60 case V4L2_CID_GAIN:
60 err = vv6410_set_analog_gain(&sd->gspca_dev, ctrl->val); 61 err = vv6410_set_analog_gain(gspca_dev, ctrl->val);
61 break; 62 break;
62 case V4L2_CID_EXPOSURE: 63 case V4L2_CID_EXPOSURE:
63 err = vv6410_set_exposure(&sd->gspca_dev, ctrl->val); 64 err = vv6410_set_exposure(gspca_dev, ctrl->val);
64 break; 65 break;
65 } 66 }
66 return err; 67 return err;
@@ -91,7 +92,7 @@ static int vv6410_probe(struct sd *sd)
91 92
92static int vv6410_init_controls(struct sd *sd) 93static int vv6410_init_controls(struct sd *sd)
93{ 94{
94 struct v4l2_ctrl_handler *hdl = &sd->ctrl_handler; 95 struct v4l2_ctrl_handler *hdl = &sd->gspca_dev.ctrl_handler;
95 96
96 v4l2_ctrl_handler_init(hdl, 4); 97 v4l2_ctrl_handler_init(hdl, 4);
97 v4l2_ctrl_new_std(hdl, &vv6410_ctrl_ops, 98 v4l2_ctrl_new_std(hdl, &vv6410_ctrl_ops,
diff --git a/drivers/media/video/gspca/zc3xx.c b/drivers/media/video/gspca/zc3xx.c
index a8839fb3c1d6..0d504a7c512c 100644
--- a/drivers/media/video/gspca/zc3xx.c
+++ b/drivers/media/video/gspca/zc3xx.c
@@ -39,7 +39,6 @@ static int force_sensor = -1;
39struct sd { 39struct sd {
40 struct gspca_dev gspca_dev; /* !! must be the first item */ 40 struct gspca_dev gspca_dev; /* !! must be the first item */
41 41
42 struct v4l2_ctrl_handler ctrl_handler;
43 struct { /* gamma/brightness/contrast control cluster */ 42 struct { /* gamma/brightness/contrast control cluster */
44 struct v4l2_ctrl *gamma; 43 struct v4l2_ctrl *gamma;
45 struct v4l2_ctrl *brightness; 44 struct v4l2_ctrl *brightness;
@@ -6328,8 +6327,9 @@ static int sd_config(struct gspca_dev *gspca_dev,
6328 6327
6329static int zcxx_g_volatile_ctrl(struct v4l2_ctrl *ctrl) 6328static int zcxx_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
6330{ 6329{
6331 struct sd *sd = container_of(ctrl->handler, struct sd, ctrl_handler); 6330 struct gspca_dev *gspca_dev =
6332 struct gspca_dev *gspca_dev = &sd->gspca_dev; 6331 container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
6332 struct sd *sd = (struct sd *)gspca_dev;
6333 6333
6334 switch (ctrl->id) { 6334 switch (ctrl->id) {
6335 case V4L2_CID_AUTOGAIN: 6335 case V4L2_CID_AUTOGAIN:
@@ -6343,8 +6343,9 @@ static int zcxx_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
6343 6343
6344static int zcxx_s_ctrl(struct v4l2_ctrl *ctrl) 6344static int zcxx_s_ctrl(struct v4l2_ctrl *ctrl)
6345{ 6345{
6346 struct sd *sd = container_of(ctrl->handler, struct sd, ctrl_handler); 6346 struct gspca_dev *gspca_dev =
6347 struct gspca_dev *gspca_dev = &sd->gspca_dev; 6347 container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
6348 struct sd *sd = (struct sd *)gspca_dev;
6348 int i, qual; 6349 int i, qual;
6349 6350
6350 gspca_dev->usb_err = 0; 6351 gspca_dev->usb_err = 0;
@@ -6404,7 +6405,7 @@ static const struct v4l2_ctrl_ops zcxx_ctrl_ops = {
6404static int sd_init_controls(struct gspca_dev *gspca_dev) 6405static int sd_init_controls(struct gspca_dev *gspca_dev)
6405{ 6406{
6406 struct sd *sd = (struct sd *)gspca_dev; 6407 struct sd *sd = (struct sd *)gspca_dev;
6407 struct v4l2_ctrl_handler *hdl = &sd->ctrl_handler; 6408 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
6408 static const u8 gamma[SENSOR_MAX] = { 6409 static const u8 gamma[SENSOR_MAX] = {
6409 [SENSOR_ADCM2700] = 4, 6410 [SENSOR_ADCM2700] = 4,
6410 [SENSOR_CS2102] = 4, 6411 [SENSOR_CS2102] = 4,