From 7fc678033c79911d43691f355639f54de111488a Mon Sep 17 00:00:00 2001 From: Brian Johnson Date: Tue, 6 Jan 2009 18:04:14 -0500 Subject: [PATCH] All Omnivision sensors now us software autoexposure calculations Signed-off-by: Brian Johnson --- omnivision.c | 12 ++++++------ omnivision.h | 2 +- sn9c20x-bridge.c | 6 +++--- sn9c20x-dev.c | 4 +--- sn9c20x-usb.c | 2 +- 5 files changed, 12 insertions(+), 14 deletions(-) diff --git a/omnivision.c b/omnivision.c index 015eccb..f14df4c 100644 --- a/omnivision.c +++ b/omnivision.c @@ -45,7 +45,7 @@ struct sn9c20x_i2c_regs ov7660_init[] = { /* default is 0x8f, windows used 0xf8 */ /* Enable fast AGC/AEC algorithm, AEC - Step size limit = 1/16 x AEC */ /* Banding & Reserved are disabled. AGC, AEC enabled, 0x85 */ - {OV7660_CTL_COM8, 0xb8}, + {OV7660_CTL_COM8, 0xba}, /* video appears jagged w/o these ADC writes */ {OV7660_CTL_ADC, 0x0f}, {OV7660_CTL_ACOM, 0x02}, @@ -278,7 +278,7 @@ struct sn9c20x_i2c_regs ov7670_init[] = { {OV7670_CTL_COM11, 0xc0}, {OV7670_CTL_HAECC1, 0x76}, {OV7670_CTL_HAECC1 + 1, 0x65}, - {OV7670_CTL_COM8, 0xe7}, + {OV7670_CTL_COM8, 0xe2}, /* Phase 3 */ {OV7670_CTL_DBLV, 0x0a}, {OV7670_CTL_CLKRC, 0x80}, @@ -435,7 +435,7 @@ struct sn9c20x_i2c_regs soi968_init[] = { */ {0x14, 0x4e}, /* AEC, AGC, AWB disabled; fast AEC */ - {0x13, 0x88}, + {0x13, 0x8a}, /* output: VGA, master mode */ {0x12, 0x40}, /* set HSTART, HSTOP, VSTART and VSTOP */ @@ -465,7 +465,7 @@ struct sn9c20x_i2c_regs soi968_init[] = { struct sn9c20x_i2c_regs ov9655_init[] = { {0x12, 0x80}, {0x12, 0x01}, {0x0d, 0x00}, {0x0e, 0x61}, - {0x11, 0x80}, {0x13, 0xb8}, {0x14, 0x3e}, {0x16, 0x24}, + {0x11, 0x80}, {0x13, 0xba}, {0x14, 0x3e}, {0x16, 0x24}, {0x1e, 0x04}, {0x1e, 0x04}, {0x1e, 0x04}, {0x27, 0x08}, {0x28, 0x08}, {0x29, 0x15}, {0x2c, 0x08}, {0x32, 0xbf}, {0x34, 0x3d}, {0x35, 0x00}, {0x36, 0xf8}, {0x38, 0x12}, @@ -596,9 +596,9 @@ int ov_set_exposure(struct usb_sn9c20x *dev) * * @author GWater * - * For all Omnivision sensors and SOI968. + * For SOI968 sensor. */ -int ov_set_autoexposure(struct usb_sn9c20x *dev) +int soi968_set_autoexposure(struct usb_sn9c20x *dev) { __u8 buf[1]; int ret = 0; diff --git a/omnivision.h b/omnivision.h index f5bd7e9..ebf2a01 100644 --- a/omnivision.h +++ b/omnivision.h @@ -537,11 +537,11 @@ int ov7670_flip_detect(struct usb_sn9c20x *dev); int soi968_set_exposure(struct usb_sn9c20x *dev); int soi968_button_detect(struct usb_sn9c20x *dev); int soi968_set_gain(struct usb_sn9c20x *dev); +int soi968_set_autoexposure(struct usb_sn9c20x *dev); int ov965x_set_hvflip(struct usb_sn9c20x *); int ov965x_flip_detect(struct usb_sn9c20x *dev); int ov_set_exposure(struct usb_sn9c20x *); int ov_set_autogain(struct usb_sn9c20x *dev); -int ov_set_autoexposure(struct usb_sn9c20x *dev); #endif diff --git a/sn9c20x-bridge.c b/sn9c20x-bridge.c index ad12e8e..944f36c 100644 --- a/sn9c20x-bridge.c +++ b/sn9c20x-bridge.c @@ -108,10 +108,10 @@ int sn9c20x_set_camera_control(struct usb_sn9c20x *dev, } break; case V4L2_CID_EXPOSURE_AUTO: - if (dev->camera.set_auto_exposure) { - dev->vsettings.auto_exposure = value; + dev->vsettings.auto_exposure = value; + ret = 0; + if (dev->camera.set_auto_exposure) ret = dev->camera.set_auto_exposure(dev); - } break; } return ret; diff --git a/sn9c20x-dev.c b/sn9c20x-dev.c index f73b0ee..5b9fd8e 100644 --- a/sn9c20x-dev.c +++ b/sn9c20x-dev.c @@ -129,8 +129,8 @@ int sn9c20x_initialize_sensor(struct usb_sn9c20x *dev) case SOI968_SENSOR: sn9c20x_write_i2c_array(dev, soi968_init, 0); dev->camera.set_exposure = soi968_set_exposure; + dev->camera.set_auto_exposure = soi968_set_autoexposure; dev->camera.set_gain = soi968_set_gain; - dev->camera.set_auto_exposure = ov_set_autoexposure; dev->camera.set_auto_gain = ov_set_autogain; dev->camera.button_detect = soi968_button_detect; dev->camera.hstart = 60; @@ -149,7 +149,6 @@ int sn9c20x_initialize_sensor(struct usb_sn9c20x *dev) break; case OV9655_SENSOR: sn9c20x_write_i2c_array(dev, ov9655_init, 0); - dev->camera.set_auto_exposure = ov_set_autoexposure; dev->camera.set_exposure = ov_set_exposure; dev->camera.set_auto_gain = ov_set_autogain; dev->camera.hstart = 0; @@ -158,7 +157,6 @@ int sn9c20x_initialize_sensor(struct usb_sn9c20x *dev) break; case OV7670_SENSOR: sn9c20x_write_i2c_array(dev, ov7670_init, 0); - dev->camera.set_auto_exposure = ov_set_autoexposure; dev->camera.set_exposure = ov_set_exposure; dev->camera.set_auto_gain = ov_set_autogain; dev->camera.flip_detect = ov7670_flip_detect; diff --git a/sn9c20x-usb.c b/sn9c20x-usb.c index 17e4561..713e972 100644 --- a/sn9c20x-usb.c +++ b/sn9c20x-usb.c @@ -513,7 +513,7 @@ void usb_sn9c20x_assemble_video(struct usb_sn9c20x *dev, yavg += ((header[36] >> 4) & 3)|(header[30] << 2)|(header[29] << 10); yavg += ((header[36] >> 6) & 3)|(header[32] << 2)|(header[31] << 10); yavg += ((header[44] >> 4) & 3)|(header[34] << 2)|(header[33] << 10); - UDIA_INFO("AVGY Total: %d (%d)\n", yavg, yavg >> 9); + UDIA_DEBUG("AVGY Total: %d (%d)\n", yavg, yavg >> 9); yavg >>= 9; atomic_set(&dev->camera.yavg, yavg); -- 2.11.4.GIT