drivers/media/i2c/tea6415c.c
Source file repositories/reference/linux-study-clean/drivers/media/i2c/tea6415c.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/media/i2c/tea6415c.c- Extension
.c- Size
- 3399 bytes
- Lines
- 159
- 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.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/module.hlinux/ioctl.hlinux/slab.hlinux/i2c.hmedia/v4l2-device.htea6415c.h
Detected Declarations
function tea6415c_s_routingfunction tea6415c_probefunction tea6415c_remove
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0-or-later
/*
tea6415c - i2c-driver for the tea6415c by SGS Thomson
Copyright (C) 1998-2003 Michael Hunold <michael@mihu.de>
Copyright (C) 2008 Hans Verkuil <hverkuil@kernel.org>
The tea6415c is a bus controlled video-matrix-switch
with 8 inputs and 6 outputs.
It is cascadable, i.e. it can be found at the addresses
0x86 and 0x06 on the i2c-bus.
For detailed information download the specifications directly
from SGS Thomson at http://www.st.com
*/
#include <linux/module.h>
#include <linux/ioctl.h>
#include <linux/slab.h>
#include <linux/i2c.h>
#include <media/v4l2-device.h>
#include "tea6415c.h"
MODULE_AUTHOR("Michael Hunold <michael@mihu.de>");
MODULE_DESCRIPTION("tea6415c driver");
MODULE_LICENSE("GPL");
static int debug;
module_param(debug, int, 0644);
MODULE_PARM_DESC(debug, "Debug level (0-1)");
/* makes a connection between the input-pin 'i' and the output-pin 'o' */
static int tea6415c_s_routing(struct v4l2_subdev *sd,
u32 i, u32 o, u32 config)
{
struct i2c_client *client = v4l2_get_subdevdata(sd);
u8 byte = 0;
int ret;
v4l2_dbg(1, debug, sd, "i=%d, o=%d\n", i, o);
/* check if the pins are valid */
if (0 == ((1 == i || 3 == i || 5 == i || 6 == i || 8 == i || 10 == i || 20 == i || 11 == i)
&& (18 == o || 17 == o || 16 == o || 15 == o || 14 == o || 13 == o)))
return -EINVAL;
/* to understand this, have a look at the tea6415c-specs (p.5) */
switch (o) {
case 18:
byte = 0x00;
break;
case 14:
byte = 0x20;
break;
case 16:
byte = 0x10;
break;
case 17:
byte = 0x08;
break;
case 15:
byte = 0x18;
break;
case 13:
byte = 0x28;
break;
}
switch (i) {
case 5:
byte |= 0x00;
break;
case 8:
byte |= 0x04;
break;
case 3:
byte |= 0x02;
break;
case 20:
byte |= 0x06;
break;
case 6:
byte |= 0x01;
break;
case 10:
byte |= 0x05;
Annotation
- Immediate include surface: `linux/module.h`, `linux/ioctl.h`, `linux/slab.h`, `linux/i2c.h`, `media/v4l2-device.h`, `tea6415c.h`.
- Detected declarations: `function tea6415c_s_routing`, `function tea6415c_probe`, `function tea6415c_remove`.
- 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.