Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7ba01f97 authored by Lennert Buytenhek's avatar Lennert Buytenhek Committed by Russell King
Browse files

[ARM] 3451/1: ep93xx: use the m48t86 rtc driver on the ts72xx platform



Patch from Lennert Buytenhek

Instantiate the recently merged m48t86 rtc driver in the ts72xx code.

Signed-off-by: default avatarLennert Buytenhek <buytenh@wantstofly.org>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 41658132
Loading
Loading
Loading
Loading
+39 −0
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
#include <linux/sched.h>
#include <linux/interrupt.h>
#include <linux/mtd/physmap.h>
#include <linux/platform_device.h>
#include <linux/m48t86.h>
#include <asm/io.h>
#include <asm/hardware.h>
#include <asm/mach-types.h>
@@ -39,6 +41,16 @@ static struct map_desc ts72xx_io_desc[] __initdata = {
		.pfn		= __phys_to_pfn(TS72XX_OPTIONS2_PHYS_BASE),
		.length		= TS72XX_OPTIONS2_SIZE,
		.type		= MT_DEVICE,
	}, {
		.virtual	= TS72XX_RTC_INDEX_VIRT_BASE,
		.pfn		= __phys_to_pfn(TS72XX_RTC_INDEX_PHYS_BASE),
		.length		= TS72XX_RTC_INDEX_SIZE,
		.type		= MT_DEVICE,
	}, {
		.virtual	= TS72XX_RTC_DATA_VIRT_BASE,
		.pfn		= __phys_to_pfn(TS72XX_RTC_DATA_PHYS_BASE),
		.length		= TS72XX_RTC_DATA_SIZE,
		.type		= MT_DEVICE,
	}
};

@@ -99,11 +111,38 @@ static void __init ts72xx_map_io(void)
	}
}

static unsigned char ts72xx_rtc_readb(unsigned long addr)
{
	__raw_writeb(addr, TS72XX_RTC_INDEX_VIRT_BASE);
	return __raw_readb(TS72XX_RTC_DATA_VIRT_BASE);
}

static void ts72xx_rtc_writeb(unsigned char value, unsigned long addr)
{
	__raw_writeb(addr, TS72XX_RTC_INDEX_VIRT_BASE);
	__raw_writeb(value, TS72XX_RTC_DATA_VIRT_BASE);
}

static struct m48t86_ops ts72xx_rtc_ops = {
	.readb			= ts72xx_rtc_readb,
	.writeb			= ts72xx_rtc_writeb,
};

static struct platform_device ts72xx_rtc_device = {
	.name			= "rtc-m48t86",
	.id			= -1,
	.dev			= {
		.platform_data		= &ts72xx_rtc_ops,
	},
	.num_resources		= 0,
};

static void __init ts72xx_init_machine(void)
{
	ep93xx_init_devices();
	if (board_is_ts7200())
		physmap_configure(TS72XX_NOR_PHYS_BASE, 0x01000000, 1, NULL);
	platform_device_register(&ts72xx_rtc_device);
}

MACHINE_START(TS72XX, "Technologic Systems TS-72xx SBC")
+11 −0
Original line number Diff line number Diff line
@@ -12,6 +12,8 @@
 * febfc000	[67]0000000	4K	NAND data register
 * febfb000	[67]0400000	4K	NAND control register
 * febfa000	[67]0800000	4K	NAND busy register
 * febf9000	10800000	4K	TS-5620 RTC index register
 * febf8000	11700000	4K	TS-5620 RTC data register
 */

#define TS72XX_MODEL_PHYS_BASE		0x22000000
@@ -58,6 +60,15 @@
#define TS72XX_NAND_BUSY_SIZE		0x00001000


#define TS72XX_RTC_INDEX_VIRT_BASE	0xfebf9000
#define TS72XX_RTC_INDEX_PHYS_BASE	0x10800000
#define TS72XX_RTC_INDEX_SIZE		0x00001000

#define TS72XX_RTC_DATA_VIRT_BASE	0xfebf8000
#define TS72XX_RTC_DATA_PHYS_BASE	0x11700000
#define TS72XX_RTC_DATA_SIZE		0x00001000


#ifndef __ASSEMBLY__
#include <asm/io.h>