drivers/media/platform/synopsys/dw-mipi-csi2rx.c
Source file repositories/reference/linux-study-clean/drivers/media/platform/synopsys/dw-mipi-csi2rx.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/media/platform/synopsys/dw-mipi-csi2rx.c- Extension
.c- Size
- 27561 bytes
- Lines
- 1064
- 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/bitfield.hlinux/clk.hlinux/delay.hlinux/io.hlinux/iopoll.hlinux/module.hlinux/of.hlinux/phy/phy.hlinux/platform_device.hlinux/pm_runtime.hlinux/property.hlinux/reset.hmedia/mipi-csi2.hmedia/v4l2-ctrls.hmedia/v4l2-fwnode.hmedia/v4l2-mc.hmedia/v4l2-subdev.h
Detected Declarations
struct dw_mipi_csi2rx_devicestruct dw_mipi_csi2rx_drvdatastruct dw_mipi_csi2rx_formatstruct dw_mipi_csi2rx_deviceenum dw_mipi_csi2rx_regs_indexfunction dw_mipi_csi2rx_has_regfunction dw_mipi_csi2rx_get_regaddrfunction dw_mipi_csi2rx_writefunction dw_mipi_csi2rx_readfunction dw_mipi_csi2rx_find_formatfunction dw_mipi_csi2rx_startfunction dw_mipi_csi2rx_stopfunction dw_mipi_csi2rx_enum_mbus_codefunction dw_mipi_csi2rx_set_fmtfunction dw_mipi_csi2rx_set_routingfunction dw_mipi_csi2rx_enable_streamsfunction dw_mipi_csi2rx_disable_streamsfunction dw_mipi_csi2rx_get_frame_descfunction dw_mipi_csi2rx_init_statefunction dw_mipi_csi2rx_notifier_boundfunction dw_mipi_csi2rx_register_notifierfunction dw_mipi_csi2rx_registerfunction dw_mipi_csi2rx_unregisterfunction imx93_csi2rx_dphy_assert_resetfunction imx93_csi2rx_dphy_deassert_resetfunction imx93_csi2rx_dphy_ipi_enablefunction imx93_csi2rx_wait_for_phy_stopstatefunction dw_mipi_csi2rx_probefunction dw_mipi_csi2rx_removefunction dw_mipi_csi2rx_runtime_suspendfunction dw_mipi_csi2rx_runtime_resume
Annotated Snippet
struct dw_mipi_csi2rx_drvdata {
const u32 *regs;
void (*dphy_assert_reset)(struct dw_mipi_csi2rx_device *csi2);
void (*dphy_deassert_reset)(struct dw_mipi_csi2rx_device *csi2);
void (*ipi_enable)(struct dw_mipi_csi2rx_device *csi2);
int (*wait_for_phy_stopstate)(struct dw_mipi_csi2rx_device *csi2);
};
struct dw_mipi_csi2rx_format {
u32 code;
u8 depth;
u8 csi_dt;
};
struct dw_mipi_csi2rx_device {
struct device *dev;
void __iomem *base_addr;
struct clk_bulk_data *clks;
unsigned int clks_num;
struct phy *phy;
struct reset_control *reset;
const struct dw_mipi_csi2rx_format *formats;
unsigned int formats_num;
struct media_pad pads[DW_MIPI_CSI2RX_PAD_MAX];
struct v4l2_async_notifier notifier;
struct v4l2_subdev sd;
enum v4l2_mbus_type bus_type;
u32 lanes_num;
u64 enabled_streams;
const struct dw_mipi_csi2rx_drvdata *drvdata;
};
static const u32 rk3568_regs[DW_MIPI_CSI2RX_MAX] = {
[DW_MIPI_CSI2RX_N_LANES] = DW_REG(0x4),
[DW_MIPI_CSI2RX_RESETN] = DW_REG(0x10),
[DW_MIPI_CSI2RX_PHY_STATE] = DW_REG(0x14),
[DW_MIPI_CSI2RX_ERR1] = DW_REG(0x20),
[DW_MIPI_CSI2RX_ERR2] = DW_REG(0x24),
[DW_MIPI_CSI2RX_MSK1] = DW_REG(0x28),
[DW_MIPI_CSI2RX_MSK2] = DW_REG(0x2c),
[DW_MIPI_CSI2RX_CONTROL] = DW_REG(0x40),
};
static const struct dw_mipi_csi2rx_drvdata rk3568_drvdata = {
.regs = rk3568_regs,
};
static const u32 imx93_regs[DW_MIPI_CSI2RX_MAX] = {
[DW_MIPI_CSI2RX_N_LANES] = DW_REG(0x4),
[DW_MIPI_CSI2RX_RESETN] = DW_REG(0x8),
[DW_MIPI_CSI2RX_PHY_SHUTDOWNZ] = DW_REG(0x40),
[DW_MIPI_CSI2RX_DPHY_RSTZ] = DW_REG(0x44),
[DW_MIPI_CSI2RX_PHY_STATE] = DW_REG(0x48),
[DW_MIPI_CSI2RX_PHY_STOPSTATE] = DW_REG(0x4c),
[DW_MIPI_CSI2RX_PHY_TST_CTRL0] = DW_REG(0x50),
[DW_MIPI_CSI2RX_PHY_TST_CTRL1] = DW_REG(0x54),
[DW_MIPI_CSI2RX_IPI_MODE] = DW_REG(0x80),
[DW_MIPI_CSI2RX_IPI_VCID] = DW_REG(0x84),
[DW_MIPI_CSI2RX_IPI_DATATYPE] = DW_REG(0x88),
[DW_MIPI_CSI2RX_IPI_MEM_FLUSH] = DW_REG(0x8c),
[DW_MIPI_CSI2RX_IPI_SOFTRSTN] = DW_REG(0xa0),
};
static const u32 imx95_regs[DW_MIPI_CSI2RX_MAX] = {
[DW_MIPI_CSI2RX_N_LANES] = DW_REG(0x4),
[DW_MIPI_CSI2RX_RESETN] = DW_REG(0x8),
[DW_MIPI_CSI2RX_PHY_SHUTDOWNZ] = DW_REG(0x40),
[DW_MIPI_CSI2RX_DPHY_RSTZ] = DW_REG(0x44),
[DW_MIPI_CSI2RX_PHY_STATE] = DW_REG(0x48),
[DW_MIPI_CSI2RX_PHY_STOPSTATE] = DW_REG(0x4c),
[DW_MIPI_CSI2RX_PHY_TST_CTRL0] = DW_REG(0x50),
[DW_MIPI_CSI2RX_PHY_TST_CTRL1] = DW_REG(0x54),
};
static const struct v4l2_mbus_framefmt default_format = {
.width = 3840,
.height = 2160,
.code = MEDIA_BUS_FMT_SRGGB10_1X10,
.field = V4L2_FIELD_NONE,
.colorspace = V4L2_COLORSPACE_RAW,
.ycbcr_enc = V4L2_YCBCR_ENC_601,
.quantization = V4L2_QUANTIZATION_FULL_RANGE,
.xfer_func = V4L2_XFER_FUNC_NONE,
};
Annotation
- Immediate include surface: `linux/bitfield.h`, `linux/clk.h`, `linux/delay.h`, `linux/io.h`, `linux/iopoll.h`, `linux/module.h`, `linux/of.h`, `linux/phy/phy.h`.
- Detected declarations: `struct dw_mipi_csi2rx_device`, `struct dw_mipi_csi2rx_drvdata`, `struct dw_mipi_csi2rx_format`, `struct dw_mipi_csi2rx_device`, `enum dw_mipi_csi2rx_regs_index`, `function dw_mipi_csi2rx_has_reg`, `function dw_mipi_csi2rx_get_regaddr`, `function dw_mipi_csi2rx_write`, `function dw_mipi_csi2rx_read`, `function dw_mipi_csi2rx_find_format`.
- 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.