aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/gspca
diff options
context:
space:
mode:
authorJean-Francois Moine <moinejf@free.fr>2008-11-23 12:47:50 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2008-12-30 06:38:45 -0500
commit91bd3412a22d68b7a9a09720e748fbbf68c2d545 (patch)
treed0ab81de90fa89f92070801b91ce3a5be01a714f /drivers/media/video/gspca
parent67ec09fdf5e05d4670b617256c696348b5df080b (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.c73
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 */
1127static 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 */
1145static void setbrightness(struct gspca_dev *gspca_dev) 1126static 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 */
1177static void setcontrast(struct gspca_dev *gspca_dev) 1157static 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