drivers/media/platform/samsung/exynos-gsc/gsc-regs.c
Source file repositories/reference/linux-study-clean/drivers/media/platform/samsung/exynos-gsc/gsc-regs.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/media/platform/samsung/exynos-gsc/gsc-regs.c- Extension
.c- Size
- 10196 bytes
- Lines
- 427
- 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
linux/io.hlinux/delay.hgsc-core.h
Detected Declarations
function Copyrightfunction gsc_wait_resetfunction gsc_hw_set_frm_done_irq_maskfunction gsc_hw_set_gsc_irq_enablefunction gsc_hw_set_input_buf_maskingfunction gsc_hw_set_output_buf_maskingfunction gsc_hw_set_input_addrfunction gsc_hw_set_output_addrfunction gsc_hw_set_input_pathfunction gsc_hw_set_in_sizefunction gsc_hw_set_in_image_rgbfunction gsc_hw_set_in_image_formatfunction gsc_hw_set_output_pathfunction gsc_hw_set_out_sizefunction gsc_hw_set_out_image_rgbfunction gsc_hw_set_out_image_formatfunction gsc_hw_set_prescalerfunction gsc_hw_set_mainscalerfunction gsc_hw_set_rotationfunction gsc_hw_set_global_alphafunction gsc_hw_set_sfr_update
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (c) 2011 - 2012 Samsung Electronics Co., Ltd.
* http://www.samsung.com
*
* Samsung EXYNOS5 SoC series G-Scaler driver
*/
#include <linux/io.h>
#include <linux/delay.h>
#include "gsc-core.h"
void gsc_hw_set_sw_reset(struct gsc_dev *dev)
{
writel(GSC_SW_RESET_SRESET, dev->regs + GSC_SW_RESET);
}
int gsc_wait_reset(struct gsc_dev *dev)
{
unsigned long end = jiffies + msecs_to_jiffies(50);
u32 cfg;
while (time_before(jiffies, end)) {
cfg = readl(dev->regs + GSC_SW_RESET);
if (!cfg)
return 0;
usleep_range(10, 20);
}
return -EBUSY;
}
void gsc_hw_set_frm_done_irq_mask(struct gsc_dev *dev, bool mask)
{
u32 cfg;
cfg = readl(dev->regs + GSC_IRQ);
if (mask)
cfg |= GSC_IRQ_FRMDONE_MASK;
else
cfg &= ~GSC_IRQ_FRMDONE_MASK;
writel(cfg, dev->regs + GSC_IRQ);
}
void gsc_hw_set_gsc_irq_enable(struct gsc_dev *dev, bool mask)
{
u32 cfg;
cfg = readl(dev->regs + GSC_IRQ);
if (mask)
cfg |= GSC_IRQ_ENABLE;
else
cfg &= ~GSC_IRQ_ENABLE;
writel(cfg, dev->regs + GSC_IRQ);
}
void gsc_hw_set_input_buf_masking(struct gsc_dev *dev, u32 shift,
bool enable)
{
u32 cfg = readl(dev->regs + GSC_IN_BASE_ADDR_Y_MASK);
u32 mask = 1 << shift;
cfg &= ~mask;
cfg |= enable << shift;
writel(cfg, dev->regs + GSC_IN_BASE_ADDR_Y_MASK);
writel(cfg, dev->regs + GSC_IN_BASE_ADDR_CB_MASK);
writel(cfg, dev->regs + GSC_IN_BASE_ADDR_CR_MASK);
}
void gsc_hw_set_output_buf_masking(struct gsc_dev *dev, u32 shift,
bool enable)
{
u32 cfg = readl(dev->regs + GSC_OUT_BASE_ADDR_Y_MASK);
u32 mask = 1 << shift;
cfg &= ~mask;
cfg |= enable << shift;
writel(cfg, dev->regs + GSC_OUT_BASE_ADDR_Y_MASK);
writel(cfg, dev->regs + GSC_OUT_BASE_ADDR_CB_MASK);
writel(cfg, dev->regs + GSC_OUT_BASE_ADDR_CR_MASK);
}
void gsc_hw_set_input_addr(struct gsc_dev *dev, struct gsc_addr *addr,
int index)
{
pr_debug("src_buf[%d]: %pad, cb: %pad, cr: %pad", index,
&addr->y, &addr->cb, &addr->cr);
Annotation
- Immediate include surface: `linux/io.h`, `linux/delay.h`, `gsc-core.h`.
- Detected declarations: `function Copyright`, `function gsc_wait_reset`, `function gsc_hw_set_frm_done_irq_mask`, `function gsc_hw_set_gsc_irq_enable`, `function gsc_hw_set_input_buf_masking`, `function gsc_hw_set_output_buf_masking`, `function gsc_hw_set_input_addr`, `function gsc_hw_set_output_addr`, `function gsc_hw_set_input_path`, `function gsc_hw_set_in_size`.
- 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.