From f567980d3863407ee97b686920c23135a182f6f3 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Sun, 27 May 2012 16:13:02 +0000 Subject: move files-3.3 -> files SVN-Revision: 31912 --- .../include/asm/mach-lantiq/dev-gpio-buttons.h | 26 - .../mips/include/asm/mach-lantiq/dev-gpio-leds.h | 21 - .../files-3.3/arch/mips/lantiq/dev-gpio-buttons.c | 58 -- .../files-3.3/arch/mips/lantiq/dev-gpio-leds.c | 57 -- .../arch/mips/lantiq/falcon/addon-easy98000.c | 213 ------ .../mips/lantiq/falcon/dev-leds-easy98000-cpld.c | 161 ----- .../mips/lantiq/falcon/dev-leds-easy98000-cpld.h | 20 - .../arch/mips/lantiq/falcon/mach-95C3AM1.c | 94 --- .../arch/mips/lantiq/falcon/mach-easy98020.c | 118 --- .../files-3.3/arch/mips/lantiq/xway/dev-dwc_otg.c | 70 -- .../files-3.3/arch/mips/lantiq/xway/dev-dwc_otg.h | 17 - .../arch/mips/lantiq/xway/dev-wifi-athxk.c | 53 -- .../arch/mips/lantiq/xway/dev-wifi-athxk.h | 16 - .../arch/mips/lantiq/xway/dev-wifi-rt2x00.c | 32 - .../arch/mips/lantiq/xway/dev-wifi-rt2x00.h | 14 - .../files-3.3/arch/mips/lantiq/xway/mach-arv.c | 788 --------------------- .../arch/mips/lantiq/xway/mach-bthomehubv2b.c | 542 -------------- .../arch/mips/lantiq/xway/mach-easy50601.c | 58 -- .../arch/mips/lantiq/xway/mach-easy50712.c | 71 -- .../arch/mips/lantiq/xway/mach-fritz_ar9.c | 115 --- .../arch/mips/lantiq/xway/mach-fritz_vr9.c | 164 ----- .../arch/mips/lantiq/xway/mach-gigasx76x.c | 168 ----- .../arch/mips/lantiq/xway/mach-gigasx76x.h | 210 ------ .../files-3.3/arch/mips/lantiq/xway/mach-h201l.c | 100 --- .../files-3.3/arch/mips/lantiq/xway/mach-netgear.c | 239 ------- .../arch/mips/lantiq/xway/mach-p2601hnfx.c | 113 --- .../files-3.3/arch/mips/lantiq/xway/mach-wbmr.c | 120 ---- .../arch/mips/lantiq/xway/pci-ath-fixup.c | 109 --- .../arch/mips/lantiq/xway/pci-ath-fixup.h | 6 - .../include/asm/mach-lantiq/dev-gpio-buttons.h | 26 + .../mips/include/asm/mach-lantiq/dev-gpio-leds.h | 21 + .../files/arch/mips/lantiq/dev-gpio-buttons.c | 58 ++ .../lantiq/files/arch/mips/lantiq/dev-gpio-leds.c | 57 ++ .../arch/mips/lantiq/falcon/addon-easy98000.c | 213 ++++++ .../mips/lantiq/falcon/dev-leds-easy98000-cpld.c | 161 +++++ .../mips/lantiq/falcon/dev-leds-easy98000-cpld.h | 20 + .../files/arch/mips/lantiq/falcon/mach-95C3AM1.c | 94 +++ .../files/arch/mips/lantiq/falcon/mach-easy98020.c | 118 +++ .../files/arch/mips/lantiq/xway/dev-dwc_otg.c | 70 ++ .../files/arch/mips/lantiq/xway/dev-dwc_otg.h | 17 + .../files/arch/mips/lantiq/xway/dev-wifi-athxk.c | 53 ++ .../files/arch/mips/lantiq/xway/dev-wifi-athxk.h | 16 + .../files/arch/mips/lantiq/xway/dev-wifi-rt2x00.c | 32 + .../files/arch/mips/lantiq/xway/dev-wifi-rt2x00.h | 14 + .../lantiq/files/arch/mips/lantiq/xway/mach-arv.c | 788 +++++++++++++++++++++ .../arch/mips/lantiq/xway/mach-bthomehubv2b.c | 542 ++++++++++++++ .../files/arch/mips/lantiq/xway/mach-easy50601.c | 58 ++ .../files/arch/mips/lantiq/xway/mach-easy50712.c | 71 ++ .../files/arch/mips/lantiq/xway/mach-fritz_ar9.c | 115 +++ .../files/arch/mips/lantiq/xway/mach-fritz_vr9.c | 164 +++++ .../files/arch/mips/lantiq/xway/mach-gigasx76x.c | 168 +++++ .../files/arch/mips/lantiq/xway/mach-gigasx76x.h | 210 ++++++ .../files/arch/mips/lantiq/xway/mach-h201l.c | 100 +++ .../files/arch/mips/lantiq/xway/mach-netgear.c | 239 +++++++ .../files/arch/mips/lantiq/xway/mach-p2601hnfx.c | 113 +++ .../lantiq/files/arch/mips/lantiq/xway/mach-wbmr.c | 120 ++++ .../files/arch/mips/lantiq/xway/pci-ath-fixup.c | 109 +++ .../files/arch/mips/lantiq/xway/pci-ath-fixup.h | 6 + 58 files changed, 3773 insertions(+), 3773 deletions(-) delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/include/asm/mach-lantiq/dev-gpio-buttons.h delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/include/asm/mach-lantiq/dev-gpio-leds.h delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/dev-gpio-buttons.c delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/dev-gpio-leds.c delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/falcon/addon-easy98000.c delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/falcon/dev-leds-easy98000-cpld.c delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/falcon/dev-leds-easy98000-cpld.h delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/falcon/mach-95C3AM1.c delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/falcon/mach-easy98020.c delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-dwc_otg.c delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-dwc_otg.h delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-athxk.c delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-athxk.h delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-rt2x00.c delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-rt2x00.h delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-arv.c delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-bthomehubv2b.c delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-easy50601.c delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-easy50712.c delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-fritz_ar9.c delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-fritz_vr9.c delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-gigasx76x.c delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-gigasx76x.h delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-h201l.c delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-netgear.c delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-p2601hnfx.c delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-wbmr.c delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/pci-ath-fixup.c delete mode 100644 target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/pci-ath-fixup.h create mode 100644 target/linux/lantiq/files/arch/mips/include/asm/mach-lantiq/dev-gpio-buttons.h create mode 100644 target/linux/lantiq/files/arch/mips/include/asm/mach-lantiq/dev-gpio-leds.h create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/dev-gpio-buttons.c create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/dev-gpio-leds.c create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/falcon/addon-easy98000.c create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/falcon/dev-leds-easy98000-cpld.c create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/falcon/dev-leds-easy98000-cpld.h create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/falcon/mach-95C3AM1.c create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/falcon/mach-easy98020.c create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/xway/dev-dwc_otg.c create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/xway/dev-dwc_otg.h create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/xway/dev-wifi-athxk.c create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/xway/dev-wifi-athxk.h create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/xway/dev-wifi-rt2x00.c create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/xway/dev-wifi-rt2x00.h create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/xway/mach-arv.c create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/xway/mach-bthomehubv2b.c create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/xway/mach-easy50601.c create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/xway/mach-easy50712.c create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/xway/mach-fritz_ar9.c create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/xway/mach-fritz_vr9.c create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/xway/mach-gigasx76x.c create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/xway/mach-gigasx76x.h create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/xway/mach-h201l.c create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/xway/mach-netgear.c create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/xway/mach-p2601hnfx.c create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/xway/mach-wbmr.c create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/xway/pci-ath-fixup.c create mode 100644 target/linux/lantiq/files/arch/mips/lantiq/xway/pci-ath-fixup.h (limited to 'target/linux') diff --git a/target/linux/lantiq/files-3.3/arch/mips/include/asm/mach-lantiq/dev-gpio-buttons.h b/target/linux/lantiq/files-3.3/arch/mips/include/asm/mach-lantiq/dev-gpio-buttons.h deleted file mode 100644 index adb531c..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/include/asm/mach-lantiq/dev-gpio-buttons.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Lantiq GPIO button support - * - * Copyright (C) 2008-2009 Gabor Juhos - * Copyright (C) 2008 Imre Kaloz - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - */ - -#ifndef _LANTIQ_DEV_GPIO_BUTTONS_H -#define _LANTIQ_DEV_GPIO_BUTTONS_H - -#include -#include - -#define LTQ_KEYS_POLL_INTERVAL 20 /* msecs */ -#define LTQ_KEYS_DEBOUNCE_INTERVAL (3 * LTQ_KEYS_POLL_INTERVAL) - -void ltq_register_gpio_keys_polled(int id, - unsigned poll_interval, - unsigned nbuttons, - struct gpio_keys_button *buttons); - -#endif /* _LANTIQ_DEV_GPIO_BUTTONS_H */ diff --git a/target/linux/lantiq/files-3.3/arch/mips/include/asm/mach-lantiq/dev-gpio-leds.h b/target/linux/lantiq/files-3.3/arch/mips/include/asm/mach-lantiq/dev-gpio-leds.h deleted file mode 100644 index d51e496..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/include/asm/mach-lantiq/dev-gpio-leds.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Lantiq GPIO LED device support - * - * Copyright (C) 2008-2009 Gabor Juhos - * Copyright (C) 2008 Imre Kaloz - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - */ - -#ifndef _LANTIQ_DEV_LEDS_GPIO_H -#define _LANTIQ_DEV_LEDS_GPIO_H - -#include - -void ltq_add_device_gpio_leds(int id, - unsigned num_leds, - struct gpio_led *leds) __init; - -#endif /* _LANTIQ_DEV_LEDS_GPIO_H */ diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/dev-gpio-buttons.c b/target/linux/lantiq/files-3.3/arch/mips/lantiq/dev-gpio-buttons.c deleted file mode 100644 index ad25cac..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/dev-gpio-buttons.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Lantiq GPIO button support - * - * Copyright (C) 2008-2009 Gabor Juhos - * Copyright (C) 2008 Imre Kaloz - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - */ - -#include -#include -#include - -#include - -void __init ltq_register_gpio_keys_polled(int id, - unsigned poll_interval, - unsigned nbuttons, - struct gpio_keys_button *buttons) -{ - struct platform_device *pdev; - struct gpio_keys_platform_data pdata; - struct gpio_keys_button *p; - int err; - - p = kmalloc(nbuttons * sizeof(*p), GFP_KERNEL); - if (!p) - return; - - memcpy(p, buttons, nbuttons * sizeof(*p)); - - pdev = platform_device_alloc("gpio-keys-polled", id); - if (!pdev) - goto err_free_buttons; - - memset(&pdata, 0, sizeof(pdata)); - pdata.poll_interval = poll_interval; - pdata.nbuttons = nbuttons; - pdata.buttons = p; - - err = platform_device_add_data(pdev, &pdata, sizeof(pdata)); - if (err) - goto err_put_pdev; - - err = platform_device_add(pdev); - if (err) - goto err_put_pdev; - - return; - -err_put_pdev: - platform_device_put(pdev); - -err_free_buttons: - kfree(p); -} diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/dev-gpio-leds.c b/target/linux/lantiq/files-3.3/arch/mips/lantiq/dev-gpio-leds.c deleted file mode 100644 index 89dc79d..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/dev-gpio-leds.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Lantiq GPIO LED device support - * - * Copyright (C) 2008-2009 Gabor Juhos - * Copyright (C) 2008 Imre Kaloz - * - * Parts of this file are based on Atheros' 2.6.15 BSP - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - */ - -#include -#include -#include - -#include - -void __init ltq_add_device_gpio_leds(int id, unsigned num_leds, - struct gpio_led *leds) -{ - struct platform_device *pdev; - struct gpio_led_platform_data pdata; - struct gpio_led *p; - int err; - - p = kmalloc(num_leds * sizeof(*p), GFP_KERNEL); - if (!p) - return; - - memcpy(p, leds, num_leds * sizeof(*p)); - - pdev = platform_device_alloc("leds-gpio", id); - if (!pdev) - goto err_free_leds; - - memset(&pdata, 0, sizeof(pdata)); - pdata.num_leds = num_leds; - pdata.leds = p; - - err = platform_device_add_data(pdev, &pdata, sizeof(pdata)); - if (err) - goto err_put_pdev; - - err = platform_device_add(pdev); - if (err) - goto err_put_pdev; - - return; - -err_put_pdev: - platform_device_put(pdev); - -err_free_leds: - kfree(p); -} diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/falcon/addon-easy98000.c b/target/linux/lantiq/files-3.3/arch/mips/lantiq/falcon/addon-easy98000.c deleted file mode 100644 index 317ee40..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/falcon/addon-easy98000.c +++ /dev/null @@ -1,213 +0,0 @@ -/* - * EASY98000 CPLD Addon driver - * - * Copyright (C) 2011 Thomas Langer - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -struct easy98000_reg_cpld { - u16 cmdreg1; /* 0x1 */ - u16 cmdreg0; /* 0x0 */ - u16 idreg0; /* 0x3 */ - u16 resreg; /* 0x2 */ - u16 intreg; /* 0x5 */ - u16 idreg1; /* 0x4 */ - u16 ledreg; /* 0x7 */ - u16 pcmconconfig; /* 0x6 */ - u16 res0; /* 0x9 */ - u16 ethledreg; /* 0x8 */ - u16 res1[4]; /* 0xa-0xd */ - u16 cpld1v; /* 0xf */ - u16 cpld2v; /* 0xe */ -}; -static struct easy98000_reg_cpld * const cpld = - (struct easy98000_reg_cpld *)(KSEG1 | 0x17c00000); -#define cpld_r8(reg) (__raw_readw(&cpld->reg) & 0xFF) -#define cpld_w8(val, reg) __raw_writew((val) & 0xFF, &cpld->reg) - -int easy98000_addon_has_dm9000(void) -{ - if ((cpld_r8(idreg0) & 0xF) == 1) - return 1; - return 0; -} - -#if defined(CONFIG_PROC_FS) -typedef void (*cpld_dump) (struct seq_file *s); -struct proc_entry { - char *name; - void *callback; -}; - -static int cpld_proc_show ( struct seq_file *s, void *p ) -{ - cpld_dump dump = s->private; - - if ( dump != NULL ) - dump(s); - - return 0; -} - -static int cpld_proc_open ( struct inode *inode, struct file *file ) -{ - return single_open ( file, cpld_proc_show, PDE(inode)->data ); -} - -static void cpld_versions_get ( struct seq_file *s ) -{ - seq_printf(s, "CPLD1: V%d\n", cpld_r8(cpld1v)); - seq_printf(s, "CPLD2: V%d\n", cpld_r8(cpld2v)); -} - -static void cpld_ebu_module_get ( struct seq_file *s ) -{ - u8 addon_id; - - addon_id = cpld_r8(idreg0) & 0xF; - switch (addon_id) { - case 0xF: /* nothing connected */ - break; - case 1: - seq_printf(s, "Ethernet Controller module (dm9000)\n"); - break; - default: - seq_printf(s, "Unknown EBU module (EBU_ID=0x%02X)\n", addon_id); - break; - } -} - -static void cpld_xmii_module_get ( struct seq_file *s ) -{ - u8 addon_id; - char *mod = NULL; - - addon_id = cpld_r8(idreg1) & 0xF; - switch (addon_id) { - case 0xF: - mod = "no module"; - break; - case 0x1: - mod = "RGMII module"; - break; - case 0x4: - mod = "GMII MAC Mode (XWAY TANTOS-3G)"; - break; - case 0x6: - mod = "TMII MAC Mode (XWAY TANTOS-3G)"; - break; - case 0x8: - mod = "GMII PHY module"; - break; - case 0x9: - mod = "MII PHY module"; - break; - case 0xA: - mod = "RMII PHY module"; - break; - default: - break; - } - if (mod) - seq_printf(s, "%s\n", mod); - else - seq_printf(s, "unknown xMII module (xMII_ID=0x%02X)\n", addon_id); -} - -static struct proc_entry proc_entries[] = { - {"versions", cpld_versions_get}, - {"ebu", cpld_ebu_module_get}, - {"xmii", cpld_xmii_module_get}, -}; - -static struct file_operations ops = { - .owner = THIS_MODULE, - .open = cpld_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; - -static void cpld_proc_entry_create(struct proc_dir_entry *parent_node, - struct proc_entry *proc_entry) -{ - proc_create_data ( proc_entry->name, (S_IFREG | S_IRUGO), parent_node, - &ops, proc_entry->callback); -} - -static int cpld_proc_install(void) -{ - struct proc_dir_entry *driver_proc_node; - - driver_proc_node = proc_mkdir("cpld", NULL); - if (driver_proc_node != NULL) { - int i; - for (i = 0; i < ARRAY_SIZE(proc_entries); i++) - cpld_proc_entry_create(driver_proc_node, - &proc_entries[i]); - } else { - printk("cannot create proc entry"); - return -1; - } - return 0; -} -#else -static inline int cpld_proc_install(void) {} -#endif - -static int easy98000_addon_probe(struct platform_device *pdev) -{ - return cpld_proc_install(); -} - -static int easy98000_addon_remove(struct platform_device *pdev) -{ -#if defined(CONFIG_PROC_FS) - char buf[64]; - int i; - - for (i = 0; i < sizeof(proc_entries) / sizeof(proc_entries[0]); i++) { - sprintf(buf, "cpld/%s", proc_entries[i].name); - remove_proc_entry(buf, 0); - } - remove_proc_entry("cpld", 0); -#endif - return 0; -} - -static struct platform_driver easy98000_addon_driver = { - .probe = easy98000_addon_probe, - .remove = __devexit_p(easy98000_addon_remove), - .driver = { - .name = "easy98000_addon", - .owner = THIS_MODULE, - }, -}; - -int __init easy98000_addon_init(void) -{ - return platform_driver_register(&easy98000_addon_driver); -} - -void __exit easy98000_addon_exit(void) -{ - platform_driver_unregister(&easy98000_addon_driver); -} - -module_init(easy98000_addon_init); -module_exit(easy98000_addon_exit); diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/falcon/dev-leds-easy98000-cpld.c b/target/linux/lantiq/files-3.3/arch/mips/lantiq/falcon/dev-leds-easy98000-cpld.c deleted file mode 100644 index 94622cf..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/falcon/dev-leds-easy98000-cpld.c +++ /dev/null @@ -1,161 +0,0 @@ -/* - * EASY98000 CPLD LED driver - * - * Copyright (C) 2010 Ralph Hempel - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "dev-leds-easy98000-cpld.h" - -const char *led_name[8] = { - "ge0_act", - "ge0_link", - "ge1_act", - "ge1_link", - "fe2_act", - "fe2_link", - "fe3_act", - "fe3_link" -}; - -#define cpld_base7 ((u16 *)(KSEG1 | 0x17c0000c)) -#define cpld_base8 ((u16 *)(KSEG1 | 0x17c00012)) - -#define ltq_r16(reg) __raw_readw(reg) -#define ltq_w16(val, reg) __raw_writew(val, reg) - -struct cpld_led_dev { - struct led_classdev cdev; - u8 mask; - u16 *base; -}; - -struct cpld_led_drvdata { - struct cpld_led_dev *led_devs; - int num_leds; -}; - -void led_set(u8 mask, u16 *base) -{ - ltq_w16(ltq_r16(base) | mask, base); -} - -void led_clear(u8 mask, u16 *base) -{ - ltq_w16(ltq_r16(base) & (~mask), base); -} - -void led_blink_clear(u8 mask, u16 *base) -{ - led_clear(mask, base); -} - -static void led_brightness(struct led_classdev *led_cdev, - enum led_brightness value) -{ - struct cpld_led_dev *led_dev = - container_of(led_cdev, struct cpld_led_dev, cdev); - - if (value) - led_set(led_dev->mask, led_dev->base); - else - led_clear(led_dev->mask, led_dev->base); -} - -static int led_probe(struct platform_device *pdev) -{ - int i; - char name[32]; - struct cpld_led_drvdata *drvdata; - int ret = 0; - - drvdata = kzalloc(sizeof(struct cpld_led_drvdata) + - sizeof(struct cpld_led_dev) * MAX_LED, - GFP_KERNEL); - if (!drvdata) - return -ENOMEM; - - drvdata->led_devs = (struct cpld_led_dev *) &drvdata[1]; - - for (i = 0; i < MAX_LED; i++) { - struct cpld_led_dev *led_dev = &drvdata->led_devs[i]; - led_dev->cdev.brightness_set = led_brightness; - led_dev->cdev.default_trigger = NULL; - led_dev->mask = 1 << (i % 8); - if(i < 8) { - sprintf(name, "easy98000-cpld:%s", led_name[i]); - led_dev->base = cpld_base8; - } else { - sprintf(name, "easy98000-cpld:red:%d", i-8); - led_dev->base = cpld_base7; - } - led_dev->cdev.name = name; - ret = led_classdev_register(&pdev->dev, &led_dev->cdev); - if (ret) - goto err; - } - platform_set_drvdata(pdev, drvdata); - return 0; - -err: - printk("led_probe: 3\n"); - for (i = i - 1; i >= 0; i--) - led_classdev_unregister(&drvdata->led_devs[i].cdev); - - kfree(drvdata); - return ret; -} - -static int led_remove(struct platform_device *pdev) -{ - int i; - struct cpld_led_drvdata *drvdata = platform_get_drvdata(pdev); - for (i = 0; i < MAX_LED; i++) - led_classdev_unregister(&drvdata->led_devs[i].cdev); - kfree(drvdata); - return 0; -} - -static struct platform_driver led_driver = { - .probe = led_probe, - .remove = __devexit_p(led_remove), - .driver = { - .name = LED_NAME, - .owner = THIS_MODULE, - }, -}; - -int __init easy98000_cpld_led_init(void) -{ - pr_info(LED_DESC ", Version " LED_VERSION - " (c) Copyright 2011, Lantiq Deutschland GmbH\n"); - return platform_driver_register(&led_driver); -} - -void __exit easy98000_cpld_led_exit(void) -{ - platform_driver_unregister(&led_driver); -} - -module_init(easy98000_cpld_led_init); -module_exit(easy98000_cpld_led_exit); - -MODULE_DESCRIPTION(LED_NAME); -MODULE_DESCRIPTION(LED_DESC); -MODULE_AUTHOR("Ralph Hempel "); -MODULE_LICENSE("GPL v2"); - diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/falcon/dev-leds-easy98000-cpld.h b/target/linux/lantiq/files-3.3/arch/mips/lantiq/falcon/dev-leds-easy98000-cpld.h deleted file mode 100644 index 3160189..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/falcon/dev-leds-easy98000-cpld.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * EASY98000 CPLD LED driver - * - * Copyright (C) 2010 Ralph Hempel - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - * - */ -#ifndef _INCLUDE_EASY98000_CPLD_LED_H_ -#define _INCLUDE_EASY98000_CPLD_LED_H_ - -#define LED_NAME "easy98000_cpld_led" -#define LED_DESC "EASY98000 LED driver" -#define LED_VERSION "1.0.0" - -#define MAX_LED 16 - -#endif /* _INCLUDE_EASY98000_CPLD_LED_H_ */ diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/falcon/mach-95C3AM1.c b/target/linux/lantiq/files-3.3/arch/mips/lantiq/falcon/mach-95C3AM1.c deleted file mode 100644 index 42a3344..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/falcon/mach-95C3AM1.c +++ /dev/null @@ -1,94 +0,0 @@ -#include -#include -#include - -#include - -#include "../machtypes.h" -#include "devices.h" - -#define BOARD_95C3AM1_GPIO_LED_0 10 -#define BOARD_95C3AM1_GPIO_LED_1 11 -#define BOARD_95C3AM1_GPIO_LED_2 12 -#define BOARD_95C3AM1_GPIO_LED_3 13 - -static struct mtd_partition board_95C3AM1_partitions[] = -{ - { - .name = "uboot", - .offset = 0x0, - .size = 0x40000, - }, - { - .name = "uboot_env", - .offset = 0x40000, - .size = 0x40000, /* 2 sectors for redundant env. */ - }, - { - .name = "linux", - .offset = 0x80000, - .size = 0xF80000, /* map only 16 MiB */ - }, -}; - -static struct flash_platform_data board_95C3AM1_flash_platform_data = { - .name = "sflash", - .parts = board_95C3AM1_partitions, - .nr_parts = ARRAY_SIZE(board_95C3AM1_partitions) -}; - -static struct spi_board_info board_95C3AM1_flash_data __initdata = { - .modalias = "m25p80", - .bus_num = 0, - .chip_select = 0, - .max_speed_hz = 10 * 1000 * 1000, - .mode = SPI_MODE_3, - .platform_data = &board_95C3AM1_flash_platform_data -}; - -static struct gpio_led board_95C3AM1_gpio_leds[] __initdata = { - { - .name = "power", - .gpio = BOARD_95C3AM1_GPIO_LED_0, - .active_low = 0, - }, { - .name = "optical", - .gpio = BOARD_95C3AM1_GPIO_LED_1, - .active_low = 0, - }, { - .name = "lan", - .gpio = BOARD_95C3AM1_GPIO_LED_2, - .active_low = 0, - }, { - .name = "update", - .gpio = BOARD_95C3AM1_GPIO_LED_3, - .active_low = 0, - } -}; - -static struct i2c_gpio_platform_data board_95C3AM1_i2c_gpio_data = { - .sda_pin = 107, - .scl_pin = 108, -}; - -static struct platform_device board_95C3AM1_i2c_gpio_device = { - .name = "i2c-gpio", - .id = 0, - .dev = { - .platform_data = &board_95C3AM1_i2c_gpio_data, - } -}; - -static void __init board_95C3AM1_init(void) -{ - falcon_register_i2c(); - falcon_register_spi_flash(&board_95C3AM1_flash_data); - platform_device_register(&board_95C3AM1_i2c_gpio_device); - ltq_add_device_gpio_leds(-1, ARRAY_SIZE(board_95C3AM1_gpio_leds), - board_95C3AM1_gpio_leds); -} - -MIPS_MACHINE(LANTIQ_MACH_95C3AM1, - "95C3AM1", - "95C3AM1 Board", - board_95C3AM1_init); diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/falcon/mach-easy98020.c b/target/linux/lantiq/files-3.3/arch/mips/lantiq/falcon/mach-easy98020.c deleted file mode 100644 index 4cdfc19..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/falcon/mach-easy98020.c +++ /dev/null @@ -1,118 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "../machtypes.h" -#include "devices.h" - -#define EASY98020_GPIO_LED_0 9 -#define EASY98020_GPIO_LED_1 10 -#define EASY98020_GPIO_LED_2 11 -#define EASY98020_GPIO_LED_3 12 -#define EASY98020_GPIO_LED_GE0_ACT 110 -#define EASY98020_GPIO_LED_GE0_LINK 109 -#define EASY98020_GPIO_LED_GE1_ACT 106 -#define EASY98020_GPIO_LED_GE1_LINK 105 - -static struct mtd_partition easy98020_spi_partitions[] = -{ - { - .name = "uboot", - .offset = 0x0, - .size = 0x40000, - }, - { - .name = "uboot_env", - .offset = 0x40000, - .size = 0x40000, /* 2 sectors for redundant env. */ - }, - { - .name = "linux", - .offset = 0x80000, - .size = 0xF80000, /* map only 16 MiB */ - }, -}; - -static struct flash_platform_data easy98020_spi_flash_platform_data = { - .name = "sflash", - .parts = easy98020_spi_partitions, - .nr_parts = ARRAY_SIZE(easy98020_spi_partitions) -}; - -static struct spi_board_info easy98020_spi_flash_data __initdata = { - .modalias = "m25p80", - .bus_num = 0, - .chip_select = 0, - .max_speed_hz = 10 * 1000 * 1000, - .mode = SPI_MODE_3, - .platform_data = &easy98020_spi_flash_platform_data -}; - -static struct gpio_led easy98020_gpio_leds[] __initdata = { - { - .name = "easy98020:green:0", - .gpio = EASY98020_GPIO_LED_0, - .active_low = 0, - }, { - .name = "easy98020:green:1", - .gpio = EASY98020_GPIO_LED_1, - .active_low = 0, - }, { - .name = "easy98020:green:2", - .gpio = EASY98020_GPIO_LED_2, - .active_low = 0, - }, { - .name = "easy98020:green:3", - .gpio = EASY98020_GPIO_LED_3, - .active_low = 0, - }, { - .name = "easy98020:ge0_act", - .gpio = EASY98020_GPIO_LED_GE0_ACT, - .active_low = 0, - }, { - .name = "easy98020:ge0_link", - .gpio = EASY98020_GPIO_LED_GE0_LINK, - .active_low = 0, - }, { - .name = "easy98020:ge1_act", - .gpio = EASY98020_GPIO_LED_GE1_ACT, - .active_low = 0, - }, { - .name = "easy98020:ge1_link", - .gpio = EASY98020_GPIO_LED_GE1_LINK, - .active_low = 0, - } -}; - -static void __init easy98020_init(void) -{ - falcon_register_i2c(); - falcon_register_spi_flash(&easy98020_spi_flash_data); - ltq_add_device_gpio_leds(-1, ARRAY_SIZE(easy98020_gpio_leds), - easy98020_gpio_leds); -} - -MIPS_MACHINE(LANTIQ_MACH_EASY98020, - "EASY98020", - "EASY98020 Eval Board", - easy98020_init); - -MIPS_MACHINE(LANTIQ_MACH_EASY98020_1LAN, - "EASY98020_1LAN", - "EASY98020 Eval Board (1 LAN port)", - easy98020_init); - -MIPS_MACHINE(LANTIQ_MACH_EASY98020_2LAN, - "EASY98020_2LAN", - "EASY98020 Eval Board (2 LAN ports)", - easy98020_init); diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-dwc_otg.c b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-dwc_otg.c deleted file mode 100644 index 56086fa..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-dwc_otg.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * Copyright (C) 2010 John Crispin - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include - -#define LTQ_USB_IOMEM_BASE 0x1e101000 -#define LTQ_USB_IOMEM_SIZE 0x00001000 - -static struct resource resources[] = -{ - [0] = { - .name = "dwc_otg_membase", - .start = LTQ_USB_IOMEM_BASE, - .end = LTQ_USB_IOMEM_BASE + LTQ_USB_IOMEM_SIZE - 1, - .flags = IORESOURCE_MEM, - }, - [1] = { - .name = "dwc_otg_irq", - .flags = IORESOURCE_IRQ, - }, -}; - -static u64 dwc_dmamask = (u32)0x1fffffff; - -static struct platform_device platform_dev = { - .name = "dwc_otg", - .dev = { - .dma_mask = &dwc_dmamask, - }, - .resource = resources, - .num_resources = ARRAY_SIZE(resources), -}; - -int __init -xway_register_dwc(int pin) -{ - struct irq_data d; - d.irq = resources[1].start; - ltq_enable_irq(&d); - resources[1].start = ltq_is_ase() ? LTQ_USB_ASE_INT : LTQ_USB_INT; - platform_dev.dev.platform_data = (void*) pin; - return platform_device_register(&platform_dev); -} diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-dwc_otg.h b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-dwc_otg.h deleted file mode 100644 index 521fad0..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-dwc_otg.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * Copyright (C) 2010 John Crispin - */ - -#ifndef _LTQ_DEV_DWC_H__ -#define _LTQ_DEV_DWC_H__ - -#include - -extern void __init xway_register_dwc(int pin); - -#endif diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-athxk.c b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-athxk.c deleted file mode 100644 index a75abe3..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-athxk.c +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2011 John Crispin - * Copyright (C) 2011 Andrej Vlašić - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include - -#include "dev-wifi-athxk.h" - -extern int (*ltqpci_plat_dev_init)(struct pci_dev *dev); -struct ath5k_platform_data ath5k_pdata; -struct ath9k_platform_data ath9k_pdata = { - .led_pin = -1, - .endian_check = true, -}; - -static int -ath5k_pci_plat_dev_init(struct pci_dev *dev) -{ - dev->dev.platform_data = &ath5k_pdata; - return 0; -} - -static int -ath9k_pci_plat_dev_init(struct pci_dev *dev) -{ - dev->dev.platform_data = &ath9k_pdata; - return 0; -} - -void __init -ltq_register_ath5k(u16 *eeprom_data, u8 *macaddr) -{ - ath5k_pdata.eeprom_data = eeprom_data; - ath5k_pdata.macaddr = macaddr; - ltqpci_plat_dev_init = ath5k_pci_plat_dev_init; -} - -void __init -ltq_register_ath9k(u16 *eeprom_data, u8 *macaddr) -{ - memcpy(ath9k_pdata.eeprom_data, eeprom_data, sizeof(ath9k_pdata.eeprom_data)); - ath9k_pdata.macaddr = macaddr; - ltqpci_plat_dev_init = ath9k_pci_plat_dev_init; -} diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-athxk.h b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-athxk.h deleted file mode 100644 index 5fdb46b..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-athxk.h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (C) 2011 John Crispin - * Copyright (C) 2011 Andrej Vlašić - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - */ - -#ifndef _DEV_WIFI_ATHXK_H__ -#define _DEV_WIFI_ATHXK_H__ - -extern void ltq_register_ath5k(u16 *eeprom_data, u8 *macaddr); -extern void ltq_register_ath9k(u16 *eeprom_data, u8 *macaddr); - -#endif diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-rt2x00.c b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-rt2x00.c deleted file mode 100644 index 8e271f0..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-rt2x00.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (C) 2011 John Crispin - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - */ - -#include -#include -#include -#include - -#include "dev-wifi-rt2x00.h" - -extern int (*ltqpci_plat_dev_init)(struct pci_dev *dev); -struct rt2x00_platform_data rt2x00_pdata; - -static int -rt2x00_pci_plat_dev_init(struct pci_dev *dev) -{ - dev->dev.platform_data = &rt2x00_pdata; - return 0; -} - -void __init -ltq_register_rt2x00(const char *firmware, const u8 *mac) -{ - rt2x00_pdata.eeprom_file_name = kstrdup(firmware, GFP_KERNEL); - rt2x00_pdata.mac_address = mac; - ltqpci_plat_dev_init = rt2x00_pci_plat_dev_init; -} diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-rt2x00.h b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-rt2x00.h deleted file mode 100644 index 941c265..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-rt2x00.h +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright (C) 2011 John Crispin - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - */ - -#ifndef _DEV_WIFI_RT2X00_H__ -#define _DEV_WIFI_RT2X00_H__ - -extern void ltq_register_rt2x00(const char *firmware, const u8 *mac); - -#endif diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-arv.c b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-arv.c deleted file mode 100644 index 4abb2d5..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-arv.c +++ /dev/null @@ -1,788 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - * - * Copyright (C) 2010 John Crispin - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "../machtypes.h" -#include "dev-wifi-rt2x00.h" -#include "dev-wifi-athxk.h" -#include "devices.h" -#include "dev-dwc_otg.h" -#include "pci-ath-fixup.h" - -static struct mtd_partition arv45xx_brnboot_partitions[] = -{ - { - .name = "brn-boot", - .offset = 0x0, - .size = 0x20000, - }, - { - .name = "config", - .offset = 0x20000, - .size = 0x30000, - }, - { - .name = "linux", - .offset = 0x50000, - .size = 0x390000, - }, - { - .name = "reserved", /* 12-byte signature at 0x3efff4 :/ */ - .offset = 0x3e0000, - .size = 0x010000, - }, - { - .name = "eeprom", - .offset = 0x3f0000, - .size = 0x10000, - }, -}; - -static struct mtd_partition arv75xx_brnboot_partitions[] = -{ - { - .name = "brn-boot", - .offset = 0x0, - .size = 0x20000, - }, - { - .name = "config", - .offset = 0x20000, - .size = 0x40000, - }, - { - .name = "linux", - .offset = 0x440000, - .size = 0x3a0000, - }, - { - .name = "reserved", /* 12-byte signature at 0x7efff4 :/ */ - .offset = 0x7e0000, - .size = 0x010000, - }, - { - .name = "board_config", - .offset = 0x7f0000, - .size = 0x10000, - }, -}; - -/* - * this is generic configuration for all arv based boards, note that it can be - * rewriten in arv_load_nor() - */ -static struct mtd_partition arv_partitions[] = -{ - { - .name = "uboot", - .offset = 0x0, - .size = 0x20000, - }, - { - .name = "uboot_env", - .offset = 0x20000, - .size = 0x10000, - }, - { - .name = "linux", - .offset = 0x30000, - .size = 0x3c0000, - }, - { - .name = "board_config", - .offset = 0x3f0000, - .size = 0x10000, - }, -}; - -static struct physmap_flash_data arv45xx_brnboot_flash_data = { - .nr_parts = ARRAY_SIZE(arv45xx_brnboot_partitions), - .parts = arv45xx_brnboot_partitions, -}; - -static struct physmap_flash_data arv75xx_brnboot_flash_data = { - .nr_parts = ARRAY_SIZE(arv75xx_brnboot_partitions), - .parts = arv75xx_brnboot_partitions, -}; - -static struct physmap_flash_data arv_flash_data = { - .nr_parts = ARRAY_SIZE(arv_partitions), - .parts = arv_partitions, -}; - -static struct ltq_pci_data ltq_pci_data = { - .clock = PCI_CLOCK_EXT, - .gpio = PCI_GNT1 | PCI_REQ1, - .irq = { - [14] = INT_NUM_IM0_IRL0 + 22, - }, -}; - -static struct ltq_eth_data ltq_eth_data = { - .mii_mode = PHY_INTERFACE_MODE_RMII, -}; - -static struct gpio_led -arv4510pw_gpio_leds[] __initdata = { - { .name = "soc:green:foo", .gpio = 4, .active_low = 1, }, -}; - -static struct gpio_led -arv4518pw_gpio_leds[] __initdata = { - { .name = "soc:green:power", .gpio = 3, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:adsl", .gpio = 4, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:internet", .gpio = 5, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:wifi", .gpio = 6, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:yellow:wps", .gpio = 7, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:red:fail", .gpio = 8, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:usb", .gpio = 19, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:voip", .gpio = 100, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:fxs1", .gpio = 101, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:fxs2", .gpio = 102, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:fxo", .gpio = 103, .active_low = 1, .default_trigger = "default-on" }, -}; - -static struct gpio_keys_button -arv4518pw_gpio_keys[] __initdata = { - { - .desc = "wifi", - .type = EV_KEY, - .code = BTN_0, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 28, - .active_low = 1, - }, - { - .desc = "reset", - .type = EV_KEY, - .code = BTN_1, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 30, - .active_low = 1, - }, - { - .desc = "wps", - .type = EV_KEY, - .code = BTN_2, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 29, - .active_low = 1, - }, -}; - -static struct gpio_led -arv4519pw_gpio_leds[] __initdata = { - { .name = "soc:red:power", .gpio = 7, .active_low = 1, }, - { .name = "soc:green:power", .gpio = 2, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:wifi", .gpio = 6, .active_low = 1, }, - { .name = "soc:green:adsl", .gpio = 4, .active_low = 1, }, - { .name = "soc:green:internet", .gpio = 5, .active_low = 1, }, - { .name = "soc:red:internet", .gpio = 8, .active_low = 1, }, - { .name = "soc:green:voip", .gpio = 100, .active_low = 1, }, - { .name = "soc:green:phone1", .gpio = 101, .active_low = 1, }, - { .name = "soc:green:phone2", .gpio = 102, .active_low = 1, }, - { .name = "soc:green:fxo", .gpio = 103, .active_low = 1, }, - { .name = "soc:green:usb", .gpio = 19, .active_low = 1, }, - { .name = "soc:orange:wps", .gpio = 104, .active_low = 1, }, - { .name = "soc:green:wps", .gpio = 105, .active_low = 1, }, - { .name = "soc:red:wps", .gpio = 106, .active_low = 1, }, - -}; - -static struct gpio_keys_button -arv4519pw_gpio_keys[] __initdata = { - { - .desc = "reset", - .type = EV_KEY, - .code = BTN_1, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 30, - .active_low = 1, - }, - { - .desc = "wlan", - .type = EV_KEY, - .code = BTN_2, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 28, - .active_low = 1, - }, -}; - -static struct gpio_led -arv4520pw_gpio_leds[] __initdata = { - { .name = "soc:blue:power", .gpio = 3, .active_low = 1, }, - { .name = "soc:blue:adsl", .gpio = 4, .active_low = 1, }, - { .name = "soc:blue:internet", .gpio = 5, .active_low = 1, }, - { .name = "soc:red:power", .gpio = 6, .active_low = 1, }, - { .name = "soc:yellow:wps", .gpio = 7, .active_low = 1, }, - { .name = "soc:red:wps", .gpio = 9, .active_low = 1, }, - { .name = "soc:blue:voip", .gpio = 100, .active_low = 1, }, - { .name = "soc:blue:fxs1", .gpio = 101, .active_low = 1, }, - { .name = "soc:blue:fxs2", .gpio = 102, .active_low = 1, }, - { .name = "soc:blue:fxo", .gpio = 103, .active_low = 1, }, - { .name = "soc:blue:voice", .gpio = 104, .active_low = 1, }, - { .name = "soc:blue:usb", .gpio = 105, .active_low = 1, }, - { .name = "soc:blue:wifi", .gpio = 106, .active_low = 1, }, -}; - -static struct gpio_led -arv452cpw_gpio_leds[] __initdata = { - { .name = "soc:blue:power", .gpio = 3, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:blue:adsl", .gpio = 4, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:blue:isdn", .gpio = 5, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:red:power", .gpio = 6, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:yellow:wps", .gpio = 7, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:red:wps", .gpio = 9, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:blue:fxs1", .gpio = 100, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:blue:fxs2", .gpio = 101, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:blue:wps", .gpio = 102, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:blue:fxo", .gpio = 103, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:blue:voice", .gpio = 104, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:blue:usb", .gpio = 105, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:blue:wifi", .gpio = 106, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:blue:internet", .gpio = 108, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:red:internet", .gpio = 109, .active_low = 1, .default_trigger = "default-on" }, -}; - -static struct gpio_led -arv4525pw_gpio_leds[] __initdata = { - { .name = "soc:green:dsl", .gpio = 6, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:wifi", .gpio = 8, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:online", .gpio = 9, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:fxs-internet", .gpio = 5, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:fxs-festnetz", .gpio = 4, .active_low = 1, .default_trigger = "default-on" }, -}; - -#define ARV4525PW_PHYRESET 13 -#define ARV4525PW_RELAY 31 - -static struct gpio -arv4525pw_gpios[] __initdata = { - { ARV4525PW_PHYRESET, GPIOF_OUT_INIT_HIGH, "phyreset" }, - { ARV4525PW_RELAY, GPIOF_OUT_INIT_HIGH, "relay" }, -}; - - -static struct gpio_led -arv752dpw22_gpio_leds[] __initdata = { - { .name = "soc:blue:power", .gpio = 3, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:red:internet", .gpio = 5, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:red:power", .gpio = 6, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:red:wps", .gpio = 8, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:red:fxo", .gpio = 103, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:red:voice", .gpio = 104, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:usb", .gpio = 105, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:wifi", .gpio = 106, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:wifi1", .gpio = 107, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:blue:wifi", .gpio = 108, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:blue:wifi1", .gpio = 109, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:eth1", .gpio = 111, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:eth2", .gpio = 112, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:eth3", .gpio = 113, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:eth4", .gpio = 114, .active_low = 1, .default_trigger = "default-on", }, -}; - -static struct gpio_keys_button -arv752dpw22_gpio_keys[] __initdata = { - { - .desc = "btn0", - .type = EV_KEY, - .code = BTN_0, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 12, - .active_low = 1, - }, - { - .desc = "btn1", - .type = EV_KEY, - .code = BTN_1, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 13, - .active_low = 1, - }, - { - .desc = "btn2", - .type = EV_KEY, - .code = BTN_2, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 28, - .active_low = 1, - }, -}; - -static struct gpio_led -arv7518pw_gpio_leds[] __initdata = { - { .name = "soc:red:power", .gpio = 7, .active_low = 1, }, - { .name = "soc:green:power", .gpio = 2, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:wifi", .gpio = 6, .active_low = 1, }, - { .name = "soc:green:adsl", .gpio = 4, .active_low = 1, }, - { .name = "soc:green:internet", .gpio = 5, .active_low = 1, }, - { .name = "soc:red:internet", .gpio = 8, .active_low = 1, }, - { .name = "soc:green:voip", .gpio = 100, .active_low = 1, }, - { .name = "soc:green:phone1", .gpio = 101, .active_low = 1, }, - { .name = "soc:green:phone2", .gpio = 102, .active_low = 1, }, - { .name = "soc:orange:fail", .gpio = 103, .active_low = 1, }, - { .name = "soc:green:usb", .gpio = 19, .active_low = 1, }, - { .name = "soc:orange:wps", .gpio = 104, .active_low = 1, }, - { .name = "soc:green:wps", .gpio = 105, .active_low = 1, }, - { .name = "soc:red:wps", .gpio = 106, .active_low = 1, }, - -}; - -static struct gpio_keys_button -arv7518pw_gpio_keys[] __initdata = { - /*{ - .desc = "reset", - .type = EV_KEY, - .code = BTN_1, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 23, - .active_low = 1, - },*/ - { - .desc = "wifi", - .type = EV_KEY, - .code = BTN_2, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 25, - .active_low = 1, - }, -}; - -static struct gpio_keys_button -arv7525pw_gpio_keys[] __initdata = { - { - .desc = "restart", - .type = EV_KEY, - .code = BTN_0, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 29, - .active_low = 1, - }, -}; - -static void __init -arv_load_nor(unsigned int max) -{ -#define UBOOT_MAGIC 0x27051956 - - int i; - int sector = -1; - - if (ltq_brn_boot) { - if (max == 0x800000) - ltq_register_nor(&arv75xx_brnboot_flash_data); - else - ltq_register_nor(&arv45xx_brnboot_flash_data); - return; - } - - for (i = 1; i < 4 && sector < 0; i++) { - unsigned int uboot_magic; - memcpy_fromio(&uboot_magic, (void *)KSEG1ADDR(LTQ_FLASH_START) + (i * 0x10000), 4); - if (uboot_magic == UBOOT_MAGIC) - sector = i; - } - - if (sector < 0) - return; - - arv_partitions[0].size = arv_partitions[1].offset = (sector - 1) * 0x10000; - arv_partitions[2].offset = arv_partitions[0].size + 0x10000; - arv_partitions[2].size = max - arv_partitions[2].offset - 0x10000; - arv_partitions[3].offset = max - 0x10000; - ltq_register_nor(&arv_flash_data); -} - -static void __init -arv_register_ethernet(unsigned int mac_addr) -{ - memcpy_fromio(<q_eth_data.mac.sa_data, - (void *)KSEG1ADDR(LTQ_FLASH_START + mac_addr), 6); - ltq_register_etop(<q_eth_data); -} - -static u16 arv_ath5k_eeprom_data[ATH5K_PLAT_EEP_MAX_WORDS]; -static u16 arv_ath9k_eeprom_data[ATH9K_PLAT_EEP_MAX_WORDS]; -static u8 arv_athxk_eeprom_mac[6]; - -static void __init -arv_register_ath5k(unsigned int ath_addr, unsigned int mac_addr) -{ - int i; - - memcpy_fromio(arv_athxk_eeprom_mac, - (void *)KSEG1ADDR(LTQ_FLASH_START + mac_addr), 6); - arv_athxk_eeprom_mac[5]++; - memcpy_fromio(arv_ath5k_eeprom_data, - (void *)KSEG1ADDR(LTQ_FLASH_START + ath_addr), ATH5K_PLAT_EEP_MAX_WORDS); - // swap eeprom bytes - for (i = 0; i < ATH5K_PLAT_EEP_MAX_WORDS>>1; i++) { - arv_ath5k_eeprom_data[i] = swab16(arv_ath5k_eeprom_data[i]); - if (i == 0x17e>>1) { - /* - * regdomain is invalid. it's unknown how did original - * fw convered value to 0x82d4 so for now force to 0x67 - */ - arv_ath5k_eeprom_data[i] &= 0x0000; - arv_ath5k_eeprom_data[i] |= 0x67; - } - } -} - -static void __init -arv_register_ath9k(unsigned int ath_addr, unsigned int mac_addr) -{ - int i; - u16 *eepdata, sum, el; - - memcpy_fromio(arv_athxk_eeprom_mac, - (void *)KSEG1ADDR(LTQ_FLASH_START + mac_addr), 6); - arv_athxk_eeprom_mac[5]++; - memcpy_fromio(arv_ath9k_eeprom_data, - (void *)KSEG1ADDR(LTQ_FLASH_START + ath_addr), ATH9K_PLAT_EEP_MAX_WORDS); - - // force regdomain to 0x67 - arv_ath9k_eeprom_data[0x208>>1] = 0x67; - - // calculate new checksum - sum = arv_ath9k_eeprom_data[0x200>>1]; - el = sum / sizeof(u16) - 2; /* skip length and (old) checksum */ - eepdata = (u16 *) (&arv_ath9k_eeprom_data[0x204>>1]); /* after checksum */ - for (i = 0; i < el; i++) - sum ^= *eepdata++; - sum ^= 0xffff; - arv_ath9k_eeprom_data[0x202>>1] = sum; -} - -static void __init -arv3527p_init(void) -{ -#define ARV3527P_MAC_ADDR 0x3f0016 - - ltq_register_gpio_stp(); - // ltq_add_device_gpio_leds(arv3527p_gpio_leds, ARRAY_SIZE(arv3527p_gpio_leds)); - arv_load_nor(0x400000); - arv_register_ethernet(ARV3527P_MAC_ADDR); -} - -MIPS_MACHINE(LANTIQ_MACH_ARV3527P, - "ARV3527P", - "ARV3527P - Arcor Easybox 401", - arv3527p_init); - -static void __init -arv4510pw_init(void) -{ -#define ARV4510PW_MAC_ADDR 0x3f0014 - - ltq_register_gpio_stp(); - ltq_add_device_gpio_leds(-1, ARRAY_SIZE(arv4510pw_gpio_leds), arv4510pw_gpio_leds); - arv_load_nor(0x400000); - ltq_pci_data.irq[12] = (INT_NUM_IM2_IRL0 + 31); - ltq_pci_data.irq[15] = (INT_NUM_IM0_IRL0 + 26); - ltq_pci_data.gpio |= PCI_EXIN2 | PCI_REQ2; - ltq_register_pci(<q_pci_data); - arv_register_ethernet(ARV4510PW_MAC_ADDR); -} - -MIPS_MACHINE(LANTIQ_MACH_ARV4510PW, - "ARV4510PW", - "ARV4510PW - Wippies Homebox", - arv4510pw_init); - -static void __init -arv4518pw_init(void) -{ -#define ARV4518PW_EBU 0 -#define ARV4518PW_USB 14 -#define ARV4518PW_SWITCH_RESET 13 -#define ARV4518PW_ATH_ADDR 0x3f0400 -#define ARV4518PW_MADWIFI_ADDR 0xb03f0400 -#define ARV4518PW_MAC_ADDR 0x3f0016 - - ltq_register_gpio_ebu(ARV4518PW_EBU); - ltq_add_device_gpio_leds(-1, ARRAY_SIZE(arv4518pw_gpio_leds), arv4518pw_gpio_leds); - ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, - ARRAY_SIZE(arv4518pw_gpio_keys), arv4518pw_gpio_keys); - arv_load_nor(0x400000); - ltq_pci_data.gpio = PCI_GNT2 | PCI_REQ2; - ltq_register_pci(<q_pci_data); - xway_register_dwc(ARV4518PW_USB); - arv_register_ethernet(ARV4518PW_MAC_ADDR); - arv_register_ath5k(ARV4518PW_ATH_ADDR, ARV4518PW_MAC_ADDR); - ltq_register_ath5k(arv_ath5k_eeprom_data, arv_athxk_eeprom_mac); - - gpio_request(ARV4518PW_SWITCH_RESET, "switch"); - gpio_direction_output(ARV4518PW_SWITCH_RESET, 1); - gpio_export(ARV4518PW_SWITCH_RESET, 0); -} - -MIPS_MACHINE(LANTIQ_MACH_ARV4518PW, - "ARV4518PW", - "ARV4518PW - SMC7908A-ISP, Airties WAV-221", - arv4518pw_init); - -static void __init -arv4519pw_init(void) -{ -#define ARV4519PW_EBU 0 -#define ARV4519PW_USB 14 -#define ARV4519PW_RELAY 31 -#define ARV4519PW_SWITCH_RESET 13 -#define ARV4519PW_ATH_ADDR 0x3f0400 -#define ARV4519PW_MAC_ADDR 0x3f0016 - - arv_load_nor(0x400000); - ltq_register_gpio_ebu(ARV4519PW_EBU); - ltq_add_device_gpio_leds(-1, ARRAY_SIZE(arv4519pw_gpio_leds), arv4519pw_gpio_leds); - ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, - ARRAY_SIZE(arv4519pw_gpio_keys), arv4519pw_gpio_keys); - ltq_pci_data.gpio = PCI_GNT2 | PCI_REQ1; - ltq_register_pci(<q_pci_data); - xway_register_dwc(ARV4519PW_USB); - arv_register_ethernet(ARV4519PW_MAC_ADDR); - arv_register_ath5k(ARV4519PW_ATH_ADDR, ARV4519PW_MAC_ADDR); - ltq_register_ath5k(arv_ath5k_eeprom_data, arv_athxk_eeprom_mac); - - gpio_request(ARV4519PW_RELAY, "relay"); - gpio_direction_output(ARV4519PW_RELAY, 1); - gpio_export(ARV4519PW_RELAY, 0); - - gpio_request(ARV4519PW_SWITCH_RESET, "switch"); - gpio_set_value(ARV4519PW_SWITCH_RESET, 1); - gpio_export(ARV4519PW_SWITCH_RESET, 0); -} - -MIPS_MACHINE(LANTIQ_MACH_ARV4519PW, - "ARV4519PW", - "ARV4519PW - Vodafone, Pirelli", - arv4519pw_init); - -static void __init -arv4520pw_init(void) -{ -#define ARV4520PW_EBU 0x400 -#define ARV4520PW_USB 28 -#define ARV4520PW_SWITCH_RESET 110 -#define ARV4520PW_MAC_ADDR 0x3f0016 - - ltq_register_gpio_ebu(ARV4520PW_EBU); - ltq_add_device_gpio_leds(-1, ARRAY_SIZE(arv4520pw_gpio_leds), arv4520pw_gpio_leds); - arv_load_nor(0x400000); - ltq_register_pci(<q_pci_data); - ltq_register_tapi(); - arv_register_ethernet(ARV4520PW_MAC_ADDR); - ltq_register_rt2x00(NULL, (const u8 *) ltq_eth_data.mac.sa_data); - xway_register_dwc(ARV4520PW_USB); - - gpio_request(ARV4520PW_SWITCH_RESET, "switch"); - gpio_set_value(ARV4520PW_SWITCH_RESET, 1); -} - -MIPS_MACHINE(LANTIQ_MACH_ARV4520PW, - "ARV4520PW", - "ARV4520PW - Airties WAV-281, Arcor A800", - arv4520pw_init); - -static void __init -arv452Cpw_init(void) -{ -#define ARV452CPW_EBU 0x77f -#define ARV452CPW_USB 28 -#define ARV452CPW_RELAY1 31 -#define ARV452CPW_RELAY2 107 -#define ARV452CPW_SWITCH_RESET 110 -#define ARV452CPW_ATH_ADDR 0x3f0400 -#define ARV452CPW_MADWIFI_ADDR 0xb03f0400 -#define ARV452CPW_MAC_ADDR 0x3f0016 - - ltq_register_gpio_ebu(ARV452CPW_EBU); - ltq_add_device_gpio_leds(-1, ARRAY_SIZE(arv452cpw_gpio_leds), arv452cpw_gpio_leds); - arv_load_nor(0x400000); - ltq_register_pci(<q_pci_data); - xway_register_dwc(ARV452CPW_USB); - arv_register_ethernet(ARV452CPW_MAC_ADDR); - arv_register_ath5k(ARV452CPW_ATH_ADDR, ARV452CPW_MAC_ADDR); - ltq_register_ath5k(arv_ath5k_eeprom_data, arv_athxk_eeprom_mac); - - gpio_request(ARV452CPW_SWITCH_RESET, "switch"); - gpio_set_value(ARV452CPW_SWITCH_RESET, 1); - gpio_export(ARV452CPW_SWITCH_RESET, 0); - - gpio_request(ARV452CPW_RELAY1, "relay1"); - gpio_direction_output(ARV452CPW_RELAY1, 1); - gpio_export(ARV452CPW_RELAY1, 0); - - gpio_request(ARV452CPW_RELAY2, "relay2"); - gpio_set_value(ARV452CPW_RELAY2, 1); - gpio_export(ARV452CPW_RELAY2, 0); -} - -MIPS_MACHINE(LANTIQ_MACH_ARV452CPW, - "ARV452CPW", - "ARV452CPW - Arcor A801", - arv452Cpw_init); - -static void __init -arv4525pw_init(void) -{ -#define ARV4525PW_ATH_ADDR 0x3f0400 -#define ARV4525PW_MADWIFI_ADDR 0xb03f0400 -#define ARV4525PW_MAC_ADDR 0x3f0016 - - arv_load_nor(0x400000); - ltq_add_device_gpio_leds(-1, ARRAY_SIZE(arv4525pw_gpio_leds), arv4525pw_gpio_leds); - gpio_request_array(arv4525pw_gpios, ARRAY_SIZE(arv4525pw_gpios)); - gpio_export(ARV4525PW_RELAY, false); - gpio_export(ARV4525PW_PHYRESET, false); - ltq_pci_data.clock = PCI_CLOCK_INT; - ltq_register_pci(<q_pci_data); - arv_register_ath5k(ARV4525PW_ATH_ADDR, ARV4525PW_MADWIFI_ADDR); - ltq_register_ath5k(arv_ath5k_eeprom_data, arv_athxk_eeprom_mac); - ltq_eth_data.mii_mode = PHY_INTERFACE_MODE_MII; - arv_register_ethernet(ARV4525PW_MAC_ADDR); -} - -MIPS_MACHINE(LANTIQ_MACH_ARV4525PW, - "ARV4525PW", - "ARV4525PW - Speedport W502V", - arv4525pw_init); - -static void __init -arv7525pw_init(void) -{ -#define ARV7525P_MAC_ADDR 0x3f0016 - - arv_load_nor(0x400000); - ltq_add_device_gpio_leds(-1, ARRAY_SIZE(arv4525pw_gpio_leds), arv4525pw_gpio_leds); - ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, - ARRAY_SIZE(arv7525pw_gpio_keys), arv7525pw_gpio_keys); - ltq_pci_data.clock = PCI_CLOCK_INT; - ltq_pci_data.gpio = PCI_GNT1 | PCI_EXIN1; - ltq_pci_data.irq[14] = (INT_NUM_IM3_IRL0 + 31); - ltq_register_pci(<q_pci_data); - ltq_eth_data.mii_mode = PHY_INTERFACE_MODE_MII; - ltq_register_rt2x00("RT2860.eeprom", NULL); - ltq_register_tapi(); - arv_register_ethernet(ARV7525P_MAC_ADDR); -} - -MIPS_MACHINE(LANTIQ_MACH_ARV7525PW, - "ARV7525PW", - "ARV7525PW - Speedport W303V", - arv7525pw_init); - -static void __init -arv7518pw_init(void) -{ -#define ARV7518PW_EBU 0x2 -#define ARV7518PW_USB 14 -#define ARV7518PW_SWITCH_RESET 13 -#define ARV7518PW_ATH_ADDR 0x7f0400 -#define ARV7518PW_MAC_ADDR 0x7f0016 - - arv_load_nor(0x800000); - ltq_register_gpio_ebu(ARV7518PW_EBU); - ltq_add_device_gpio_leds(-1, ARRAY_SIZE(arv7518pw_gpio_leds), arv7518pw_gpio_leds); - ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, - ARRAY_SIZE(arv7518pw_gpio_keys), arv7518pw_gpio_keys); - ltq_register_pci(<q_pci_data); - ltq_register_tapi(); - xway_register_dwc(ARV7518PW_USB); - arv_register_ethernet(ARV7518PW_MAC_ADDR); - arv_register_ath9k(ARV7518PW_ATH_ADDR, ARV7518PW_MAC_ADDR); - ltq_register_ath9k(arv_ath9k_eeprom_data, arv_athxk_eeprom_mac); - ltq_pci_ath_fixup(14, arv_ath9k_eeprom_data); - - gpio_request(ARV7518PW_SWITCH_RESET, "switch"); - gpio_direction_output(ARV7518PW_SWITCH_RESET, 1); - gpio_export(ARV7518PW_SWITCH_RESET, 0); -} - -MIPS_MACHINE(LANTIQ_MACH_ARV7518PW, - "ARV7518PW", - "ARV7518PW - ASTORIA", - arv7518pw_init); - -static void __init -arv752dpw22_init(void) -{ -#define ARV752DPW22_EBU 0x2 -#define ARV752DPW22_USB 100 -#define ARV752DPW22_RELAY 101 -#define ARV752DPW22_MAC_ADDR 0x7f0016 - - arv_load_nor(0x800000); - ltq_register_gpio_ebu(ARV752DPW22_EBU); - ltq_add_device_gpio_leds(-1, ARRAY_SIZE(arv752dpw22_gpio_leds), arv752dpw22_gpio_leds); - ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, - ARRAY_SIZE(arv752dpw22_gpio_keys), arv752dpw22_gpio_keys); - ltq_pci_data.irq[15] = (INT_NUM_IM3_IRL0 + 31); - ltq_pci_data.gpio |= PCI_EXIN1 | PCI_REQ2; - ltq_register_pci(<q_pci_data); - xway_register_dwc(ARV752DPW22_USB); - arv_register_ethernet(ARV752DPW22_MAC_ADDR); - - gpio_request(ARV752DPW22_RELAY, "relay"); - gpio_set_value(ARV752DPW22_RELAY, 1); - gpio_export(ARV752DPW22_RELAY, 0); -} - -MIPS_MACHINE(LANTIQ_MACH_ARV752DPW22, - "ARV752DPW22", - "ARV752DPW22 - Arcor A803", - arv752dpw22_init); - -static void __init -arv752dpw_init(void) -{ -#define ARV752DPW22_EBU 0x2 -#define ARV752DPW22_USB 100 -#define ARV752DPW22_RELAY 101 -#define ARV752DPW22_MAC_ADDR 0x7f0016 - - arv_load_nor(0x800000); - ltq_register_gpio_ebu(ARV752DPW22_EBU); - ltq_add_device_gpio_leds(-1, ARRAY_SIZE(arv752dpw22_gpio_leds), arv752dpw22_gpio_leds); - ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, ARRAY_SIZE(arv752dpw22_gpio_keys), arv752dpw22_gpio_keys); - ltq_pci_data.irq[14] = (INT_NUM_IM3_IRL0 + 31); - ltq_pci_data.gpio |= PCI_EXIN1 | PCI_REQ2; - ltq_register_pci(<q_pci_data); - xway_register_dwc(ARV752DPW22_USB); - ltq_register_rt2x00("RT2860.eeprom", NULL); - arv_register_ethernet(ARV752DPW22_MAC_ADDR); - gpio_request(ARV752DPW22_RELAY, "relay"); - gpio_set_value(ARV752DPW22_RELAY, 1); - gpio_export(ARV752DPW22_RELAY, 0); - -} - -MIPS_MACHINE(LANTIQ_MACH_ARV752DPW, - "ARV752DPW", - "ARV752DPW - Arcor A802", - arv752dpw_init); diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-bthomehubv2b.c b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-bthomehubv2b.c deleted file mode 100644 index 44fe2f4..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-bthomehubv2b.c +++ /dev/null @@ -1,542 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - * - * Copyright (C) 2011 Andrej Vlašić - * Copyright (C) 2011 Luka Perkov - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "../machtypes.h" -//#include "dev-wifi-ath9k.h" -#include "devices.h" -#include "dev-dwc_otg.h" - -#undef USE_BTHH_GPIO_INIT - -// this reads certain data from u-boot if it's there -#define USE_UBOOT_ENV_DATA - -#define UBOOT_ENV_OFFSET 0x040000 -#define UBOOT_ENV_SIZE 0x010000 - -#ifdef NAND_ORGLAYOUT -// this is only here for reference -// definition of NAND flash area -static struct mtd_partition bthomehubv2b_nand_partitions[] = -{ - { - .name = "ART", - .offset = 0x0000000, - .size = 0x0004000, - }, - { - .name = "image1", - .offset = 0x0004000, - .size = 0x0E00000, - }, - { - .name = "unknown1", - .offset = 0x0E04000, - .size = 0x00FC000, - }, - { - .name = "image2", - .offset = 0x0F00000, - .size = 0x0E00000, - }, - { - .name = "unknown2", - .offset = 0x1D00000, - .size = 0x0300000, - }, - -}; -#endif - -#ifdef NAND_KEEPOPENRG -// this allows both firmwares to co-exist - -static struct mtd_partition bthomehubv2b_nand_partitions[] = -{ - { - .name = "art", - .offset = 0x0000000, - .size = 0x0004000, - }, - { - .name = "Image1", - .offset = 0x0004000, - .size = 0x0E00000, - }, - { - .name = "linux", - .offset = 0x0E04000, - .size = 0x11fC000, - }, - { - .name = "wholeflash", - .offset = 0x0000000, - .size = 0x2000000, - }, - -}; -#endif - -// this gives more jffs2 by overwriting openrg - -static struct mtd_partition bthomehubv2b_nand_partitions[] = -{ - { - .name = "art", - .offset = 0x0000000, - .size = 0x0004000, - }, - { - .name = "linux", - .offset = 0x0004000, - .size = 0x1ffC000, - }, - { - .name = "wholeflash", - .offset = 0x0000000, - .size = 0x2000000, - }, - -}; - -extern void __init xway_register_nand(struct mtd_partition *parts, int count); - -// end BTHH_USE_NAND - -static struct gpio_led -bthomehubv2b_gpio_leds[] __initdata = { - - { .name = "soc:orange:upgrading", .gpio = 213, }, - { .name = "soc:orange:phone", .gpio = 214, }, - { .name = "soc:blue:phone", .gpio = 215, }, - { .name = "soc:orange:wireless", .gpio = 216, }, - { .name = "soc:blue:wireless", .gpio = 217, }, - { .name = "soc:red:broadband", .gpio = 218, }, - { .name = "soc:orange:broadband", .gpio = 219, }, - { .name = "soc:blue:broadband", .gpio = 220, }, - { .name = "soc:red:power", .gpio = 221, }, - { .name = "soc:orange:power", .gpio = 222, }, - { .name = "soc:blue:power", .gpio = 223, }, -}; - -static struct gpio_keys_button -bthomehubv2b_gpio_keys[] __initdata = { - { - .desc = "restart", - .type = EV_KEY, - .code = BTN_0, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 2, - .active_low = 1, - }, - { - .desc = "findhandset", - .type = EV_KEY, - .code = BTN_1, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 15, - .active_low = 1, - }, - { - .desc = "wps", - .type = EV_KEY, - .code = BTN_2, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 22, - .active_low = 1, - }, -}; - -// definition of NOR flash area - as per original. -static struct mtd_partition bthomehubv2b_partitions[] = -{ - { - .name = "uboot", - .offset = 0x000000, - .size = 0x040000, - }, - { - .name = "uboot_env", - .offset = UBOOT_ENV_OFFSET, - .size = UBOOT_ENV_SIZE, - }, - { - .name = "rg_conf_1", - .offset = 0x050000, - .size = 0x010000, - }, - { - .name = "rg_conf_2", - .offset = 0x060000, - .size = 0x010000, - }, - { - .name = "rg_conf_factory", - .offset = 0x070000, - .size = 0x010000, - }, -}; - - -/* nor flash */ -/* bt homehubv2b has a very small nor flash */ -/* so make it look for a small one, else we get a lot of alias chips identified - */ -/* not a bug problem, but fills the logs. */ -static struct resource bthhv2b_nor_resource = - MEM_RES("nor", LTQ_FLASH_START, 0x80000); - -static struct platform_device ltq_nor = { - .name = "ltq_nor", - .resource = &bthhv2b_nor_resource, - .num_resources = 1, -}; - -static void __init bthhv2b_register_nor(struct physmap_flash_data *data) -{ - ltq_nor.dev.platform_data = data; - platform_device_register(<q_nor); -} - -static struct physmap_flash_data bthomehubv2b_flash_data = { - .nr_parts = ARRAY_SIZE(bthomehubv2b_partitions), - .parts = bthomehubv2b_partitions, -}; - - - - -static struct ltq_pci_data ltq_pci_data = { - .clock = PCI_CLOCK_INT, - .gpio = PCI_GNT1 | PCI_REQ1, - .irq = { [14] = INT_NUM_IM0_IRL0 + 22, }, -}; - - - - -static struct ltq_eth_data ltq_eth_data = { - .mii_mode = PHY_INTERFACE_MODE_MII, -}; - - - - -static char __init *get_uboot_env_var(char *haystack, int haystack_len, char *needle, int needle_len) { - int i; - for (i = 0; i <= haystack_len - needle_len; i++) { - if (memcmp(haystack + i, needle, needle_len) == 0) { - return haystack + i + needle_len; - } - } - return NULL; -} - -/* - * bthomehubv2b_parse_hex_* are not uniq. in arm/orion there are also duplicates: - * dns323_parse_hex_* - * TODO: one day write a patch for this :) - */ -static int __init bthomehubv2b_parse_hex_nibble(char n) { - if (n >= '0' && n <= '9') - return n - '0'; - - if (n >= 'A' && n <= 'F') - return n - 'A' + 10; - - if (n >= 'a' && n <= 'f') - return n - 'a' + 10; - - return -1; -} - -static int __init bthomehubv2b_parse_hex_byte(const char *b) { - int hi; - int lo; - - hi = bthomehubv2b_parse_hex_nibble(b[0]); - lo = bthomehubv2b_parse_hex_nibble(b[1]); - - if (hi < 0 || lo < 0) - return -1; - - return (hi << 4) | lo; -} - -static int __init bthomehubv2b_register_ethernet(void) { - u_int8_t addr[6]; - int i; - char *mac = "01:02:03:04:05:06"; - int gotmac = 0; - char *boardid = "BTHHV2B"; - int gotboardid = 0; - - char *uboot_env_page; - uboot_env_page = ioremap(LTQ_FLASH_START + UBOOT_ENV_OFFSET, UBOOT_ENV_SIZE); - if (uboot_env_page) - { - char *Data = NULL; - Data = get_uboot_env_var(uboot_env_page, UBOOT_ENV_SIZE, "\0ethaddr=", 9); - if (Data) - { - mac = Data; - } - - Data = get_uboot_env_var(uboot_env_page, UBOOT_ENV_SIZE, "\0boardid=", 9); - - if (Data) - boardid = Data; - } - else - { - printk("bthomehubv2b: Failed to get uboot_env_page"); - } - - if (!mac) { - goto error_fail; - } - - if (!boardid) { - goto error_fail; - } - - /* Sanity check the string we're looking at */ - for (i = 0; i < 5; i++) { - if (*(mac + (i * 3) + 2) != ':') { - goto error_fail; - } - } - - for (i = 0; i < 6; i++) { - int byte; - byte = bthomehubv2b_parse_hex_byte(mac + (i * 3)); - if (byte < 0) { - goto error_fail; - } - addr[i] = byte; - } - - if (gotmac) - printk("bthomehubv2b: Found ethernet MAC address: "); - else - printk("bthomehubv2b: using default MAC (pls set ethaddr in u-boot): "); - - for (i = 0; i < 6; i++) - printk("%.2x%s", addr[i], (i < 5) ? ":" : ".\n"); - - memcpy(<q_eth_data.mac.sa_data, addr, 6); - ltq_register_etop(<q_eth_data); - - //memcpy(&bthomehubv2b_ath5k_eeprom_mac, addr, 6); - //bthomehubv2b_ath5k_eeprom_mac[5]++; - - if (gotboardid) - printk("bthomehubv2b: Board id is %s.", boardid); - else - printk("bthomehubv2b: Default Board id is %s.", boardid); - - if (strncmp(boardid, "BTHHV2B", 7) == 0) { - // read in dev-wifi-ath9k - //memcpy(&bthomehubv2b_ath5k_eeprom_data, sx763_eeprom_data, ATH5K_PLAT_EEP_MAX_WORDS); - } - else { - printk("bthomehubv2b: Board id is unknown, fix uboot_env data."); - } - - - // should not unmap while we are using the ram? - if (uboot_env_page) - iounmap(uboot_env_page); - - return 0; - -error_fail: - if (uboot_env_page) - iounmap(uboot_env_page); - return -EINVAL; -} - - -#define PORTA2_HW_PASS1 0 -#define PORTA2_HW_PASS1_SC14480 1 -#define PORTA2_HW_PASS2 2 - -int porta2_hw_revision = -1; -EXPORT_SYMBOL(porta2_hw_revision); - -#define LTQ_GPIO_OUT 0x00 -#define LTQ_GPIO_IN 0x04 -#define LTQ_GPIO_DIR 0x08 -#define LTQ_GPIO_ALTSEL0 0x0C -#define LTQ_GPIO_ALTSEL1 0x10 -#define LTQ_GPIO_OD 0x14 -#define LTQ_GPIO_PUDSEL 0x1C -#define LTQ_GPIO_PUDEN 0x20 - -#ifdef USE_BTHH_GPIO_INIT -static void bthomehubv2b_board_prom_init(void) -{ - int revision = 0; - unsigned int gpio = 0; - void __iomem *mem = ioremap(LTQ_GPIO0_BASE_ADDR, LTQ_GPIO_SIZE*2); - -#define DANUBE_GPIO_P0_OUT (unsigned short *)(mem + LTQ_GPIO_OUT) -#define DANUBE_GPIO_P0_IN (unsigned short *)(mem + LTQ_GPIO_IN) -#define DANUBE_GPIO_P0_DIR (unsigned short *)(mem + LTQ_GPIO_DIR) -#define DANUBE_GPIO_P0_ALTSEL0 (unsigned short *)(mem + LTQ_GPIO_ALTSEL0) -#define DANUBE_GPIO_P0_ALTSEL1 (unsigned short *)(mem + LTQ_GPIO_ALTSEL1) - -#define DANUBE_GPIO_P1_OUT (unsigned short *)(mem + LTQ_GPIO_SIZE + LTQ_GPIO_OUT) -#define DANUBE_GPIO_P1_IN (unsigned short *)(mem + LTQ_GPIO_SIZE + LTQ_GPIO_IN) -#define DANUBE_GPIO_P1_DIR (unsigned short *)(mem + LTQ_GPIO_SIZE + LTQ_GPIO_DIR) -#define DANUBE_GPIO_P1_ALTSEL0 (unsigned short *)(mem + LTQ_GPIO_SIZE + LTQ_GPIO_ALTSEL0) -#define DANUBE_GPIO_P1_ALTSEL1 (unsigned short *)(mem + LTQ_GPIO_SIZE + LTQ_GPIO_ALTSEL1) -#define DANUBE_GPIO_P1_OD (unsigned short *)(mem + LTQ_GPIO_SIZE + LTQ_GPIO_OD) - - printk("About to sense board using GPIOs at %8.8X\n", (unsigned int)mem); - - - /* First detect HW revision of the board. For that we need to set the GPIO - * lines according to table 7.2.1/7.2.2 in HSI */ - *DANUBE_GPIO_P0_OUT = 0x0200; - *DANUBE_GPIO_P0_DIR = 0x2610; - *DANUBE_GPIO_P0_ALTSEL0 = 0x7812; - *DANUBE_GPIO_P0_ALTSEL1 = 0x0000; - - *DANUBE_GPIO_P1_OUT = 0x7008; - *DANUBE_GPIO_P1_DIR = 0xF3AE; - *DANUBE_GPIO_P1_ALTSEL0 = 0x83A7; - *DANUBE_GPIO_P1_ALTSEL1 = 0x0400; - - gpio = (*DANUBE_GPIO_P0_IN & 0xFFFF) | - ((*DANUBE_GPIO_P1_IN & 0xFFFF) << 16); - - revision |= (gpio & (1 << 27)) ? (1 << 0) : 0; - revision |= (gpio & (1 << 20)) ? (1 << 1) : 0; - revision |= (gpio & (1 << 8)) ? (1 << 2) : 0; - revision |= (gpio & (1 << 6)) ? (1 << 3) : 0; - revision |= (gpio & (1 << 5)) ? (1 << 4) : 0; - revision |= (gpio & (1 << 0)) ? (1 << 5) : 0; - - porta2_hw_revision = revision; - printk("PORTA2: detected HW revision %d\n", revision); - - /* Set GPIO lines according to HW revision. */ - /* !!! Note that we are setting SPI_CS5 (GPIO 9) to be GPIO out with value - * of HIGH since the FXO does not use the SPI CS mechanism, it does it - * manually by controlling the GPIO line. We need the CS line to be disabled - * (HIGH) until needed since it will intefere with other devices on the SPI - * bus. */ - *DANUBE_GPIO_P0_OUT = 0x0200; - /* - * During the manufacturing process a different machine takes over uart0 - * so set it as input (so it wouldn't drive the line) - */ -#define cCONFIG_SHC_BT_MFG_TEST 0 - *DANUBE_GPIO_P0_DIR = 0x2671 | (cCONFIG_SHC_BT_MFG_TEST ? 0 : (1 << 12)); - - if (revision == PORTA2_HW_PASS1_SC14480 || revision == PORTA2_HW_PASS2) - *DANUBE_GPIO_P0_ALTSEL0 = 0x7873; - else - *DANUBE_GPIO_P0_ALTSEL0 = 0x3873; - - *DANUBE_GPIO_P0_ALTSEL1 = 0x0001; - - - //################################################################################### - // Register values before patch - // P1_ALTSEL0 = 0x83A7 - // P1_ALTSEL1 = 0x0400 - // P1_OU T = 0x7008 - // P1_DIR = 0xF3AE - // P1_OD = 0xE3Fc - printk("\nApplying Patch for CPU1 IRQ Issue\n"); - *DANUBE_GPIO_P1_ALTSEL0 &= ~(1<<12); // switch P1.12 (GPIO28) to GPIO functionality - *DANUBE_GPIO_P1_ALTSEL1 &= ~(1<<12); // switch P1.12 (GPIO28) to GPIO functionality - *DANUBE_GPIO_P1_OUT &= ~(1<<12); // set P1.12 (GPIO28) to 0 - *DANUBE_GPIO_P1_DIR |= (1<<12); // configure P1.12 (GPIO28) as output - *DANUBE_GPIO_P1_OD |= (1<<12); // activate Push/Pull mode - udelay(100); // wait a little bit (100us) - *DANUBE_GPIO_P1_OD &= ~(1<<12); // switch back from Push/Pull to Open Drain - // important: before! setting output to 1 (3,3V) the mode must be switched - // back to Open Drain because the reset pin of the SC14488 is internally - // pulled to 1,8V - *DANUBE_GPIO_P1_OUT |= (1<<12); // set output P1.12 (GPIO28) to 1 - // Register values after patch, should be the same as before - // P1_ALTSEL0 = 0x83A7 - // P1_ALTSEL1 = 0x0400 - // P1_OUT = 0x7008 - // P1_DIR = 0xF3AE - // P1_OD = 0xE3Fc - //################################################################################### - - - *DANUBE_GPIO_P1_OUT = 0x7008; - *DANUBE_GPIO_P1_DIR = 0xEBAE | (revision == PORTA2_HW_PASS2 ? 0x1000 : 0); - *DANUBE_GPIO_P1_ALTSEL0 = 0x8BA7; - *DANUBE_GPIO_P1_ALTSEL1 = 0x0400; - - iounmap(mem); -} -#endif -static void __init bthomehubv2b_init(void) { -#define bthomehubv2b_USB 13 - - // read the board version -#ifdef USE_BTHH_GPIO_INIT - bthomehubv2b_board_prom_init(); -#endif - - // register extra GPPOs used by LEDs as GPO 0x200+ - ltq_register_gpio_stp(); - ltq_add_device_gpio_leds(-1, ARRAY_SIZE(bthomehubv2b_gpio_leds), bthomehubv2b_gpio_leds); - bthhv2b_register_nor(&bthomehubv2b_flash_data); - xway_register_nand(bthomehubv2b_nand_partitions, ARRAY_SIZE(bthomehubv2b_nand_partitions)); - ltq_register_pci(<q_pci_data); - ltq_register_tapi(); - ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, ARRAY_SIZE(bthomehubv2b_gpio_keys), bthomehubv2b_gpio_keys); -// ltq_register_ath9k(); - xway_register_dwc(bthomehubv2b_USB); - bthomehubv2b_register_ethernet(); - -} - -MIPS_MACHINE(LANTIQ_MACH_BTHOMEHUBV2BOPENRG, - "BTHOMEHUBV2BOPENRG", - "BTHOMEHUBV2B - BT Homehub V2.0 Type B with OpenRG image retained", - bthomehubv2b_init); - -MIPS_MACHINE(LANTIQ_MACH_BTHOMEHUBV2B, - "BTHOMEHUBV2B", - "BTHOMEHUBV2B - BT Homehub V2.0 Type B", - bthomehubv2b_init); diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-easy50601.c b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-easy50601.c deleted file mode 100644 index e76c29a..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-easy50601.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - * - * Copyright (C) 2010 John Crispin - */ - -#include -#include -#include -#include -#include -#include - -#include - -#include "../machtypes.h" -#include "devices.h" - -static struct mtd_partition easy50601_partitions[] = { - { - .name = "uboot", - .offset = 0x0, - .size = 0x10000, - }, - { - .name = "uboot_env", - .offset = 0x10000, - .size = 0x10000, - }, - { - .name = "linux", - .offset = 0x20000, - .size = 0x3d0000, - }, -}; - -static struct physmap_flash_data easy50601_flash_data = { - .nr_parts = ARRAY_SIZE(easy50601_partitions), - .parts = easy50601_partitions, -}; - -static struct ltq_eth_data ltq_eth_data = { - .mii_mode = -1, /* use EPHY */ -}; - -static void __init -easy50601_init(void) -{ - ltq_register_nor(&easy50601_flash_data); - ltq_register_etop(<q_eth_data); -} - -MIPS_MACHINE(LTQ_MACH_EASY50601, - "EASY50601", - "EASY50601 Eval Board", - easy50601_init); diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-easy50712.c b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-easy50712.c deleted file mode 100644 index 581aa76..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-easy50712.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - * - * Copyright (C) 2010 John Crispin - */ - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "../machtypes.h" -#include "devices.h" - -static struct mtd_partition easy50712_partitions[] = { - { - .name = "uboot", - .offset = 0x0, - .size = 0x10000, - }, - { - .name = "uboot_env", - .offset = 0x10000, - .size = 0x10000, - }, - { - .name = "linux", - .offset = 0x20000, - .size = 0x3d0000, - }, -}; - -static struct physmap_flash_data easy50712_flash_data = { - .nr_parts = ARRAY_SIZE(easy50712_partitions), - .parts = easy50712_partitions, -}; - -static struct ltq_pci_data ltq_pci_data = { - .clock = PCI_CLOCK_INT, - .gpio = PCI_GNT1 | PCI_REQ1, - .irq = { - [14] = INT_NUM_IM0_IRL0 + 22, - }, -}; - -static struct ltq_eth_data ltq_eth_data = { - .mii_mode = PHY_INTERFACE_MODE_MII, -}; - -static void __init -easy50712_init(void) -{ - ltq_register_gpio_stp(); - ltq_register_nor(&easy50712_flash_data); - ltq_register_pci(<q_pci_data); - ltq_register_etop(<q_eth_data); - ltq_register_tapi(); -} - -MIPS_MACHINE(LTQ_MACH_EASY50712, - "EASY50712", - "EASY50712 Eval Board", - easy50712_init); diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-fritz_ar9.c b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-fritz_ar9.c deleted file mode 100644 index 5bd6341..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-fritz_ar9.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - * - * Copyright (C) 2010 John Crispin - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "../machtypes.h" -#include "devices.h" -#include "dev-ifxhcd.h" -#include "dev-gpio-leds.h" -#include "dev-gpio-buttons.h" - -static struct mtd_partition fritz7320_partitions[] = { - { - .name = "urlader", - .offset = 0x0, - .size = 0x20000, - }, - { - .name = "linux", - .offset = 0x20000, - .size = 0xf60000, - }, - { - .name = "tffs (1)", - .offset = 0xf80000, - .size = 0x40000, - }, - { - .name = "tffs (2)", - .offset = 0xfc0000, - .size = 0x40000, - }, -}; - -static struct physmap_flash_data fritz7320_flash_data = { - .nr_parts = ARRAY_SIZE(fritz7320_partitions), - .parts = fritz7320_partitions, -}; - -static struct gpio_led -fritz7320_gpio_leds[] __initdata = { - { .name = "soc:green:power", .gpio = 44, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:internet", .gpio = 47, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:dect", .gpio = 38, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:wlan", .gpio = 37, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:dual1", .gpio = 35, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:red:dual2", .gpio = 45, .active_low = 1, .default_trigger = "default-on" }, -}; - -static struct gpio_keys_button -fritz7320_gpio_keys[] __initdata = { - { - .desc = "wifi", - .type = EV_KEY, - .code = BTN_0, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 1, - .active_low = 1, - }, - { - .desc = "dect", - .type = EV_KEY, - .code = BTN_1, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 2, - .active_low = 1, - }, -}; - -static struct ltq_pci_data ltq_pci_data = { - .clock = PCI_CLOCK_INT, - .gpio = PCI_GNT1 | PCI_REQ1, - .irq = { - [14] = INT_NUM_IM0_IRL0 + 22, - }, -}; - -static struct ltq_eth_data ltq_eth_data = { - .mii_mode = PHY_INTERFACE_MODE_RMII, -}; - -static int usb_pins[2] = { 50, 51 }; - -static void __init -fritz7320_init(void) -{ - ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, - ARRAY_SIZE(fritz7320_gpio_keys), fritz7320_gpio_keys); - ltq_add_device_gpio_leds(-1, ARRAY_SIZE(fritz7320_gpio_leds), fritz7320_gpio_leds); - ltq_register_pci(<q_pci_data); - ltq_register_etop(<q_eth_data); - ltq_register_nor(&fritz7320_flash_data); - xway_register_hcd(usb_pins); -} - -MIPS_MACHINE(LANTIQ_MACH_FRITZ7320, - "FRITZ7320", - "FRITZ!BOX 7320", - fritz7320_init); diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-fritz_vr9.c b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-fritz_vr9.c deleted file mode 100644 index 293c7b7..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-fritz_vr9.c +++ /dev/null @@ -1,164 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - * - * Copyright (C) 2010 John Crispin - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "../machtypes.h" -#include "devices.h" -#include "dev-ifxhcd.h" -#include "dev-gpio-leds.h" -#include "dev-gpio-buttons.h" - -static struct mtd_partition fritz3370_partitions[] = { - { - .name = "linux", - .offset = 0x0, - .size = 0x400000, - }, - { - .name = "filesystem", - .offset = 0x400000, - .size = 0x3000000, - }, - { - .name = "reserved-kernel", - .offset = 0x3400000, - .size = 0x400000, - }, - { - .name = "reserved", - .offset = 0x3800000, - .size = 0x3000000, - }, - { - .name = "config", - .offset = 0x6800000, - .size = 0x200000, - }, - { - .name = "nand-filesystem", - .offset = 0x6a00000, - .size = 0x1600000, - }, -}; - -static struct mtd_partition spi_flash_partitions[] = { - { - .name = "urlader", - .offset = 0x0, - .size = 0x20000, - }, - { - .name = "tffs", - .offset = 0x20000, - .size = 0x10000, - }, - { - .name = "tffs", - .offset = 0x30000, - .size = 0x10000, - }, -}; - -static struct gpio_led -fritz3370_gpio_leds[] __initdata = { - { .name = "soc:green:1", .gpio = 32, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:red:2", .gpio = 33, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:red:3", .gpio = 34, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:4", .gpio = 35, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:5", .gpio = 36, .active_low = 1, .default_trigger = "default-on" }, - { .name = "soc:green:6", .gpio = 47, .active_low = 1, .default_trigger = "default-on" }, -}; - -static struct gpio_keys_button -fritz3370_gpio_keys[] __initdata = { - { - .desc = "wifi", - .type = EV_KEY, - .code = BTN_0, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 29, - .active_low = 1, - }, -}; - -static struct ltq_eth_data ltq_eth_data = { - .mii_mode = PHY_INTERFACE_MODE_RMII, -}; - -static int usb_pins[2] = { 5, 14 }; - -#define SPI_GPIO_MRST 16 -#define SPI_GPIO_MTSR 17 -#define SPI_GPIO_CLK 18 -#define SPI_GPIO_CS0 10 - -static struct spi_gpio_platform_data spi_gpio_data = { - .sck = SPI_GPIO_CLK, - .mosi = SPI_GPIO_MTSR, - .miso = SPI_GPIO_MRST, - .num_chipselect = 2, -}; - -static struct platform_device spi_gpio_device = { - .name = "spi_gpio", - .dev.platform_data = &spi_gpio_data, -}; - -static struct flash_platform_data spi_flash_data = { - .name = "SPL", - .parts = spi_flash_partitions, - .nr_parts = ARRAY_SIZE(spi_flash_partitions), -}; - -static struct spi_board_info spi_flash __initdata = { - .modalias = "m25p80", - .bus_num = 0, - .chip_select = 0, - .max_speed_hz = 10 * 1000 * 1000, - .mode = SPI_MODE_3, - .chip_select = 0, - .controller_data = (void *) SPI_GPIO_CS0, - .platform_data = &spi_flash_data -}; - -static void __init -spi_gpio_init(void) -{ - spi_register_board_info(&spi_flash, 1); - platform_device_register(&spi_gpio_device); -} - -static void __init -fritz3370_init(void) -{ - spi_gpio_init(); - platform_device_register_simple("pcie-xway", 0, NULL, 0); - xway_register_nand(fritz3370_partitions, ARRAY_SIZE(fritz3370_partitions)); - xway_register_hcd(usb_pins); - ltq_add_device_gpio_leds(-1, ARRAY_SIZE(fritz3370_gpio_leds), fritz3370_gpio_leds); - ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, - ARRAY_SIZE(fritz3370_gpio_keys), fritz3370_gpio_keys); - ltq_register_vrx200(<q_eth_data); -} - -MIPS_MACHINE(LANTIQ_MACH_FRITZ3370, - "FRITZ3370", - "FRITZ!BOX 3370", - fritz3370_init); diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-gigasx76x.c b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-gigasx76x.c deleted file mode 100644 index af27825..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-gigasx76x.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - * - * Copyright (C) 2011 Andrej Vlašić - * Copyright (C) 2011 Luka Perkov - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "../machtypes.h" -#include "dev-wifi-athxk.h" -#include "devices.h" -#include "dev-dwc_otg.h" - -#include "mach-gigasx76x.h" - -static u8 ltq_ethaddr[6] = { 0 }; - -static int __init -setup_ethaddr(char *str) -{ - if (!mac_pton(str, ltq_ethaddr)) - memset(ltq_ethaddr, 0, 6); - return 0; -} -__setup("ethaddr=", setup_ethaddr); - - -enum { - UNKNOWN = 0, - SX761, - SX762, - SX763, -}; -static u8 board __initdata = SX763; - -static int __init -setup_board(char *str) -{ - if (!strcmp(str, "sx761")) - board = SX761; - else if (!strcmp(str, "sx762")) - board = SX762; - else if (!strcmp(str, "sx763")) - board = SX763; - else - board = UNKNOWN; - return 0; -} -__setup("board=", setup_board); - -static struct mtd_partition gigasx76x_partitions[] = -{ - { - .name = "uboot", - .offset = 0x0, - .size = 0x10000, - }, - { - .name = "uboot_env", - .offset = 0x10000, - .size = 0x10000, - }, - { - .name = "linux", - .offset = 0x20000, - .size = 0x7e0000, - }, -}; - -static struct gpio_led -gigasx76x_gpio_leds[] __initdata = { - { .name = "soc:green:voip", .gpio = 216, }, - { .name = "soc:green:adsl", .gpio = 217, }, - { .name = "soc:green:usb", .gpio = 218, }, - { .name = "soc:green:wifi", .gpio = 219, }, - { .name = "soc:green:phone2", .gpio = 220, }, - { .name = "soc:green:phone1", .gpio = 221, }, - { .name = "soc:green:line", .gpio = 222, }, - { .name = "soc:green:online", .gpio = 223, }, -}; - -static struct gpio_keys_button -gigasx76x_gpio_keys[] __initdata = { - { - .desc = "wps", - .type = EV_KEY, - .code = KEY_WPS_BUTTON, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 22, - .active_low = 1, - }, - { - .desc = "reset", - .type = EV_KEY, - .code = BTN_0, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 14, - .active_low = 0, - }, -}; - -static struct physmap_flash_data gigasx76x_flash_data = { - .nr_parts = ARRAY_SIZE(gigasx76x_partitions), - .parts = gigasx76x_partitions, -}; - -static struct ltq_pci_data ltq_pci_data = { - .clock = PCI_CLOCK_INT, - .gpio = PCI_GNT1 | PCI_REQ1, - .irq = { [14] = INT_NUM_IM0_IRL0 + 22, }, -}; - -static struct ltq_eth_data ltq_eth_data = { - .mii_mode = PHY_INTERFACE_MODE_MII, -}; - -static void __init -gigasx76x_init(void) -{ -#define GIGASX76X_USB 29 - - ltq_register_gpio_stp(); - ltq_register_nor(&gigasx76x_flash_data); - ltq_register_pci(<q_pci_data); - ltq_register_tapi(); - ltq_add_device_gpio_leds(-1, ARRAY_SIZE(gigasx76x_gpio_leds), gigasx76x_gpio_leds); - ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, ARRAY_SIZE(gigasx76x_gpio_keys), gigasx76x_gpio_keys); - xway_register_dwc(GIGASX76X_USB); - - if (!is_valid_ether_addr(ltq_ethaddr)) - random_ether_addr(ltq_ethaddr); - - memcpy(<q_eth_data.mac.sa_data, ltq_ethaddr, 6); - ltq_register_etop(<q_eth_data); - if (board == SX762) - ltq_register_ath5k(sx762_eeprom_data, ltq_ethaddr); - else - ltq_register_ath5k(sx763_eeprom_data, ltq_ethaddr); -} - -MIPS_MACHINE(LANTIQ_MACH_GIGASX76X, - "GIGASX76X", - "GIGASX76X - Gigaset SX761,SX762,SX763", - gigasx76x_init); diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-gigasx76x.h b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-gigasx76x.h deleted file mode 100644 index 74e5ba2..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-gigasx76x.h +++ /dev/null @@ -1,210 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - * - * Copyright (C) 2011 Andrej Vlašić - * Copyright (C) 2011 Luka Perkov - * - */ - -#ifndef _MACH_GIGASX76X_H__ -#define _MACH_GIGASX76X_H__ - -#include - -static u16 sx763_eeprom_data[ATH5K_PLAT_EEP_MAX_WORDS] = -{ -0x0013,0x168c,0x0200,0x0001,0x0000,0x5001,0x0000,0x2051,0x2051,0x1c0a,0x0100, -0x0000,0x01c2,0x0002,0xc606,0x0001,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf165,0x7fbe,0x0003,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5aa5,0x0000,0x0000,0x0313,0x4943, -0x2053,0x7104,0x1202,0x0400,0x0306,0x0001,0x0000,0x0500,0x410e,0x39b1,0x1eb5, -0x4e2d,0x3056,0xffff,0xe902,0x0700,0x0106,0x0000,0x0100,0x1500,0x0752,0x4101, -0x6874,0x7265,0x736f,0x4320,0x6d6f,0x756d,0x696e,0x6163,0x6974,0x6e6f,0x2c73, -0x4920,0x636e,0x002e,0x5241,0x3035,0x3130,0x302d,0x3030,0x2d30,0x3030,0x3030, -0x5700,0x7269,0x6c65,0x7365,0x2073,0x414c,0x204e,0x6552,0x6566,0x6572,0x636e, -0x2065,0x6143,0x6472,0x3000,0x0030,0x00ff,0x2100,0x0602,0x2201,0x0205,0x8d80, -0x005b,0x0522,0x4002,0x8954,0x2200,0x0205,0x1b00,0x00b7,0x0522,0x8002,0x12a8, -0x2201,0x0205,0x3600,0x016e,0x0522,0x0002,0x2551,0x2202,0x0205,0x6c00,0x02dc, -0x0522,0x8002,0x37f9,0x2203,0x0205,0xa200,0x044a,0x0222,0x0803,0x0822,0x0604, -0x0300,0xbe7f,0x65f1,0x0222,0x0105,0x00ff,0x0000,0x0000,0x0000,0x0000,0x0000, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0x0037,0x971f,0x5003,0x9a66,0x0001,0x81c4,0x016a, -0x02ff,0x84ff,0x15a3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x2d2c,0x0000,0x0000,0x0000,0x0000,0xe028,0xa492,0x1c00, -0x000e,0xb8ca,0x0013,0x0000,0x0000,0x6b4b,0xc059,0x1571,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x2370,0x00a5,0x9618,0x419a,0x68a2,0xda35,0x001c,0x0007,0xb0ff,0x01b5,0x0000, -0x0000,0xff70,0x19ff,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x3170,0x00a5,0x9618,0x419a,0x68a2,0xda35, -0x001c,0x000e,0xb0ff,0x21b5,0x0000,0x2fd8,0xff70,0x1226,0x19ff,0x07be,0x6201, -0x032e,0x0587,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1112, -0x1441,0x4231,0x3234,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x8000,0x0000,0x0000,0x0000,0x0000,0x8000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4d31,0x7f54,0x3c93,0x1205,0x1931, -0x492d,0x7f50,0x3c93,0x0e01,0x192d,0x0070,0x0000,0x8140,0x724b,0x2ba9,0x3a09, -0x99d9,0x1949,0x0070,0x0000,0x80e0,0x624a,0x2af8,0x35c7,0x9d47,0x1938,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x7082,0x0820,0xb882,0x0820,0x7092,0x28a0,0x8992, -0x28a0,0xa292,0x28a0,0x70a2,0xa7ac,0x0000,0x0000,0x2464,0x6424,0x0000,0x0000, -0x70a2,0xa7ac,0x0000,0x0000,0x2464,0x6424,0x0000,0x0000,0x8989,0x0000,0x0000, -0x0000,0x2424,0x0000,0x0000,0x0000,0x7075,0xa2ac,0xb800,0x0000,0x2464,0x2424, -0x2400,0x0000,0x7075,0xa2ac,0x0000,0x0000,0x2464,0x2424,0x0000,0x0000,0x7075, -0xa7ac,0x0000,0x0000,0x2464,0x6424,0x0000,0x0000,0x7075,0xa7ac,0x0000,0x0000, -0x2464,0x6424,0x0000,0x0000,0x8989,0x0000,0x0000,0x0000,0x2424,0x0000,0x0000, -0x0000,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff}; - -static u16 sx762_eeprom_data[ATH5K_PLAT_EEP_MAX_WORDS] = -{ -0x001a,0x168c,0x0200,0x0001,0x0000,0x5001,0x0000,0x2051,0x2051,0x1c0a,0x0100, -0x0000,0x01c2,0x0002,0xc606,0x0001,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf165,0x7fbe,0x0003,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5aa5,0x0000,0x0000,0x0313,0x4943, -0x2053,0x7104,0x1202,0x0400,0x0306,0x0001,0x0000,0x0500,0x410e,0x39b1,0x1eb5, -0x4e2d,0x3056,0xffff,0xe902,0x0700,0x0106,0x0000,0x0100,0x1500,0x0752,0x4101, -0x6874,0x7265,0x736f,0x4320,0x6d6f,0x756d,0x696e,0x6163,0x6974,0x6e6f,0x2c73, -0x4920,0x636e,0x002e,0x5241,0x3035,0x3130,0x302d,0x3030,0x2d30,0x3030,0x3030, -0x5700,0x7269,0x6c65,0x7365,0x2073,0x414c,0x204e,0x6552,0x6566,0x6572,0x636e, -0x2065,0x6143,0x6472,0x3000,0x0030,0x00ff,0x2100,0x0602,0x2201,0x0205,0x8d80, -0x005b,0x0522,0x4002,0x8954,0x2200,0x0205,0x1b00,0x00b7,0x0522,0x8002,0x12a8, -0x2201,0x0205,0x3600,0x016e,0x0522,0x0002,0x2551,0x2202,0x0205,0x6c00,0x02dc, -0x0522,0x8002,0x37f9,0x2203,0x0205,0xa200,0x044a,0x0222,0x0803,0x0822,0x0604, -0x0300,0xbe7f,0x65f1,0x0222,0x0105,0x00ff,0x0000,0x0000,0x0000,0x0000,0x0000, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0x0037,0x6aaa,0x5003,0x9a66,0x0001,0x81c4,0x016a, -0x02ff,0x84ff,0x15a3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x2d2c,0x0000,0x0000,0x0000,0x0000,0xe028,0xa492,0x1c00, -0x000e,0xb8ca,0x0013,0x0000,0x0000,0x6b4b,0xc059,0x1571,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x2370,0x00a5,0x9618,0x419a,0x68a2,0xda35,0x001c,0x0007,0xb0ff,0x01b5,0x0000, -0x0000,0xff70,0x19ff,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x3170,0x00a5,0x9618,0x419a,0x68a2,0xda35, -0x001c,0x000e,0xb0ff,0x21b5,0x0000,0x2fd8,0xff70,0x1226,0x19ff,0x07fa,0x6201, -0x032e,0x0587,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1112, -0x1441,0x4231,0x3234,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x8000,0x0000,0x0000,0x0000,0x0000,0x8000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4d31,0x7f54,0x3c93,0x1205,0x1931, -0x492d,0x7f50,0x3c93,0x0e01,0x192d,0x0070,0x0000,0x8180,0x724d,0xab59,0x3a08, -0xdd79,0x2559,0x0070,0x0000,0x81a0,0x6e4d,0x2b99,0x3a09,0x9989,0x2157,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x7092,0x4924,0xb892,0x4924,0x7092,0x289e,0x8992, -0x289e,0xa292,0x289e,0x70a2,0xa7ac,0x0000,0x0000,0x2462,0x5e13,0x0000,0x0000, -0x70a2,0xa7ac,0x0000,0x0000,0x1e5c,0x5713,0x0000,0x0000,0x8989,0x0000,0x0000, -0x0000,0x2424,0x0000,0x0000,0x0000,0x7075,0xa2ac,0xb800,0x0000,0x2868,0x2828, -0x2800,0x0000,0x7075,0xa2ac,0x0000,0x0000,0x2868,0x2828,0x0000,0x0000,0x7075, -0xac00,0x0000,0x0000,0x2161,0x2100,0x0000,0x0000,0x7075,0xac00,0x0000,0x0000, -0x1b5b,0x1b00,0x0000,0x0000,0x8989,0x0000,0x0000,0x0000,0x2121,0x0000,0x0000, -0x0000,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, -0xffff,0xffff}; - -#endif diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-h201l.c b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-h201l.c deleted file mode 100644 index 86101f5..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-h201l.c +++ /dev/null @@ -1,100 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - * - * Copyright (C) 2012 Luka Perkov - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "../machtypes.h" -#include "devices.h" -#include "dev-dwc_otg.h" - -static u8 ltq_ethaddr[6] = { 0 }; - -static int __init -setup_ethaddr(char *str) -{ - if (!mac_pton(str, ltq_ethaddr)) - memset(ltq_ethaddr, 0, 6); - return 0; -} -__setup("ethaddr=", setup_ethaddr); - -static struct mtd_partition h201l_partitions[] __initdata = -{ - { - .name = "uboot", - .offset = 0x0, - .size = 0x20000, - }, - { - .name = "uboot_env", - .offset = 0x20000, - .size = 0x10000, - }, - { - .name = "linux", - .offset = 0x30000, - .size = 0x7d0000, - }, -}; - -static struct physmap_flash_data h201l_flash_data __initdata = { - .nr_parts = ARRAY_SIZE(h201l_partitions), - .parts = h201l_partitions, -}; - -static struct gpio_led -h201l_leds_gpio[] __initdata = { -}; - -static struct gpio_keys_button -h201l_gpio_keys[] __initdata = { -}; - -static struct ltq_eth_data ltq_eth_data = { - .mii_mode = PHY_INTERFACE_MODE_RMII, -}; - -static void __init -h201l_init(void) -{ - ltq_register_gpio_stp(); - ltq_register_nor(&h201l_flash_data); - ltq_add_device_gpio_leds(-1, ARRAY_SIZE(h201l_leds_gpio), h201l_leds_gpio); - ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, ARRAY_SIZE(h201l_gpio_keys), h201l_gpio_keys); - - if (!is_valid_ether_addr(ltq_ethaddr)) - random_ether_addr(ltq_ethaddr); - - memcpy(<q_eth_data.mac.sa_data, ltq_ethaddr, 6); - ltq_register_etop(<q_eth_data); - - xway_register_dwc(-1); -} - -MIPS_MACHINE(LANTIQ_MACH_H201L, - "H201L", - "ZTE ZXV10 H201L", - h201l_init); diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-netgear.c b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-netgear.c deleted file mode 100644 index 29b0728..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-netgear.c +++ /dev/null @@ -1,239 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - * - * Copyright (C) 2010 John Crispin - * Copyright (C) 2012 Pieter Voorthuijsen - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include "dev-wifi-athxk.h" - -#include "../machtypes.h" -#include "devices.h" -#include "dev-dwc_otg.h" -#include "pci-ath-fixup.h" -#include -#include - -static struct mtd_partition dgn3500_partitions[] = { - { - .name = "u-boot", - .offset = 0, - .size = 0x10000, - .mask_flags = MTD_WRITEABLE, - }, - { - .name = "environment", - .offset = 0x10000, - .size = 0x10000, - .mask_flags = MTD_WRITEABLE, - }, - { - .name = "calibration", - .offset = 0x20000, - .size = 0x10000, - .mask_flags = MTD_WRITEABLE, - }, - { - .name = "linux", - .offset = 0x50000, - .size = 0xfa0000, - }, -}; - -static struct ltq_pci_data ltq_pci_data = { - .clock = PCI_CLOCK_INT, - .gpio = PCI_GNT1 | PCI_REQ1, - .irq = { - [14] = INT_NUM_IM0_IRL0 + 22, - }, -}; - -static struct ltq_eth_data ltq_eth_data = { - .mii_mode = PHY_INTERFACE_MODE_MII, -}; - -static struct gpio_led -dgn3500_gpio_leds[] __initdata = { - { .name = "soc:green:power", .gpio = 34, .active_low = 1, }, - { .name = "soc:red:power", .gpio = 39, .active_low = 1, }, - { .name = "soc:orange:wlan", .gpio = 51, .active_low = 1, }, - { .name = "soc:green:wps", .gpio = 52, .active_low = 1, }, - { .name = "soc:green:usb", .gpio = 22, .active_low = 1, }, - { .name = "soc:green:dsl", .gpio = 4, .active_low = 1, }, - { .name = "soc:green:internet", .gpio = 2, .active_low = 1, }, -}; - -static struct gpio_keys_button -dgn3500_gpio_keys[] __initdata = { - { - .desc = "wps", - .type = EV_KEY, - .code = BTN_0, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 54, - .active_low = 1, - }, - { - .desc = "reset", - .type = EV_KEY, - .code = BTN_1, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 36, - .active_low = 1, - }, -}; - -#define SPI_GPIO_MRST 16 -#define SPI_GPIO_MTSR 17 -#define SPI_GPIO_CLK 18 -#define SPI_GPIO_CS0 10 - -static struct spi_gpio_platform_data spi_gpio_data = { - .sck = SPI_GPIO_CLK, - .mosi = SPI_GPIO_MTSR, - .miso = SPI_GPIO_MRST, - .num_chipselect = 2, -}; - -static struct platform_device spi_gpio_device = { - .name = "spi_gpio", - .dev.platform_data = &spi_gpio_data, -}; - -static struct flash_platform_data spi_flash_data = { - .name = "sflash", - .parts = dgn3500_partitions, - .nr_parts = ARRAY_SIZE(dgn3500_partitions), -}; - -static struct spi_board_info spi_flash __initdata = { - .modalias = "m25p80", - .bus_num = 0, - .chip_select = 0, - .max_speed_hz = 10 * 1000 * 1000, - .mode = SPI_MODE_3, - .chip_select = 0, - .controller_data = (void *) SPI_GPIO_CS0, - .platform_data = &spi_flash_data -}; - -static u8 ltq_ethaddr[6] = { 0 }; - -static int __init setup_ethaddr(char *str) -{ - if (!mac_pton(str, ltq_ethaddr)) - memset(ltq_ethaddr, 0, 6); - return 0; -} -__setup("ethaddr=", setup_ethaddr); - -static u16 dgn3500_eeprom_data[ATH9K_PLAT_EEP_MAX_WORDS] = {0}; - -static ssize_t ath_eeprom_read(struct file *filp, struct kobject *kobj, - struct bin_attribute *attr, char *buf, - loff_t offset, size_t count) -{ - if (unlikely(offset >= sizeof(dgn3500_eeprom_data))) - return 0; - if ((offset + count) > sizeof(dgn3500_eeprom_data)) - count = sizeof(dgn3500_eeprom_data) - offset; - if (unlikely(!count)) - return count; - - memcpy(buf, (char *)(dgn3500_eeprom_data) + offset, count); - - return count; -} - -extern struct ath9k_platform_data ath9k_pdata; - -static ssize_t ath_eeprom_write(struct file *filp, struct kobject *kobj, - struct bin_attribute *attr, char *buf, - loff_t offset, size_t count) -{ - int i; - char *eeprom_bytes = (char *)dgn3500_eeprom_data; - - if (unlikely(offset >= sizeof(dgn3500_eeprom_data))) - return -EFBIG; - if ((offset + count) > sizeof(dgn3500_eeprom_data)) - count = sizeof(dgn3500_eeprom_data) - offset; - if (unlikely(!count)) - return count; - if (count % 2) - return 0; - - /* The PCI fixup routine requires an endian swap of the calibartion data - * stored in flash */ - for (i = 0; i < count; i += 2) { - eeprom_bytes[offset + i + 1] = buf[i]; - eeprom_bytes[offset + i] = buf[i+1]; - } - - /* The original data does not contain a checksum. Set the country and - * calculate new checksum when all data is received */ - if ((count + offset) == sizeof(dgn3500_eeprom_data)) - memcpy(ath9k_pdata.eeprom_data, dgn3500_eeprom_data, - sizeof(ath9k_pdata.eeprom_data)); - - return count; -} - -static struct bin_attribute dev_attr_ath_eeprom = { - .attr = { - .name = "ath_eeprom", - .mode = S_IRUGO|S_IWUSR, - }, - .read = ath_eeprom_read, - .write = ath_eeprom_write, -}; - -static void __init dgn3500_init(void) -{ - if (sysfs_create_bin_file(firmware_kobj, &dev_attr_ath_eeprom)) - printk(KERN_INFO "Failed to create ath eeprom sysfs entry\n"); - ltq_add_device_gpio_leds(-1, ARRAY_SIZE(dgn3500_gpio_leds), - dgn3500_gpio_leds); - ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, - ARRAY_SIZE(dgn3500_gpio_keys), dgn3500_gpio_keys); - platform_device_register(&spi_gpio_device); - ltq_register_pci(<q_pci_data); - spi_register_board_info(&spi_flash, 1); - if (!is_valid_ether_addr(ltq_ethaddr)) { - printk(KERN_INFO "MAC invalid using random\n"); - random_ether_addr(ltq_ethaddr); - } - memcpy(<q_eth_data.mac.sa_data, ltq_ethaddr, 6); - ltq_register_etop(<q_eth_data); - ltq_register_ath9k(dgn3500_eeprom_data, ltq_ethaddr); - ltq_pci_ath_fixup(14, dgn3500_eeprom_data); - /* The usb power is always enabled, protected by a fuse */ - xway_register_dwc(-1); -} - -MIPS_MACHINE(LANTIQ_MACH_DGN3500B, - "DGN3500B", - "Netgear DGN3500B", - dgn3500_init); diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-p2601hnfx.c b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-p2601hnfx.c deleted file mode 100644 index 247dfb5..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-p2601hnfx.c +++ /dev/null @@ -1,113 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - * - * Copyright (C) 2010 John Crispin - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "../machtypes.h" -#include "devices.h" -#include "dev-dwc_otg.h" - -static struct mtd_partition p2601hnfx_partitions[] __initdata = -{ - { - .name = "uboot", - .offset = 0x0, - .size = 0x20000, - }, - { - .name = "uboot_env", - .offset = 0x20000, - .size = 0x20000, - }, - { - .name = "linux", - .offset = 0x40000, - .size = 0xfc0000, - }, -}; - -static struct physmap_flash_data p2601hnfx_flash_data __initdata = { - .nr_parts = ARRAY_SIZE(p2601hnfx_partitions), - .parts = p2601hnfx_partitions, -}; - -static struct gpio_led -p2601hnfx_leds_gpio[] __initdata = { - { .name = "soc:yellow:phone", .gpio = 216, .active_low = 1 }, - { .name = "soc:green:phone", .gpio = 217, .active_low = 1 }, - { .name = "soc:yellow:wifi", .gpio = 218, .active_low = 1 }, - { .name = "soc:green:power", .gpio = 219, .active_low = 1 }, - { .name = "soc:red:internet", .gpio = 220, .active_low = 1 }, - { .name = "soc:green:internet", .gpio = 221, .active_low = 1 }, - { .name = "soc:green:dsl", .gpio = 222, .active_low = 1 }, - { .name = "soc:green:wifi", .gpio = 223, .active_low = 1 }, -}; - -static struct gpio_keys_button -p2601hnfx_gpio_keys[] __initdata = { - { - .desc = "reset", - .type = EV_KEY, - .code = BTN_0, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 53, - .active_low = 1, - }, - { - .desc = "wifi", - .type = EV_KEY, - .code = BTN_1, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 54, - .active_low = 1, - }, -}; - -static struct ltq_eth_data ltq_eth_data = { - .mii_mode = PHY_INTERFACE_MODE_RMII, -}; - -static void __init -p2601hnfx_init(void) -{ -#define P2601HNFX_USB 9 - - ltq_register_gpio_stp(); - ltq_register_nor(&p2601hnfx_flash_data); - ltq_add_device_gpio_leds(-1, ARRAY_SIZE(p2601hnfx_leds_gpio), p2601hnfx_leds_gpio); - ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, ARRAY_SIZE(p2601hnfx_gpio_keys), p2601hnfx_gpio_keys); - ltq_register_etop(<q_eth_data); - xway_register_dwc(P2601HNFX_USB); - - // enable the ethernet ports on the SoC -// ltq_w32((ltq_r32(LTQ_GPORT_P0_CTL) & ~(1 << 17)) | (1 << 18), LTQ_GPORT_P0_CTL); -// ltq_w32((ltq_r32(LTQ_GPORT_P1_CTL) & ~(1 << 17)) | (1 << 18), LTQ_GPORT_P1_CTL); -// ltq_w32((ltq_r32(LTQ_GPORT_P2_CTL) & ~(1 << 17)) | (1 << 18), LTQ_GPORT_P2_CTL); -} - -MIPS_MACHINE(LANTIQ_MACH_P2601HNFX, - "P2601HNFX", - "ZyXEL P-2601HN-Fx", - p2601hnfx_init); diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-wbmr.c b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-wbmr.c deleted file mode 100644 index a57e092..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-wbmr.c +++ /dev/null @@ -1,120 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - * - * Copyright (C) 2010 John Crispin - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "../machtypes.h" -#include "devices.h" -#include "dev-dwc_otg.h" - -static struct mtd_partition wbmr_partitions[] = -{ - { - .name = "uboot", - .offset = 0x0, - .size = 0x40000, - }, - { - .name = "uboot-env", - .offset = 0x40000, - .size = 0x20000, - }, - { - .name = "linux", - .offset = 0x60000, - .size = 0x1f20000, - }, - { - .name = "calibration", - .offset = 0x1fe0000, - .size = 0x20000, - }, -}; - -static struct physmap_flash_data wbmr_flash_data = { - .nr_parts = ARRAY_SIZE(wbmr_partitions), - .parts = wbmr_partitions, -}; - -static struct gpio_led -wbmr_gpio_leds[] __initdata = { - { .name = "soc:blue:movie", .gpio = 20, .active_low = 1, }, - { .name = "soc:red:internet", .gpio = 18, .active_low = 1, }, - { .name = "soc:green:internet", .gpio = 17, .active_low = 1, }, - { .name = "soc:green:adsl", .gpio = 16, .active_low = 1, }, - { .name = "soc:green:wlan", .gpio = 15, .active_low = 1, }, - { .name = "soc:red:security", .gpio = 14, .active_low = 1, }, - { .name = "soc:green:power", .gpio = 1, .active_low = 1, }, - { .name = "soc:red:power", .gpio = 5, .active_low = 1, }, - { .name = "soc:green:usb", .gpio = 28, .active_low = 1, }, -}; - -static struct gpio_keys_button -wbmr_gpio_keys[] __initdata = { - { - .desc = "aoss", - .type = EV_KEY, - .code = BTN_0, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 0, - .active_low = 1, - }, - { - .desc = "reset", - .type = EV_KEY, - .code = BTN_1, - .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, - .gpio = 37, - .active_low = 1, - }, -}; - -static struct ltq_pci_data ltq_pci_data = { - .clock = PCI_CLOCK_INT, - .gpio = PCI_GNT1 | PCI_REQ1, - .irq = { - [14] = INT_NUM_IM0_IRL0 + 22, - }, -}; - -static struct ltq_eth_data ltq_eth_data = { - .mii_mode = PHY_INTERFACE_MODE_RGMII, -}; - -static void __init -wbmr_init(void) -{ -#define WMBR_BRN_MAC 0x1fd0024 - - ltq_add_device_gpio_leds(-1, ARRAY_SIZE(wbmr_gpio_leds), wbmr_gpio_leds); - ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, ARRAY_SIZE(wbmr_gpio_keys), wbmr_gpio_keys); - ltq_register_nor(&wbmr_flash_data); - ltq_register_pci(<q_pci_data); - memcpy_fromio(<q_eth_data.mac.sa_data, - (void *)KSEG1ADDR(LTQ_FLASH_START + WMBR_BRN_MAC), 6); - ltq_register_etop(<q_eth_data); - xway_register_dwc(36); -} - -MIPS_MACHINE(LANTIQ_MACH_WBMR, - "WBMR", - "WBMR", - wbmr_init); diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/pci-ath-fixup.c b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/pci-ath-fixup.c deleted file mode 100644 index c87ffb2..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/pci-ath-fixup.c +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Atheros AP94 reference board PCI initialization - * - * Copyright (C) 2009-2010 Gabor Juhos - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - */ - -#include -#include -#include -#include - -#define LTQ_PCI_MEM_BASE 0x18000000 - -struct ath_fixup { - u16 *cal_data; - unsigned slot; -}; - -static int ath_num_fixups; -static struct ath_fixup ath_fixups[2]; - -static void ath_pci_fixup(struct pci_dev *dev) -{ - void __iomem *mem; - u16 *cal_data = NULL; - u16 cmd; - u32 bar0; - u32 val; - unsigned i; - - for (i = 0; i < ath_num_fixups; i++) { - if (ath_fixups[i].cal_data == NULL) - continue; - - if (ath_fixups[i].slot != PCI_SLOT(dev->devfn)) - continue; - - cal_data = ath_fixups[i].cal_data; - break; - } - - if (cal_data == NULL) - return; - - if (*cal_data != 0xa55a) { - pr_err("pci %s: invalid calibration data\n", pci_name(dev)); - return; - } - - pr_info("pci %s: fixup device configuration\n", pci_name(dev)); - - mem = ioremap(LTQ_PCI_MEM_BASE, 0x10000); - if (!mem) { - pr_err("pci %s: ioremap error\n", pci_name(dev)); - return; - } - - pci_read_config_dword(dev, PCI_BASE_ADDRESS_0, &bar0); - pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, LTQ_PCI_MEM_BASE); - pci_read_config_word(dev, PCI_COMMAND, &cmd); - cmd |= PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY; - pci_write_config_word(dev, PCI_COMMAND, cmd); - - /* set pointer to first reg address */ - cal_data += 3; - while (*cal_data != 0xffff) { - u32 reg; - reg = *cal_data++; - val = *cal_data++; - val |= (*cal_data++) << 16; - - ltq_w32(swab32(val), mem + reg); - udelay(100); - } - - pci_read_config_dword(dev, PCI_VENDOR_ID, &val); - dev->vendor = val & 0xffff; - dev->device = (val >> 16) & 0xffff; - - pci_read_config_dword(dev, PCI_CLASS_REVISION, &val); - dev->revision = val & 0xff; - dev->class = val >> 8; /* upper 3 bytes */ - - pr_info("pci %s: fixup info: [%04x:%04x] revision %02x class %#08x\n", - pci_name(dev), dev->vendor, dev->device, dev->revision, dev->class); - - pci_read_config_word(dev, PCI_COMMAND, &cmd); - cmd &= ~(PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY); - pci_write_config_word(dev, PCI_COMMAND, cmd); - - pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, bar0); - - iounmap(mem); -} -DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_ATHEROS, PCI_ANY_ID, ath_pci_fixup); - -void __init ltq_pci_ath_fixup(unsigned slot, u16 *cal_data) -{ - if (ath_num_fixups >= ARRAY_SIZE(ath_fixups)) - return; - - ath_fixups[ath_num_fixups].slot = slot; - ath_fixups[ath_num_fixups].cal_data = cal_data; - ath_num_fixups++; -} diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/pci-ath-fixup.h b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/pci-ath-fixup.h deleted file mode 100644 index 095d261..0000000 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/pci-ath-fixup.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _PCI_ATH_FIXUP -#define _PCI_ATH_FIXUP - -void ltq_pci_ath_fixup(unsigned slot, u16 *cal_data) __init; - -#endif /* _PCI_ATH_FIXUP */ diff --git a/target/linux/lantiq/files/arch/mips/include/asm/mach-lantiq/dev-gpio-buttons.h b/target/linux/lantiq/files/arch/mips/include/asm/mach-lantiq/dev-gpio-buttons.h new file mode 100644 index 0000000..adb531c --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/include/asm/mach-lantiq/dev-gpio-buttons.h @@ -0,0 +1,26 @@ +/* + * Lantiq GPIO button support + * + * Copyright (C) 2008-2009 Gabor Juhos + * Copyright (C) 2008 Imre Kaloz + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + */ + +#ifndef _LANTIQ_DEV_GPIO_BUTTONS_H +#define _LANTIQ_DEV_GPIO_BUTTONS_H + +#include +#include + +#define LTQ_KEYS_POLL_INTERVAL 20 /* msecs */ +#define LTQ_KEYS_DEBOUNCE_INTERVAL (3 * LTQ_KEYS_POLL_INTERVAL) + +void ltq_register_gpio_keys_polled(int id, + unsigned poll_interval, + unsigned nbuttons, + struct gpio_keys_button *buttons); + +#endif /* _LANTIQ_DEV_GPIO_BUTTONS_H */ diff --git a/target/linux/lantiq/files/arch/mips/include/asm/mach-lantiq/dev-gpio-leds.h b/target/linux/lantiq/files/arch/mips/include/asm/mach-lantiq/dev-gpio-leds.h new file mode 100644 index 0000000..d51e496 --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/include/asm/mach-lantiq/dev-gpio-leds.h @@ -0,0 +1,21 @@ +/* + * Lantiq GPIO LED device support + * + * Copyright (C) 2008-2009 Gabor Juhos + * Copyright (C) 2008 Imre Kaloz + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + */ + +#ifndef _LANTIQ_DEV_LEDS_GPIO_H +#define _LANTIQ_DEV_LEDS_GPIO_H + +#include + +void ltq_add_device_gpio_leds(int id, + unsigned num_leds, + struct gpio_led *leds) __init; + +#endif /* _LANTIQ_DEV_LEDS_GPIO_H */ diff --git a/target/linux/lantiq/files/arch/mips/lantiq/dev-gpio-buttons.c b/target/linux/lantiq/files/arch/mips/lantiq/dev-gpio-buttons.c new file mode 100644 index 0000000..ad25cac --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/dev-gpio-buttons.c @@ -0,0 +1,58 @@ +/* + * Lantiq GPIO button support + * + * Copyright (C) 2008-2009 Gabor Juhos + * Copyright (C) 2008 Imre Kaloz + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + */ + +#include +#include +#include + +#include + +void __init ltq_register_gpio_keys_polled(int id, + unsigned poll_interval, + unsigned nbuttons, + struct gpio_keys_button *buttons) +{ + struct platform_device *pdev; + struct gpio_keys_platform_data pdata; + struct gpio_keys_button *p; + int err; + + p = kmalloc(nbuttons * sizeof(*p), GFP_KERNEL); + if (!p) + return; + + memcpy(p, buttons, nbuttons * sizeof(*p)); + + pdev = platform_device_alloc("gpio-keys-polled", id); + if (!pdev) + goto err_free_buttons; + + memset(&pdata, 0, sizeof(pdata)); + pdata.poll_interval = poll_interval; + pdata.nbuttons = nbuttons; + pdata.buttons = p; + + err = platform_device_add_data(pdev, &pdata, sizeof(pdata)); + if (err) + goto err_put_pdev; + + err = platform_device_add(pdev); + if (err) + goto err_put_pdev; + + return; + +err_put_pdev: + platform_device_put(pdev); + +err_free_buttons: + kfree(p); +} diff --git a/target/linux/lantiq/files/arch/mips/lantiq/dev-gpio-leds.c b/target/linux/lantiq/files/arch/mips/lantiq/dev-gpio-leds.c new file mode 100644 index 0000000..89dc79d --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/dev-gpio-leds.c @@ -0,0 +1,57 @@ +/* + * Lantiq GPIO LED device support + * + * Copyright (C) 2008-2009 Gabor Juhos + * Copyright (C) 2008 Imre Kaloz + * + * Parts of this file are based on Atheros' 2.6.15 BSP + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + */ + +#include +#include +#include + +#include + +void __init ltq_add_device_gpio_leds(int id, unsigned num_leds, + struct gpio_led *leds) +{ + struct platform_device *pdev; + struct gpio_led_platform_data pdata; + struct gpio_led *p; + int err; + + p = kmalloc(num_leds * sizeof(*p), GFP_KERNEL); + if (!p) + return; + + memcpy(p, leds, num_leds * sizeof(*p)); + + pdev = platform_device_alloc("leds-gpio", id); + if (!pdev) + goto err_free_leds; + + memset(&pdata, 0, sizeof(pdata)); + pdata.num_leds = num_leds; + pdata.leds = p; + + err = platform_device_add_data(pdev, &pdata, sizeof(pdata)); + if (err) + goto err_put_pdev; + + err = platform_device_add(pdev); + if (err) + goto err_put_pdev; + + return; + +err_put_pdev: + platform_device_put(pdev); + +err_free_leds: + kfree(p); +} diff --git a/target/linux/lantiq/files/arch/mips/lantiq/falcon/addon-easy98000.c b/target/linux/lantiq/files/arch/mips/lantiq/falcon/addon-easy98000.c new file mode 100644 index 0000000..317ee40 --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/falcon/addon-easy98000.c @@ -0,0 +1,213 @@ +/* + * EASY98000 CPLD Addon driver + * + * Copyright (C) 2011 Thomas Langer + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct easy98000_reg_cpld { + u16 cmdreg1; /* 0x1 */ + u16 cmdreg0; /* 0x0 */ + u16 idreg0; /* 0x3 */ + u16 resreg; /* 0x2 */ + u16 intreg; /* 0x5 */ + u16 idreg1; /* 0x4 */ + u16 ledreg; /* 0x7 */ + u16 pcmconconfig; /* 0x6 */ + u16 res0; /* 0x9 */ + u16 ethledreg; /* 0x8 */ + u16 res1[4]; /* 0xa-0xd */ + u16 cpld1v; /* 0xf */ + u16 cpld2v; /* 0xe */ +}; +static struct easy98000_reg_cpld * const cpld = + (struct easy98000_reg_cpld *)(KSEG1 | 0x17c00000); +#define cpld_r8(reg) (__raw_readw(&cpld->reg) & 0xFF) +#define cpld_w8(val, reg) __raw_writew((val) & 0xFF, &cpld->reg) + +int easy98000_addon_has_dm9000(void) +{ + if ((cpld_r8(idreg0) & 0xF) == 1) + return 1; + return 0; +} + +#if defined(CONFIG_PROC_FS) +typedef void (*cpld_dump) (struct seq_file *s); +struct proc_entry { + char *name; + void *callback; +}; + +static int cpld_proc_show ( struct seq_file *s, void *p ) +{ + cpld_dump dump = s->private; + + if ( dump != NULL ) + dump(s); + + return 0; +} + +static int cpld_proc_open ( struct inode *inode, struct file *file ) +{ + return single_open ( file, cpld_proc_show, PDE(inode)->data ); +} + +static void cpld_versions_get ( struct seq_file *s ) +{ + seq_printf(s, "CPLD1: V%d\n", cpld_r8(cpld1v)); + seq_printf(s, "CPLD2: V%d\n", cpld_r8(cpld2v)); +} + +static void cpld_ebu_module_get ( struct seq_file *s ) +{ + u8 addon_id; + + addon_id = cpld_r8(idreg0) & 0xF; + switch (addon_id) { + case 0xF: /* nothing connected */ + break; + case 1: + seq_printf(s, "Ethernet Controller module (dm9000)\n"); + break; + default: + seq_printf(s, "Unknown EBU module (EBU_ID=0x%02X)\n", addon_id); + break; + } +} + +static void cpld_xmii_module_get ( struct seq_file *s ) +{ + u8 addon_id; + char *mod = NULL; + + addon_id = cpld_r8(idreg1) & 0xF; + switch (addon_id) { + case 0xF: + mod = "no module"; + break; + case 0x1: + mod = "RGMII module"; + break; + case 0x4: + mod = "GMII MAC Mode (XWAY TANTOS-3G)"; + break; + case 0x6: + mod = "TMII MAC Mode (XWAY TANTOS-3G)"; + break; + case 0x8: + mod = "GMII PHY module"; + break; + case 0x9: + mod = "MII PHY module"; + break; + case 0xA: + mod = "RMII PHY module"; + break; + default: + break; + } + if (mod) + seq_printf(s, "%s\n", mod); + else + seq_printf(s, "unknown xMII module (xMII_ID=0x%02X)\n", addon_id); +} + +static struct proc_entry proc_entries[] = { + {"versions", cpld_versions_get}, + {"ebu", cpld_ebu_module_get}, + {"xmii", cpld_xmii_module_get}, +}; + +static struct file_operations ops = { + .owner = THIS_MODULE, + .open = cpld_proc_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; + +static void cpld_proc_entry_create(struct proc_dir_entry *parent_node, + struct proc_entry *proc_entry) +{ + proc_create_data ( proc_entry->name, (S_IFREG | S_IRUGO), parent_node, + &ops, proc_entry->callback); +} + +static int cpld_proc_install(void) +{ + struct proc_dir_entry *driver_proc_node; + + driver_proc_node = proc_mkdir("cpld", NULL); + if (driver_proc_node != NULL) { + int i; + for (i = 0; i < ARRAY_SIZE(proc_entries); i++) + cpld_proc_entry_create(driver_proc_node, + &proc_entries[i]); + } else { + printk("cannot create proc entry"); + return -1; + } + return 0; +} +#else +static inline int cpld_proc_install(void) {} +#endif + +static int easy98000_addon_probe(struct platform_device *pdev) +{ + return cpld_proc_install(); +} + +static int easy98000_addon_remove(struct platform_device *pdev) +{ +#if defined(CONFIG_PROC_FS) + char buf[64]; + int i; + + for (i = 0; i < sizeof(proc_entries) / sizeof(proc_entries[0]); i++) { + sprintf(buf, "cpld/%s", proc_entries[i].name); + remove_proc_entry(buf, 0); + } + remove_proc_entry("cpld", 0); +#endif + return 0; +} + +static struct platform_driver easy98000_addon_driver = { + .probe = easy98000_addon_probe, + .remove = __devexit_p(easy98000_addon_remove), + .driver = { + .name = "easy98000_addon", + .owner = THIS_MODULE, + }, +}; + +int __init easy98000_addon_init(void) +{ + return platform_driver_register(&easy98000_addon_driver); +} + +void __exit easy98000_addon_exit(void) +{ + platform_driver_unregister(&easy98000_addon_driver); +} + +module_init(easy98000_addon_init); +module_exit(easy98000_addon_exit); diff --git a/target/linux/lantiq/files/arch/mips/lantiq/falcon/dev-leds-easy98000-cpld.c b/target/linux/lantiq/files/arch/mips/lantiq/falcon/dev-leds-easy98000-cpld.c new file mode 100644 index 0000000..94622cf --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/falcon/dev-leds-easy98000-cpld.c @@ -0,0 +1,161 @@ +/* + * EASY98000 CPLD LED driver + * + * Copyright (C) 2010 Ralph Hempel + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "dev-leds-easy98000-cpld.h" + +const char *led_name[8] = { + "ge0_act", + "ge0_link", + "ge1_act", + "ge1_link", + "fe2_act", + "fe2_link", + "fe3_act", + "fe3_link" +}; + +#define cpld_base7 ((u16 *)(KSEG1 | 0x17c0000c)) +#define cpld_base8 ((u16 *)(KSEG1 | 0x17c00012)) + +#define ltq_r16(reg) __raw_readw(reg) +#define ltq_w16(val, reg) __raw_writew(val, reg) + +struct cpld_led_dev { + struct led_classdev cdev; + u8 mask; + u16 *base; +}; + +struct cpld_led_drvdata { + struct cpld_led_dev *led_devs; + int num_leds; +}; + +void led_set(u8 mask, u16 *base) +{ + ltq_w16(ltq_r16(base) | mask, base); +} + +void led_clear(u8 mask, u16 *base) +{ + ltq_w16(ltq_r16(base) & (~mask), base); +} + +void led_blink_clear(u8 mask, u16 *base) +{ + led_clear(mask, base); +} + +static void led_brightness(struct led_classdev *led_cdev, + enum led_brightness value) +{ + struct cpld_led_dev *led_dev = + container_of(led_cdev, struct cpld_led_dev, cdev); + + if (value) + led_set(led_dev->mask, led_dev->base); + else + led_clear(led_dev->mask, led_dev->base); +} + +static int led_probe(struct platform_device *pdev) +{ + int i; + char name[32]; + struct cpld_led_drvdata *drvdata; + int ret = 0; + + drvdata = kzalloc(sizeof(struct cpld_led_drvdata) + + sizeof(struct cpld_led_dev) * MAX_LED, + GFP_KERNEL); + if (!drvdata) + return -ENOMEM; + + drvdata->led_devs = (struct cpld_led_dev *) &drvdata[1]; + + for (i = 0; i < MAX_LED; i++) { + struct cpld_led_dev *led_dev = &drvdata->led_devs[i]; + led_dev->cdev.brightness_set = led_brightness; + led_dev->cdev.default_trigger = NULL; + led_dev->mask = 1 << (i % 8); + if(i < 8) { + sprintf(name, "easy98000-cpld:%s", led_name[i]); + led_dev->base = cpld_base8; + } else { + sprintf(name, "easy98000-cpld:red:%d", i-8); + led_dev->base = cpld_base7; + } + led_dev->cdev.name = name; + ret = led_classdev_register(&pdev->dev, &led_dev->cdev); + if (ret) + goto err; + } + platform_set_drvdata(pdev, drvdata); + return 0; + +err: + printk("led_probe: 3\n"); + for (i = i - 1; i >= 0; i--) + led_classdev_unregister(&drvdata->led_devs[i].cdev); + + kfree(drvdata); + return ret; +} + +static int led_remove(struct platform_device *pdev) +{ + int i; + struct cpld_led_drvdata *drvdata = platform_get_drvdata(pdev); + for (i = 0; i < MAX_LED; i++) + led_classdev_unregister(&drvdata->led_devs[i].cdev); + kfree(drvdata); + return 0; +} + +static struct platform_driver led_driver = { + .probe = led_probe, + .remove = __devexit_p(led_remove), + .driver = { + .name = LED_NAME, + .owner = THIS_MODULE, + }, +}; + +int __init easy98000_cpld_led_init(void) +{ + pr_info(LED_DESC ", Version " LED_VERSION + " (c) Copyright 2011, Lantiq Deutschland GmbH\n"); + return platform_driver_register(&led_driver); +} + +void __exit easy98000_cpld_led_exit(void) +{ + platform_driver_unregister(&led_driver); +} + +module_init(easy98000_cpld_led_init); +module_exit(easy98000_cpld_led_exit); + +MODULE_DESCRIPTION(LED_NAME); +MODULE_DESCRIPTION(LED_DESC); +MODULE_AUTHOR("Ralph Hempel "); +MODULE_LICENSE("GPL v2"); + diff --git a/target/linux/lantiq/files/arch/mips/lantiq/falcon/dev-leds-easy98000-cpld.h b/target/linux/lantiq/files/arch/mips/lantiq/falcon/dev-leds-easy98000-cpld.h new file mode 100644 index 0000000..3160189 --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/falcon/dev-leds-easy98000-cpld.h @@ -0,0 +1,20 @@ +/* + * EASY98000 CPLD LED driver + * + * Copyright (C) 2010 Ralph Hempel + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + * + */ +#ifndef _INCLUDE_EASY98000_CPLD_LED_H_ +#define _INCLUDE_EASY98000_CPLD_LED_H_ + +#define LED_NAME "easy98000_cpld_led" +#define LED_DESC "EASY98000 LED driver" +#define LED_VERSION "1.0.0" + +#define MAX_LED 16 + +#endif /* _INCLUDE_EASY98000_CPLD_LED_H_ */ diff --git a/target/linux/lantiq/files/arch/mips/lantiq/falcon/mach-95C3AM1.c b/target/linux/lantiq/files/arch/mips/lantiq/falcon/mach-95C3AM1.c new file mode 100644 index 0000000..42a3344 --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/falcon/mach-95C3AM1.c @@ -0,0 +1,94 @@ +#include +#include +#include + +#include + +#include "../machtypes.h" +#include "devices.h" + +#define BOARD_95C3AM1_GPIO_LED_0 10 +#define BOARD_95C3AM1_GPIO_LED_1 11 +#define BOARD_95C3AM1_GPIO_LED_2 12 +#define BOARD_95C3AM1_GPIO_LED_3 13 + +static struct mtd_partition board_95C3AM1_partitions[] = +{ + { + .name = "uboot", + .offset = 0x0, + .size = 0x40000, + }, + { + .name = "uboot_env", + .offset = 0x40000, + .size = 0x40000, /* 2 sectors for redundant env. */ + }, + { + .name = "linux", + .offset = 0x80000, + .size = 0xF80000, /* map only 16 MiB */ + }, +}; + +static struct flash_platform_data board_95C3AM1_flash_platform_data = { + .name = "sflash", + .parts = board_95C3AM1_partitions, + .nr_parts = ARRAY_SIZE(board_95C3AM1_partitions) +}; + +static struct spi_board_info board_95C3AM1_flash_data __initdata = { + .modalias = "m25p80", + .bus_num = 0, + .chip_select = 0, + .max_speed_hz = 10 * 1000 * 1000, + .mode = SPI_MODE_3, + .platform_data = &board_95C3AM1_flash_platform_data +}; + +static struct gpio_led board_95C3AM1_gpio_leds[] __initdata = { + { + .name = "power", + .gpio = BOARD_95C3AM1_GPIO_LED_0, + .active_low = 0, + }, { + .name = "optical", + .gpio = BOARD_95C3AM1_GPIO_LED_1, + .active_low = 0, + }, { + .name = "lan", + .gpio = BOARD_95C3AM1_GPIO_LED_2, + .active_low = 0, + }, { + .name = "update", + .gpio = BOARD_95C3AM1_GPIO_LED_3, + .active_low = 0, + } +}; + +static struct i2c_gpio_platform_data board_95C3AM1_i2c_gpio_data = { + .sda_pin = 107, + .scl_pin = 108, +}; + +static struct platform_device board_95C3AM1_i2c_gpio_device = { + .name = "i2c-gpio", + .id = 0, + .dev = { + .platform_data = &board_95C3AM1_i2c_gpio_data, + } +}; + +static void __init board_95C3AM1_init(void) +{ + falcon_register_i2c(); + falcon_register_spi_flash(&board_95C3AM1_flash_data); + platform_device_register(&board_95C3AM1_i2c_gpio_device); + ltq_add_device_gpio_leds(-1, ARRAY_SIZE(board_95C3AM1_gpio_leds), + board_95C3AM1_gpio_leds); +} + +MIPS_MACHINE(LANTIQ_MACH_95C3AM1, + "95C3AM1", + "95C3AM1 Board", + board_95C3AM1_init); diff --git a/target/linux/lantiq/files/arch/mips/lantiq/falcon/mach-easy98020.c b/target/linux/lantiq/files/arch/mips/lantiq/falcon/mach-easy98020.c new file mode 100644 index 0000000..4cdfc19 --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/falcon/mach-easy98020.c @@ -0,0 +1,118 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "../machtypes.h" +#include "devices.h" + +#define EASY98020_GPIO_LED_0 9 +#define EASY98020_GPIO_LED_1 10 +#define EASY98020_GPIO_LED_2 11 +#define EASY98020_GPIO_LED_3 12 +#define EASY98020_GPIO_LED_GE0_ACT 110 +#define EASY98020_GPIO_LED_GE0_LINK 109 +#define EASY98020_GPIO_LED_GE1_ACT 106 +#define EASY98020_GPIO_LED_GE1_LINK 105 + +static struct mtd_partition easy98020_spi_partitions[] = +{ + { + .name = "uboot", + .offset = 0x0, + .size = 0x40000, + }, + { + .name = "uboot_env", + .offset = 0x40000, + .size = 0x40000, /* 2 sectors for redundant env. */ + }, + { + .name = "linux", + .offset = 0x80000, + .size = 0xF80000, /* map only 16 MiB */ + }, +}; + +static struct flash_platform_data easy98020_spi_flash_platform_data = { + .name = "sflash", + .parts = easy98020_spi_partitions, + .nr_parts = ARRAY_SIZE(easy98020_spi_partitions) +}; + +static struct spi_board_info easy98020_spi_flash_data __initdata = { + .modalias = "m25p80", + .bus_num = 0, + .chip_select = 0, + .max_speed_hz = 10 * 1000 * 1000, + .mode = SPI_MODE_3, + .platform_data = &easy98020_spi_flash_platform_data +}; + +static struct gpio_led easy98020_gpio_leds[] __initdata = { + { + .name = "easy98020:green:0", + .gpio = EASY98020_GPIO_LED_0, + .active_low = 0, + }, { + .name = "easy98020:green:1", + .gpio = EASY98020_GPIO_LED_1, + .active_low = 0, + }, { + .name = "easy98020:green:2", + .gpio = EASY98020_GPIO_LED_2, + .active_low = 0, + }, { + .name = "easy98020:green:3", + .gpio = EASY98020_GPIO_LED_3, + .active_low = 0, + }, { + .name = "easy98020:ge0_act", + .gpio = EASY98020_GPIO_LED_GE0_ACT, + .active_low = 0, + }, { + .name = "easy98020:ge0_link", + .gpio = EASY98020_GPIO_LED_GE0_LINK, + .active_low = 0, + }, { + .name = "easy98020:ge1_act", + .gpio = EASY98020_GPIO_LED_GE1_ACT, + .active_low = 0, + }, { + .name = "easy98020:ge1_link", + .gpio = EASY98020_GPIO_LED_GE1_LINK, + .active_low = 0, + } +}; + +static void __init easy98020_init(void) +{ + falcon_register_i2c(); + falcon_register_spi_flash(&easy98020_spi_flash_data); + ltq_add_device_gpio_leds(-1, ARRAY_SIZE(easy98020_gpio_leds), + easy98020_gpio_leds); +} + +MIPS_MACHINE(LANTIQ_MACH_EASY98020, + "EASY98020", + "EASY98020 Eval Board", + easy98020_init); + +MIPS_MACHINE(LANTIQ_MACH_EASY98020_1LAN, + "EASY98020_1LAN", + "EASY98020 Eval Board (1 LAN port)", + easy98020_init); + +MIPS_MACHINE(LANTIQ_MACH_EASY98020_2LAN, + "EASY98020_2LAN", + "EASY98020 Eval Board (2 LAN ports)", + easy98020_init); diff --git a/target/linux/lantiq/files/arch/mips/lantiq/xway/dev-dwc_otg.c b/target/linux/lantiq/files/arch/mips/lantiq/xway/dev-dwc_otg.c new file mode 100644 index 0000000..56086fa --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/xway/dev-dwc_otg.c @@ -0,0 +1,70 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Copyright (C) 2010 John Crispin + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +#define LTQ_USB_IOMEM_BASE 0x1e101000 +#define LTQ_USB_IOMEM_SIZE 0x00001000 + +static struct resource resources[] = +{ + [0] = { + .name = "dwc_otg_membase", + .start = LTQ_USB_IOMEM_BASE, + .end = LTQ_USB_IOMEM_BASE + LTQ_USB_IOMEM_SIZE - 1, + .flags = IORESOURCE_MEM, + }, + [1] = { + .name = "dwc_otg_irq", + .flags = IORESOURCE_IRQ, + }, +}; + +static u64 dwc_dmamask = (u32)0x1fffffff; + +static struct platform_device platform_dev = { + .name = "dwc_otg", + .dev = { + .dma_mask = &dwc_dmamask, + }, + .resource = resources, + .num_resources = ARRAY_SIZE(resources), +}; + +int __init +xway_register_dwc(int pin) +{ + struct irq_data d; + d.irq = resources[1].start; + ltq_enable_irq(&d); + resources[1].start = ltq_is_ase() ? LTQ_USB_ASE_INT : LTQ_USB_INT; + platform_dev.dev.platform_data = (void*) pin; + return platform_device_register(&platform_dev); +} diff --git a/target/linux/lantiq/files/arch/mips/lantiq/xway/dev-dwc_otg.h b/target/linux/lantiq/files/arch/mips/lantiq/xway/dev-dwc_otg.h new file mode 100644 index 0000000..521fad0 --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/xway/dev-dwc_otg.h @@ -0,0 +1,17 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Copyright (C) 2010 John Crispin + */ + +#ifndef _LTQ_DEV_DWC_H__ +#define _LTQ_DEV_DWC_H__ + +#include + +extern void __init xway_register_dwc(int pin); + +#endif diff --git a/target/linux/lantiq/files/arch/mips/lantiq/xway/dev-wifi-athxk.c b/target/linux/lantiq/files/arch/mips/lantiq/xway/dev-wifi-athxk.c new file mode 100644 index 0000000..a75abe3 --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/xway/dev-wifi-athxk.c @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2011 John Crispin + * Copyright (C) 2011 Andrej Vlašić + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + */ + +#include +#include +#include +#include +#include + +#include "dev-wifi-athxk.h" + +extern int (*ltqpci_plat_dev_init)(struct pci_dev *dev); +struct ath5k_platform_data ath5k_pdata; +struct ath9k_platform_data ath9k_pdata = { + .led_pin = -1, + .endian_check = true, +}; + +static int +ath5k_pci_plat_dev_init(struct pci_dev *dev) +{ + dev->dev.platform_data = &ath5k_pdata; + return 0; +} + +static int +ath9k_pci_plat_dev_init(struct pci_dev *dev) +{ + dev->dev.platform_data = &ath9k_pdata; + return 0; +} + +void __init +ltq_register_ath5k(u16 *eeprom_data, u8 *macaddr) +{ + ath5k_pdata.eeprom_data = eeprom_data; + ath5k_pdata.macaddr = macaddr; + ltqpci_plat_dev_init = ath5k_pci_plat_dev_init; +} + +void __init +ltq_register_ath9k(u16 *eeprom_data, u8 *macaddr) +{ + memcpy(ath9k_pdata.eeprom_data, eeprom_data, sizeof(ath9k_pdata.eeprom_data)); + ath9k_pdata.macaddr = macaddr; + ltqpci_plat_dev_init = ath9k_pci_plat_dev_init; +} diff --git a/target/linux/lantiq/files/arch/mips/lantiq/xway/dev-wifi-athxk.h b/target/linux/lantiq/files/arch/mips/lantiq/xway/dev-wifi-athxk.h new file mode 100644 index 0000000..5fdb46b --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/xway/dev-wifi-athxk.h @@ -0,0 +1,16 @@ +/* + * Copyright (C) 2011 John Crispin + * Copyright (C) 2011 Andrej Vlašić + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + */ + +#ifndef _DEV_WIFI_ATHXK_H__ +#define _DEV_WIFI_ATHXK_H__ + +extern void ltq_register_ath5k(u16 *eeprom_data, u8 *macaddr); +extern void ltq_register_ath9k(u16 *eeprom_data, u8 *macaddr); + +#endif diff --git a/target/linux/lantiq/files/arch/mips/lantiq/xway/dev-wifi-rt2x00.c b/target/linux/lantiq/files/arch/mips/lantiq/xway/dev-wifi-rt2x00.c new file mode 100644 index 0000000..8e271f0 --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/xway/dev-wifi-rt2x00.c @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2011 John Crispin + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + */ + +#include +#include +#include +#include + +#include "dev-wifi-rt2x00.h" + +extern int (*ltqpci_plat_dev_init)(struct pci_dev *dev); +struct rt2x00_platform_data rt2x00_pdata; + +static int +rt2x00_pci_plat_dev_init(struct pci_dev *dev) +{ + dev->dev.platform_data = &rt2x00_pdata; + return 0; +} + +void __init +ltq_register_rt2x00(const char *firmware, const u8 *mac) +{ + rt2x00_pdata.eeprom_file_name = kstrdup(firmware, GFP_KERNEL); + rt2x00_pdata.mac_address = mac; + ltqpci_plat_dev_init = rt2x00_pci_plat_dev_init; +} diff --git a/target/linux/lantiq/files/arch/mips/lantiq/xway/dev-wifi-rt2x00.h b/target/linux/lantiq/files/arch/mips/lantiq/xway/dev-wifi-rt2x00.h new file mode 100644 index 0000000..941c265 --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/xway/dev-wifi-rt2x00.h @@ -0,0 +1,14 @@ +/* + * Copyright (C) 2011 John Crispin + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + */ + +#ifndef _DEV_WIFI_RT2X00_H__ +#define _DEV_WIFI_RT2X00_H__ + +extern void ltq_register_rt2x00(const char *firmware, const u8 *mac); + +#endif diff --git a/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-arv.c b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-arv.c new file mode 100644 index 0000000..4abb2d5 --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-arv.c @@ -0,0 +1,788 @@ +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + * + * Copyright (C) 2010 John Crispin + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "../machtypes.h" +#include "dev-wifi-rt2x00.h" +#include "dev-wifi-athxk.h" +#include "devices.h" +#include "dev-dwc_otg.h" +#include "pci-ath-fixup.h" + +static struct mtd_partition arv45xx_brnboot_partitions[] = +{ + { + .name = "brn-boot", + .offset = 0x0, + .size = 0x20000, + }, + { + .name = "config", + .offset = 0x20000, + .size = 0x30000, + }, + { + .name = "linux", + .offset = 0x50000, + .size = 0x390000, + }, + { + .name = "reserved", /* 12-byte signature at 0x3efff4 :/ */ + .offset = 0x3e0000, + .size = 0x010000, + }, + { + .name = "eeprom", + .offset = 0x3f0000, + .size = 0x10000, + }, +}; + +static struct mtd_partition arv75xx_brnboot_partitions[] = +{ + { + .name = "brn-boot", + .offset = 0x0, + .size = 0x20000, + }, + { + .name = "config", + .offset = 0x20000, + .size = 0x40000, + }, + { + .name = "linux", + .offset = 0x440000, + .size = 0x3a0000, + }, + { + .name = "reserved", /* 12-byte signature at 0x7efff4 :/ */ + .offset = 0x7e0000, + .size = 0x010000, + }, + { + .name = "board_config", + .offset = 0x7f0000, + .size = 0x10000, + }, +}; + +/* + * this is generic configuration for all arv based boards, note that it can be + * rewriten in arv_load_nor() + */ +static struct mtd_partition arv_partitions[] = +{ + { + .name = "uboot", + .offset = 0x0, + .size = 0x20000, + }, + { + .name = "uboot_env", + .offset = 0x20000, + .size = 0x10000, + }, + { + .name = "linux", + .offset = 0x30000, + .size = 0x3c0000, + }, + { + .name = "board_config", + .offset = 0x3f0000, + .size = 0x10000, + }, +}; + +static struct physmap_flash_data arv45xx_brnboot_flash_data = { + .nr_parts = ARRAY_SIZE(arv45xx_brnboot_partitions), + .parts = arv45xx_brnboot_partitions, +}; + +static struct physmap_flash_data arv75xx_brnboot_flash_data = { + .nr_parts = ARRAY_SIZE(arv75xx_brnboot_partitions), + .parts = arv75xx_brnboot_partitions, +}; + +static struct physmap_flash_data arv_flash_data = { + .nr_parts = ARRAY_SIZE(arv_partitions), + .parts = arv_partitions, +}; + +static struct ltq_pci_data ltq_pci_data = { + .clock = PCI_CLOCK_EXT, + .gpio = PCI_GNT1 | PCI_REQ1, + .irq = { + [14] = INT_NUM_IM0_IRL0 + 22, + }, +}; + +static struct ltq_eth_data ltq_eth_data = { + .mii_mode = PHY_INTERFACE_MODE_RMII, +}; + +static struct gpio_led +arv4510pw_gpio_leds[] __initdata = { + { .name = "soc:green:foo", .gpio = 4, .active_low = 1, }, +}; + +static struct gpio_led +arv4518pw_gpio_leds[] __initdata = { + { .name = "soc:green:power", .gpio = 3, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:adsl", .gpio = 4, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:internet", .gpio = 5, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:wifi", .gpio = 6, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:yellow:wps", .gpio = 7, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:red:fail", .gpio = 8, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:usb", .gpio = 19, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:voip", .gpio = 100, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:fxs1", .gpio = 101, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:fxs2", .gpio = 102, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:fxo", .gpio = 103, .active_low = 1, .default_trigger = "default-on" }, +}; + +static struct gpio_keys_button +arv4518pw_gpio_keys[] __initdata = { + { + .desc = "wifi", + .type = EV_KEY, + .code = BTN_0, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 28, + .active_low = 1, + }, + { + .desc = "reset", + .type = EV_KEY, + .code = BTN_1, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 30, + .active_low = 1, + }, + { + .desc = "wps", + .type = EV_KEY, + .code = BTN_2, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 29, + .active_low = 1, + }, +}; + +static struct gpio_led +arv4519pw_gpio_leds[] __initdata = { + { .name = "soc:red:power", .gpio = 7, .active_low = 1, }, + { .name = "soc:green:power", .gpio = 2, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:wifi", .gpio = 6, .active_low = 1, }, + { .name = "soc:green:adsl", .gpio = 4, .active_low = 1, }, + { .name = "soc:green:internet", .gpio = 5, .active_low = 1, }, + { .name = "soc:red:internet", .gpio = 8, .active_low = 1, }, + { .name = "soc:green:voip", .gpio = 100, .active_low = 1, }, + { .name = "soc:green:phone1", .gpio = 101, .active_low = 1, }, + { .name = "soc:green:phone2", .gpio = 102, .active_low = 1, }, + { .name = "soc:green:fxo", .gpio = 103, .active_low = 1, }, + { .name = "soc:green:usb", .gpio = 19, .active_low = 1, }, + { .name = "soc:orange:wps", .gpio = 104, .active_low = 1, }, + { .name = "soc:green:wps", .gpio = 105, .active_low = 1, }, + { .name = "soc:red:wps", .gpio = 106, .active_low = 1, }, + +}; + +static struct gpio_keys_button +arv4519pw_gpio_keys[] __initdata = { + { + .desc = "reset", + .type = EV_KEY, + .code = BTN_1, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 30, + .active_low = 1, + }, + { + .desc = "wlan", + .type = EV_KEY, + .code = BTN_2, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 28, + .active_low = 1, + }, +}; + +static struct gpio_led +arv4520pw_gpio_leds[] __initdata = { + { .name = "soc:blue:power", .gpio = 3, .active_low = 1, }, + { .name = "soc:blue:adsl", .gpio = 4, .active_low = 1, }, + { .name = "soc:blue:internet", .gpio = 5, .active_low = 1, }, + { .name = "soc:red:power", .gpio = 6, .active_low = 1, }, + { .name = "soc:yellow:wps", .gpio = 7, .active_low = 1, }, + { .name = "soc:red:wps", .gpio = 9, .active_low = 1, }, + { .name = "soc:blue:voip", .gpio = 100, .active_low = 1, }, + { .name = "soc:blue:fxs1", .gpio = 101, .active_low = 1, }, + { .name = "soc:blue:fxs2", .gpio = 102, .active_low = 1, }, + { .name = "soc:blue:fxo", .gpio = 103, .active_low = 1, }, + { .name = "soc:blue:voice", .gpio = 104, .active_low = 1, }, + { .name = "soc:blue:usb", .gpio = 105, .active_low = 1, }, + { .name = "soc:blue:wifi", .gpio = 106, .active_low = 1, }, +}; + +static struct gpio_led +arv452cpw_gpio_leds[] __initdata = { + { .name = "soc:blue:power", .gpio = 3, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:blue:adsl", .gpio = 4, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:blue:isdn", .gpio = 5, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:red:power", .gpio = 6, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:yellow:wps", .gpio = 7, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:red:wps", .gpio = 9, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:blue:fxs1", .gpio = 100, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:blue:fxs2", .gpio = 101, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:blue:wps", .gpio = 102, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:blue:fxo", .gpio = 103, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:blue:voice", .gpio = 104, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:blue:usb", .gpio = 105, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:blue:wifi", .gpio = 106, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:blue:internet", .gpio = 108, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:red:internet", .gpio = 109, .active_low = 1, .default_trigger = "default-on" }, +}; + +static struct gpio_led +arv4525pw_gpio_leds[] __initdata = { + { .name = "soc:green:dsl", .gpio = 6, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:wifi", .gpio = 8, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:online", .gpio = 9, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:fxs-internet", .gpio = 5, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:fxs-festnetz", .gpio = 4, .active_low = 1, .default_trigger = "default-on" }, +}; + +#define ARV4525PW_PHYRESET 13 +#define ARV4525PW_RELAY 31 + +static struct gpio +arv4525pw_gpios[] __initdata = { + { ARV4525PW_PHYRESET, GPIOF_OUT_INIT_HIGH, "phyreset" }, + { ARV4525PW_RELAY, GPIOF_OUT_INIT_HIGH, "relay" }, +}; + + +static struct gpio_led +arv752dpw22_gpio_leds[] __initdata = { + { .name = "soc:blue:power", .gpio = 3, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:red:internet", .gpio = 5, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:red:power", .gpio = 6, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:red:wps", .gpio = 8, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:red:fxo", .gpio = 103, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:red:voice", .gpio = 104, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:usb", .gpio = 105, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:wifi", .gpio = 106, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:wifi1", .gpio = 107, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:blue:wifi", .gpio = 108, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:blue:wifi1", .gpio = 109, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:eth1", .gpio = 111, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:eth2", .gpio = 112, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:eth3", .gpio = 113, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:eth4", .gpio = 114, .active_low = 1, .default_trigger = "default-on", }, +}; + +static struct gpio_keys_button +arv752dpw22_gpio_keys[] __initdata = { + { + .desc = "btn0", + .type = EV_KEY, + .code = BTN_0, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 12, + .active_low = 1, + }, + { + .desc = "btn1", + .type = EV_KEY, + .code = BTN_1, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 13, + .active_low = 1, + }, + { + .desc = "btn2", + .type = EV_KEY, + .code = BTN_2, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 28, + .active_low = 1, + }, +}; + +static struct gpio_led +arv7518pw_gpio_leds[] __initdata = { + { .name = "soc:red:power", .gpio = 7, .active_low = 1, }, + { .name = "soc:green:power", .gpio = 2, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:wifi", .gpio = 6, .active_low = 1, }, + { .name = "soc:green:adsl", .gpio = 4, .active_low = 1, }, + { .name = "soc:green:internet", .gpio = 5, .active_low = 1, }, + { .name = "soc:red:internet", .gpio = 8, .active_low = 1, }, + { .name = "soc:green:voip", .gpio = 100, .active_low = 1, }, + { .name = "soc:green:phone1", .gpio = 101, .active_low = 1, }, + { .name = "soc:green:phone2", .gpio = 102, .active_low = 1, }, + { .name = "soc:orange:fail", .gpio = 103, .active_low = 1, }, + { .name = "soc:green:usb", .gpio = 19, .active_low = 1, }, + { .name = "soc:orange:wps", .gpio = 104, .active_low = 1, }, + { .name = "soc:green:wps", .gpio = 105, .active_low = 1, }, + { .name = "soc:red:wps", .gpio = 106, .active_low = 1, }, + +}; + +static struct gpio_keys_button +arv7518pw_gpio_keys[] __initdata = { + /*{ + .desc = "reset", + .type = EV_KEY, + .code = BTN_1, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 23, + .active_low = 1, + },*/ + { + .desc = "wifi", + .type = EV_KEY, + .code = BTN_2, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 25, + .active_low = 1, + }, +}; + +static struct gpio_keys_button +arv7525pw_gpio_keys[] __initdata = { + { + .desc = "restart", + .type = EV_KEY, + .code = BTN_0, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 29, + .active_low = 1, + }, +}; + +static void __init +arv_load_nor(unsigned int max) +{ +#define UBOOT_MAGIC 0x27051956 + + int i; + int sector = -1; + + if (ltq_brn_boot) { + if (max == 0x800000) + ltq_register_nor(&arv75xx_brnboot_flash_data); + else + ltq_register_nor(&arv45xx_brnboot_flash_data); + return; + } + + for (i = 1; i < 4 && sector < 0; i++) { + unsigned int uboot_magic; + memcpy_fromio(&uboot_magic, (void *)KSEG1ADDR(LTQ_FLASH_START) + (i * 0x10000), 4); + if (uboot_magic == UBOOT_MAGIC) + sector = i; + } + + if (sector < 0) + return; + + arv_partitions[0].size = arv_partitions[1].offset = (sector - 1) * 0x10000; + arv_partitions[2].offset = arv_partitions[0].size + 0x10000; + arv_partitions[2].size = max - arv_partitions[2].offset - 0x10000; + arv_partitions[3].offset = max - 0x10000; + ltq_register_nor(&arv_flash_data); +} + +static void __init +arv_register_ethernet(unsigned int mac_addr) +{ + memcpy_fromio(<q_eth_data.mac.sa_data, + (void *)KSEG1ADDR(LTQ_FLASH_START + mac_addr), 6); + ltq_register_etop(<q_eth_data); +} + +static u16 arv_ath5k_eeprom_data[ATH5K_PLAT_EEP_MAX_WORDS]; +static u16 arv_ath9k_eeprom_data[ATH9K_PLAT_EEP_MAX_WORDS]; +static u8 arv_athxk_eeprom_mac[6]; + +static void __init +arv_register_ath5k(unsigned int ath_addr, unsigned int mac_addr) +{ + int i; + + memcpy_fromio(arv_athxk_eeprom_mac, + (void *)KSEG1ADDR(LTQ_FLASH_START + mac_addr), 6); + arv_athxk_eeprom_mac[5]++; + memcpy_fromio(arv_ath5k_eeprom_data, + (void *)KSEG1ADDR(LTQ_FLASH_START + ath_addr), ATH5K_PLAT_EEP_MAX_WORDS); + // swap eeprom bytes + for (i = 0; i < ATH5K_PLAT_EEP_MAX_WORDS>>1; i++) { + arv_ath5k_eeprom_data[i] = swab16(arv_ath5k_eeprom_data[i]); + if (i == 0x17e>>1) { + /* + * regdomain is invalid. it's unknown how did original + * fw convered value to 0x82d4 so for now force to 0x67 + */ + arv_ath5k_eeprom_data[i] &= 0x0000; + arv_ath5k_eeprom_data[i] |= 0x67; + } + } +} + +static void __init +arv_register_ath9k(unsigned int ath_addr, unsigned int mac_addr) +{ + int i; + u16 *eepdata, sum, el; + + memcpy_fromio(arv_athxk_eeprom_mac, + (void *)KSEG1ADDR(LTQ_FLASH_START + mac_addr), 6); + arv_athxk_eeprom_mac[5]++; + memcpy_fromio(arv_ath9k_eeprom_data, + (void *)KSEG1ADDR(LTQ_FLASH_START + ath_addr), ATH9K_PLAT_EEP_MAX_WORDS); + + // force regdomain to 0x67 + arv_ath9k_eeprom_data[0x208>>1] = 0x67; + + // calculate new checksum + sum = arv_ath9k_eeprom_data[0x200>>1]; + el = sum / sizeof(u16) - 2; /* skip length and (old) checksum */ + eepdata = (u16 *) (&arv_ath9k_eeprom_data[0x204>>1]); /* after checksum */ + for (i = 0; i < el; i++) + sum ^= *eepdata++; + sum ^= 0xffff; + arv_ath9k_eeprom_data[0x202>>1] = sum; +} + +static void __init +arv3527p_init(void) +{ +#define ARV3527P_MAC_ADDR 0x3f0016 + + ltq_register_gpio_stp(); + // ltq_add_device_gpio_leds(arv3527p_gpio_leds, ARRAY_SIZE(arv3527p_gpio_leds)); + arv_load_nor(0x400000); + arv_register_ethernet(ARV3527P_MAC_ADDR); +} + +MIPS_MACHINE(LANTIQ_MACH_ARV3527P, + "ARV3527P", + "ARV3527P - Arcor Easybox 401", + arv3527p_init); + +static void __init +arv4510pw_init(void) +{ +#define ARV4510PW_MAC_ADDR 0x3f0014 + + ltq_register_gpio_stp(); + ltq_add_device_gpio_leds(-1, ARRAY_SIZE(arv4510pw_gpio_leds), arv4510pw_gpio_leds); + arv_load_nor(0x400000); + ltq_pci_data.irq[12] = (INT_NUM_IM2_IRL0 + 31); + ltq_pci_data.irq[15] = (INT_NUM_IM0_IRL0 + 26); + ltq_pci_data.gpio |= PCI_EXIN2 | PCI_REQ2; + ltq_register_pci(<q_pci_data); + arv_register_ethernet(ARV4510PW_MAC_ADDR); +} + +MIPS_MACHINE(LANTIQ_MACH_ARV4510PW, + "ARV4510PW", + "ARV4510PW - Wippies Homebox", + arv4510pw_init); + +static void __init +arv4518pw_init(void) +{ +#define ARV4518PW_EBU 0 +#define ARV4518PW_USB 14 +#define ARV4518PW_SWITCH_RESET 13 +#define ARV4518PW_ATH_ADDR 0x3f0400 +#define ARV4518PW_MADWIFI_ADDR 0xb03f0400 +#define ARV4518PW_MAC_ADDR 0x3f0016 + + ltq_register_gpio_ebu(ARV4518PW_EBU); + ltq_add_device_gpio_leds(-1, ARRAY_SIZE(arv4518pw_gpio_leds), arv4518pw_gpio_leds); + ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, + ARRAY_SIZE(arv4518pw_gpio_keys), arv4518pw_gpio_keys); + arv_load_nor(0x400000); + ltq_pci_data.gpio = PCI_GNT2 | PCI_REQ2; + ltq_register_pci(<q_pci_data); + xway_register_dwc(ARV4518PW_USB); + arv_register_ethernet(ARV4518PW_MAC_ADDR); + arv_register_ath5k(ARV4518PW_ATH_ADDR, ARV4518PW_MAC_ADDR); + ltq_register_ath5k(arv_ath5k_eeprom_data, arv_athxk_eeprom_mac); + + gpio_request(ARV4518PW_SWITCH_RESET, "switch"); + gpio_direction_output(ARV4518PW_SWITCH_RESET, 1); + gpio_export(ARV4518PW_SWITCH_RESET, 0); +} + +MIPS_MACHINE(LANTIQ_MACH_ARV4518PW, + "ARV4518PW", + "ARV4518PW - SMC7908A-ISP, Airties WAV-221", + arv4518pw_init); + +static void __init +arv4519pw_init(void) +{ +#define ARV4519PW_EBU 0 +#define ARV4519PW_USB 14 +#define ARV4519PW_RELAY 31 +#define ARV4519PW_SWITCH_RESET 13 +#define ARV4519PW_ATH_ADDR 0x3f0400 +#define ARV4519PW_MAC_ADDR 0x3f0016 + + arv_load_nor(0x400000); + ltq_register_gpio_ebu(ARV4519PW_EBU); + ltq_add_device_gpio_leds(-1, ARRAY_SIZE(arv4519pw_gpio_leds), arv4519pw_gpio_leds); + ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, + ARRAY_SIZE(arv4519pw_gpio_keys), arv4519pw_gpio_keys); + ltq_pci_data.gpio = PCI_GNT2 | PCI_REQ1; + ltq_register_pci(<q_pci_data); + xway_register_dwc(ARV4519PW_USB); + arv_register_ethernet(ARV4519PW_MAC_ADDR); + arv_register_ath5k(ARV4519PW_ATH_ADDR, ARV4519PW_MAC_ADDR); + ltq_register_ath5k(arv_ath5k_eeprom_data, arv_athxk_eeprom_mac); + + gpio_request(ARV4519PW_RELAY, "relay"); + gpio_direction_output(ARV4519PW_RELAY, 1); + gpio_export(ARV4519PW_RELAY, 0); + + gpio_request(ARV4519PW_SWITCH_RESET, "switch"); + gpio_set_value(ARV4519PW_SWITCH_RESET, 1); + gpio_export(ARV4519PW_SWITCH_RESET, 0); +} + +MIPS_MACHINE(LANTIQ_MACH_ARV4519PW, + "ARV4519PW", + "ARV4519PW - Vodafone, Pirelli", + arv4519pw_init); + +static void __init +arv4520pw_init(void) +{ +#define ARV4520PW_EBU 0x400 +#define ARV4520PW_USB 28 +#define ARV4520PW_SWITCH_RESET 110 +#define ARV4520PW_MAC_ADDR 0x3f0016 + + ltq_register_gpio_ebu(ARV4520PW_EBU); + ltq_add_device_gpio_leds(-1, ARRAY_SIZE(arv4520pw_gpio_leds), arv4520pw_gpio_leds); + arv_load_nor(0x400000); + ltq_register_pci(<q_pci_data); + ltq_register_tapi(); + arv_register_ethernet(ARV4520PW_MAC_ADDR); + ltq_register_rt2x00(NULL, (const u8 *) ltq_eth_data.mac.sa_data); + xway_register_dwc(ARV4520PW_USB); + + gpio_request(ARV4520PW_SWITCH_RESET, "switch"); + gpio_set_value(ARV4520PW_SWITCH_RESET, 1); +} + +MIPS_MACHINE(LANTIQ_MACH_ARV4520PW, + "ARV4520PW", + "ARV4520PW - Airties WAV-281, Arcor A800", + arv4520pw_init); + +static void __init +arv452Cpw_init(void) +{ +#define ARV452CPW_EBU 0x77f +#define ARV452CPW_USB 28 +#define ARV452CPW_RELAY1 31 +#define ARV452CPW_RELAY2 107 +#define ARV452CPW_SWITCH_RESET 110 +#define ARV452CPW_ATH_ADDR 0x3f0400 +#define ARV452CPW_MADWIFI_ADDR 0xb03f0400 +#define ARV452CPW_MAC_ADDR 0x3f0016 + + ltq_register_gpio_ebu(ARV452CPW_EBU); + ltq_add_device_gpio_leds(-1, ARRAY_SIZE(arv452cpw_gpio_leds), arv452cpw_gpio_leds); + arv_load_nor(0x400000); + ltq_register_pci(<q_pci_data); + xway_register_dwc(ARV452CPW_USB); + arv_register_ethernet(ARV452CPW_MAC_ADDR); + arv_register_ath5k(ARV452CPW_ATH_ADDR, ARV452CPW_MAC_ADDR); + ltq_register_ath5k(arv_ath5k_eeprom_data, arv_athxk_eeprom_mac); + + gpio_request(ARV452CPW_SWITCH_RESET, "switch"); + gpio_set_value(ARV452CPW_SWITCH_RESET, 1); + gpio_export(ARV452CPW_SWITCH_RESET, 0); + + gpio_request(ARV452CPW_RELAY1, "relay1"); + gpio_direction_output(ARV452CPW_RELAY1, 1); + gpio_export(ARV452CPW_RELAY1, 0); + + gpio_request(ARV452CPW_RELAY2, "relay2"); + gpio_set_value(ARV452CPW_RELAY2, 1); + gpio_export(ARV452CPW_RELAY2, 0); +} + +MIPS_MACHINE(LANTIQ_MACH_ARV452CPW, + "ARV452CPW", + "ARV452CPW - Arcor A801", + arv452Cpw_init); + +static void __init +arv4525pw_init(void) +{ +#define ARV4525PW_ATH_ADDR 0x3f0400 +#define ARV4525PW_MADWIFI_ADDR 0xb03f0400 +#define ARV4525PW_MAC_ADDR 0x3f0016 + + arv_load_nor(0x400000); + ltq_add_device_gpio_leds(-1, ARRAY_SIZE(arv4525pw_gpio_leds), arv4525pw_gpio_leds); + gpio_request_array(arv4525pw_gpios, ARRAY_SIZE(arv4525pw_gpios)); + gpio_export(ARV4525PW_RELAY, false); + gpio_export(ARV4525PW_PHYRESET, false); + ltq_pci_data.clock = PCI_CLOCK_INT; + ltq_register_pci(<q_pci_data); + arv_register_ath5k(ARV4525PW_ATH_ADDR, ARV4525PW_MADWIFI_ADDR); + ltq_register_ath5k(arv_ath5k_eeprom_data, arv_athxk_eeprom_mac); + ltq_eth_data.mii_mode = PHY_INTERFACE_MODE_MII; + arv_register_ethernet(ARV4525PW_MAC_ADDR); +} + +MIPS_MACHINE(LANTIQ_MACH_ARV4525PW, + "ARV4525PW", + "ARV4525PW - Speedport W502V", + arv4525pw_init); + +static void __init +arv7525pw_init(void) +{ +#define ARV7525P_MAC_ADDR 0x3f0016 + + arv_load_nor(0x400000); + ltq_add_device_gpio_leds(-1, ARRAY_SIZE(arv4525pw_gpio_leds), arv4525pw_gpio_leds); + ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, + ARRAY_SIZE(arv7525pw_gpio_keys), arv7525pw_gpio_keys); + ltq_pci_data.clock = PCI_CLOCK_INT; + ltq_pci_data.gpio = PCI_GNT1 | PCI_EXIN1; + ltq_pci_data.irq[14] = (INT_NUM_IM3_IRL0 + 31); + ltq_register_pci(<q_pci_data); + ltq_eth_data.mii_mode = PHY_INTERFACE_MODE_MII; + ltq_register_rt2x00("RT2860.eeprom", NULL); + ltq_register_tapi(); + arv_register_ethernet(ARV7525P_MAC_ADDR); +} + +MIPS_MACHINE(LANTIQ_MACH_ARV7525PW, + "ARV7525PW", + "ARV7525PW - Speedport W303V", + arv7525pw_init); + +static void __init +arv7518pw_init(void) +{ +#define ARV7518PW_EBU 0x2 +#define ARV7518PW_USB 14 +#define ARV7518PW_SWITCH_RESET 13 +#define ARV7518PW_ATH_ADDR 0x7f0400 +#define ARV7518PW_MAC_ADDR 0x7f0016 + + arv_load_nor(0x800000); + ltq_register_gpio_ebu(ARV7518PW_EBU); + ltq_add_device_gpio_leds(-1, ARRAY_SIZE(arv7518pw_gpio_leds), arv7518pw_gpio_leds); + ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, + ARRAY_SIZE(arv7518pw_gpio_keys), arv7518pw_gpio_keys); + ltq_register_pci(<q_pci_data); + ltq_register_tapi(); + xway_register_dwc(ARV7518PW_USB); + arv_register_ethernet(ARV7518PW_MAC_ADDR); + arv_register_ath9k(ARV7518PW_ATH_ADDR, ARV7518PW_MAC_ADDR); + ltq_register_ath9k(arv_ath9k_eeprom_data, arv_athxk_eeprom_mac); + ltq_pci_ath_fixup(14, arv_ath9k_eeprom_data); + + gpio_request(ARV7518PW_SWITCH_RESET, "switch"); + gpio_direction_output(ARV7518PW_SWITCH_RESET, 1); + gpio_export(ARV7518PW_SWITCH_RESET, 0); +} + +MIPS_MACHINE(LANTIQ_MACH_ARV7518PW, + "ARV7518PW", + "ARV7518PW - ASTORIA", + arv7518pw_init); + +static void __init +arv752dpw22_init(void) +{ +#define ARV752DPW22_EBU 0x2 +#define ARV752DPW22_USB 100 +#define ARV752DPW22_RELAY 101 +#define ARV752DPW22_MAC_ADDR 0x7f0016 + + arv_load_nor(0x800000); + ltq_register_gpio_ebu(ARV752DPW22_EBU); + ltq_add_device_gpio_leds(-1, ARRAY_SIZE(arv752dpw22_gpio_leds), arv752dpw22_gpio_leds); + ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, + ARRAY_SIZE(arv752dpw22_gpio_keys), arv752dpw22_gpio_keys); + ltq_pci_data.irq[15] = (INT_NUM_IM3_IRL0 + 31); + ltq_pci_data.gpio |= PCI_EXIN1 | PCI_REQ2; + ltq_register_pci(<q_pci_data); + xway_register_dwc(ARV752DPW22_USB); + arv_register_ethernet(ARV752DPW22_MAC_ADDR); + + gpio_request(ARV752DPW22_RELAY, "relay"); + gpio_set_value(ARV752DPW22_RELAY, 1); + gpio_export(ARV752DPW22_RELAY, 0); +} + +MIPS_MACHINE(LANTIQ_MACH_ARV752DPW22, + "ARV752DPW22", + "ARV752DPW22 - Arcor A803", + arv752dpw22_init); + +static void __init +arv752dpw_init(void) +{ +#define ARV752DPW22_EBU 0x2 +#define ARV752DPW22_USB 100 +#define ARV752DPW22_RELAY 101 +#define ARV752DPW22_MAC_ADDR 0x7f0016 + + arv_load_nor(0x800000); + ltq_register_gpio_ebu(ARV752DPW22_EBU); + ltq_add_device_gpio_leds(-1, ARRAY_SIZE(arv752dpw22_gpio_leds), arv752dpw22_gpio_leds); + ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, ARRAY_SIZE(arv752dpw22_gpio_keys), arv752dpw22_gpio_keys); + ltq_pci_data.irq[14] = (INT_NUM_IM3_IRL0 + 31); + ltq_pci_data.gpio |= PCI_EXIN1 | PCI_REQ2; + ltq_register_pci(<q_pci_data); + xway_register_dwc(ARV752DPW22_USB); + ltq_register_rt2x00("RT2860.eeprom", NULL); + arv_register_ethernet(ARV752DPW22_MAC_ADDR); + gpio_request(ARV752DPW22_RELAY, "relay"); + gpio_set_value(ARV752DPW22_RELAY, 1); + gpio_export(ARV752DPW22_RELAY, 0); + +} + +MIPS_MACHINE(LANTIQ_MACH_ARV752DPW, + "ARV752DPW", + "ARV752DPW - Arcor A802", + arv752dpw_init); diff --git a/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-bthomehubv2b.c b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-bthomehubv2b.c new file mode 100644 index 0000000..44fe2f4 --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-bthomehubv2b.c @@ -0,0 +1,542 @@ +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + * + * Copyright (C) 2011 Andrej Vlašić + * Copyright (C) 2011 Luka Perkov + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "../machtypes.h" +//#include "dev-wifi-ath9k.h" +#include "devices.h" +#include "dev-dwc_otg.h" + +#undef USE_BTHH_GPIO_INIT + +// this reads certain data from u-boot if it's there +#define USE_UBOOT_ENV_DATA + +#define UBOOT_ENV_OFFSET 0x040000 +#define UBOOT_ENV_SIZE 0x010000 + +#ifdef NAND_ORGLAYOUT +// this is only here for reference +// definition of NAND flash area +static struct mtd_partition bthomehubv2b_nand_partitions[] = +{ + { + .name = "ART", + .offset = 0x0000000, + .size = 0x0004000, + }, + { + .name = "image1", + .offset = 0x0004000, + .size = 0x0E00000, + }, + { + .name = "unknown1", + .offset = 0x0E04000, + .size = 0x00FC000, + }, + { + .name = "image2", + .offset = 0x0F00000, + .size = 0x0E00000, + }, + { + .name = "unknown2", + .offset = 0x1D00000, + .size = 0x0300000, + }, + +}; +#endif + +#ifdef NAND_KEEPOPENRG +// this allows both firmwares to co-exist + +static struct mtd_partition bthomehubv2b_nand_partitions[] = +{ + { + .name = "art", + .offset = 0x0000000, + .size = 0x0004000, + }, + { + .name = "Image1", + .offset = 0x0004000, + .size = 0x0E00000, + }, + { + .name = "linux", + .offset = 0x0E04000, + .size = 0x11fC000, + }, + { + .name = "wholeflash", + .offset = 0x0000000, + .size = 0x2000000, + }, + +}; +#endif + +// this gives more jffs2 by overwriting openrg + +static struct mtd_partition bthomehubv2b_nand_partitions[] = +{ + { + .name = "art", + .offset = 0x0000000, + .size = 0x0004000, + }, + { + .name = "linux", + .offset = 0x0004000, + .size = 0x1ffC000, + }, + { + .name = "wholeflash", + .offset = 0x0000000, + .size = 0x2000000, + }, + +}; + +extern void __init xway_register_nand(struct mtd_partition *parts, int count); + +// end BTHH_USE_NAND + +static struct gpio_led +bthomehubv2b_gpio_leds[] __initdata = { + + { .name = "soc:orange:upgrading", .gpio = 213, }, + { .name = "soc:orange:phone", .gpio = 214, }, + { .name = "soc:blue:phone", .gpio = 215, }, + { .name = "soc:orange:wireless", .gpio = 216, }, + { .name = "soc:blue:wireless", .gpio = 217, }, + { .name = "soc:red:broadband", .gpio = 218, }, + { .name = "soc:orange:broadband", .gpio = 219, }, + { .name = "soc:blue:broadband", .gpio = 220, }, + { .name = "soc:red:power", .gpio = 221, }, + { .name = "soc:orange:power", .gpio = 222, }, + { .name = "soc:blue:power", .gpio = 223, }, +}; + +static struct gpio_keys_button +bthomehubv2b_gpio_keys[] __initdata = { + { + .desc = "restart", + .type = EV_KEY, + .code = BTN_0, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 2, + .active_low = 1, + }, + { + .desc = "findhandset", + .type = EV_KEY, + .code = BTN_1, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 15, + .active_low = 1, + }, + { + .desc = "wps", + .type = EV_KEY, + .code = BTN_2, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 22, + .active_low = 1, + }, +}; + +// definition of NOR flash area - as per original. +static struct mtd_partition bthomehubv2b_partitions[] = +{ + { + .name = "uboot", + .offset = 0x000000, + .size = 0x040000, + }, + { + .name = "uboot_env", + .offset = UBOOT_ENV_OFFSET, + .size = UBOOT_ENV_SIZE, + }, + { + .name = "rg_conf_1", + .offset = 0x050000, + .size = 0x010000, + }, + { + .name = "rg_conf_2", + .offset = 0x060000, + .size = 0x010000, + }, + { + .name = "rg_conf_factory", + .offset = 0x070000, + .size = 0x010000, + }, +}; + + +/* nor flash */ +/* bt homehubv2b has a very small nor flash */ +/* so make it look for a small one, else we get a lot of alias chips identified - */ +/* not a bug problem, but fills the logs. */ +static struct resource bthhv2b_nor_resource = + MEM_RES("nor", LTQ_FLASH_START, 0x80000); + +static struct platform_device ltq_nor = { + .name = "ltq_nor", + .resource = &bthhv2b_nor_resource, + .num_resources = 1, +}; + +static void __init bthhv2b_register_nor(struct physmap_flash_data *data) +{ + ltq_nor.dev.platform_data = data; + platform_device_register(<q_nor); +} + +static struct physmap_flash_data bthomehubv2b_flash_data = { + .nr_parts = ARRAY_SIZE(bthomehubv2b_partitions), + .parts = bthomehubv2b_partitions, +}; + + + + +static struct ltq_pci_data ltq_pci_data = { + .clock = PCI_CLOCK_INT, + .gpio = PCI_GNT1 | PCI_REQ1, + .irq = { [14] = INT_NUM_IM0_IRL0 + 22, }, +}; + + + + +static struct ltq_eth_data ltq_eth_data = { + .mii_mode = PHY_INTERFACE_MODE_MII, +}; + + + + +static char __init *get_uboot_env_var(char *haystack, int haystack_len, char *needle, int needle_len) { + int i; + for (i = 0; i <= haystack_len - needle_len; i++) { + if (memcmp(haystack + i, needle, needle_len) == 0) { + return haystack + i + needle_len; + } + } + return NULL; +} + +/* + * bthomehubv2b_parse_hex_* are not uniq. in arm/orion there are also duplicates: + * dns323_parse_hex_* + * TODO: one day write a patch for this :) + */ +static int __init bthomehubv2b_parse_hex_nibble(char n) { + if (n >= '0' && n <= '9') + return n - '0'; + + if (n >= 'A' && n <= 'F') + return n - 'A' + 10; + + if (n >= 'a' && n <= 'f') + return n - 'a' + 10; + + return -1; +} + +static int __init bthomehubv2b_parse_hex_byte(const char *b) { + int hi; + int lo; + + hi = bthomehubv2b_parse_hex_nibble(b[0]); + lo = bthomehubv2b_parse_hex_nibble(b[1]); + + if (hi < 0 || lo < 0) + return -1; + + return (hi << 4) | lo; +} + +static int __init bthomehubv2b_register_ethernet(void) { + u_int8_t addr[6]; + int i; + char *mac = "01:02:03:04:05:06"; + int gotmac = 0; + char *boardid = "BTHHV2B"; + int gotboardid = 0; + + char *uboot_env_page; + uboot_env_page = ioremap(LTQ_FLASH_START + UBOOT_ENV_OFFSET, UBOOT_ENV_SIZE); + if (uboot_env_page) + { + char *Data = NULL; + Data = get_uboot_env_var(uboot_env_page, UBOOT_ENV_SIZE, "\0ethaddr=", 9); + if (Data) + { + mac = Data; + } + + Data = get_uboot_env_var(uboot_env_page, UBOOT_ENV_SIZE, "\0boardid=", 9); + + if (Data) + boardid = Data; + } + else + { + printk("bthomehubv2b: Failed to get uboot_env_page"); + } + + if (!mac) { + goto error_fail; + } + + if (!boardid) { + goto error_fail; + } + + /* Sanity check the string we're looking at */ + for (i = 0; i < 5; i++) { + if (*(mac + (i * 3) + 2) != ':') { + goto error_fail; + } + } + + for (i = 0; i < 6; i++) { + int byte; + byte = bthomehubv2b_parse_hex_byte(mac + (i * 3)); + if (byte < 0) { + goto error_fail; + } + addr[i] = byte; + } + + if (gotmac) + printk("bthomehubv2b: Found ethernet MAC address: "); + else + printk("bthomehubv2b: using default MAC (pls set ethaddr in u-boot): "); + + for (i = 0; i < 6; i++) + printk("%.2x%s", addr[i], (i < 5) ? ":" : ".\n"); + + memcpy(<q_eth_data.mac.sa_data, addr, 6); + ltq_register_etop(<q_eth_data); + + //memcpy(&bthomehubv2b_ath5k_eeprom_mac, addr, 6); + //bthomehubv2b_ath5k_eeprom_mac[5]++; + + if (gotboardid) + printk("bthomehubv2b: Board id is %s.", boardid); + else + printk("bthomehubv2b: Default Board id is %s.", boardid); + + if (strncmp(boardid, "BTHHV2B", 7) == 0) { + // read in dev-wifi-ath9k + //memcpy(&bthomehubv2b_ath5k_eeprom_data, sx763_eeprom_data, ATH5K_PLAT_EEP_MAX_WORDS); + } + else { + printk("bthomehubv2b: Board id is unknown, fix uboot_env data."); + } + + + // should not unmap while we are using the ram? + if (uboot_env_page) + iounmap(uboot_env_page); + + return 0; + +error_fail: + if (uboot_env_page) + iounmap(uboot_env_page); + return -EINVAL; +} + + +#define PORTA2_HW_PASS1 0 +#define PORTA2_HW_PASS1_SC14480 1 +#define PORTA2_HW_PASS2 2 + +int porta2_hw_revision = -1; +EXPORT_SYMBOL(porta2_hw_revision); + +#define LTQ_GPIO_OUT 0x00 +#define LTQ_GPIO_IN 0x04 +#define LTQ_GPIO_DIR 0x08 +#define LTQ_GPIO_ALTSEL0 0x0C +#define LTQ_GPIO_ALTSEL1 0x10 +#define LTQ_GPIO_OD 0x14 +#define LTQ_GPIO_PUDSEL 0x1C +#define LTQ_GPIO_PUDEN 0x20 + +#ifdef USE_BTHH_GPIO_INIT +static void bthomehubv2b_board_prom_init(void) +{ + int revision = 0; + unsigned int gpio = 0; + void __iomem *mem = ioremap(LTQ_GPIO0_BASE_ADDR, LTQ_GPIO_SIZE*2); + +#define DANUBE_GPIO_P0_OUT (unsigned short *)(mem + LTQ_GPIO_OUT) +#define DANUBE_GPIO_P0_IN (unsigned short *)(mem + LTQ_GPIO_IN) +#define DANUBE_GPIO_P0_DIR (unsigned short *)(mem + LTQ_GPIO_DIR) +#define DANUBE_GPIO_P0_ALTSEL0 (unsigned short *)(mem + LTQ_GPIO_ALTSEL0) +#define DANUBE_GPIO_P0_ALTSEL1 (unsigned short *)(mem + LTQ_GPIO_ALTSEL1) + +#define DANUBE_GPIO_P1_OUT (unsigned short *)(mem + LTQ_GPIO_SIZE + LTQ_GPIO_OUT) +#define DANUBE_GPIO_P1_IN (unsigned short *)(mem + LTQ_GPIO_SIZE + LTQ_GPIO_IN) +#define DANUBE_GPIO_P1_DIR (unsigned short *)(mem + LTQ_GPIO_SIZE + LTQ_GPIO_DIR) +#define DANUBE_GPIO_P1_ALTSEL0 (unsigned short *)(mem + LTQ_GPIO_SIZE + LTQ_GPIO_ALTSEL0) +#define DANUBE_GPIO_P1_ALTSEL1 (unsigned short *)(mem + LTQ_GPIO_SIZE + LTQ_GPIO_ALTSEL1) +#define DANUBE_GPIO_P1_OD (unsigned short *)(mem + LTQ_GPIO_SIZE + LTQ_GPIO_OD) + + printk("About to sense board using GPIOs at %8.8X\n", (unsigned int)mem); + + + /* First detect HW revision of the board. For that we need to set the GPIO + * lines according to table 7.2.1/7.2.2 in HSI */ + *DANUBE_GPIO_P0_OUT = 0x0200; + *DANUBE_GPIO_P0_DIR = 0x2610; + *DANUBE_GPIO_P0_ALTSEL0 = 0x7812; + *DANUBE_GPIO_P0_ALTSEL1 = 0x0000; + + *DANUBE_GPIO_P1_OUT = 0x7008; + *DANUBE_GPIO_P1_DIR = 0xF3AE; + *DANUBE_GPIO_P1_ALTSEL0 = 0x83A7; + *DANUBE_GPIO_P1_ALTSEL1 = 0x0400; + + gpio = (*DANUBE_GPIO_P0_IN & 0xFFFF) | + ((*DANUBE_GPIO_P1_IN & 0xFFFF) << 16); + + revision |= (gpio & (1 << 27)) ? (1 << 0) : 0; + revision |= (gpio & (1 << 20)) ? (1 << 1) : 0; + revision |= (gpio & (1 << 8)) ? (1 << 2) : 0; + revision |= (gpio & (1 << 6)) ? (1 << 3) : 0; + revision |= (gpio & (1 << 5)) ? (1 << 4) : 0; + revision |= (gpio & (1 << 0)) ? (1 << 5) : 0; + + porta2_hw_revision = revision; + printk("PORTA2: detected HW revision %d\n", revision); + + /* Set GPIO lines according to HW revision. */ + /* !!! Note that we are setting SPI_CS5 (GPIO 9) to be GPIO out with value + * of HIGH since the FXO does not use the SPI CS mechanism, it does it + * manually by controlling the GPIO line. We need the CS line to be disabled + * (HIGH) until needed since it will intefere with other devices on the SPI + * bus. */ + *DANUBE_GPIO_P0_OUT = 0x0200; + /* + * During the manufacturing process a different machine takes over uart0 + * so set it as input (so it wouldn't drive the line) + */ +#define cCONFIG_SHC_BT_MFG_TEST 0 + *DANUBE_GPIO_P0_DIR = 0x2671 | (cCONFIG_SHC_BT_MFG_TEST ? 0 : (1 << 12)); + + if (revision == PORTA2_HW_PASS1_SC14480 || revision == PORTA2_HW_PASS2) + *DANUBE_GPIO_P0_ALTSEL0 = 0x7873; + else + *DANUBE_GPIO_P0_ALTSEL0 = 0x3873; + + *DANUBE_GPIO_P0_ALTSEL1 = 0x0001; + + + //################################################################################### + // Register values before patch + // P1_ALTSEL0 = 0x83A7 + // P1_ALTSEL1 = 0x0400 + // P1_OU T = 0x7008 + // P1_DIR = 0xF3AE + // P1_OD = 0xE3Fc + printk("\nApplying Patch for CPU1 IRQ Issue\n"); + *DANUBE_GPIO_P1_ALTSEL0 &= ~(1<<12); // switch P1.12 (GPIO28) to GPIO functionality + *DANUBE_GPIO_P1_ALTSEL1 &= ~(1<<12); // switch P1.12 (GPIO28) to GPIO functionality + *DANUBE_GPIO_P1_OUT &= ~(1<<12); // set P1.12 (GPIO28) to 0 + *DANUBE_GPIO_P1_DIR |= (1<<12); // configure P1.12 (GPIO28) as output + *DANUBE_GPIO_P1_OD |= (1<<12); // activate Push/Pull mode + udelay(100); // wait a little bit (100us) + *DANUBE_GPIO_P1_OD &= ~(1<<12); // switch back from Push/Pull to Open Drain + // important: before! setting output to 1 (3,3V) the mode must be switched + // back to Open Drain because the reset pin of the SC14488 is internally + // pulled to 1,8V + *DANUBE_GPIO_P1_OUT |= (1<<12); // set output P1.12 (GPIO28) to 1 + // Register values after patch, should be the same as before + // P1_ALTSEL0 = 0x83A7 + // P1_ALTSEL1 = 0x0400 + // P1_OUT = 0x7008 + // P1_DIR = 0xF3AE + // P1_OD = 0xE3Fc + //################################################################################### + + + *DANUBE_GPIO_P1_OUT = 0x7008; + *DANUBE_GPIO_P1_DIR = 0xEBAE | (revision == PORTA2_HW_PASS2 ? 0x1000 : 0); + *DANUBE_GPIO_P1_ALTSEL0 = 0x8BA7; + *DANUBE_GPIO_P1_ALTSEL1 = 0x0400; + + iounmap(mem); +} +#endif +static void __init bthomehubv2b_init(void) { +#define bthomehubv2b_USB 13 + + // read the board version +#ifdef USE_BTHH_GPIO_INIT + bthomehubv2b_board_prom_init(); +#endif + + // register extra GPPOs used by LEDs as GPO 0x200+ + ltq_register_gpio_stp(); + ltq_add_device_gpio_leds(-1, ARRAY_SIZE(bthomehubv2b_gpio_leds), bthomehubv2b_gpio_leds); + bthhv2b_register_nor(&bthomehubv2b_flash_data); + xway_register_nand(bthomehubv2b_nand_partitions, ARRAY_SIZE(bthomehubv2b_nand_partitions)); + ltq_register_pci(<q_pci_data); + ltq_register_tapi(); + ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, ARRAY_SIZE(bthomehubv2b_gpio_keys), bthomehubv2b_gpio_keys); +// ltq_register_ath9k(); + xway_register_dwc(bthomehubv2b_USB); + bthomehubv2b_register_ethernet(); + +} + +MIPS_MACHINE(LANTIQ_MACH_BTHOMEHUBV2BOPENRG, + "BTHOMEHUBV2BOPENRG", + "BTHOMEHUBV2B - BT Homehub V2.0 Type B with OpenRG image retained", + bthomehubv2b_init); + +MIPS_MACHINE(LANTIQ_MACH_BTHOMEHUBV2B, + "BTHOMEHUBV2B", + "BTHOMEHUBV2B - BT Homehub V2.0 Type B", + bthomehubv2b_init); diff --git a/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-easy50601.c b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-easy50601.c new file mode 100644 index 0000000..e76c29a --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-easy50601.c @@ -0,0 +1,58 @@ +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + * + * Copyright (C) 2010 John Crispin + */ + +#include +#include +#include +#include +#include +#include + +#include + +#include "../machtypes.h" +#include "devices.h" + +static struct mtd_partition easy50601_partitions[] = { + { + .name = "uboot", + .offset = 0x0, + .size = 0x10000, + }, + { + .name = "uboot_env", + .offset = 0x10000, + .size = 0x10000, + }, + { + .name = "linux", + .offset = 0x20000, + .size = 0x3d0000, + }, +}; + +static struct physmap_flash_data easy50601_flash_data = { + .nr_parts = ARRAY_SIZE(easy50601_partitions), + .parts = easy50601_partitions, +}; + +static struct ltq_eth_data ltq_eth_data = { + .mii_mode = -1, /* use EPHY */ +}; + +static void __init +easy50601_init(void) +{ + ltq_register_nor(&easy50601_flash_data); + ltq_register_etop(<q_eth_data); +} + +MIPS_MACHINE(LTQ_MACH_EASY50601, + "EASY50601", + "EASY50601 Eval Board", + easy50601_init); diff --git a/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-easy50712.c b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-easy50712.c new file mode 100644 index 0000000..581aa76 --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-easy50712.c @@ -0,0 +1,71 @@ +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + * + * Copyright (C) 2010 John Crispin + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "../machtypes.h" +#include "devices.h" + +static struct mtd_partition easy50712_partitions[] = { + { + .name = "uboot", + .offset = 0x0, + .size = 0x10000, + }, + { + .name = "uboot_env", + .offset = 0x10000, + .size = 0x10000, + }, + { + .name = "linux", + .offset = 0x20000, + .size = 0x3d0000, + }, +}; + +static struct physmap_flash_data easy50712_flash_data = { + .nr_parts = ARRAY_SIZE(easy50712_partitions), + .parts = easy50712_partitions, +}; + +static struct ltq_pci_data ltq_pci_data = { + .clock = PCI_CLOCK_INT, + .gpio = PCI_GNT1 | PCI_REQ1, + .irq = { + [14] = INT_NUM_IM0_IRL0 + 22, + }, +}; + +static struct ltq_eth_data ltq_eth_data = { + .mii_mode = PHY_INTERFACE_MODE_MII, +}; + +static void __init +easy50712_init(void) +{ + ltq_register_gpio_stp(); + ltq_register_nor(&easy50712_flash_data); + ltq_register_pci(<q_pci_data); + ltq_register_etop(<q_eth_data); + ltq_register_tapi(); +} + +MIPS_MACHINE(LTQ_MACH_EASY50712, + "EASY50712", + "EASY50712 Eval Board", + easy50712_init); diff --git a/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-fritz_ar9.c b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-fritz_ar9.c new file mode 100644 index 0000000..5bd6341 --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-fritz_ar9.c @@ -0,0 +1,115 @@ +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + * + * Copyright (C) 2010 John Crispin + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "../machtypes.h" +#include "devices.h" +#include "dev-ifxhcd.h" +#include "dev-gpio-leds.h" +#include "dev-gpio-buttons.h" + +static struct mtd_partition fritz7320_partitions[] = { + { + .name = "urlader", + .offset = 0x0, + .size = 0x20000, + }, + { + .name = "linux", + .offset = 0x20000, + .size = 0xf60000, + }, + { + .name = "tffs (1)", + .offset = 0xf80000, + .size = 0x40000, + }, + { + .name = "tffs (2)", + .offset = 0xfc0000, + .size = 0x40000, + }, +}; + +static struct physmap_flash_data fritz7320_flash_data = { + .nr_parts = ARRAY_SIZE(fritz7320_partitions), + .parts = fritz7320_partitions, +}; + +static struct gpio_led +fritz7320_gpio_leds[] __initdata = { + { .name = "soc:green:power", .gpio = 44, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:internet", .gpio = 47, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:dect", .gpio = 38, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:wlan", .gpio = 37, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:dual1", .gpio = 35, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:red:dual2", .gpio = 45, .active_low = 1, .default_trigger = "default-on" }, +}; + +static struct gpio_keys_button +fritz7320_gpio_keys[] __initdata = { + { + .desc = "wifi", + .type = EV_KEY, + .code = BTN_0, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 1, + .active_low = 1, + }, + { + .desc = "dect", + .type = EV_KEY, + .code = BTN_1, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 2, + .active_low = 1, + }, +}; + +static struct ltq_pci_data ltq_pci_data = { + .clock = PCI_CLOCK_INT, + .gpio = PCI_GNT1 | PCI_REQ1, + .irq = { + [14] = INT_NUM_IM0_IRL0 + 22, + }, +}; + +static struct ltq_eth_data ltq_eth_data = { + .mii_mode = PHY_INTERFACE_MODE_RMII, +}; + +static int usb_pins[2] = { 50, 51 }; + +static void __init +fritz7320_init(void) +{ + ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, + ARRAY_SIZE(fritz7320_gpio_keys), fritz7320_gpio_keys); + ltq_add_device_gpio_leds(-1, ARRAY_SIZE(fritz7320_gpio_leds), fritz7320_gpio_leds); + ltq_register_pci(<q_pci_data); + ltq_register_etop(<q_eth_data); + ltq_register_nor(&fritz7320_flash_data); + xway_register_hcd(usb_pins); +} + +MIPS_MACHINE(LANTIQ_MACH_FRITZ7320, + "FRITZ7320", + "FRITZ!BOX 7320", + fritz7320_init); diff --git a/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-fritz_vr9.c b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-fritz_vr9.c new file mode 100644 index 0000000..293c7b7 --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-fritz_vr9.c @@ -0,0 +1,164 @@ +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + * + * Copyright (C) 2010 John Crispin + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "../machtypes.h" +#include "devices.h" +#include "dev-ifxhcd.h" +#include "dev-gpio-leds.h" +#include "dev-gpio-buttons.h" + +static struct mtd_partition fritz3370_partitions[] = { + { + .name = "linux", + .offset = 0x0, + .size = 0x400000, + }, + { + .name = "filesystem", + .offset = 0x400000, + .size = 0x3000000, + }, + { + .name = "reserved-kernel", + .offset = 0x3400000, + .size = 0x400000, + }, + { + .name = "reserved", + .offset = 0x3800000, + .size = 0x3000000, + }, + { + .name = "config", + .offset = 0x6800000, + .size = 0x200000, + }, + { + .name = "nand-filesystem", + .offset = 0x6a00000, + .size = 0x1600000, + }, +}; + +static struct mtd_partition spi_flash_partitions[] = { + { + .name = "urlader", + .offset = 0x0, + .size = 0x20000, + }, + { + .name = "tffs", + .offset = 0x20000, + .size = 0x10000, + }, + { + .name = "tffs", + .offset = 0x30000, + .size = 0x10000, + }, +}; + +static struct gpio_led +fritz3370_gpio_leds[] __initdata = { + { .name = "soc:green:1", .gpio = 32, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:red:2", .gpio = 33, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:red:3", .gpio = 34, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:4", .gpio = 35, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:5", .gpio = 36, .active_low = 1, .default_trigger = "default-on" }, + { .name = "soc:green:6", .gpio = 47, .active_low = 1, .default_trigger = "default-on" }, +}; + +static struct gpio_keys_button +fritz3370_gpio_keys[] __initdata = { + { + .desc = "wifi", + .type = EV_KEY, + .code = BTN_0, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 29, + .active_low = 1, + }, +}; + +static struct ltq_eth_data ltq_eth_data = { + .mii_mode = PHY_INTERFACE_MODE_RMII, +}; + +static int usb_pins[2] = { 5, 14 }; + +#define SPI_GPIO_MRST 16 +#define SPI_GPIO_MTSR 17 +#define SPI_GPIO_CLK 18 +#define SPI_GPIO_CS0 10 + +static struct spi_gpio_platform_data spi_gpio_data = { + .sck = SPI_GPIO_CLK, + .mosi = SPI_GPIO_MTSR, + .miso = SPI_GPIO_MRST, + .num_chipselect = 2, +}; + +static struct platform_device spi_gpio_device = { + .name = "spi_gpio", + .dev.platform_data = &spi_gpio_data, +}; + +static struct flash_platform_data spi_flash_data = { + .name = "SPL", + .parts = spi_flash_partitions, + .nr_parts = ARRAY_SIZE(spi_flash_partitions), +}; + +static struct spi_board_info spi_flash __initdata = { + .modalias = "m25p80", + .bus_num = 0, + .chip_select = 0, + .max_speed_hz = 10 * 1000 * 1000, + .mode = SPI_MODE_3, + .chip_select = 0, + .controller_data = (void *) SPI_GPIO_CS0, + .platform_data = &spi_flash_data +}; + +static void __init +spi_gpio_init(void) +{ + spi_register_board_info(&spi_flash, 1); + platform_device_register(&spi_gpio_device); +} + +static void __init +fritz3370_init(void) +{ + spi_gpio_init(); + platform_device_register_simple("pcie-xway", 0, NULL, 0); + xway_register_nand(fritz3370_partitions, ARRAY_SIZE(fritz3370_partitions)); + xway_register_hcd(usb_pins); + ltq_add_device_gpio_leds(-1, ARRAY_SIZE(fritz3370_gpio_leds), fritz3370_gpio_leds); + ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, + ARRAY_SIZE(fritz3370_gpio_keys), fritz3370_gpio_keys); + ltq_register_vrx200(<q_eth_data); +} + +MIPS_MACHINE(LANTIQ_MACH_FRITZ3370, + "FRITZ3370", + "FRITZ!BOX 3370", + fritz3370_init); diff --git a/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-gigasx76x.c b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-gigasx76x.c new file mode 100644 index 0000000..af27825 --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-gigasx76x.c @@ -0,0 +1,168 @@ +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + * + * Copyright (C) 2011 Andrej Vlašić + * Copyright (C) 2011 Luka Perkov + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "../machtypes.h" +#include "dev-wifi-athxk.h" +#include "devices.h" +#include "dev-dwc_otg.h" + +#include "mach-gigasx76x.h" + +static u8 ltq_ethaddr[6] = { 0 }; + +static int __init +setup_ethaddr(char *str) +{ + if (!mac_pton(str, ltq_ethaddr)) + memset(ltq_ethaddr, 0, 6); + return 0; +} +__setup("ethaddr=", setup_ethaddr); + + +enum { + UNKNOWN = 0, + SX761, + SX762, + SX763, +}; +static u8 board __initdata = SX763; + +static int __init +setup_board(char *str) +{ + if (!strcmp(str, "sx761")) + board = SX761; + else if (!strcmp(str, "sx762")) + board = SX762; + else if (!strcmp(str, "sx763")) + board = SX763; + else + board = UNKNOWN; + return 0; +} +__setup("board=", setup_board); + +static struct mtd_partition gigasx76x_partitions[] = +{ + { + .name = "uboot", + .offset = 0x0, + .size = 0x10000, + }, + { + .name = "uboot_env", + .offset = 0x10000, + .size = 0x10000, + }, + { + .name = "linux", + .offset = 0x20000, + .size = 0x7e0000, + }, +}; + +static struct gpio_led +gigasx76x_gpio_leds[] __initdata = { + { .name = "soc:green:voip", .gpio = 216, }, + { .name = "soc:green:adsl", .gpio = 217, }, + { .name = "soc:green:usb", .gpio = 218, }, + { .name = "soc:green:wifi", .gpio = 219, }, + { .name = "soc:green:phone2", .gpio = 220, }, + { .name = "soc:green:phone1", .gpio = 221, }, + { .name = "soc:green:line", .gpio = 222, }, + { .name = "soc:green:online", .gpio = 223, }, +}; + +static struct gpio_keys_button +gigasx76x_gpio_keys[] __initdata = { + { + .desc = "wps", + .type = EV_KEY, + .code = KEY_WPS_BUTTON, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 22, + .active_low = 1, + }, + { + .desc = "reset", + .type = EV_KEY, + .code = BTN_0, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 14, + .active_low = 0, + }, +}; + +static struct physmap_flash_data gigasx76x_flash_data = { + .nr_parts = ARRAY_SIZE(gigasx76x_partitions), + .parts = gigasx76x_partitions, +}; + +static struct ltq_pci_data ltq_pci_data = { + .clock = PCI_CLOCK_INT, + .gpio = PCI_GNT1 | PCI_REQ1, + .irq = { [14] = INT_NUM_IM0_IRL0 + 22, }, +}; + +static struct ltq_eth_data ltq_eth_data = { + .mii_mode = PHY_INTERFACE_MODE_MII, +}; + +static void __init +gigasx76x_init(void) +{ +#define GIGASX76X_USB 29 + + ltq_register_gpio_stp(); + ltq_register_nor(&gigasx76x_flash_data); + ltq_register_pci(<q_pci_data); + ltq_register_tapi(); + ltq_add_device_gpio_leds(-1, ARRAY_SIZE(gigasx76x_gpio_leds), gigasx76x_gpio_leds); + ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, ARRAY_SIZE(gigasx76x_gpio_keys), gigasx76x_gpio_keys); + xway_register_dwc(GIGASX76X_USB); + + if (!is_valid_ether_addr(ltq_ethaddr)) + random_ether_addr(ltq_ethaddr); + + memcpy(<q_eth_data.mac.sa_data, ltq_ethaddr, 6); + ltq_register_etop(<q_eth_data); + if (board == SX762) + ltq_register_ath5k(sx762_eeprom_data, ltq_ethaddr); + else + ltq_register_ath5k(sx763_eeprom_data, ltq_ethaddr); +} + +MIPS_MACHINE(LANTIQ_MACH_GIGASX76X, + "GIGASX76X", + "GIGASX76X - Gigaset SX761,SX762,SX763", + gigasx76x_init); diff --git a/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-gigasx76x.h b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-gigasx76x.h new file mode 100644 index 0000000..74e5ba2 --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-gigasx76x.h @@ -0,0 +1,210 @@ +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + * + * Copyright (C) 2011 Andrej Vlašić + * Copyright (C) 2011 Luka Perkov + * + */ + +#ifndef _MACH_GIGASX76X_H__ +#define _MACH_GIGASX76X_H__ + +#include + +static u16 sx763_eeprom_data[ATH5K_PLAT_EEP_MAX_WORDS] = +{ +0x0013,0x168c,0x0200,0x0001,0x0000,0x5001,0x0000,0x2051,0x2051,0x1c0a,0x0100, +0x0000,0x01c2,0x0002,0xc606,0x0001,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf165,0x7fbe,0x0003,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5aa5,0x0000,0x0000,0x0313,0x4943, +0x2053,0x7104,0x1202,0x0400,0x0306,0x0001,0x0000,0x0500,0x410e,0x39b1,0x1eb5, +0x4e2d,0x3056,0xffff,0xe902,0x0700,0x0106,0x0000,0x0100,0x1500,0x0752,0x4101, +0x6874,0x7265,0x736f,0x4320,0x6d6f,0x756d,0x696e,0x6163,0x6974,0x6e6f,0x2c73, +0x4920,0x636e,0x002e,0x5241,0x3035,0x3130,0x302d,0x3030,0x2d30,0x3030,0x3030, +0x5700,0x7269,0x6c65,0x7365,0x2073,0x414c,0x204e,0x6552,0x6566,0x6572,0x636e, +0x2065,0x6143,0x6472,0x3000,0x0030,0x00ff,0x2100,0x0602,0x2201,0x0205,0x8d80, +0x005b,0x0522,0x4002,0x8954,0x2200,0x0205,0x1b00,0x00b7,0x0522,0x8002,0x12a8, +0x2201,0x0205,0x3600,0x016e,0x0522,0x0002,0x2551,0x2202,0x0205,0x6c00,0x02dc, +0x0522,0x8002,0x37f9,0x2203,0x0205,0xa200,0x044a,0x0222,0x0803,0x0822,0x0604, +0x0300,0xbe7f,0x65f1,0x0222,0x0105,0x00ff,0x0000,0x0000,0x0000,0x0000,0x0000, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0x0037,0x971f,0x5003,0x9a66,0x0001,0x81c4,0x016a, +0x02ff,0x84ff,0x15a3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x2d2c,0x0000,0x0000,0x0000,0x0000,0xe028,0xa492,0x1c00, +0x000e,0xb8ca,0x0013,0x0000,0x0000,0x6b4b,0xc059,0x1571,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x2370,0x00a5,0x9618,0x419a,0x68a2,0xda35,0x001c,0x0007,0xb0ff,0x01b5,0x0000, +0x0000,0xff70,0x19ff,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x3170,0x00a5,0x9618,0x419a,0x68a2,0xda35, +0x001c,0x000e,0xb0ff,0x21b5,0x0000,0x2fd8,0xff70,0x1226,0x19ff,0x07be,0x6201, +0x032e,0x0587,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1112, +0x1441,0x4231,0x3234,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x8000,0x0000,0x0000,0x0000,0x0000,0x8000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4d31,0x7f54,0x3c93,0x1205,0x1931, +0x492d,0x7f50,0x3c93,0x0e01,0x192d,0x0070,0x0000,0x8140,0x724b,0x2ba9,0x3a09, +0x99d9,0x1949,0x0070,0x0000,0x80e0,0x624a,0x2af8,0x35c7,0x9d47,0x1938,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x7082,0x0820,0xb882,0x0820,0x7092,0x28a0,0x8992, +0x28a0,0xa292,0x28a0,0x70a2,0xa7ac,0x0000,0x0000,0x2464,0x6424,0x0000,0x0000, +0x70a2,0xa7ac,0x0000,0x0000,0x2464,0x6424,0x0000,0x0000,0x8989,0x0000,0x0000, +0x0000,0x2424,0x0000,0x0000,0x0000,0x7075,0xa2ac,0xb800,0x0000,0x2464,0x2424, +0x2400,0x0000,0x7075,0xa2ac,0x0000,0x0000,0x2464,0x2424,0x0000,0x0000,0x7075, +0xa7ac,0x0000,0x0000,0x2464,0x6424,0x0000,0x0000,0x7075,0xa7ac,0x0000,0x0000, +0x2464,0x6424,0x0000,0x0000,0x8989,0x0000,0x0000,0x0000,0x2424,0x0000,0x0000, +0x0000,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff}; + +static u16 sx762_eeprom_data[ATH5K_PLAT_EEP_MAX_WORDS] = +{ +0x001a,0x168c,0x0200,0x0001,0x0000,0x5001,0x0000,0x2051,0x2051,0x1c0a,0x0100, +0x0000,0x01c2,0x0002,0xc606,0x0001,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf165,0x7fbe,0x0003,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5aa5,0x0000,0x0000,0x0313,0x4943, +0x2053,0x7104,0x1202,0x0400,0x0306,0x0001,0x0000,0x0500,0x410e,0x39b1,0x1eb5, +0x4e2d,0x3056,0xffff,0xe902,0x0700,0x0106,0x0000,0x0100,0x1500,0x0752,0x4101, +0x6874,0x7265,0x736f,0x4320,0x6d6f,0x756d,0x696e,0x6163,0x6974,0x6e6f,0x2c73, +0x4920,0x636e,0x002e,0x5241,0x3035,0x3130,0x302d,0x3030,0x2d30,0x3030,0x3030, +0x5700,0x7269,0x6c65,0x7365,0x2073,0x414c,0x204e,0x6552,0x6566,0x6572,0x636e, +0x2065,0x6143,0x6472,0x3000,0x0030,0x00ff,0x2100,0x0602,0x2201,0x0205,0x8d80, +0x005b,0x0522,0x4002,0x8954,0x2200,0x0205,0x1b00,0x00b7,0x0522,0x8002,0x12a8, +0x2201,0x0205,0x3600,0x016e,0x0522,0x0002,0x2551,0x2202,0x0205,0x6c00,0x02dc, +0x0522,0x8002,0x37f9,0x2203,0x0205,0xa200,0x044a,0x0222,0x0803,0x0822,0x0604, +0x0300,0xbe7f,0x65f1,0x0222,0x0105,0x00ff,0x0000,0x0000,0x0000,0x0000,0x0000, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0x0037,0x6aaa,0x5003,0x9a66,0x0001,0x81c4,0x016a, +0x02ff,0x84ff,0x15a3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x2d2c,0x0000,0x0000,0x0000,0x0000,0xe028,0xa492,0x1c00, +0x000e,0xb8ca,0x0013,0x0000,0x0000,0x6b4b,0xc059,0x1571,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x2370,0x00a5,0x9618,0x419a,0x68a2,0xda35,0x001c,0x0007,0xb0ff,0x01b5,0x0000, +0x0000,0xff70,0x19ff,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x3170,0x00a5,0x9618,0x419a,0x68a2,0xda35, +0x001c,0x000e,0xb0ff,0x21b5,0x0000,0x2fd8,0xff70,0x1226,0x19ff,0x07fa,0x6201, +0x032e,0x0587,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1112, +0x1441,0x4231,0x3234,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x8000,0x0000,0x0000,0x0000,0x0000,0x8000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4d31,0x7f54,0x3c93,0x1205,0x1931, +0x492d,0x7f50,0x3c93,0x0e01,0x192d,0x0070,0x0000,0x8180,0x724d,0xab59,0x3a08, +0xdd79,0x2559,0x0070,0x0000,0x81a0,0x6e4d,0x2b99,0x3a09,0x9989,0x2157,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x7092,0x4924,0xb892,0x4924,0x7092,0x289e,0x8992, +0x289e,0xa292,0x289e,0x70a2,0xa7ac,0x0000,0x0000,0x2462,0x5e13,0x0000,0x0000, +0x70a2,0xa7ac,0x0000,0x0000,0x1e5c,0x5713,0x0000,0x0000,0x8989,0x0000,0x0000, +0x0000,0x2424,0x0000,0x0000,0x0000,0x7075,0xa2ac,0xb800,0x0000,0x2868,0x2828, +0x2800,0x0000,0x7075,0xa2ac,0x0000,0x0000,0x2868,0x2828,0x0000,0x0000,0x7075, +0xac00,0x0000,0x0000,0x2161,0x2100,0x0000,0x0000,0x7075,0xac00,0x0000,0x0000, +0x1b5b,0x1b00,0x0000,0x0000,0x8989,0x0000,0x0000,0x0000,0x2121,0x0000,0x0000, +0x0000,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, +0xffff,0xffff}; + +#endif diff --git a/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-h201l.c b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-h201l.c new file mode 100644 index 0000000..86101f5 --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-h201l.c @@ -0,0 +1,100 @@ +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + * + * Copyright (C) 2012 Luka Perkov + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "../machtypes.h" +#include "devices.h" +#include "dev-dwc_otg.h" + +static u8 ltq_ethaddr[6] = { 0 }; + +static int __init +setup_ethaddr(char *str) +{ + if (!mac_pton(str, ltq_ethaddr)) + memset(ltq_ethaddr, 0, 6); + return 0; +} +__setup("ethaddr=", setup_ethaddr); + +static struct mtd_partition h201l_partitions[] __initdata = +{ + { + .name = "uboot", + .offset = 0x0, + .size = 0x20000, + }, + { + .name = "uboot_env", + .offset = 0x20000, + .size = 0x10000, + }, + { + .name = "linux", + .offset = 0x30000, + .size = 0x7d0000, + }, +}; + +static struct physmap_flash_data h201l_flash_data __initdata = { + .nr_parts = ARRAY_SIZE(h201l_partitions), + .parts = h201l_partitions, +}; + +static struct gpio_led +h201l_leds_gpio[] __initdata = { +}; + +static struct gpio_keys_button +h201l_gpio_keys[] __initdata = { +}; + +static struct ltq_eth_data ltq_eth_data = { + .mii_mode = PHY_INTERFACE_MODE_RMII, +}; + +static void __init +h201l_init(void) +{ + ltq_register_gpio_stp(); + ltq_register_nor(&h201l_flash_data); + ltq_add_device_gpio_leds(-1, ARRAY_SIZE(h201l_leds_gpio), h201l_leds_gpio); + ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, ARRAY_SIZE(h201l_gpio_keys), h201l_gpio_keys); + + if (!is_valid_ether_addr(ltq_ethaddr)) + random_ether_addr(ltq_ethaddr); + + memcpy(<q_eth_data.mac.sa_data, ltq_ethaddr, 6); + ltq_register_etop(<q_eth_data); + + xway_register_dwc(-1); +} + +MIPS_MACHINE(LANTIQ_MACH_H201L, + "H201L", + "ZTE ZXV10 H201L", + h201l_init); diff --git a/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-netgear.c b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-netgear.c new file mode 100644 index 0000000..29b0728 --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-netgear.c @@ -0,0 +1,239 @@ +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + * + * Copyright (C) 2010 John Crispin + * Copyright (C) 2012 Pieter Voorthuijsen + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include "dev-wifi-athxk.h" + +#include "../machtypes.h" +#include "devices.h" +#include "dev-dwc_otg.h" +#include "pci-ath-fixup.h" +#include +#include + +static struct mtd_partition dgn3500_partitions[] = { + { + .name = "u-boot", + .offset = 0, + .size = 0x10000, + .mask_flags = MTD_WRITEABLE, + }, + { + .name = "environment", + .offset = 0x10000, + .size = 0x10000, + .mask_flags = MTD_WRITEABLE, + }, + { + .name = "calibration", + .offset = 0x20000, + .size = 0x10000, + .mask_flags = MTD_WRITEABLE, + }, + { + .name = "linux", + .offset = 0x50000, + .size = 0xfa0000, + }, +}; + +static struct ltq_pci_data ltq_pci_data = { + .clock = PCI_CLOCK_INT, + .gpio = PCI_GNT1 | PCI_REQ1, + .irq = { + [14] = INT_NUM_IM0_IRL0 + 22, + }, +}; + +static struct ltq_eth_data ltq_eth_data = { + .mii_mode = PHY_INTERFACE_MODE_MII, +}; + +static struct gpio_led +dgn3500_gpio_leds[] __initdata = { + { .name = "soc:green:power", .gpio = 34, .active_low = 1, }, + { .name = "soc:red:power", .gpio = 39, .active_low = 1, }, + { .name = "soc:orange:wlan", .gpio = 51, .active_low = 1, }, + { .name = "soc:green:wps", .gpio = 52, .active_low = 1, }, + { .name = "soc:green:usb", .gpio = 22, .active_low = 1, }, + { .name = "soc:green:dsl", .gpio = 4, .active_low = 1, }, + { .name = "soc:green:internet", .gpio = 2, .active_low = 1, }, +}; + +static struct gpio_keys_button +dgn3500_gpio_keys[] __initdata = { + { + .desc = "wps", + .type = EV_KEY, + .code = BTN_0, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 54, + .active_low = 1, + }, + { + .desc = "reset", + .type = EV_KEY, + .code = BTN_1, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 36, + .active_low = 1, + }, +}; + +#define SPI_GPIO_MRST 16 +#define SPI_GPIO_MTSR 17 +#define SPI_GPIO_CLK 18 +#define SPI_GPIO_CS0 10 + +static struct spi_gpio_platform_data spi_gpio_data = { + .sck = SPI_GPIO_CLK, + .mosi = SPI_GPIO_MTSR, + .miso = SPI_GPIO_MRST, + .num_chipselect = 2, +}; + +static struct platform_device spi_gpio_device = { + .name = "spi_gpio", + .dev.platform_data = &spi_gpio_data, +}; + +static struct flash_platform_data spi_flash_data = { + .name = "sflash", + .parts = dgn3500_partitions, + .nr_parts = ARRAY_SIZE(dgn3500_partitions), +}; + +static struct spi_board_info spi_flash __initdata = { + .modalias = "m25p80", + .bus_num = 0, + .chip_select = 0, + .max_speed_hz = 10 * 1000 * 1000, + .mode = SPI_MODE_3, + .chip_select = 0, + .controller_data = (void *) SPI_GPIO_CS0, + .platform_data = &spi_flash_data +}; + +static u8 ltq_ethaddr[6] = { 0 }; + +static int __init setup_ethaddr(char *str) +{ + if (!mac_pton(str, ltq_ethaddr)) + memset(ltq_ethaddr, 0, 6); + return 0; +} +__setup("ethaddr=", setup_ethaddr); + +static u16 dgn3500_eeprom_data[ATH9K_PLAT_EEP_MAX_WORDS] = {0}; + +static ssize_t ath_eeprom_read(struct file *filp, struct kobject *kobj, + struct bin_attribute *attr, char *buf, + loff_t offset, size_t count) +{ + if (unlikely(offset >= sizeof(dgn3500_eeprom_data))) + return 0; + if ((offset + count) > sizeof(dgn3500_eeprom_data)) + count = sizeof(dgn3500_eeprom_data) - offset; + if (unlikely(!count)) + return count; + + memcpy(buf, (char *)(dgn3500_eeprom_data) + offset, count); + + return count; +} + +extern struct ath9k_platform_data ath9k_pdata; + +static ssize_t ath_eeprom_write(struct file *filp, struct kobject *kobj, + struct bin_attribute *attr, char *buf, + loff_t offset, size_t count) +{ + int i; + char *eeprom_bytes = (char *)dgn3500_eeprom_data; + + if (unlikely(offset >= sizeof(dgn3500_eeprom_data))) + return -EFBIG; + if ((offset + count) > sizeof(dgn3500_eeprom_data)) + count = sizeof(dgn3500_eeprom_data) - offset; + if (unlikely(!count)) + return count; + if (count % 2) + return 0; + + /* The PCI fixup routine requires an endian swap of the calibartion data + * stored in flash */ + for (i = 0; i < count; i += 2) { + eeprom_bytes[offset + i + 1] = buf[i]; + eeprom_bytes[offset + i] = buf[i+1]; + } + + /* The original data does not contain a checksum. Set the country and + * calculate new checksum when all data is received */ + if ((count + offset) == sizeof(dgn3500_eeprom_data)) + memcpy(ath9k_pdata.eeprom_data, dgn3500_eeprom_data, + sizeof(ath9k_pdata.eeprom_data)); + + return count; +} + +static struct bin_attribute dev_attr_ath_eeprom = { + .attr = { + .name = "ath_eeprom", + .mode = S_IRUGO|S_IWUSR, + }, + .read = ath_eeprom_read, + .write = ath_eeprom_write, +}; + +static void __init dgn3500_init(void) +{ + if (sysfs_create_bin_file(firmware_kobj, &dev_attr_ath_eeprom)) + printk(KERN_INFO "Failed to create ath eeprom sysfs entry\n"); + ltq_add_device_gpio_leds(-1, ARRAY_SIZE(dgn3500_gpio_leds), + dgn3500_gpio_leds); + ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, + ARRAY_SIZE(dgn3500_gpio_keys), dgn3500_gpio_keys); + platform_device_register(&spi_gpio_device); + ltq_register_pci(<q_pci_data); + spi_register_board_info(&spi_flash, 1); + if (!is_valid_ether_addr(ltq_ethaddr)) { + printk(KERN_INFO "MAC invalid using random\n"); + random_ether_addr(ltq_ethaddr); + } + memcpy(<q_eth_data.mac.sa_data, ltq_ethaddr, 6); + ltq_register_etop(<q_eth_data); + ltq_register_ath9k(dgn3500_eeprom_data, ltq_ethaddr); + ltq_pci_ath_fixup(14, dgn3500_eeprom_data); + /* The usb power is always enabled, protected by a fuse */ + xway_register_dwc(-1); +} + +MIPS_MACHINE(LANTIQ_MACH_DGN3500B, + "DGN3500B", + "Netgear DGN3500B", + dgn3500_init); diff --git a/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-p2601hnfx.c b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-p2601hnfx.c new file mode 100644 index 0000000..247dfb5 --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-p2601hnfx.c @@ -0,0 +1,113 @@ +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + * + * Copyright (C) 2010 John Crispin + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "../machtypes.h" +#include "devices.h" +#include "dev-dwc_otg.h" + +static struct mtd_partition p2601hnfx_partitions[] __initdata = +{ + { + .name = "uboot", + .offset = 0x0, + .size = 0x20000, + }, + { + .name = "uboot_env", + .offset = 0x20000, + .size = 0x20000, + }, + { + .name = "linux", + .offset = 0x40000, + .size = 0xfc0000, + }, +}; + +static struct physmap_flash_data p2601hnfx_flash_data __initdata = { + .nr_parts = ARRAY_SIZE(p2601hnfx_partitions), + .parts = p2601hnfx_partitions, +}; + +static struct gpio_led +p2601hnfx_leds_gpio[] __initdata = { + { .name = "soc:yellow:phone", .gpio = 216, .active_low = 1 }, + { .name = "soc:green:phone", .gpio = 217, .active_low = 1 }, + { .name = "soc:yellow:wifi", .gpio = 218, .active_low = 1 }, + { .name = "soc:green:power", .gpio = 219, .active_low = 1 }, + { .name = "soc:red:internet", .gpio = 220, .active_low = 1 }, + { .name = "soc:green:internet", .gpio = 221, .active_low = 1 }, + { .name = "soc:green:dsl", .gpio = 222, .active_low = 1 }, + { .name = "soc:green:wifi", .gpio = 223, .active_low = 1 }, +}; + +static struct gpio_keys_button +p2601hnfx_gpio_keys[] __initdata = { + { + .desc = "reset", + .type = EV_KEY, + .code = BTN_0, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 53, + .active_low = 1, + }, + { + .desc = "wifi", + .type = EV_KEY, + .code = BTN_1, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 54, + .active_low = 1, + }, +}; + +static struct ltq_eth_data ltq_eth_data = { + .mii_mode = PHY_INTERFACE_MODE_RMII, +}; + +static void __init +p2601hnfx_init(void) +{ +#define P2601HNFX_USB 9 + + ltq_register_gpio_stp(); + ltq_register_nor(&p2601hnfx_flash_data); + ltq_add_device_gpio_leds(-1, ARRAY_SIZE(p2601hnfx_leds_gpio), p2601hnfx_leds_gpio); + ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, ARRAY_SIZE(p2601hnfx_gpio_keys), p2601hnfx_gpio_keys); + ltq_register_etop(<q_eth_data); + xway_register_dwc(P2601HNFX_USB); + + // enable the ethernet ports on the SoC +// ltq_w32((ltq_r32(LTQ_GPORT_P0_CTL) & ~(1 << 17)) | (1 << 18), LTQ_GPORT_P0_CTL); +// ltq_w32((ltq_r32(LTQ_GPORT_P1_CTL) & ~(1 << 17)) | (1 << 18), LTQ_GPORT_P1_CTL); +// ltq_w32((ltq_r32(LTQ_GPORT_P2_CTL) & ~(1 << 17)) | (1 << 18), LTQ_GPORT_P2_CTL); +} + +MIPS_MACHINE(LANTIQ_MACH_P2601HNFX, + "P2601HNFX", + "ZyXEL P-2601HN-Fx", + p2601hnfx_init); diff --git a/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-wbmr.c b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-wbmr.c new file mode 100644 index 0000000..a57e092 --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/xway/mach-wbmr.c @@ -0,0 +1,120 @@ +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + * + * Copyright (C) 2010 John Crispin + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "../machtypes.h" +#include "devices.h" +#include "dev-dwc_otg.h" + +static struct mtd_partition wbmr_partitions[] = +{ + { + .name = "uboot", + .offset = 0x0, + .size = 0x40000, + }, + { + .name = "uboot-env", + .offset = 0x40000, + .size = 0x20000, + }, + { + .name = "linux", + .offset = 0x60000, + .size = 0x1f20000, + }, + { + .name = "calibration", + .offset = 0x1fe0000, + .size = 0x20000, + }, +}; + +static struct physmap_flash_data wbmr_flash_data = { + .nr_parts = ARRAY_SIZE(wbmr_partitions), + .parts = wbmr_partitions, +}; + +static struct gpio_led +wbmr_gpio_leds[] __initdata = { + { .name = "soc:blue:movie", .gpio = 20, .active_low = 1, }, + { .name = "soc:red:internet", .gpio = 18, .active_low = 1, }, + { .name = "soc:green:internet", .gpio = 17, .active_low = 1, }, + { .name = "soc:green:adsl", .gpio = 16, .active_low = 1, }, + { .name = "soc:green:wlan", .gpio = 15, .active_low = 1, }, + { .name = "soc:red:security", .gpio = 14, .active_low = 1, }, + { .name = "soc:green:power", .gpio = 1, .active_low = 1, }, + { .name = "soc:red:power", .gpio = 5, .active_low = 1, }, + { .name = "soc:green:usb", .gpio = 28, .active_low = 1, }, +}; + +static struct gpio_keys_button +wbmr_gpio_keys[] __initdata = { + { + .desc = "aoss", + .type = EV_KEY, + .code = BTN_0, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 0, + .active_low = 1, + }, + { + .desc = "reset", + .type = EV_KEY, + .code = BTN_1, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 37, + .active_low = 1, + }, +}; + +static struct ltq_pci_data ltq_pci_data = { + .clock = PCI_CLOCK_INT, + .gpio = PCI_GNT1 | PCI_REQ1, + .irq = { + [14] = INT_NUM_IM0_IRL0 + 22, + }, +}; + +static struct ltq_eth_data ltq_eth_data = { + .mii_mode = PHY_INTERFACE_MODE_RGMII, +}; + +static void __init +wbmr_init(void) +{ +#define WMBR_BRN_MAC 0x1fd0024 + + ltq_add_device_gpio_leds(-1, ARRAY_SIZE(wbmr_gpio_leds), wbmr_gpio_leds); + ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, ARRAY_SIZE(wbmr_gpio_keys), wbmr_gpio_keys); + ltq_register_nor(&wbmr_flash_data); + ltq_register_pci(<q_pci_data); + memcpy_fromio(<q_eth_data.mac.sa_data, + (void *)KSEG1ADDR(LTQ_FLASH_START + WMBR_BRN_MAC), 6); + ltq_register_etop(<q_eth_data); + xway_register_dwc(36); +} + +MIPS_MACHINE(LANTIQ_MACH_WBMR, + "WBMR", + "WBMR", + wbmr_init); diff --git a/target/linux/lantiq/files/arch/mips/lantiq/xway/pci-ath-fixup.c b/target/linux/lantiq/files/arch/mips/lantiq/xway/pci-ath-fixup.c new file mode 100644 index 0000000..c87ffb2 --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/xway/pci-ath-fixup.c @@ -0,0 +1,109 @@ +/* + * Atheros AP94 reference board PCI initialization + * + * Copyright (C) 2009-2010 Gabor Juhos + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + */ + +#include +#include +#include +#include + +#define LTQ_PCI_MEM_BASE 0x18000000 + +struct ath_fixup { + u16 *cal_data; + unsigned slot; +}; + +static int ath_num_fixups; +static struct ath_fixup ath_fixups[2]; + +static void ath_pci_fixup(struct pci_dev *dev) +{ + void __iomem *mem; + u16 *cal_data = NULL; + u16 cmd; + u32 bar0; + u32 val; + unsigned i; + + for (i = 0; i < ath_num_fixups; i++) { + if (ath_fixups[i].cal_data == NULL) + continue; + + if (ath_fixups[i].slot != PCI_SLOT(dev->devfn)) + continue; + + cal_data = ath_fixups[i].cal_data; + break; + } + + if (cal_data == NULL) + return; + + if (*cal_data != 0xa55a) { + pr_err("pci %s: invalid calibration data\n", pci_name(dev)); + return; + } + + pr_info("pci %s: fixup device configuration\n", pci_name(dev)); + + mem = ioremap(LTQ_PCI_MEM_BASE, 0x10000); + if (!mem) { + pr_err("pci %s: ioremap error\n", pci_name(dev)); + return; + } + + pci_read_config_dword(dev, PCI_BASE_ADDRESS_0, &bar0); + pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, LTQ_PCI_MEM_BASE); + pci_read_config_word(dev, PCI_COMMAND, &cmd); + cmd |= PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY; + pci_write_config_word(dev, PCI_COMMAND, cmd); + + /* set pointer to first reg address */ + cal_data += 3; + while (*cal_data != 0xffff) { + u32 reg; + reg = *cal_data++; + val = *cal_data++; + val |= (*cal_data++) << 16; + + ltq_w32(swab32(val), mem + reg); + udelay(100); + } + + pci_read_config_dword(dev, PCI_VENDOR_ID, &val); + dev->vendor = val & 0xffff; + dev->device = (val >> 16) & 0xffff; + + pci_read_config_dword(dev, PCI_CLASS_REVISION, &val); + dev->revision = val & 0xff; + dev->class = val >> 8; /* upper 3 bytes */ + + pr_info("pci %s: fixup info: [%04x:%04x] revision %02x class %#08x\n", + pci_name(dev), dev->vendor, dev->device, dev->revision, dev->class); + + pci_read_config_word(dev, PCI_COMMAND, &cmd); + cmd &= ~(PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY); + pci_write_config_word(dev, PCI_COMMAND, cmd); + + pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, bar0); + + iounmap(mem); +} +DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_ATHEROS, PCI_ANY_ID, ath_pci_fixup); + +void __init ltq_pci_ath_fixup(unsigned slot, u16 *cal_data) +{ + if (ath_num_fixups >= ARRAY_SIZE(ath_fixups)) + return; + + ath_fixups[ath_num_fixups].slot = slot; + ath_fixups[ath_num_fixups].cal_data = cal_data; + ath_num_fixups++; +} diff --git a/target/linux/lantiq/files/arch/mips/lantiq/xway/pci-ath-fixup.h b/target/linux/lantiq/files/arch/mips/lantiq/xway/pci-ath-fixup.h new file mode 100644 index 0000000..095d261 --- /dev/null +++ b/target/linux/lantiq/files/arch/mips/lantiq/xway/pci-ath-fixup.h @@ -0,0 +1,6 @@ +#ifndef _PCI_ATH_FIXUP +#define _PCI_ATH_FIXUP + +void ltq_pci_ath_fixup(unsigned slot, u16 *cal_data) __init; + +#endif /* _PCI_ATH_FIXUP */ -- cgit v1.1