From 261415a660c12a5673fe3d48dabaf677e1d5c32c Mon Sep 17 00:00:00 2001 From: YuheiOKAWA Date: Tue, 10 Jan 2017 18:47:19 +0900 Subject: [PATCH] ar71xx: add support for PQI Air Pen SoC: AR9331 Ethernet x1, Wireless 2.4G, uSD card slot x1. USB Power, include Li-Po Battery. Signed-off-by: YuheiOKAWA Changes in v2: alphabetical ordering, tabs fron spaces. --- .../ar71xx/base-files/etc/board.d/01_leds | 4 + .../ar71xx/base-files/etc/board.d/02_network | 1 + target/linux/ar71xx/base-files/lib/ar71xx.sh | 3 + .../ar71xx/base-files/lib/upgrade/platform.sh | 1 + target/linux/ar71xx/config-4.4 | 1 + .../files/arch/mips/ath79/Kconfig.openwrt | 10 ++ .../ar71xx/files/arch/mips/ath79/Makefile | 1 + .../files/arch/mips/ath79/mach-pqi-air-pen.c | 99 +++++++++++++++++++ .../ar71xx/files/arch/mips/ath79/machtypes.h | 1 + target/linux/ar71xx/image/generic.mk | 11 +++ 10 files changed, 132 insertions(+) create mode 100644 target/linux/ar71xx/files/arch/mips/ath79/mach-pqi-air-pen.c diff --git a/target/linux/ar71xx/base-files/etc/board.d/01_leds b/target/linux/ar71xx/base-files/etc/board.d/01_leds index fb0dda3ddc..7a7329f965 100755 --- a/target/linux/ar71xx/base-files/etc/board.d/01_leds +++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds @@ -431,6 +431,10 @@ omy-x1) ucidef_set_led_default "power" "POWER" "omy:green:power" "1" ucidef_set_led_default "wan" "WAN" "omy:green:wan" "eth0" ;; +pqi-air-pen) + ucidef_set_led_wlan "wlan" "WLAN" "pqi-air-pen:blue:wlan" "phy0tpt" + ucidef_set_led_default "wps" "WPS" "pqi-air-pen:blue:wps" "0" + ;; qihoo-c301) ucidef_set_led_wlan "wlan2g" "WLAN2G" "qihoo:red:status" "phy1tpt" ;; diff --git a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network index 987a8e4f12..09986c03a2 100755 --- a/target/linux/ar71xx/base-files/etc/board.d/02_network +++ b/target/linux/ar71xx/base-files/etc/board.d/02_network @@ -83,6 +83,7 @@ ar71xx_setup_interfaces() mr900|\ mr900v2|\ mynet-rext|\ + pqi-air-pen|\ rb-411|\ rb-411u|\ rb-911g-2hpnd|\ diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh index eb8b671b97..ad73ec1520 100755 --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh @@ -775,6 +775,9 @@ ar71xx_board_detect() { *"PB44 reference board") name="pb44" ;; + *"PQI Air Pen") + name="pqi-air-pen" + ;; *"Qihoo 360 C301") name="qihoo-c301" ;; diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh index 02eb960db3..9cf20499e3 100755 --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh @@ -250,6 +250,7 @@ platform_check_image() { nanostation-m-xw|\ nanostation-m|\ nbg460n_550n_550nh|\ + pqi-air-pen|\ rocket-m-ti|\ rocket-m-xw|\ rocket-m|\ diff --git a/target/linux/ar71xx/config-4.4 b/target/linux/ar71xx/config-4.4 index 427e8bd2be..26de3a6393 100644 --- a/target/linux/ar71xx/config-4.4 +++ b/target/linux/ar71xx/config-4.4 @@ -136,6 +136,7 @@ CONFIG_ATH79_MACH_OMY_X1=y CONFIG_ATH79_MACH_ONION_OMEGA=y CONFIG_ATH79_MACH_PB42=y CONFIG_ATH79_MACH_PB44=y +CONFIG_ATH79_MACH_PQI_AIR_PEN=y CONFIG_ATH79_MACH_QIHOO_C301=y CONFIG_ATH79_MACH_R6100=y # CONFIG_ATH79_MACH_RB2011 is not set diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt index 3c10be9e24..c3f958869e 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt +++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt @@ -276,6 +276,16 @@ config ATH79_MACH_ESR1750 select ATH79_DEV_USB select ATH79_DEV_WMAC +config ATH79_MACH_PQI_AIR_PEN + bool "PQI Air Pen" + select SOC_AR933X + select ATH79_DEV_ETH + select ATH79_DEV_GPIO_BUTTONS + select ATH79_DEV_LEDS_GPIO + select ATH79_DEV_M25P80 + select ATH79_DEV_USB + select ATH79_DEV_WMAC + config ATH79_MACH_SOM9331 bool "SOM9331 support" select SOC_AR933X diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Makefile b/target/linux/ar71xx/files/arch/mips/ath79/Makefile index 8ce07a49b5..ac0bbc46bf 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile +++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile @@ -140,6 +140,7 @@ obj-$(CONFIG_ATH79_MACH_OMY_X1) += mach-omy-x1.o obj-$(CONFIG_ATH79_MACH_ONION_OMEGA) += mach-onion-omega.o obj-$(CONFIG_ATH79_MACH_PB42) += mach-pb42.o obj-$(CONFIG_ATH79_MACH_PB44) += mach-pb44.o +obj-$(CONFIG_ATH79_MACH_PQI_AIR_PEN) += mach-pqi-air-pen.o obj-$(CONFIG_ATH79_MACH_QIHOO_C301) += mach-qihoo-c301.o obj-$(CONFIG_ATH79_MACH_R6100) += mach-r6100.o obj-$(CONFIG_ATH79_MACH_RB2011) += mach-rb2011.o diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-pqi-air-pen.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-pqi-air-pen.c new file mode 100644 index 0000000000..56769bfb61 --- /dev/null +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-pqi-air-pen.c @@ -0,0 +1,99 @@ +/* + * PQI Air Pen stick support + * + * Copyright (C) 2016 YuheiOKAWA + * + * 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 "common.h" +#include "dev-eth.h" +#include "dev-gpio-buttons.h" +#include "dev-leds-gpio.h" +#include "dev-m25p80.h" +#include "dev-usb.h" +#include "dev-wmac.h" +#include "machtypes.h" + +#define PQI_AIR_PEN_GPIO_LED_WLAN 0 +#define PQI_AIR_PEN_GPIO_LED_WPS 23 + +#define PQI_AIR_PEN_GPIO_BTN_WPS 22 +#define PQI_AIR_PEN_GPIO_BTN_RESET 12 + +#define PQI_AIR_PEN_KEYS_POLL_INTERVAL 20 /* msecs */ +#define PQI_AIR_PEN_KEYS_DEBOUNCE_INTERVAL (3 * PQI_AIR_PEN_KEYS_POLL_INTERVAL) + +#define PQI_AIR_PEN_WMAC_CALDATA_OFFSET 0x1000 +#define PQI_AIR_PEN_LAN_MAC_OFFSET 0x1002 +#define PQI_AIR_PEN_WMAC_MAC_OFFSET 0x1002 + +static struct gpio_led pqi_air_pen_leds_gpio[] __initdata = { + { + .name = "pqi-air-pen:blue:wlan", + .gpio = PQI_AIR_PEN_GPIO_LED_WLAN, + .active_low = 0, + }, + { + .name = "pqi-air-pen:blue:wps", + .gpio = PQI_AIR_PEN_GPIO_LED_WPS, + .active_low = 0, + }, +}; + +static struct gpio_keys_button pqi_air_pen_gpio_keys[] __initdata = { + { + .desc = "wps", + .type = EV_KEY, + .code = KEY_WPS_BUTTON, + .debounce_interval = PQI_AIR_PEN_KEYS_DEBOUNCE_INTERVAL, + .gpio = PQI_AIR_PEN_GPIO_BTN_WPS, + .active_low = 0, + }, + { + .desc = "reset", + .type = EV_KEY, + .code = KEY_RESTART, + .debounce_interval = PQI_AIR_PEN_KEYS_DEBOUNCE_INTERVAL, + .gpio = PQI_AIR_PEN_GPIO_BTN_RESET, + .active_low = 0, + }, +}; + +static void __init pqi_air_pen_setup(void) +{ + /* ART base address */ + u8 *art = (u8 *) KSEG1ADDR(0x9f050000); + + /* register flash. */ + ath79_register_m25p80(NULL); + + /* register wireless mac with cal data */ + ath79_register_wmac(art + PQI_AIR_PEN_WMAC_CALDATA_OFFSET, art + PQI_AIR_PEN_WMAC_MAC_OFFSET); + + /* false PHY_SWAP and PHY_ADDR_SWAP bits */ + ath79_setup_ar933x_phy4_switch(false, false); + + /* register gpio LEDs and keys */ + ath79_register_leds_gpio(-1, ARRAY_SIZE(pqi_air_pen_leds_gpio), + pqi_air_pen_leds_gpio); + ath79_register_gpio_keys_polled(-1, PQI_AIR_PEN_KEYS_POLL_INTERVAL, + ARRAY_SIZE(pqi_air_pen_gpio_keys), + pqi_air_pen_gpio_keys); + + /* enable usb */ + ath79_register_usb(); + + /* register eth0 as LAN */ + ath79_init_mac(ath79_eth0_data.mac_addr, art + PQI_AIR_PEN_LAN_MAC_OFFSET, 0); + ath79_register_mdio(0, 0x0); + ath79_register_eth(0); +} + +MIPS_MACHINE(ATH79_MACH_PQI_AIR_PEN, "PQI-AIR-PEN", "PQI Air Pen",pqi_air_pen_setup); diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h index b7946e55e4..857d0eee89 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h +++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h @@ -141,6 +141,7 @@ enum ath79_mach_type { ATH79_MACH_ONION_OMEGA, /* ONION OMEGA */ ATH79_MACH_PB42, /* Atheros PB42 */ ATH79_MACH_PB44, /* Atheros PB44 reference board */ + ATH79_MACH_PQI_AIR_PEN, /* PQI Air Pen */ ATH79_MACH_QIHOO_C301, /* Qihoo 360 C301 */ ATH79_MACH_R6100, /* NETGEAR R6100 */ ATH79_MACH_RB_2011G, /* Mikrotik RouterBOARD 2011UAS-2HnD */ diff --git a/target/linux/ar71xx/image/generic.mk b/target/linux/ar71xx/image/generic.mk index 1f96a5b960..37ee755ee4 100644 --- a/target/linux/ar71xx/image/generic.mk +++ b/target/linux/ar71xx/image/generic.mk @@ -323,6 +323,17 @@ endef TARGET_DEVICES += cr5000-nocloud +define Device/pqi-air-pen + DEVICE_TITLE := PQI Air Pen + DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-storage + BOARDNAME = PQI-AIR-PEN + IMAGE_SIZE = 7744k + CONSOLE = ttyATH0,115200 + MTDPARTS = spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,64k(art)ro,64k(NVRAM)ro,7680k(firmware),64k(CONF) +endef + +TARGET_DEVICES += pqi-air-pen + define Device/antminer-s1 $(Device/tplink-8mlzma) DEVICE_TITLE := Antminer-S1 -- 2.30.2