drivers/staging/media/atomisp/pci/atomisp_csi2.c
Source file repositories/reference/linux-study-clean/drivers/staging/media/atomisp/pci/atomisp_csi2.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/staging/media/atomisp/pci/atomisp_csi2.c- Extension
.c- Size
- 10137 bytes
- Lines
- 360
- Domain
- Driver Families
- Bucket
- drivers/staging
- 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
media/v4l2-event.hmedia/v4l2-mediabus.hatomisp_cmd.hatomisp_internal.hatomisp-regs.h
Detected Declarations
function Copyrightfunction csi2_enum_mbus_codefunction csi2_get_formatfunction atomisp_csi2_set_ffmtfunction csi2_set_formatfunction mipi_csi2_init_entitiesfunction atomisp_mipi_csi2_unregister_entitiesfunction atomisp_mipi_csi2_register_entitiesfunction atomisp_csi2_configure_calcfunction atomisp_csi2_configure_isp2401function atomisp_csi2_configurefunction atomisp_mipi_csi2_cleanup
Annotated Snippet
if (i == code->index) {
code->code = ic->code;
return 0;
}
i++, ic++;
}
return -EINVAL;
}
/*
* csi2_get_format - Handle get format by pads subdev method
* @sd : pointer to v4l2 subdev structure
* @fh : V4L2 subdev file handle
* @pad: pad num
* @fmt: pointer to v4l2 format structure
* return -EINVAL or zero on success
*/
static int csi2_get_format(struct v4l2_subdev *sd,
struct v4l2_subdev_state *sd_state,
struct v4l2_subdev_format *fmt)
{
struct atomisp_mipi_csi2_device *csi2 = v4l2_get_subdevdata(sd);
struct v4l2_mbus_framefmt *format;
format = __csi2_get_format(csi2, sd_state, fmt->which, fmt->pad);
fmt->format = *format;
return 0;
}
int atomisp_csi2_set_ffmt(struct v4l2_subdev *sd,
struct v4l2_subdev_state *sd_state,
unsigned int which, uint16_t pad,
struct v4l2_mbus_framefmt *ffmt)
{
struct atomisp_mipi_csi2_device *csi2 = v4l2_get_subdevdata(sd);
struct v4l2_mbus_framefmt *actual_ffmt = __csi2_get_format(csi2,
sd_state,
which, pad);
if (pad == CSI2_PAD_SINK) {
const struct atomisp_in_fmt_conv *ic;
struct v4l2_mbus_framefmt tmp_ffmt;
ic = atomisp_find_in_fmt_conv(ffmt->code);
if (ic)
actual_ffmt->code = ic->code;
else
actual_ffmt->code = atomisp_in_fmt_conv[0].code;
actual_ffmt->width = clamp_t(u32, ffmt->width,
ATOM_ISP_MIN_WIDTH,
ATOM_ISP_MAX_WIDTH);
actual_ffmt->height = clamp_t(u32, ffmt->height,
ATOM_ISP_MIN_HEIGHT,
ATOM_ISP_MAX_HEIGHT);
actual_ffmt->field = ffmt->field;
tmp_ffmt = *ffmt = *actual_ffmt;
/* Always use V4L2_FIELD_ANY to match the ISP sink pad */
tmp_ffmt.field = V4L2_FIELD_ANY;
return atomisp_csi2_set_ffmt(sd, sd_state, which,
CSI2_PAD_SOURCE,
&tmp_ffmt);
}
/* FIXME: DPCM decompression */
*actual_ffmt = *ffmt = *__csi2_get_format(csi2, sd_state, which,
CSI2_PAD_SINK);
return 0;
}
/*
* csi2_set_format - Handle set format by pads subdev method
* @sd : pointer to v4l2 subdev structure
* @fh : V4L2 subdev file handle
* @pad: pad num
* @fmt: pointer to v4l2 format structure
* return -EINVAL or zero on success
*/
static int csi2_set_format(struct v4l2_subdev *sd,
struct v4l2_subdev_state *sd_state,
struct v4l2_subdev_format *fmt)
{
return atomisp_csi2_set_ffmt(sd, sd_state, fmt->which, fmt->pad,
&fmt->format);
Annotation
- Immediate include surface: `media/v4l2-event.h`, `media/v4l2-mediabus.h`, `atomisp_cmd.h`, `atomisp_internal.h`, `atomisp-regs.h`.
- Detected declarations: `function Copyright`, `function csi2_enum_mbus_code`, `function csi2_get_format`, `function atomisp_csi2_set_ffmt`, `function csi2_set_format`, `function mipi_csi2_init_entities`, `function atomisp_mipi_csi2_unregister_entities`, `function atomisp_mipi_csi2_register_entities`, `function atomisp_csi2_configure_calc`, `function atomisp_csi2_configure_isp2401`.
- Atlas domain: Driver Families / drivers/staging.
- 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.