drivers/soc/litex/litex_soc_ctrl.c

Source file repositories/reference/linux-study-clean/drivers/soc/litex/litex_soc_ctrl.c

File Facts

System
Linux kernel
Corpus path
drivers/soc/litex/litex_soc_ctrl.c
Extension
.c
Size
3416 bytes
Lines
128
Domain
Driver Families
Bucket
drivers/soc
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 litex_soc_ctrl_device {
	void __iomem *base;
};

static int litex_reset_handler(struct sys_off_data *data)
{
	struct litex_soc_ctrl_device *soc_ctrl_dev = data->cb_data;

	litex_write32(soc_ctrl_dev->base + RESET_REG_OFF, RESET_REG_VALUE);
	return NOTIFY_DONE;
}

static const struct of_device_id litex_soc_ctrl_of_match[] = {
	{.compatible = "litex,soc-controller"},
	{},
};
MODULE_DEVICE_TABLE(of, litex_soc_ctrl_of_match);

static int litex_soc_ctrl_probe(struct platform_device *pdev)
{
	struct litex_soc_ctrl_device *soc_ctrl_dev;
	int error;

	soc_ctrl_dev = devm_kzalloc(&pdev->dev, sizeof(*soc_ctrl_dev), GFP_KERNEL);
	if (!soc_ctrl_dev)
		return -ENOMEM;

	soc_ctrl_dev->base = devm_platform_ioremap_resource(pdev, 0);
	if (IS_ERR(soc_ctrl_dev->base))
		return PTR_ERR(soc_ctrl_dev->base);

	error = litex_check_csr_access(soc_ctrl_dev->base);
	if (error)
		return error;

	error = devm_register_restart_handler(&pdev->dev,
					      litex_reset_handler,
					      soc_ctrl_dev);
	if (error) {
		dev_warn(&pdev->dev, "cannot register restart handler: %d\n",
			 error);
	}

	return 0;
}

static struct platform_driver litex_soc_ctrl_driver = {
	.driver = {
		.name = "litex-soc-controller",
		.of_match_table = litex_soc_ctrl_of_match,
	},
	.probe = litex_soc_ctrl_probe,
};

module_platform_driver(litex_soc_ctrl_driver);
MODULE_DESCRIPTION("LiteX SoC Controller driver");
MODULE_AUTHOR("Antmicro <www.antmicro.com>");
MODULE_LICENSE("GPL v2");

Annotation

Implementation Notes