// SPDX-License-Identifier: GPL-2.0 /* * Driver for Sophgo CV1800 series SoC RTC subsystem * * The RTC module comprises a 32kHz oscillator, Power-on-Reset (PoR) sub-module, * HW state machine to control chip power-on, power-off and reset. Furthermore, * the 8051 subsystem is located within RTCSYS including associated SRAM block. * * Copyright (C) 2025 Alexander Sverdlin * */ #include #include #include #include static struct resource cv1800_rtcsys_irq_resources[] = { DEFINE_RES_IRQ_NAMED(0, "alarm"), }; static const struct mfd_cell cv1800_rtcsys_subdev[] = { { .name = "cv1800b-rtc", .num_resources = 1, .resources = &cv1800_rtcsys_irq_resources[0], }, }; static int cv1800_rtcsys_probe(struct platform_device *pdev) { int irq; irq = platform_get_irq_byname(pdev, "alarm"); if (irq < 0) return irq; cv1800_rtcsys_irq_resources[0].start = irq; cv1800_rtcsys_irq_resources[0].end = irq; return devm_mfd_add_devices(&pdev->dev, PLATFORM_DEVID_AUTO, cv1800_rtcsys_subdev, ARRAY_SIZE(cv1800_rtcsys_subdev), NULL, 0, NULL); } static const struct of_device_id cv1800_rtcsys_of_match[] = { { .compatible = "sophgo,cv1800b-rtc" }, { /* sentinel */ } }; MODULE_DEVICE_TABLE(of, cv1800_rtcsys_of_match); static struct platform_driver cv1800_rtcsys_mfd = { .probe = cv1800_rtcsys_probe, .driver = { .name = "cv1800_rtcsys", .of_match_table = cv1800_rtcsys_of_match, }, }; module_platform_driver(cv1800_rtcsys_mfd); MODULE_AUTHOR("Alexander Sverdlin "); MODULE_DESCRIPTION("Sophgo CV1800 series SoC RTC subsystem driver"); MODULE_LICENSE("GPL");