18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci *  Registration of Cobalt RTC platform device.
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci *  Copyright (C) 2007  Yoichi Yuasa <yuasa@linux-mips.org>
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci#include <linux/errno.h>
88c2ecf20Sopenharmony_ci#include <linux/init.h>
98c2ecf20Sopenharmony_ci#include <linux/ioport.h>
108c2ecf20Sopenharmony_ci#include <linux/mc146818rtc.h>
118c2ecf20Sopenharmony_ci#include <linux/platform_device.h>
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_cistatic struct resource cobalt_rtc_resource[] __initdata = {
148c2ecf20Sopenharmony_ci	{
158c2ecf20Sopenharmony_ci		.start	= 0x70,
168c2ecf20Sopenharmony_ci		.end	= 0x77,
178c2ecf20Sopenharmony_ci		.flags	= IORESOURCE_IO,
188c2ecf20Sopenharmony_ci	},
198c2ecf20Sopenharmony_ci	{
208c2ecf20Sopenharmony_ci		.start	= RTC_IRQ,
218c2ecf20Sopenharmony_ci		.end	= RTC_IRQ,
228c2ecf20Sopenharmony_ci		.flags	= IORESOURCE_IRQ,
238c2ecf20Sopenharmony_ci	},
248c2ecf20Sopenharmony_ci};
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_cistatic __init int cobalt_rtc_add(void)
278c2ecf20Sopenharmony_ci{
288c2ecf20Sopenharmony_ci	struct platform_device *pdev;
298c2ecf20Sopenharmony_ci	int retval;
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_ci	pdev = platform_device_alloc("rtc_cmos", -1);
328c2ecf20Sopenharmony_ci	if (!pdev)
338c2ecf20Sopenharmony_ci		return -ENOMEM;
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_ci	retval = platform_device_add_resources(pdev, cobalt_rtc_resource,
368c2ecf20Sopenharmony_ci					       ARRAY_SIZE(cobalt_rtc_resource));
378c2ecf20Sopenharmony_ci	if (retval)
388c2ecf20Sopenharmony_ci		goto err_free_device;
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_ci	retval = platform_device_add(pdev);
418c2ecf20Sopenharmony_ci	if (retval)
428c2ecf20Sopenharmony_ci		goto err_free_device;
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ci	return 0;
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_cierr_free_device:
478c2ecf20Sopenharmony_ci	platform_device_put(pdev);
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_ci	return retval;
508c2ecf20Sopenharmony_ci}
518c2ecf20Sopenharmony_cidevice_initcall(cobalt_rtc_add);
52