drivers/media/test-drivers/vivid/vivid-osd.c
Source file repositories/reference/linux-study-clean/drivers/media/test-drivers/vivid/vivid-osd.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/media/test-drivers/vivid/vivid-osd.c- Extension
.c- Size
- 9999 bytes
- Lines
- 402
- 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.
- Touches user memory; correctness depends on fault-safe copying and privilege boundary handling.
- 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/errno.hlinux/kernel.hlinux/init.hlinux/sched.hlinux/slab.hlinux/font.hlinux/mutex.hlinux/videodev2.hlinux/kthread.hlinux/freezer.hlinux/fb.hmedia/videobuf2-vmalloc.hmedia/v4l2-device.hmedia/v4l2-ioctl.hmedia/v4l2-ctrls.hmedia/v4l2-fh.hmedia/v4l2-event.hmedia/v4l2-common.hvivid-core.hvivid-osd.h
Detected Declarations
function vivid_fb_green_bitsfunction vivid_fb_clearfunction vivid_fb_ioctlfunction vivid_fb_set_varfunction vivid_fb_get_fixfunction _vivid_fb_check_varfunction vivid_fb_check_varfunction vivid_fb_pan_displayfunction vivid_fb_set_parfunction vivid_fb_setcolregfunction vivid_fb_blankfunction vivid_fb_init_vidmodefunction vivid_fb_release_buffersfunction vivid_fb_initfunction vivid_fb_deinit
Annotated Snippet
switch (info->var.green.length) {
case 6:
color = (red & 0xf800) |
((green & 0xfc00) >> 5) |
((blue & 0xf800) >> 11);
break;
case 5:
color = ((red & 0xf800) >> 1) |
((green & 0xf800) >> 6) |
((blue & 0xf800) >> 11) |
(transp ? 0x8000 : 0);
break;
}
}
palette[regno] = color;
return 0;
}
/* We don't really support blanking. All this does is enable or
disable the OSD. */
static int vivid_fb_blank(int blank_mode, struct fb_info *info)
{
struct vivid_dev *dev = (struct vivid_dev *)info->par;
dprintk(dev, 1, "Set blanking mode : %d\n", blank_mode);
switch (blank_mode) {
case FB_BLANK_UNBLANK:
break;
case FB_BLANK_NORMAL:
case FB_BLANK_HSYNC_SUSPEND:
case FB_BLANK_VSYNC_SUSPEND:
case FB_BLANK_POWERDOWN:
break;
}
return 0;
}
static const struct fb_ops vivid_fb_ops = {
.owner = THIS_MODULE,
FB_DEFAULT_IOMEM_OPS,
.fb_check_var = vivid_fb_check_var,
.fb_set_par = vivid_fb_set_par,
.fb_setcolreg = vivid_fb_setcolreg,
.fb_cursor = NULL,
.fb_ioctl = vivid_fb_ioctl,
.fb_pan_display = vivid_fb_pan_display,
.fb_blank = vivid_fb_blank,
};
/* Initialization */
/* Setup our initial video mode */
static int vivid_fb_init_vidmode(struct vivid_dev *dev)
{
struct v4l2_rect start_window;
/* Color mode */
dev->bits_per_pixel = 16;
dev->bytes_per_pixel = dev->bits_per_pixel / 8;
start_window.width = MAX_OSD_WIDTH;
start_window.left = 0;
dev->display_byte_stride = start_window.width * dev->bytes_per_pixel;
/* Vertical size & position */
start_window.height = MAX_OSD_HEIGHT;
start_window.top = 0;
dev->display_width = start_window.width;
dev->display_height = start_window.height;
/* Generate a valid fb_var_screeninfo */
dev->fb_defined.xres = dev->display_width;
dev->fb_defined.yres = dev->display_height;
dev->fb_defined.xres_virtual = dev->display_width;
dev->fb_defined.yres_virtual = dev->display_height;
dev->fb_defined.bits_per_pixel = dev->bits_per_pixel;
dev->fb_defined.vmode = FB_VMODE_NONINTERLACED;
dev->fb_defined.left_margin = start_window.left + 1;
dev->fb_defined.upper_margin = start_window.top + 1;
dev->fb_defined.accel_flags = FB_ACCEL_NONE;
dev->fb_defined.nonstd = 0;
/* set default to 1:5:5:5 */
dev->fb_defined.green.length = 5;
Annotation
- Immediate include surface: `linux/module.h`, `linux/errno.h`, `linux/kernel.h`, `linux/init.h`, `linux/sched.h`, `linux/slab.h`, `linux/font.h`, `linux/mutex.h`.
- Detected declarations: `function vivid_fb_green_bits`, `function vivid_fb_clear`, `function vivid_fb_ioctl`, `function vivid_fb_set_var`, `function vivid_fb_get_fix`, `function _vivid_fb_check_var`, `function vivid_fb_check_var`, `function vivid_fb_pan_display`, `function vivid_fb_set_par`, `function vivid_fb_setcolreg`.
- Atlas domain: Driver Families / drivers/media.
- Implementation status: source implementation candidate.
- This snippet crosses the user/kernel memory boundary; validate fault handling and access checks before translating the pattern.
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.