drivers/clk/rockchip/clk-rk3399.c

Source file repositories/reference/linux-study-clean/drivers/clk/rockchip/clk-rk3399.c

File Facts

System
Linux kernel
Corpus path
drivers/clk/rockchip/clk-rk3399.c
Extension
.c
Size
71525 bytes
Lines
1660
Domain
Driver Families
Bucket
drivers/clk
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

struct clk_rk3399_inits {
	void (*inits)(struct device_node *np);
};

static const struct clk_rk3399_inits clk_rk3399_pmucru_init = {
	.inits = rk3399_pmu_clk_init,
};

static const struct clk_rk3399_inits clk_rk3399_cru_init = {
	.inits = rk3399_clk_init,
};

static const struct of_device_id clk_rk3399_match_table[] = {
	{
		.compatible = "rockchip,rk3399-cru",
		.data = &clk_rk3399_cru_init,
	},  {
		.compatible = "rockchip,rk3399-pmucru",
		.data = &clk_rk3399_pmucru_init,
	},
	{ }
};

static int __init clk_rk3399_probe(struct platform_device *pdev)
{
	struct device_node *np = pdev->dev.of_node;
	const struct clk_rk3399_inits *init_data;

	init_data = device_get_match_data(&pdev->dev);
	if (init_data->inits)
		init_data->inits(np);

	return 0;
}

static struct platform_driver clk_rk3399_driver = {
	.driver		= {
		.name	= "clk-rk3399",
		.of_match_table = clk_rk3399_match_table,
		.suppress_bind_attrs = true,
	},
};
builtin_platform_driver_probe(clk_rk3399_driver, clk_rk3399_probe);

Annotation

Implementation Notes