drivers/gpu/drm/exynos/exynos_mixer.c
Source file repositories/reference/linux-study-clean/drivers/gpu/drm/exynos/exynos_mixer.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/gpu/drm/exynos/exynos_mixer.c- Extension
.c- Size
- 34839 bytes
- Lines
- 1341
- Domain
- Driver Families
- Bucket
- drivers/gpu
- 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.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Touches IRQ or DMA behavior; this matters for the representative real-device path.
- 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/clk.hlinux/component.hlinux/delay.hlinux/i2c.hlinux/interrupt.hlinux/irq.hlinux/kernel.hlinux/ktime.hlinux/of.hlinux/platform_device.hlinux/pm_runtime.hlinux/regulator/consumer.hlinux/spinlock.hlinux/wait.hdrm/drm_blend.hdrm/drm_edid.hdrm/drm_fourcc.hdrm/drm_framebuffer.hdrm/drm_print.hdrm/drm_vblank.hdrm/exynos_drm.hexynos_drm_crtc.hexynos_drm_drv.hexynos_drm_fb.hexynos_drm_plane.hregs-mixer.hregs-vp.h
Detected Declarations
struct mixer_contextstruct mixer_drv_dataenum mixer_version_idenum mixer_flag_bitsfunction vp_reg_readfunction vp_reg_writefunction vp_reg_writemaskfunction mixer_reg_readfunction mixer_reg_writefunction mixer_reg_writemaskfunction mixer_regs_dumpfunction vp_regs_dumpfunction vp_filter_setfunction vp_default_filterfunction mixer_cfg_gfx_blendfunction mixer_cfg_vp_blendfunction mixer_is_syncedfunction mixer_wait_for_syncfunction mixer_disable_syncfunction mixer_enable_syncfunction mixer_cfg_scanfunction mixer_cfg_rgb_fmtfunction mixer_cfg_layerfunction mixer_runfunction mixer_stopfunction mixer_commitfunction vp_video_bufferfunction mixer_graph_bufferfunction vp_win_resetfunction mixer_win_resetfunction mixer_irq_handlerfunction mixer_resources_initfunction vp_resources_initfunction mixer_initializefunction mixer_ctx_removefunction mixer_enable_vblankfunction mixer_disable_vblankfunction mixer_atomic_beginfunction mixer_update_planefunction mixer_disable_planefunction mixer_atomic_flushfunction mixer_atomic_enablefunction mixer_atomic_disablefunction mixer_mode_validfunction mixer_mode_fixupfunction mixer_bindfunction mixer_unbindfunction mixer_probe
Annotated Snippet
struct mixer_context {
struct platform_device *pdev;
struct device *dev;
struct drm_device *drm_dev;
void *dma_priv;
struct exynos_drm_crtc *crtc;
struct exynos_drm_plane planes[MIXER_WIN_NR];
unsigned long flags;
int irq;
void __iomem *mixer_regs;
void __iomem *vp_regs;
spinlock_t reg_slock;
struct clk *mixer;
struct clk *vp;
struct clk *hdmi;
struct clk *sclk_mixer;
struct clk *sclk_hdmi;
struct clk *mout_mixer;
enum mixer_version_id mxr_ver;
int scan_value;
};
struct mixer_drv_data {
enum mixer_version_id version;
bool is_vp_enabled;
bool has_sclk;
};
static const struct exynos_drm_plane_config plane_configs[MIXER_WIN_NR] = {
{
.zpos = 0,
.type = DRM_PLANE_TYPE_PRIMARY,
.pixel_formats = mixer_formats,
.num_pixel_formats = ARRAY_SIZE(mixer_formats),
.capabilities = EXYNOS_DRM_PLANE_CAP_DOUBLE |
EXYNOS_DRM_PLANE_CAP_ZPOS |
EXYNOS_DRM_PLANE_CAP_PIX_BLEND |
EXYNOS_DRM_PLANE_CAP_WIN_BLEND,
}, {
.zpos = 1,
.type = DRM_PLANE_TYPE_CURSOR,
.pixel_formats = mixer_formats,
.num_pixel_formats = ARRAY_SIZE(mixer_formats),
.capabilities = EXYNOS_DRM_PLANE_CAP_DOUBLE |
EXYNOS_DRM_PLANE_CAP_ZPOS |
EXYNOS_DRM_PLANE_CAP_PIX_BLEND |
EXYNOS_DRM_PLANE_CAP_WIN_BLEND,
}, {
.zpos = 2,
.type = DRM_PLANE_TYPE_OVERLAY,
.pixel_formats = vp_formats,
.num_pixel_formats = ARRAY_SIZE(vp_formats),
.capabilities = EXYNOS_DRM_PLANE_CAP_SCALE |
EXYNOS_DRM_PLANE_CAP_ZPOS |
EXYNOS_DRM_PLANE_CAP_TILE |
EXYNOS_DRM_PLANE_CAP_WIN_BLEND,
},
};
static const u8 filter_y_horiz_tap8[] = {
0, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 0, 0, 0,
0, 2, 4, 5, 6, 6, 6, 6,
6, 5, 5, 4, 3, 2, 1, 1,
0, -6, -12, -16, -18, -20, -21, -20,
-20, -18, -16, -13, -10, -8, -5, -2,
127, 126, 125, 121, 114, 107, 99, 89,
79, 68, 57, 46, 35, 25, 16, 8,
};
static const u8 filter_y_vert_tap4[] = {
0, -3, -6, -8, -8, -8, -8, -7,
-6, -5, -4, -3, -2, -1, -1, 0,
127, 126, 124, 118, 111, 102, 92, 81,
70, 59, 48, 37, 27, 19, 11, 5,
0, 5, 11, 19, 27, 37, 48, 59,
70, 81, 92, 102, 111, 118, 124, 126,
0, 0, -1, -1, -2, -3, -4, -5,
-6, -7, -8, -8, -8, -8, -6, -3,
};
static const u8 filter_cr_horiz_tap4[] = {
0, -3, -6, -8, -8, -8, -8, -7,
-6, -5, -4, -3, -2, -1, -1, 0,
127, 126, 124, 118, 111, 102, 92, 81,
70, 59, 48, 37, 27, 19, 11, 5,
};
static inline u32 vp_reg_read(struct mixer_context *ctx, u32 reg_id)
Annotation
- Immediate include surface: `linux/clk.h`, `linux/component.h`, `linux/delay.h`, `linux/i2c.h`, `linux/interrupt.h`, `linux/irq.h`, `linux/kernel.h`, `linux/ktime.h`.
- Detected declarations: `struct mixer_context`, `struct mixer_drv_data`, `enum mixer_version_id`, `enum mixer_flag_bits`, `function vp_reg_read`, `function vp_reg_write`, `function vp_reg_writemask`, `function mixer_reg_read`, `function mixer_reg_write`, `function mixer_reg_writemask`.
- Atlas domain: Driver Families / drivers/gpu.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
- IRQ or DMA behavior appears here, which is relevant to the selected PCIe/NVMe device path.
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.