2 * Qxwlan E1700AC v2 board support
4 * Copyright (C) 2017 Peng Zhang <sd20@qxwlan.com>
5 * Copyright (C) 2018 Piotr Dymacz <pepe2k@gmail.com>
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.
12 #include <linux/platform_device.h>
13 #include <linux/ar8216_platform.h>
17 #include "dev-gpio-buttons.h"
18 #include "dev-leds-gpio.h"
19 #include "dev-m25p80.h"
22 #include "machtypes.h"
25 #define E1700AC_V2_GPIO_LED_SYS 1
26 #define E1700AC_V2_GPIO_LED_USB 7
27 #define E1700AC_V2_GPIO_LED_WLAN2G 19
29 #define E1700AC_V2_GPIO_BTN_SW1 2
30 #define E1700AC_V2_GPIO_BTN_RESET 11
32 #define E1700AC_V2_KEYS_POLL_INTERVAL 20 /* msecs */
33 #define E1700AC_V2_KEYS_DEBOUNCE_INTERVAL \
34 (3 * E1700AC_V2_KEYS_POLL_INTERVAL)
36 static struct gpio_led e1700ac_v2_leds_gpio
[] __initdata
= {
38 .name
= "e1700ac-v2:green:system",
39 .gpio
= E1700AC_V2_GPIO_LED_SYS
,
42 .name
= "e1700ac-v2:green:usb",
43 .gpio
= E1700AC_V2_GPIO_LED_USB
,
46 .name
= "e1700ac-v2:green:wlan2g",
47 .gpio
= E1700AC_V2_GPIO_LED_WLAN2G
,
52 static struct gpio_keys_button e1700ac_v2_gpio_keys
[] __initdata
= {
57 .debounce_interval
= E1700AC_V2_KEYS_DEBOUNCE_INTERVAL
,
58 .gpio
= E1700AC_V2_GPIO_BTN_RESET
,
64 .debounce_interval
= E1700AC_V2_KEYS_DEBOUNCE_INTERVAL
,
65 .gpio
= E1700AC_V2_GPIO_BTN_SW1
,
70 static const struct ar8327_led_info e1700ac_v2_leds_qca8334
[] = {
71 AR8327_LED_INFO(PHY1_0
, HW
, "e1700ac-v2:green:lan"),
72 AR8327_LED_INFO(PHY2_0
, HW
, "e1700ac-v2:green:wan"),
75 /* Blink rate: 1 Gbps -> 8 hz, 100 Mbs -> 4 Hz, 10 Mbps -> 2 Hz */
76 static struct ar8327_led_cfg e1700ac_v2_qca8334_led_cfg
= {
77 .led_ctrl0
= 0xcf37cf37,
78 .led_ctrl1
= 0xcf37cf37,
79 .led_ctrl2
= 0xcf37cf37,
84 static struct ar8327_pad_cfg e1700ac_v2_qca8334_pad0_cfg
= {
85 .mode
= AR8327_PAD_MAC_SGMII
,
86 .sgmii_delay_en
= true,
89 static struct ar8327_platform_data e1700ac_v2_qca8334_data
= {
90 .pad0_cfg
= &e1700ac_v2_qca8334_pad0_cfg
,
93 .speed
= AR8327_PORT_SPEED_1000
,
98 .led_cfg
= &e1700ac_v2_qca8334_led_cfg
,
99 .leds
= e1700ac_v2_leds_qca8334
,
100 .num_leds
= ARRAY_SIZE(e1700ac_v2_leds_qca8334
),
103 static struct mdio_board_info e1700ac_v2_mdio0_info
[] = {
105 .bus_id
= "ag71xx-mdio.0",
107 .platform_data
= &e1700ac_v2_qca8334_data
,
111 static void __init
e1700ac_v2_setup(void)
113 u8
*mac
= (u8
*) KSEG1ADDR(0x1f050400);
114 u8
*art
= (u8
*) KSEG1ADDR(0x1f061000);
116 ath79_register_m25p80(NULL
);
118 ath79_register_leds_gpio(-1, ARRAY_SIZE(e1700ac_v2_leds_gpio
),
119 e1700ac_v2_leds_gpio
);
121 ath79_register_gpio_keys_polled(-1, E1700AC_V2_KEYS_POLL_INTERVAL
,
122 ARRAY_SIZE(e1700ac_v2_gpio_keys
),
123 e1700ac_v2_gpio_keys
);
125 ath79_register_mdio(0, 0x0);
126 mdiobus_register_board_info(e1700ac_v2_mdio0_info
,
127 ARRAY_SIZE(e1700ac_v2_mdio0_info
));
129 /* GMAC0 is connected to QCA8334 switch */
130 ath79_eth0_data
.duplex
= DUPLEX_FULL
;
131 ath79_eth0_data
.mii_bus_dev
= &ath79_mdio0_device
.dev
;
132 ath79_eth0_data
.phy_if_mode
= PHY_INTERFACE_MODE_SGMII
;
133 ath79_eth0_data
.phy_mask
= BIT(0);
134 ath79_eth0_data
.speed
= SPEED_1000
;
135 ath79_eth0_pll_data
.pll_1000
= 0x03000101;
136 ath79_init_mac(ath79_eth0_data
.mac_addr
, mac
, 0);
137 ath79_register_eth(0);
139 ath79_register_pci();
140 ath79_register_usb();
141 ath79_register_wmac(art
, NULL
);
144 MIPS_MACHINE(ATH79_MACH_E1700AC_V2
, "E1700AC-V2", "Qxwlan E1700AC v2",