drivers/media/usb/gspca/stv06xx/stv06xx_vv6410.c
Source file repositories/reference/linux-study-clean/drivers/media/usb/gspca/stv06xx/stv06xx_vv6410.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/media/usb/gspca/stv06xx/stv06xx_vv6410.c- Extension
.c- Size
- 6521 bytes
- Lines
- 266
- Domain
- Driver Families
- Bucket
- drivers/media
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
stv06xx_vv6410.h
Detected Declarations
function vv6410_s_ctrlfunction vv6410_probefunction vv6410_init_controlsfunction vv6410_initfunction vv6410_startfunction vv6410_stopfunction vv6410_dumpfunction vv6410_set_hflipfunction vv6410_set_vflipfunction vv6410_set_analog_gainfunction vv6410_set_exposure
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (c) 2001 Jean-Fredric Clere, Nikolas Zimmermann, Georg Acher
* Mark Cave-Ayland, Carlo E Prelz, Dick Streefland
* Copyright (c) 2002, 2003 Tuukka Toivonen
* Copyright (c) 2008 Erik Andrén
*
* P/N 861037: Sensor HDCS1000 ASIC STV0600
* P/N 861050-0010: Sensor HDCS1000 ASIC STV0600
* P/N 861050-0020: Sensor Photobit PB100 ASIC STV0600-1 - QuickCam Express
* P/N 861055: Sensor ST VV6410 ASIC STV0610 - LEGO cam
* P/N 861075-0040: Sensor HDCS1000 ASIC
* P/N 961179-0700: Sensor ST VV6410 ASIC STV0602 - Dexxa WebCam USB
* P/N 861040-0000: Sensor ST VV6410 ASIC STV0610 - QuickCam Web
*/
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include "stv06xx_vv6410.h"
static struct v4l2_pix_format vv6410_mode[] = {
{
356,
292,
V4L2_PIX_FMT_SGRBG8,
V4L2_FIELD_NONE,
.sizeimage = 356 * 292,
.bytesperline = 356,
.colorspace = V4L2_COLORSPACE_SRGB,
.priv = 0
}
};
static int vv6410_s_ctrl(struct v4l2_ctrl *ctrl)
{
struct gspca_dev *gspca_dev =
container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
int err = -EINVAL;
switch (ctrl->id) {
case V4L2_CID_HFLIP:
if (!gspca_dev->streaming)
return 0;
err = vv6410_set_hflip(gspca_dev, ctrl->val);
break;
case V4L2_CID_VFLIP:
if (!gspca_dev->streaming)
return 0;
err = vv6410_set_vflip(gspca_dev, ctrl->val);
break;
case V4L2_CID_GAIN:
err = vv6410_set_analog_gain(gspca_dev, ctrl->val);
break;
case V4L2_CID_EXPOSURE:
err = vv6410_set_exposure(gspca_dev, ctrl->val);
break;
}
return err;
}
static const struct v4l2_ctrl_ops vv6410_ctrl_ops = {
.s_ctrl = vv6410_s_ctrl,
};
static int vv6410_probe(struct sd *sd)
{
u16 data;
int err;
err = stv06xx_read_sensor(sd, VV6410_DEVICEH, &data);
if (err < 0)
return -ENODEV;
if (data != 0x19)
return -ENODEV;
pr_info("vv6410 sensor detected\n");
sd->gspca_dev.cam.cam_mode = vv6410_mode;
sd->gspca_dev.cam.nmodes = ARRAY_SIZE(vv6410_mode);
return 0;
}
static int vv6410_init_controls(struct sd *sd)
{
struct v4l2_ctrl_handler *hdl = &sd->gspca_dev.ctrl_handler;
v4l2_ctrl_handler_init(hdl, 2);
/* Disable the hardware VFLIP and HFLIP as we currently lack a
mechanism to adjust the image offset in such a way that
Annotation
- Immediate include surface: `stv06xx_vv6410.h`.
- Detected declarations: `function vv6410_s_ctrl`, `function vv6410_probe`, `function vv6410_init_controls`, `function vv6410_init`, `function vv6410_start`, `function vv6410_stop`, `function vv6410_dump`, `function vv6410_set_hflip`, `function vv6410_set_vflip`, `function vv6410_set_analog_gain`.
- Atlas domain: Driver Families / drivers/media.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.