From 48d2284d03e6b254207b03765b9f636d8126c857 Mon Sep 17 00:00:00 2001
From: Michael Schmitz <schmitz@xxxxxxxxxx> Date: Sat, 30 Jun 2012 15:25:59 +1200 Subject: [PATCH 5/6] [m68k] Atari: add platform support for EtherNEC - ne.c driver Signed-off-by: Michael Schmitz <schmitz@xxxxxxxxxx> --- arch/m68k/atari/config.c | 68 ++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 66 insertions(+), 2 deletions(-) diff --git a/arch/m68k/atari/config.c b/arch/m68k/atari/config.c index 2939d03..3e32665 100644 --- a/arch/m68k/atari/config.c +++ b/arch/m68k/atari/config.c @@ -690,10 +690,48 @@ static struct platform_device *atari_ethernat_devices[] __initdata = { &smc91x_device }; +#if IS_ENABLED(CONFIG_ATARI_ETHERNEC) + +#define ATARI_ETHERNEC_PHYS_ADDR 0xfffa0000 +#define ATARI_ETHERNEC_BASE 0x300 +#define ATARI_ETHERNEC_IRQ IRQ_MFP_TIMD + +static struct resource rtl8019_resources[] = { + [0] = { + .name = "rtl9019-regs", + .start = ATARI_ETHERNEC_BASE, + .end = ATARI_ETHERNEC_BASE + 0x20 - 1, + .flags = IORESOURCE_IO, + }, + [1] = { + .name = "rtl9019-irq", + .start = ATARI_ETHERNEC_IRQ, + .end = ATARI_ETHERNEC_IRQ, + .flags = IORESOURCE_IRQ, + }, +}; + +static struct platform_device rtl8019_device = { + .name = "ne", + .id = -1, + .num_resources = ARRAY_SIZE(rtl8019_resources), + .resource = rtl8019_resources, +}; + +static struct platform_device *atari_ethernec_devices[] __initdata = { + &rtl8019_device +}; + +irqreturn_t atari_timerd_interrupt(int irq, void *dev_id) +{ + return IRQ_HANDLED; +} +#endif + int __init atari_platform_init(void) { - unsigned char *enatc_virt; - int rv = -ENODEV; + unsigned char *enatc_virt, *enec_virt; + int rv = -ENODEV, rv2 = -ENODEV; if (!MACH_IS_ATARI) return -ENODEV; @@ -709,6 +747,32 @@ int __init atari_platform_init(void) iounmap(enatc_virt); #endif +#if IS_ENABLED(CONFIG_ATARI_ETHERNEC) + enec_virt = (unsigned char *)ioremap((ATARI_ETHERNEC_PHYS_ADDR), 0xf); + if (hwreg_present(enec_virt)) { + int ret; + const char *name = "Timer D dummy interrupt"; + + /* timer routine set up in atari_ethernec_probe() */ + /* set Timer D data Register */ + st_mfp.tim_dt_d = 123; /* 200 Hz */ + /* start timer D, div = 1:100 */ + st_mfp.tim_ct_cd = (st_mfp.tim_ct_cd & 0xf0) | 0x6; + /* Must make this shared in case other timer ints are needed */ + ret = request_irq(IRQ_MFP_TIMD, atari_timerd_interrupt, + IRQF_SHARED, name, atari_timerd_interrupt); + if (ret) + pr_err("atari_platform_init: failed to register timer for EtherNEC!\n"); + + rv2 = platform_add_devices(atari_ethernec_devices, + ARRAY_SIZE(atari_ethernec_devices)); + } + iounmap(enec_virt); +#endif + + if (rv2) + return rv2; + return rv; } -- 1.7.0.4 -- To unsubscribe from this list: send the line "unsubscribe linux-m68k" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html