m68k/atari: EtherNEC - add platform device support
Michael Schmitz [Sat, 6 Apr 2013 00:26:40 +0000 (13:26 +1300)]
Add platform device for the Atari ROM port ethernet adapter, EtherNEC.
This platform device will be used by the ne.c driver.

[Geert] Conditionalize platform device data structures

Signed-off-by: Michael Schmitz <schmitz@debian.org>
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>

arch/m68k/Kconfig.devices
arch/m68k/atari/config.c

index d50ecbf..d163991 100644 (file)
@@ -65,6 +65,20 @@ config ATARI_ETHERNAT
          To compile the actual ethernet driver, choose Y or M for the SMC91X
          option in the network device section; the module will be called smc91x.
 
+config ATARI_ETHERNEC
+       bool "Atari EtherNEC Ethernet support"
+       depends on ATARI_ROM_ISA
+       ---help---
+         Say Y to include support for the EtherNEC network adapter for the
+         ROM port. The driver works by polling instead of interrupts, so it
+         is quite slow.
+
+         This driver also suppports the ethernet part of the NetUSBee ROM
+         port combined Ethernet/USB adapter.
+
+         To compile the actual ethernet driver, choose Y or M in for the NE2000
+         option in the network device section; the module will be called ne.
+
 endmenu
 
 menu "Character devices"
index 49d1c75..83ff931 100644 (file)
@@ -659,7 +659,7 @@ static void atari_get_hardware_list(struct seq_file *m)
 
 /*
  * MSch: initial platform device support for Atari,
- * required for EtherNAT driver
+ * required for EtherNAT/EtherNEC drivers
  */
 
 #ifdef CONFIG_ATARI_ETHERNAT
@@ -696,6 +696,43 @@ static struct platform_device *atari_ethernat_devices[] __initdata = {
 };
 #endif /* CONFIG_ATARI_ETHERNAT */
 
+#ifdef CONFIG_ATARI_ETHERNEC
+/*
+ * EtherNEC: RTL8019 (NE2000 compatible) Ethernet chipset,
+ * handled by ne.c driver
+ */
+
+#define ATARI_ETHERNEC_PHYS_ADDR       0xfffa0000
+#define ATARI_ETHERNEC_BASE            0x300
+#define ATARI_ETHERNEC_IRQ             IRQ_MFP_TIMER1
+
+static struct resource rtl8019_resources[] = {
+       [0] = {
+               .name   = "rtl8019-regs",
+               .start  = ATARI_ETHERNEC_BASE,
+               .end    = ATARI_ETHERNEC_BASE + 0x20 - 1,
+               .flags  = IORESOURCE_IO,
+       },
+       [1] = {
+               .name   = "rtl8019-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
+};
+#endif /* CONFIG_ATARI_ETHERNEC */
+
 int __init atari_platform_init(void)
 {
        int rv = 0;
@@ -715,6 +752,21 @@ int __init atari_platform_init(void)
        }
 #endif
 
+#ifdef CONFIG_ATARI_ETHERNEC
+       {
+               int error;
+               unsigned char *enec_virt;
+               enec_virt = (unsigned char *)ioremap((ATARI_ETHERNEC_PHYS_ADDR), 0xf);
+               if (hwreg_present(enec_virt)) {
+                       error = platform_add_devices(atari_ethernec_devices,
+                                               ARRAY_SIZE(atari_ethernec_devices));
+                       if (error && !rv)
+                               rv = error;
+               }
+               iounmap(enec_virt);
+       }
+#endif
+
        return rv;
 }