source: trunk/target/linux/lantiq/patches-2.6.39/601-mach-gigasx76x.patch @ 27665

Last change on this file since 27665 was 27665, checked in by blogic, 5 years ago

[lantiq]

  • add gigasx76x update
  • rebase patches
  • add arv752DPW arv7525PD
  • fixes gpio_keys

Signed-off-by: Luka Perkov <openwrt@…>
Signed-off-by: John Crispin <blogic@…>

File size: 5.9 KB
  • arch/mips/lantiq/xway/Kconfig

    a b config LANTIQ_MACH_NETGEAR 
    1414        bool "Netgear" 
    1515        default y 
    1616 
     17config LANTIQ_MACH_GIGASX76X 
     18        bool "GIGASX76X" 
     19        select LTQ_DEV_GPIO_BUTTONS 
     20        default y 
     21 
    1722endmenu 
    1823 
    1924endif 
  • arch/mips/lantiq/xway/Makefile

    a b obj-$(CONFIG_LANTIQ_MACH_EASY50712) += m 
    77obj-$(CONFIG_LANTIQ_MACH_EASY50601) += mach-easy50601.o 
    88obj-$(CONFIG_LANTIQ_MACH_ARV45XX) += mach-arv45xx.o 
    99obj-$(CONFIG_LANTIQ_MACH_NETGEAR) += mach-netgear.o 
     10obj-$(CONFIG_LANTIQ_MACH_GIGASX76X) += mach-gigasx76x.o 
    1011obj-y += dev-dwc_otg.o 
  • new file arch/mips/lantiq/xway/mach-gigasx76x.c

    - +  
     1/* 
     2 *  This program is free software; you can redistribute it and/or modify it 
     3 *  under the terms of the GNU General Public License version 2 as published 
     4 *  by the Free Software Foundation. 
     5 * 
     6 *  Copyright (C) 2011 Andrej VlaÅ¡ić 
     7 *  Copyright (C) 2011 Luka Perkov 
     8 * 
     9 */ 
     10 
     11#include <linux/kernel.h> 
     12#include <linux/init.h> 
     13#include <linux/platform_device.h> 
     14#include <linux/leds.h> 
     15#include <linux/gpio.h> 
     16#include <linux/mtd/mtd.h> 
     17#include <linux/mtd/partitions.h> 
     18#include <linux/mtd/physmap.h> 
     19#include <linux/input.h> 
     20#include <linux/ath5k_platform.h> 
     21#include <linux/pci.h> 
     22#include <linux/phy.h> 
     23#include <linux/io.h> 
     24#include <linux/string.h> 
     25 
     26#include <irq.h> 
     27 
     28#include <lantiq_soc.h> 
     29#include <lantiq_platform.h> 
     30 
     31#include "devices.h" 
     32#include "dev-dwc_otg.h" 
     33#include "../machtypes.h" 
     34#include "../dev-leds-gpio.h" 
     35#include "../dev-gpio-buttons.h" 
     36 
     37#define UBOOT_ENV_OFFSET        0x010000 
     38#define UBOOT_ENV_SIZE          0x010000 
     39 
     40#ifdef CONFIG_MTD_PARTITIONS 
     41static struct mtd_partition gigasx76x_partitions[] = 
     42{ 
     43        { 
     44                .name   = "uboot", 
     45                .offset = 0x000000, 
     46                .size   = 0x010000, 
     47        }, 
     48        { 
     49                .name   = "uboot_env", 
     50                .offset = UBOOT_ENV_OFFSET, 
     51                .size   = UBOOT_ENV_SIZE, 
     52        }, 
     53        { 
     54                .name   = "linux", 
     55                .offset = 0x020000, 
     56                .size   = 0x7d0000, 
     57        }, 
     58        { 
     59                .name   = "board_config", 
     60                .offset = 0x7f0000, 
     61                .size   = 0x010000, 
     62        }, 
     63}; 
     64#endif 
     65 
     66static struct gpio_led 
     67gigasx76x_gpio_leds[] __initdata = { 
     68        { .name = "soc:green:usb", .gpio = 50, }, 
     69        { .name = "soc:green:wlan", .gpio = 51, }, 
     70        { .name = "soc:green:phone2", .gpio = 52, }, 
     71        { .name = "soc:green:phone1", .gpio = 53, }, 
     72        { .name = "soc:green:line", .gpio = 54, }, 
     73        { .name = "soc:green:online", .gpio = 55, }, 
     74        { .name = "soc:green:voip", .gpio = 56, }, 
     75}; 
     76 
     77static struct gpio_keys_button 
     78gigasx76x_gpio_keys[] __initdata = { 
     79                { 
     80                        .desc           = "reset", 
     81                        .type           = EV_KEY, 
     82                        .code           = KEY_RESTART, 
     83                        .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, 
     84                        .gpio = 14, 
     85                        .active_low = 1, 
     86                }, 
     87}; 
     88 
     89static struct physmap_flash_data gigasx76x_flash_data = { 
     90#ifdef CONFIG_MTD_PARTITIONS 
     91        .nr_parts       = ARRAY_SIZE(gigasx76x_partitions), 
     92        .parts          = gigasx76x_partitions, 
     93#endif 
     94}; 
     95 
     96static struct ltq_pci_data ltq_pci_data = { 
     97        .clock  = PCI_CLOCK_INT, 
     98        .gpio   = PCI_GNT1 | PCI_REQ1, 
     99        .irq    = { [14] = INT_NUM_IM0_IRL0 + 22, }, 
     100}; 
     101 
     102static struct ltq_eth_data ltq_eth_data = { 
     103  .mii_mode     = PHY_INTERFACE_MODE_MII, 
     104}; 
     105 
     106static char __init *get_uboot_env_var(char *haystack, int haystack_len, char *needle, int needle_len) { 
     107        int i; 
     108        for (i = 0; i <= haystack_len - needle_len; i++) { 
     109                if (memcmp(haystack + i, needle, needle_len) == 0) { 
     110                        return haystack + i + needle_len; 
     111                } 
     112        } 
     113        return NULL; 
     114} 
     115 
     116/* 
     117 * gigasx76x_parse_hex_* are not uniq. in arm/orion there are also duplicates: 
     118 * dns323_parse_hex_* 
     119 * TODO: one day write a patch for this :) 
     120 */ 
     121static int __init gigasx76x_parse_hex_nibble(char n) { 
     122        if (n >= '0' && n <= '9') 
     123                return n - '0'; 
     124 
     125        if (n >= 'A' && n <= 'F') 
     126                return n - 'A' + 10; 
     127 
     128        if (n >= 'a' && n <= 'f') 
     129                return n - 'a' + 10; 
     130 
     131        return -1; 
     132} 
     133 
     134static int __init gigasx76x_parse_hex_byte(const char *b) { 
     135        int hi; 
     136        int lo; 
     137 
     138        hi = gigasx76x_parse_hex_nibble(b[0]); 
     139        lo = gigasx76x_parse_hex_nibble(b[1]); 
     140 
     141        if (hi < 0 || lo < 0) 
     142                return -1; 
     143 
     144        return (hi << 4) | lo; 
     145} 
     146 
     147static int __init gigasx76x_register_ethernet(void) { 
     148        u_int8_t addr[6]; 
     149        int i; 
     150        char *uboot_env_page; 
     151        char *mac; 
     152 
     153        uboot_env_page = ioremap(LTQ_FLASH_START + UBOOT_ENV_OFFSET, UBOOT_ENV_SIZE); 
     154        if (!uboot_env_page) 
     155                return -ENOMEM; 
     156 
     157        mac = get_uboot_env_var(uboot_env_page, UBOOT_ENV_SIZE, "\0ethaddr=", 9); 
     158 
     159        if (!mac) { 
     160        goto error_fail; 
     161        } 
     162 
     163        /* Sanity check the string we're looking at */ 
     164        for (i = 0; i < 5; i++) { 
     165        if (*(mac + (i * 3) + 2) != ':') { 
     166                goto error_fail; 
     167                } 
     168        } 
     169 
     170        for (i = 0; i < 6; i++) { 
     171                int byte; 
     172                byte = gigasx76x_parse_hex_byte(mac + (i * 3)); 
     173                if (byte < 0) { 
     174                        goto error_fail; 
     175                } 
     176                addr[i] = byte; 
     177        } 
     178 
     179        iounmap(uboot_env_page); 
     180        printk("GIGASX76X: Found ethernet MAC address: "); 
     181        for (i = 0; i < 6; i++) 
     182                printk("%.2x%s", addr[i], (i < 5) ? ":" : ".\n"); 
     183 
     184        memcpy(&ltq_eth_data.mac.sa_data, addr, 6); 
     185        ltq_register_etop(&ltq_eth_data); 
     186 
     187        return 0; 
     188 
     189        error_fail: 
     190                iounmap(uboot_env_page); 
     191                return -EINVAL; 
     192} 
     193 
     194static void __init gigasx76x_init(void) { 
     195#define GIGASX76X_USB           29 
     196#define GIGASX76X_MADWIFI_ADDR  0xb07f0000 
     197 
     198        ltq_register_gpio_stp(); 
     199        ltq_register_nor(&gigasx76x_flash_data); 
     200        ltq_register_pci(&ltq_pci_data); 
     201        gigasx76x_register_ethernet(); 
     202        xway_register_dwc(GIGASX76X_USB); 
     203        ltq_register_tapi(); 
     204        ltq_register_madwifi_eep(GIGASX76X_MADWIFI_ADDR); 
     205        ltq_add_device_leds_gpio(-1, ARRAY_SIZE(gigasx76x_gpio_leds), gigasx76x_gpio_leds); 
     206        ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, ARRAY_SIZE(gigasx76x_gpio_keys), gigasx76x_gpio_keys); 
     207} 
     208 
     209MIPS_MACHINE(LANTIQ_MACH_GIGASX76X, "GIGASX76X", "GIGASX76X - Gigaset SX761,SX762,SX763", gigasx76x_init); 
  • arch/mips/lantiq/machtypes.h

    a b enum lantiq_mach_type { 
    3737 
    3838        /* Netgear */ 
    3939        LANTIQ_MACH_DGN3500B,           /* Netgear DGN3500 */ 
     40 
     41        /* Gigaset */ 
     42        LANTIQ_MACH_GIGASX76X,          /* Gigaset SX76x */ 
    4043}; 
    4144 
    4245#endif 
Note: See TracBrowser for help on using the repository browser.