Lines Matching +full:uv +full:- +full:sensor
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /* stk-sensor.c: Driver for ov96xx sensor (used in some Syntek webcams)
4 * Copyright 2007-2008 Jaime Velasco Juan <jsagarribay@gmail.com>
11 * Copyright 2006-7 Jonathan Corbet <corbet@lwn.net>
16 /* Controlling the sensor via the STK1125 vendor specific control interface:
17 * The camera uses an OmniVision sensor and the stk1125 provides an
18 * SCCB(i2c)-USB bridge which let us program the sensor.
19 * In my case the sensor id is 0x9652, it can be read from sensor's register
21 * - read register #R:
27 * - write value V to register #R
38 #include "stk-webcam.h"
48 * when it is 0x00 or 0x01, we cannot talk to the sensor,
56 * sensor in multiple places, attempting a reset sequence.
110 #define COM7_RGB 0x04 /* bits 0 and 2 - RGB format */
121 #define REG_COM9 0x14 /* Control 9 - gain ceiling */
149 #define TSLB_YLAST 0x04 /* UYVY or VYUY - see com13 */
161 #define COM13_UVSAT 0x40 /* UV saturation auto adjustment */
163 #define COM13_UVSWAP 0x01 /* V before U - w/TSLB */
165 #define COM14_DCWEN 0x10 /* DCW/PCLK-scale enable */
177 #define COM17_AECWIN 0xc0 /* AEC window - must match COM4 */
184 * Order: v-red, v-green, v-blue, u-red, u-green, u-blue
186 * They are nine-bit signed quantities, with the sign bit
187 * stored in 0x58. Sign for v-red is bit 0, and up from there.
277 while (rv->reg != 0xff || rv->val != 0xff) { in stk_sensor_write_regvals()
278 ret = stk_sensor_outb(dev, rv->reg, rv->val); in stk_sensor_write_regvals()
354 /* Probe the I2C bus and initialise the sensor chip */
363 pr_err("Sensor resetting failed\n"); in stk_sensor_init()
364 return -ENODEV; in stk_sensor_init()
370 pr_err("Strange error reading sensor ID\n"); in stk_sensor_init()
371 return -ENODEV; in stk_sensor_init()
374 pr_err("Huh? you don't have a sensor from ovt\n"); in stk_sensor_init()
375 return -ENODEV; in stk_sensor_init()
379 pr_err("Could not read sensor model\n"); in stk_sensor_init()
380 return -ENODEV; in stk_sensor_init()
384 pr_info("OmniVision sensor detected, id %02X%02X at address %x\n", in stk_sensor_init()
494 * We setup the sensor to output dummy lines in low-res modes, in stk_sensor_configure()
501 switch (dev->vsettings.mode) { in stk_sensor_configure()
518 pr_err("Unsupported mode %d\n", dev->vsettings.mode); in stk_sensor_configure()
519 return -EFAULT; in stk_sensor_configure()
521 switch (dev->vsettings.palette) { in stk_sensor_configure()
544 return -EFAULT; in stk_sensor_configure()
546 /*FIXME sometimes the sensor go to a bad state in stk_sensor_configure()
551 flip = (dev->vsettings.vflip?MVFP_FLIP:0) in stk_sensor_configure()
552 | (dev->vsettings.hflip?MVFP_MIRROR:0); in stk_sensor_configure()
554 if (dev->vsettings.palette == V4L2_PIX_FMT_SBGGR8 in stk_sensor_configure()
555 && !dev->vsettings.vflip) in stk_sensor_configure()
560 switch (dev->vsettings.mode) { in stk_sensor_configure()
569 /*FIXME These settings seem ignored by the sensor in stk_sensor_configure()
582 return -EINVAL; in stk_sensor_set_brightness()
583 stk_sensor_outb(dev, REG_AEB, max(0x00, br - 6)); in stk_sensor_set_brightness()