drivers/media/platform/rockchip/rkcif/rkcif-dev.c

Source file repositories/reference/linux-study-clean/drivers/media/platform/rockchip/rkcif/rkcif-dev.c

File Facts

System
Linux kernel
Corpus path
drivers/media/platform/rockchip/rkcif/rkcif-dev.c
Extension
.c
Size
7815 bytes
Lines
322
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.

Dependency Surface

Detected Declarations

Annotated Snippet

// SPDX-License-Identifier: GPL-2.0
/*
 * Rockchip Camera Interface (CIF) Driver
 *
 * Copyright (C) 2018 Rockchip Electronics Co., Ltd.
 * Copyright (C) 2020 Maxime Chevallier <maxime.chevallier@bootlin.com>
 * Copyright (C) 2023 Mehdi Djait <mehdi.djait@bootlin.com>
 * Copyright (C) 2025 Michael Riesch <michael.riesch@wolfvision.net>
 * Copyright (C) 2025 Collabora, Ltd.
 */

#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
#include <linux/mfd/syscon.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_graph.h>
#include <linux/of_platform.h>
#include <linux/pm_runtime.h>
#include <linux/reset.h>

#include <media/v4l2-fwnode.h>
#include <media/v4l2-mc.h>

#include "rkcif-capture-dvp.h"
#include "rkcif-capture-mipi.h"
#include "rkcif-common.h"

static const char *const px30_vip_clks[] = {
	"aclk",
	"hclk",
	"pclk",
};

static const struct rkcif_match_data px30_vip_match_data = {
	.clks = px30_vip_clks,
	.clks_num = ARRAY_SIZE(px30_vip_clks),
	.dvp = &rkcif_px30_vip_dvp_match_data,
};

static const char *const rk3568_vicap_clks[] = {
	"aclk",
	"hclk",
	"dclk",
	"iclk",
};

static const struct rkcif_match_data rk3568_vicap_match_data = {
	.clks = rk3568_vicap_clks,
	.clks_num = ARRAY_SIZE(rk3568_vicap_clks),
	.dvp = &rkcif_rk3568_vicap_dvp_match_data,
	.mipi = &rkcif_rk3568_vicap_mipi_match_data,
};

static const char *const rk3588_vicap_clks[] = {
	"aclk",
	"hclk",
	"dclk",
	"iclk",
	"iclk1",
};

static const struct rkcif_match_data rk3588_vicap_match_data = {
	.clks = rk3588_vicap_clks,
	.clks_num = ARRAY_SIZE(rk3588_vicap_clks),
	.mipi = &rkcif_rk3588_vicap_mipi_match_data,
};

static const struct of_device_id rkcif_plat_of_match[] = {
	{
		.compatible = "rockchip,px30-vip",
		.data = &px30_vip_match_data,
	},
	{
		.compatible = "rockchip,rk3568-vicap",
		.data = &rk3568_vicap_match_data,
	},
	{
		.compatible = "rockchip,rk3588-vicap",
		.data = &rk3588_vicap_match_data,
	},
	{}
};
MODULE_DEVICE_TABLE(of, rkcif_plat_of_match);

static int rkcif_register(struct rkcif_device *rkcif)
{
	int ret;

Annotation

Implementation Notes