diff options
author | Jean-François Moine <moinejf@free.fr> | 2011-02-10 08:15:45 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-03-21 19:32:08 -0400 |
commit | d57747f1e738cf1aa4a743ea10e0fb640b502c7d (patch) | |
tree | be17a146ff44f7f60655fc7a23486e489658c2f0 /drivers/media/video | |
parent | 458efe2d558b51fff38026e8ede9374899340e60 (diff) |
[media] gspca - ov534: Add saturation control for ov767x
Signed-off-by: Jean-François Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video')
-rw-r--r-- | drivers/media/video/gspca/ov534.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/drivers/media/video/gspca/ov534.c b/drivers/media/video/gspca/ov534.c index 8dada2b745bc..0c6369b7fe18 100644 --- a/drivers/media/video/gspca/ov534.c +++ b/drivers/media/video/gspca/ov534.c | |||
@@ -61,6 +61,7 @@ enum e_ctrl { | |||
61 | SHARPNESS, | 61 | SHARPNESS, |
62 | HFLIP, | 62 | HFLIP, |
63 | VFLIP, | 63 | VFLIP, |
64 | COLORS, | ||
64 | LIGHTFREQ, | 65 | LIGHTFREQ, |
65 | NCTRLS /* number of controls */ | 66 | NCTRLS /* number of controls */ |
66 | }; | 67 | }; |
@@ -93,6 +94,7 @@ static void setawb(struct gspca_dev *gspca_dev); | |||
93 | static void setaec(struct gspca_dev *gspca_dev); | 94 | static void setaec(struct gspca_dev *gspca_dev); |
94 | static void setsharpness(struct gspca_dev *gspca_dev); | 95 | static void setsharpness(struct gspca_dev *gspca_dev); |
95 | static void sethvflip(struct gspca_dev *gspca_dev); | 96 | static void sethvflip(struct gspca_dev *gspca_dev); |
97 | static void setcolors(struct gspca_dev *gspca_dev); | ||
96 | static void setlightfreq(struct gspca_dev *gspca_dev); | 98 | static void setlightfreq(struct gspca_dev *gspca_dev); |
97 | 99 | ||
98 | static int sd_start(struct gspca_dev *gspca_dev); | 100 | static int sd_start(struct gspca_dev *gspca_dev); |
@@ -219,6 +221,18 @@ static const struct ctrl sd_ctrls[] = { | |||
219 | }, | 221 | }, |
220 | .set_control = sethvflip | 222 | .set_control = sethvflip |
221 | }, | 223 | }, |
224 | [COLORS] = { | ||
225 | { | ||
226 | .id = V4L2_CID_SATURATION, | ||
227 | .type = V4L2_CTRL_TYPE_INTEGER, | ||
228 | .name = "Saturation", | ||
229 | .minimum = 0, | ||
230 | .maximum = 6, | ||
231 | .step = 1, | ||
232 | .default_value = 3, | ||
233 | }, | ||
234 | .set_control = setcolors | ||
235 | }, | ||
222 | [LIGHTFREQ] = { | 236 | [LIGHTFREQ] = { |
223 | { | 237 | { |
224 | .id = V4L2_CID_POWER_LINE_FREQUENCY, | 238 | .id = V4L2_CID_POWER_LINE_FREQUENCY, |
@@ -1116,6 +1130,26 @@ static void sethvflip(struct gspca_dev *gspca_dev) | |||
1116 | } | 1130 | } |
1117 | } | 1131 | } |
1118 | 1132 | ||
1133 | static void setcolors(struct gspca_dev *gspca_dev) | ||
1134 | { | ||
1135 | struct sd *sd = (struct sd *) gspca_dev; | ||
1136 | u8 val; | ||
1137 | int i; | ||
1138 | static u8 color_tb[][6] = { | ||
1139 | {0x42, 0x42, 0x00, 0x11, 0x30, 0x41}, | ||
1140 | {0x52, 0x52, 0x00, 0x16, 0x3c, 0x52}, | ||
1141 | {0x66, 0x66, 0x00, 0x1b, 0x4b, 0x66}, | ||
1142 | {0x80, 0x80, 0x00, 0x22, 0x5e, 0x80}, | ||
1143 | {0x9a, 0x9a, 0x00, 0x29, 0x71, 0x9a}, | ||
1144 | {0xb8, 0xb8, 0x00, 0x31, 0x87, 0xb8}, | ||
1145 | {0xdd, 0xdd, 0x00, 0x3b, 0xa2, 0xdd}, | ||
1146 | }; | ||
1147 | |||
1148 | val = sd->ctrls[COLORS].val; | ||
1149 | for (i = 0; i < ARRAY_SIZE(color_tb[0]); i++) | ||
1150 | sccb_reg_write(gspca_dev, 0x4f + i, color_tb[val][i]); | ||
1151 | } | ||
1152 | |||
1119 | static void setlightfreq(struct gspca_dev *gspca_dev) | 1153 | static void setlightfreq(struct gspca_dev *gspca_dev) |
1120 | { | 1154 | { |
1121 | struct sd *sd = (struct sd *) gspca_dev; | 1155 | struct sd *sd = (struct sd *) gspca_dev; |
@@ -1207,6 +1241,7 @@ static int sd_init(struct gspca_dev *gspca_dev) | |||
1207 | gspca_dev->cam.nmodes = ARRAY_SIZE(ov767x_mode); | 1241 | gspca_dev->cam.nmodes = ARRAY_SIZE(ov767x_mode); |
1208 | } else { | 1242 | } else { |
1209 | sd->sensor = SENSOR_OV772x; | 1243 | sd->sensor = SENSOR_OV772x; |
1244 | gspca_dev->ctrl_dis = (1 << COLORS); | ||
1210 | gspca_dev->cam.bulk = 1; | 1245 | gspca_dev->cam.bulk = 1; |
1211 | gspca_dev->cam.bulk_size = 16384; | 1246 | gspca_dev->cam.bulk_size = 16384; |
1212 | gspca_dev->cam.bulk_nurbs = 2; | 1247 | gspca_dev->cam.bulk_nurbs = 2; |
@@ -1277,6 +1312,8 @@ static int sd_start(struct gspca_dev *gspca_dev) | |||
1277 | if (!(gspca_dev->ctrl_dis & (1 << SHARPNESS))) | 1312 | if (!(gspca_dev->ctrl_dis & (1 << SHARPNESS))) |
1278 | setsharpness(gspca_dev); | 1313 | setsharpness(gspca_dev); |
1279 | sethvflip(gspca_dev); | 1314 | sethvflip(gspca_dev); |
1315 | if (!(gspca_dev->ctrl_dis & (1 << COLORS))) | ||
1316 | setcolors(gspca_dev); | ||
1280 | setlightfreq(gspca_dev); | 1317 | setlightfreq(gspca_dev); |
1281 | 1318 | ||
1282 | ov534_set_led(gspca_dev, 1); | 1319 | ov534_set_led(gspca_dev, 1); |