#include <linux/time.h>
#include <linux/io.h>
#include <linux/gpio.h>
+
#include <asm/bootinfo.h>
#include <asm/irq.h>
-#include <asm/ifxmips/ifxmips.h>
+
+#include <ifxmips.h>
+#include <ifxmips_irq.h>
#define MAX_BOARD_NAME_LEN 32
#define MAX_IFXMIPS_DEVS 9
};
extern int ifxmips_pci_external_clock;
+extern int ifxmips_pci_req_mask;
static unsigned int chiprev;
static int cmdline_mac;
struct gpio_led *ifxmips_leds;
struct gpio_led *gpio_leds;
int pci_external_clock;
+ int pci_req_mask;
int num_devs;
};
{ .name = "ifx:green:internet", .gpio = 5, .active_low = 1, },
{ .name = "ifx:red:internet", .gpio = 8, .active_low = 1, },
{ .name = "ifx:green:wlan", .gpio = 6, .active_low = 1, },
+ { .name = "ifx:green:usbpwr", .gpio = 14, .active_low = 1, },
{ .name = "ifx:green:usb", .gpio = 19, .active_low = 1, },
};
};
#endif
+static struct resource dwc_usb_res[] = {
+ {
+ .name = "dwc_usb_membase",
+ .flags = IORESOURCE_MEM,
+ .start = 0x1E101000,
+ .end = 0x1E101FFF
+ },
+ {
+ .name = "dwc_usb_irq",
+ .flags = IORESOURCE_IRQ,
+ .start = IFXMIPS_USB_INT,
+ }
+};
+
+static struct platform_device dwc_usb =
+{
+ .id = 0,
+ .name = "dwc_usb",
+ .resource = dwc_usb_res,
+ .num_resources = ARRAY_SIZE(dwc_usb_res),
+};
+
struct platform_device *easy50712_devs[] = {
&ifxmips_led, &ifxmips_gpio, &ifxmips_mii,
- &ifxmips_mtd, &ifxmips_wdt, &ifxmips_gpio_dev
+ &ifxmips_mtd, &ifxmips_wdt, &ifxmips_gpio_dev, &dwc_usb
};
struct platform_device *easy4010_devs[] = {
&ifxmips_led, &ifxmips_gpio, &ifxmips_mii,
- &ifxmips_mtd, &ifxmips_wdt, &ifxmips_gpio_dev
+ &ifxmips_mtd, &ifxmips_wdt, &ifxmips_gpio_dev, &dwc_usb
};
struct platform_device *arv5419_devs[] = {
- &ifxmips_gpio, &ifxmips_mii, &ifxmips_mtd, &ifxmips_wdt,
+ &ifxmips_gpio, &ifxmips_mii, &ifxmips_mtd,
+ &ifxmips_gpio_dev, &ifxmips_wdt, &dwc_usb,
#ifdef CONFIG_LEDS_GPIO
&ifxmips_gpio_leds,
#endif
static struct ifxmips_board boards[] = {
{
+ /* infineon eval kit */
.type = EASY50712,
.name = "EASY50712",
.system_type = SYSTEM_DANUBE_CHIPID1,
.end = (1 << 0) | (1 << 1)},
.ifxmips_leds = easy50712_leds,
}, {
+ /* infineon eval kit */
.type = EASY4010,
.name = "EASY4010",
.system_type = SYSTEM_TWINPASS_CHIPID,
.end = (1 << 0) | (1 << 1)},
.ifxmips_leds = easy4010_leds,
}, {
+ /* arcaydian annex-a board used by thompson, airties, ... */
.type = ARV4519,
.name = "ARV4519",
.system_type = SYSTEM_DANUBE_CHIPID2,
int __init ifxmips_init_devices(void)
{
- struct ifxmips_board *board = ifxmips_find_board();
+ struct ifxmips_board *board;
chiprev = (ifxmips_r32(IFXMIPS_MPS_CHIPID) & 0x0FFFFFFF);
+ board = ifxmips_find_board();
ifxmips_brn = ifxmips_find_brn_block();
if (!cmdline_mac)
ifxmips_led_data.num_leds = ARRAY_SIZE(easy4010_leds);
break;
case ARV4519:
+ /* set some sane defaults for the gpios */
gpio_set_value(3, 0);
gpio_set_value(4, 0);
gpio_set_value(5, 0);
ifxmips_gpio_dev.resource = &board->gpiodev_resource;
if (board->pci_external_clock)
ifxmips_pci_external_clock = 1;
+ if (board->pci_req_mask)
+ ifxmips_pci_req_mask = board->pci_req_mask;
printk(KERN_INFO "using board definition %s\n", board->name);
return platform_add_devices(board->devs, board->num_devs);
}