Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.8.
  1// SPDX-License-Identifier: GPL-2.0-or-later
  2/*
  3 *  NEC VR4100 series RTC platform device.
  4 *
  5 *  Copyright (C) 2007	Yoichi Yuasa <yuasa@linux-mips.org>
  6 */
  7#include <linux/errno.h>
  8#include <linux/init.h>
  9#include <linux/smp.h>
 10#include <linux/ioport.h>
 11#include <linux/platform_device.h>
 12
 13#include <asm/cpu.h>
 14#include <asm/vr41xx/irq.h>
 15
 16static struct resource rtc_type1_resource[] __initdata = {
 17	{
 18		.start	= 0x0b0000c0,
 19		.end	= 0x0b0000df,
 20		.flags	= IORESOURCE_MEM,
 21	},
 22	{
 23		.start	= 0x0b0001c0,
 24		.end	= 0x0b0001df,
 25		.flags	= IORESOURCE_MEM,
 26	},
 27	{
 28		.start	= ELAPSEDTIME_IRQ,
 29		.end	= ELAPSEDTIME_IRQ,
 30		.flags	= IORESOURCE_IRQ,
 31	},
 32	{
 33		.start	= RTCLONG1_IRQ,
 34		.end	= RTCLONG1_IRQ,
 35		.flags	= IORESOURCE_IRQ,
 36	},
 37};
 38
 39static struct resource rtc_type2_resource[] __initdata = {
 40	{
 41		.start	= 0x0f000100,
 42		.end	= 0x0f00011f,
 43		.flags	= IORESOURCE_MEM,
 44	},
 45	{
 46		.start	= 0x0f000120,
 47		.end	= 0x0f00013f,
 48		.flags	= IORESOURCE_MEM,
 49	},
 50	{
 51		.start	= ELAPSEDTIME_IRQ,
 52		.end	= ELAPSEDTIME_IRQ,
 53		.flags	= IORESOURCE_IRQ,
 54	},
 55	{
 56		.start	= RTCLONG1_IRQ,
 57		.end	= RTCLONG1_IRQ,
 58		.flags	= IORESOURCE_IRQ,
 59	},
 60};
 61
 62static int __init vr41xx_rtc_add(void)
 63{
 64	struct platform_device *pdev;
 65	struct resource *res;
 66	unsigned int num;
 67	int retval;
 68
 69	pdev = platform_device_alloc("RTC", -1);
 70	if (!pdev)
 71		return -ENOMEM;
 72
 73	switch (current_cpu_type()) {
 74	case CPU_VR4111:
 75	case CPU_VR4121:
 76		res = rtc_type1_resource;
 77		num = ARRAY_SIZE(rtc_type1_resource);
 78		break;
 79	case CPU_VR4122:
 80	case CPU_VR4131:
 81	case CPU_VR4133:
 82		res = rtc_type2_resource;
 83		num = ARRAY_SIZE(rtc_type2_resource);
 84		break;
 85	default:
 86		retval = -ENODEV;
 87		goto err_free_device;
 88	}
 89
 90	retval = platform_device_add_resources(pdev, res, num);
 91	if (retval)
 92		goto err_free_device;
 93
 94	retval = platform_device_add(pdev);
 95	if (retval)
 96		goto err_free_device;
 97
 98	return 0;
 99
100err_free_device:
101	platform_device_put(pdev);
102
103	return retval;
104}
105device_initcall(vr41xx_rtc_add);