source: trunk/target/linux/ar71xx/files/arch/mips/ar71xx/mach-wndr3700.c @ 23876

Last change on this file since 23876 was 23876, checked in by nbd, 6 years ago

ar71xx: Set eth1 MAC address from EEPROM for WNDR3700

The WNDR3700's art/caldata partition contains three MAC addresses at
offsets 0, 6, and 12, used for eth0/wlan0 (shared), eth1, and wlan1,
respectively. The existing code configures eth1's MAC address by adding
1 to eth0's instead of using the value stored in the EEPROM. This patch
causes the stored value to be used directly. (On my WNDR3700s, the three
stored addresses are all sequential anyway.)

Signed-off-by: Mark Mentovai <mark@…>

File size: 5.3 KB
Line 
1/*
2 *  Netgear WNDR3700 board support
3 *
4 *  Copyright (C) 2009 Marco Porsch
5 *  Copyright (C) 2009-2010 Gabor Juhos <juhosg@openwrt.org>
6 *
7 *  This program is free software; you can redistribute it and/or modify it
8 *  under the terms of the GNU General Public License version 2 as published
9 *  by the Free Software Foundation.
10 */
11
12#include <linux/platform_device.h>
13#include <linux/mtd/mtd.h>
14#include <linux/mtd/partitions.h>
15#include <linux/delay.h>
16#include <linux/rtl8366s.h>
17
18#include <asm/mach-ar71xx/ar71xx.h>
19
20#include "machtype.h"
21#include "devices.h"
22#include "dev-m25p80.h"
23#include "dev-ap94-pci.h"
24#include "dev-gpio-buttons.h"
25#include "dev-leds-gpio.h"
26#include "dev-usb.h"
27
28#define WNDR3700_GPIO_LED_WPS_ORANGE    0
29#define WNDR3700_GPIO_LED_POWER_ORANGE  1
30#define WNDR3700_GPIO_LED_POWER_GREEN   2
31#define WNDR3700_GPIO_LED_WPS_GREEN     4
32#define WNDR3700_GPIO_LED_WAN_GREEN     6
33
34#define WNDR3700_GPIO_BTN_WPS           3
35#define WNDR3700_GPIO_BTN_RESET         8
36#define WNDR3700_GPIO_BTN_WIFI          11
37
38#define WNDR3700_GPIO_RTL8366_SDA       5
39#define WNDR3700_GPIO_RTL8366_SCK       7
40
41#define WNDR3700_BUTTONS_POLL_INTERVAL    20
42
43#define WNDR3700_ETH0_MAC_OFFSET        0
44#define WNDR3700_ETH1_MAC_OFFSET        0x6
45
46#define WNDR3700_WMAC0_MAC_OFFSET       0
47#define WNDR3700_WMAC1_MAC_OFFSET       0xc
48#define WNDR3700_CALDATA0_OFFSET        0x1000
49#define WNDR3700_CALDATA1_OFFSET        0x5000
50
51#ifdef CONFIG_MTD_PARTITIONS
52static struct mtd_partition wndr3700_partitions[] = {
53        {
54                .name           = "uboot",
55                .offset         = 0,
56                .size           = 0x050000,
57                .mask_flags     = MTD_WRITEABLE,
58        } , {
59                .name           = "env",
60                .offset         = 0x050000,
61                .size           = 0x020000,
62                .mask_flags     = MTD_WRITEABLE,
63        } , {
64                .name           = "rootfs",
65                .offset         = 0x070000,
66                .size           = 0x720000,
67        } , {
68                .name           = "config",
69                .offset         = 0x790000,
70                .size           = 0x010000,
71                .mask_flags     = MTD_WRITEABLE,
72        } , {
73                .name           = "config_bak",
74                .offset         = 0x7a0000,
75                .size           = 0x010000,
76                .mask_flags     = MTD_WRITEABLE,
77        } , {
78                .name           = "pot",
79                .offset         = 0x7b0000,
80                .size           = 0x010000,
81                .mask_flags     = MTD_WRITEABLE,
82        } , {
83                .name           = "traffic_meter",
84                .offset         = 0x7c0000,
85                .size           = 0x010000,
86                .mask_flags     = MTD_WRITEABLE,
87        } , {
88                .name           = "language",
89                .offset         = 0x7d0000,
90                .size           = 0x020000,
91                .mask_flags     = MTD_WRITEABLE,
92        } , {
93                .name           = "caldata",
94                .offset         = 0x7f0000,
95                .size           = 0x010000,
96                .mask_flags     = MTD_WRITEABLE,
97        }
98};
99#endif /* CONFIG_MTD_PARTITIONS */
100
101static struct flash_platform_data wndr3700_flash_data = {
102#ifdef CONFIG_MTD_PARTITIONS
103        .parts          = wndr3700_partitions,
104        .nr_parts       = ARRAY_SIZE(wndr3700_partitions),
105#endif
106};
107
108static struct gpio_led wndr3700_leds_gpio[] __initdata = {
109        {
110                .name           = "wndr3700:green:power",
111                .gpio           = WNDR3700_GPIO_LED_POWER_GREEN,
112                .active_low     = 1,
113        }, {
114                .name           = "wndr3700:orange:power",
115                .gpio           = WNDR3700_GPIO_LED_POWER_ORANGE,
116                .active_low     = 1,
117        }, {
118                .name           = "wndr3700:green:wps",
119                .gpio           = WNDR3700_GPIO_LED_WPS_GREEN,
120                .active_low     = 1,
121        }, {
122                .name           = "wndr3700:orange:wps",
123                .gpio           = WNDR3700_GPIO_LED_WPS_ORANGE,
124                .active_low     = 1,
125        }, {
126                .name           = "wndr3700:green:wan",
127                .gpio           = WNDR3700_GPIO_LED_WAN_GREEN,
128                .active_low     = 1,
129        }
130};
131
132static struct gpio_button wndr3700_gpio_buttons[] __initdata = {
133        {
134                .desc           = "reset",
135                .type           = EV_KEY,
136                .code           = KEY_RESTART,
137                .threshold      = 3,
138                .gpio           = WNDR3700_GPIO_BTN_RESET,
139                .active_low     = 1,
140        }, {
141                .desc           = "wps",
142                .type           = EV_KEY,
143                .code           = KEY_WPS_BUTTON,
144                .threshold      = 3,
145                .gpio           = WNDR3700_GPIO_BTN_WPS,
146                .active_low     = 1,
147        } , {
148                .desc           = "wifi",
149                .type           = EV_KEY,
150                .code           = BTN_2,
151                .threshold      = 3,
152                .gpio           = WNDR3700_GPIO_BTN_WIFI,
153                .active_low     = 1,
154        }
155};
156
157static struct rtl8366s_platform_data wndr3700_rtl8366s_data = {
158        .gpio_sda        = WNDR3700_GPIO_RTL8366_SDA,
159        .gpio_sck        = WNDR3700_GPIO_RTL8366_SCK,
160};
161
162static struct platform_device wndr3700_rtl8366s_device = {
163        .name           = RTL8366S_DRIVER_NAME,
164        .id             = -1,
165        .dev = {
166                .platform_data  = &wndr3700_rtl8366s_data,
167        }
168};
169
170static void __init wndr3700_setup(void)
171{
172        u8 *art = (u8 *) KSEG1ADDR(0x1fff0000);
173
174        ar71xx_init_mac(ar71xx_eth0_data.mac_addr,
175                        art + WNDR3700_ETH0_MAC_OFFSET, 0);
176        ar71xx_eth0_pll_data.pll_1000 = 0x11110000;
177        ar71xx_eth0_data.mii_bus_dev = &wndr3700_rtl8366s_device.dev;
178        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
179        ar71xx_eth0_data.speed = SPEED_1000;
180        ar71xx_eth0_data.duplex = DUPLEX_FULL;
181
182        ar71xx_init_mac(ar71xx_eth1_data.mac_addr,
183                        art + WNDR3700_ETH1_MAC_OFFSET, 0);
184        ar71xx_eth1_pll_data.pll_1000 = 0x11110000;
185        ar71xx_eth1_data.mii_bus_dev = &wndr3700_rtl8366s_device.dev;
186        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
187        ar71xx_eth1_data.phy_mask = 0x10;
188
189        ar71xx_add_device_eth(0);
190        ar71xx_add_device_eth(1);
191
192        ar71xx_add_device_usb();
193
194        ar71xx_add_device_m25p80(&wndr3700_flash_data);
195
196        ar71xx_add_device_leds_gpio(-1, ARRAY_SIZE(wndr3700_leds_gpio),
197                                    wndr3700_leds_gpio);
198
199        ar71xx_add_device_gpio_buttons(-1, WNDR3700_BUTTONS_POLL_INTERVAL,
200                                      ARRAY_SIZE(wndr3700_gpio_buttons),
201                                      wndr3700_gpio_buttons);
202
203        platform_device_register(&wndr3700_rtl8366s_device);
204        platform_device_register_simple("wndr3700-led-usb", -1, NULL, 0);
205
206        ap94_pci_enable_quirk_wndr3700();
207        ap94_pci_init(art + WNDR3700_CALDATA0_OFFSET,
208                      art + WNDR3700_WMAC0_MAC_OFFSET,
209                      art + WNDR3700_CALDATA1_OFFSET,
210                      art + WNDR3700_WMAC1_MAC_OFFSET);
211}
212
213MIPS_MACHINE(AR71XX_MACH_WNDR3700, "WNDR3700", "NETGEAR WNDR3700",
214             wndr3700_setup);
Note: See TracBrowser for help on using the repository browser.