drivers/media/platform/nxp/imx8-isi/imx8-isi-gasket.c
Source file repositories/reference/linux-study-clean/drivers/media/platform/nxp/imx8-isi/imx8-isi-gasket.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/media/platform/nxp/imx8-isi/imx8-isi-gasket.c- Extension
.c- Size
- 2688 bytes
- Lines
- 98
- 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/bitfield.hlinux/bits.hlinux/regmap.hmedia/mipi-csi2.himx8-isi-core.h
Detected Declarations
function mxc_imx8_gasket_enablefunction mxc_imx8_gasket_disablefunction mxc_imx93_gasket_enablefunction mxc_imx93_gasket_disable
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0
/*
* Copyright 2019-2023 NXP
*/
#include <linux/bitfield.h>
#include <linux/bits.h>
#include <linux/regmap.h>
#include <media/mipi-csi2.h>
#include "imx8-isi-core.h"
/* -----------------------------------------------------------------------------
* i.MX8MN and i.MX8MP gasket
*/
#define GASKET_BASE(n) (0x0060 + (n) * 0x30)
#define GASKET_CTRL 0x0000
#define GASKET_CTRL_DATA_TYPE(dt) FIELD_PREP(GENMASK(13, 8), dt)
#define GASKET_CTRL_DUAL_COMP_ENABLE BIT(1)
#define GASKET_CTRL_ENABLE BIT(0)
#define GASKET_HSIZE 0x0004
#define GASKET_VSIZE 0x0008
static void mxc_imx8_gasket_enable(struct mxc_isi_dev *isi,
const struct v4l2_mbus_frame_desc *fd,
const struct v4l2_mbus_framefmt *fmt,
const unsigned int port)
{
u32 val;
regmap_write(isi->gasket, GASKET_BASE(port) + GASKET_HSIZE, fmt->width);
regmap_write(isi->gasket, GASKET_BASE(port) + GASKET_VSIZE, fmt->height);
val = GASKET_CTRL_DATA_TYPE(fd->entry[0].bus.csi2.dt);
if (fd->entry[0].bus.csi2.dt == MIPI_CSI2_DT_YUV422_8B)
val |= GASKET_CTRL_DUAL_COMP_ENABLE;
val |= GASKET_CTRL_ENABLE;
regmap_write(isi->gasket, GASKET_BASE(port) + GASKET_CTRL, val);
}
static void mxc_imx8_gasket_disable(struct mxc_isi_dev *isi,
const unsigned int port)
{
regmap_write(isi->gasket, GASKET_BASE(port) + GASKET_CTRL, 0);
}
const struct mxc_gasket_ops mxc_imx8_gasket_ops = {
.enable = mxc_imx8_gasket_enable,
.disable = mxc_imx8_gasket_disable,
};
/* -----------------------------------------------------------------------------
* i.MX93 gasket
*/
#define DISP_MIX_CAMERA_MUX 0x30
#define DISP_MIX_CAMERA_MUX_DATA_TYPE(x) FIELD_PREP(GENMASK(8, 3), x)
#define DISP_MIX_CAMERA_MUX_GASKET_ENABLE BIT(16)
#define DISP_MIX_CAMERA_MUX_GASKET_SOURCE_TYPE BIT(17)
static void mxc_imx93_gasket_enable(struct mxc_isi_dev *isi,
const struct v4l2_mbus_frame_desc *fd,
const struct v4l2_mbus_framefmt *fmt,
const unsigned int port)
{
u32 val;
val = DISP_MIX_CAMERA_MUX_DATA_TYPE(fd->entry[0].bus.csi2.dt);
val |= DISP_MIX_CAMERA_MUX_GASKET_ENABLE;
/*
* CAMERA MUX
* - [17]: Selects source input to gasket
* 0: Data from MIPI CSI
* 1: Data from parallel camera
*/
if (fd->type == V4L2_MBUS_FRAME_DESC_TYPE_PARALLEL)
val |= DISP_MIX_CAMERA_MUX_GASKET_SOURCE_TYPE;
regmap_write(isi->gasket, DISP_MIX_CAMERA_MUX, val);
}
static void mxc_imx93_gasket_disable(struct mxc_isi_dev *isi,
unsigned int port)
{
Annotation
- Immediate include surface: `linux/bitfield.h`, `linux/bits.h`, `linux/regmap.h`, `media/mipi-csi2.h`, `imx8-isi-core.h`.
- Detected declarations: `function mxc_imx8_gasket_enable`, `function mxc_imx8_gasket_disable`, `function mxc_imx93_gasket_enable`, `function mxc_imx93_gasket_disable`.
- 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.