|
@@ -32,6 +32,7 @@
|
|
|
#include <linux/delay.h>
|
|
|
#include <linux/ioport.h>
|
|
|
#include <linux/platform_device.h>
|
|
|
+#include <linux/usb/isp116x.h>
|
|
|
#include <linux/vt_kern.h>
|
|
|
#include <linux/module.h>
|
|
|
|
|
@@ -659,9 +660,16 @@ static void atari_get_hardware_list(struct seq_file *m)
|
|
|
|
|
|
/*
|
|
|
* MSch: initial platform device support for Atari,
|
|
|
- * required for EtherNAT/EtherNEC drivers
|
|
|
+ * required for EtherNAT/EtherNEC/NetUSBee drivers
|
|
|
*/
|
|
|
|
|
|
+#if defined(CONFIG_ATARI_ETHERNAT) || defined(CONFIG_ATARI_ETHERNEC)
|
|
|
+static void isp1160_delay(struct device *dev, int delay)
|
|
|
+{
|
|
|
+ ndelay(delay);
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
#ifdef CONFIG_ATARI_ETHERNAT
|
|
|
/*
|
|
|
* EtherNAT: SMC91C111 Ethernet chipset, handled by smc91x driver
|
|
@@ -691,8 +699,65 @@ static struct platform_device smc91x_device = {
|
|
|
.resource = smc91x_resources,
|
|
|
};
|
|
|
|
|
|
+/*
|
|
|
+ * ISP 1160 - using the isp116x-hcd module
|
|
|
+ */
|
|
|
+
|
|
|
+#define ATARI_USB_PHYS_ADDR 0x80000012
|
|
|
+#define ATARI_USB_IRQ 139
|
|
|
+
|
|
|
+static struct resource isp1160_resources[] = {
|
|
|
+ [0] = {
|
|
|
+ .name = "isp1160-data",
|
|
|
+ .start = ATARI_USB_PHYS_ADDR,
|
|
|
+ .end = ATARI_USB_PHYS_ADDR + 0x1,
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
+ },
|
|
|
+ [1] = {
|
|
|
+ .name = "isp1160-regs",
|
|
|
+ .start = ATARI_USB_PHYS_ADDR + 0x4,
|
|
|
+ .end = ATARI_USB_PHYS_ADDR + 0x5,
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
+ },
|
|
|
+ [2] = {
|
|
|
+ .name = "isp1160-irq",
|
|
|
+ .start = ATARI_USB_IRQ,
|
|
|
+ .end = ATARI_USB_IRQ,
|
|
|
+ .flags = IORESOURCE_IRQ,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+/* (DataBusWidth16|AnalogOCEnable|DREQOutputPolarity|DownstreamPort15KRSel ) */
|
|
|
+static struct isp116x_platform_data isp1160_platform_data = {
|
|
|
+ /* Enable internal resistors on downstream ports */
|
|
|
+ .sel15Kres = 1,
|
|
|
+ /* On-chip overcurrent protection */
|
|
|
+ .oc_enable = 1,
|
|
|
+ /* INT output polarity */
|
|
|
+ .int_act_high = 1,
|
|
|
+ /* INT edge or level triggered */
|
|
|
+ .int_edge_triggered = 0,
|
|
|
+
|
|
|
+ /* WAKEUP pin connected - NOT SUPPORTED */
|
|
|
+ /* .remote_wakeup_connected = 0, */
|
|
|
+ /* Wakeup by devices on usb bus enabled */
|
|
|
+ .remote_wakeup_enable = 0,
|
|
|
+ .delay = isp1160_delay,
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device isp1160_device = {
|
|
|
+ .name = "isp116x-hcd",
|
|
|
+ .id = 0,
|
|
|
+ .num_resources = ARRAY_SIZE(isp1160_resources),
|
|
|
+ .resource = isp1160_resources,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &isp1160_platform_data,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
static struct platform_device *atari_ethernat_devices[] __initdata = {
|
|
|
- &smc91x_device
|
|
|
+ &smc91x_device,
|
|
|
+ &isp1160_device
|
|
|
};
|
|
|
#endif /* CONFIG_ATARI_ETHERNAT */
|
|
|
|
|
@@ -728,8 +793,66 @@ static struct platform_device rtl8019_device = {
|
|
|
.resource = rtl8019_resources,
|
|
|
};
|
|
|
|
|
|
-static struct platform_device *atari_ethernec_devices[] __initdata = {
|
|
|
- &rtl8019_device
|
|
|
+/*
|
|
|
+ * NetUSBee: ISP1160 USB host adapter via ROM-port adapter
|
|
|
+ */
|
|
|
+
|
|
|
+#define ATARI_NETUSBEE_PHYS_ADDR 0xfffa8000
|
|
|
+#define ATARI_NETUSBEE_BASE 0x340
|
|
|
+#define ATARI_NETUSBEE_IRQ IRQ_MFP_TIMER2
|
|
|
+
|
|
|
+static struct resource netusbee_resources[] = {
|
|
|
+ [0] = {
|
|
|
+ .name = "isp1160-data",
|
|
|
+ .start = ATARI_NETUSBEE_BASE,
|
|
|
+ .end = ATARI_NETUSBEE_BASE + 0x1,
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
+ },
|
|
|
+ [1] = {
|
|
|
+ .name = "isp1160-regs",
|
|
|
+ .start = ATARI_NETUSBEE_BASE + 0x20,
|
|
|
+ .end = ATARI_NETUSBEE_BASE + 0x21,
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
+ },
|
|
|
+ [2] = {
|
|
|
+ .name = "isp1160-irq",
|
|
|
+ .start = ATARI_NETUSBEE_IRQ,
|
|
|
+ .end = ATARI_NETUSBEE_IRQ,
|
|
|
+ .flags = IORESOURCE_IRQ,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+/* (DataBusWidth16|AnalogOCEnable|DREQOutputPolarity|DownstreamPort15KRSel ) */
|
|
|
+static struct isp116x_platform_data netusbee_platform_data = {
|
|
|
+ /* Enable internal resistors on downstream ports */
|
|
|
+ .sel15Kres = 1,
|
|
|
+ /* On-chip overcurrent protection */
|
|
|
+ .oc_enable = 1,
|
|
|
+ /* INT output polarity */
|
|
|
+ .int_act_high = 1,
|
|
|
+ /* INT edge or level triggered */
|
|
|
+ .int_edge_triggered = 0,
|
|
|
+
|
|
|
+ /* WAKEUP pin connected - NOT SUPPORTED */
|
|
|
+ /* .remote_wakeup_connected = 0, */
|
|
|
+ /* Wakeup by devices on usb bus enabled */
|
|
|
+ .remote_wakeup_enable = 0,
|
|
|
+ .delay = isp1160_delay,
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device netusbee_device = {
|
|
|
+ .name = "isp116x-hcd",
|
|
|
+ .id = 1,
|
|
|
+ .num_resources = ARRAY_SIZE(netusbee_resources),
|
|
|
+ .resource = netusbee_resources,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &netusbee_platform_data,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device *atari_netusbee_devices[] __initdata = {
|
|
|
+ &rtl8019_device,
|
|
|
+ &netusbee_device
|
|
|
};
|
|
|
#endif /* CONFIG_ATARI_ETHERNEC */
|
|
|
|
|
@@ -758,8 +881,8 @@ int __init atari_platform_init(void)
|
|
|
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));
|
|
|
+ error = platform_add_devices(atari_netusbee_devices,
|
|
|
+ ARRAY_SIZE(atari_netusbee_devices));
|
|
|
if (error && !rv)
|
|
|
rv = error;
|
|
|
}
|