diff options
author | Jean-Francois Moine <moinejf@free.fr> | 2008-11-23 12:47:50 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2008-12-30 06:38:45 -0500 |
commit | 91bd3412a22d68b7a9a09720e748fbbf68c2d545 (patch) | |
tree | d0ab81de90fa89f92070801b91ce3a5be01a714f /drivers/media/video/gspca | |
parent | 67ec09fdf5e05d4670b617256c696348b5df080b (diff) |
V4L/DVB (9837): gspca: Simplify the brightness/contrast for ov76xx sensors in sonixj.
Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/gspca')
-rw-r--r-- | drivers/media/video/gspca/sonixj.c | 73 |
1 files changed, 12 insertions, 61 deletions
diff --git a/drivers/media/video/gspca/sonixj.c b/drivers/media/video/gspca/sonixj.c index df84bf9f227f..34f7f58e527e 100644 --- a/drivers/media/video/gspca/sonixj.c +++ b/drivers/media/video/gspca/sonixj.c | |||
@@ -1123,25 +1123,6 @@ static unsigned int setexposure(struct gspca_dev *gspca_dev, | |||
1123 | return expo; | 1123 | return expo; |
1124 | } | 1124 | } |
1125 | 1125 | ||
1126 | /* this function is used for sensors o76xx only */ | ||
1127 | static void setbrightcont(struct gspca_dev *gspca_dev) | ||
1128 | { | ||
1129 | struct sd *sd = (struct sd *) gspca_dev; | ||
1130 | int val; | ||
1131 | __u8 reg84_full[0x15]; | ||
1132 | |||
1133 | memcpy(reg84_full, reg84, sizeof reg84_full); | ||
1134 | val = sd->contrast * 0x30 / CONTRAST_MAX + 0x10; /* 10..40 */ | ||
1135 | reg84_full[0] = (val + 1) / 2; /* red */ | ||
1136 | reg84_full[2] = val; /* green */ | ||
1137 | reg84_full[4] = (val + 1) / 5; /* blue */ | ||
1138 | val = (sd->brightness - BRIGHTNESS_DEF) * 0x10 | ||
1139 | / BRIGHTNESS_MAX; | ||
1140 | reg84_full[0x12] = val & 0x1f; /* 5:0 signed value */ | ||
1141 | reg_w(gspca_dev, 0x84, reg84_full, sizeof reg84_full); | ||
1142 | } | ||
1143 | |||
1144 | /* sensor != ov76xx */ | ||
1145 | static void setbrightness(struct gspca_dev *gspca_dev) | 1126 | static void setbrightness(struct gspca_dev *gspca_dev) |
1146 | { | 1127 | { |
1147 | struct sd *sd = (struct sd *) gspca_dev; | 1128 | struct sd *sd = (struct sd *) gspca_dev; |
@@ -1166,24 +1147,23 @@ static void setbrightness(struct gspca_dev *gspca_dev) | |||
1166 | case SENSOR_OM6802: | 1147 | case SENSOR_OM6802: |
1167 | expo = sd->brightness >> 6; | 1148 | expo = sd->brightness >> 6; |
1168 | sd->exposure = setexposure(gspca_dev, expo); | 1149 | sd->exposure = setexposure(gspca_dev, expo); |
1169 | k2 = sd->brightness >> 11; | 1150 | k2 >>= 1; |
1170 | break; | 1151 | break; |
1171 | } | 1152 | } |
1172 | 1153 | ||
1173 | reg_w1(gspca_dev, 0x96, k2); | 1154 | reg_w1(gspca_dev, 0x96, k2); /* color matrix Y offset */ |
1174 | } | 1155 | } |
1175 | 1156 | ||
1176 | /* sensor != ov76xx */ | ||
1177 | static void setcontrast(struct gspca_dev *gspca_dev) | 1157 | static void setcontrast(struct gspca_dev *gspca_dev) |
1178 | { | 1158 | { |
1179 | struct sd *sd = (struct sd *) gspca_dev; | 1159 | struct sd *sd = (struct sd *) gspca_dev; |
1180 | __u8 k2; | 1160 | __u8 k2; |
1181 | __u8 contrast[] = { 0x00, 0x00, 0x28, 0x00, 0x07, 0x00 }; | 1161 | __u8 contrast[] = { 0x00, 0x00, 0x28, 0x00, 0x07, 0x00 }; |
1182 | 1162 | ||
1183 | k2 = sd->contrast; | 1163 | k2 = sd->contrast * 0x30 / (CONTRAST_MAX + 1) + 0x10; /* 10..40 */ |
1184 | contrast[2] = k2; | 1164 | contrast[0] = (k2 + 1) / 2; /* red */ |
1185 | contrast[0] = (k2 + 1) >> 1; | 1165 | contrast[2] = k2; /* green */ |
1186 | contrast[4] = (k2 + 1) / 5; | 1166 | contrast[4] = (k2 + 1) / 5; /* blue */ |
1187 | reg_w(gspca_dev, 0x84, contrast, 6); | 1167 | reg_w(gspca_dev, 0x84, contrast, 6); |
1188 | } | 1168 | } |
1189 | 1169 | ||
@@ -1392,20 +1372,13 @@ static int sd_start(struct gspca_dev *gspca_dev) | |||
1392 | switch (sd->sensor) { | 1372 | switch (sd->sensor) { |
1393 | case SENSOR_MI0360: | 1373 | case SENSOR_MI0360: |
1394 | setinfrared(sd); | 1374 | setinfrared(sd); |
1395 | /* fall thru */ | ||
1396 | case SENSOR_HV7131R: | ||
1397 | case SENSOR_MO4000: | ||
1398 | case SENSOR_OM6802: | ||
1399 | setbrightness(gspca_dev); | ||
1400 | setcontrast(gspca_dev); | ||
1401 | break; | 1375 | break; |
1402 | case SENSOR_OV7630: | 1376 | case SENSOR_OV7630: |
1403 | setvflip(sd); | 1377 | setvflip(sd); |
1404 | /* fall thru */ | ||
1405 | default: /* OV76xx */ | ||
1406 | setbrightcont(gspca_dev); | ||
1407 | break; | 1378 | break; |
1408 | } | 1379 | } |
1380 | setbrightness(gspca_dev); | ||
1381 | setcontrast(gspca_dev); | ||
1409 | setautogain(gspca_dev); | 1382 | setautogain(gspca_dev); |
1410 | return 0; | 1383 | return 0; |
1411 | } | 1384 | } |
@@ -1543,19 +1516,8 @@ static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) | |||
1543 | struct sd *sd = (struct sd *) gspca_dev; | 1516 | struct sd *sd = (struct sd *) gspca_dev; |
1544 | 1517 | ||
1545 | sd->brightness = val; | 1518 | sd->brightness = val; |
1546 | if (gspca_dev->streaming) { | 1519 | if (gspca_dev->streaming) |
1547 | switch (sd->sensor) { | 1520 | setbrightness(gspca_dev); |
1548 | case SENSOR_HV7131R: | ||
1549 | case SENSOR_MI0360: | ||
1550 | case SENSOR_MO4000: | ||
1551 | case SENSOR_OM6802: | ||
1552 | setbrightness(gspca_dev); | ||
1553 | break; | ||
1554 | default: /* OV76xx */ | ||
1555 | setbrightcont(gspca_dev); | ||
1556 | break; | ||
1557 | } | ||
1558 | } | ||
1559 | return 0; | 1521 | return 0; |
1560 | } | 1522 | } |
1561 | 1523 | ||
@@ -1572,19 +1534,8 @@ static int sd_setcontrast(struct gspca_dev *gspca_dev, __s32 val) | |||
1572 | struct sd *sd = (struct sd *) gspca_dev; | 1534 | struct sd *sd = (struct sd *) gspca_dev; |
1573 | 1535 | ||
1574 | sd->contrast = val; | 1536 | sd->contrast = val; |
1575 | if (gspca_dev->streaming) { | 1537 | if (gspca_dev->streaming) |
1576 | switch (sd->sensor) { | 1538 | setcontrast(gspca_dev); |
1577 | case SENSOR_HV7131R: | ||
1578 | case SENSOR_MI0360: | ||
1579 | case SENSOR_MO4000: | ||
1580 | case SENSOR_OM6802: | ||
1581 | setcontrast(gspca_dev); | ||
1582 | break; | ||
1583 | default: /* OV76xx */ | ||
1584 | setbrightcont(gspca_dev); | ||
1585 | break; | ||
1586 | } | ||
1587 | } | ||
1588 | return 0; | 1539 | return 0; |
1589 | } | 1540 | } |
1590 | 1541 | ||