0026-ar71xx-fix-TP-LINK-TL-WR941ND-v6-support.patch 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. From: Matthias Schiffer <mschiffer@universe-factory.net>
  2. Date: Tue, 1 Sep 2015 20:59:22 +0200
  3. Subject: ar71xx: fix TP-LINK TL-WR941ND v6 support
  4. The images currently generated for the TL-WR941ND v6 try to treat it like
  5. a TL-WDR3500, which doesn't make any sense and causes the kernel to panic
  6. in early boot. I don't think this has ever worked (the TL-WR941ND v6 has
  7. a different SoC, uses another MDIO bus, has only one WMAC and no USB...).
  8. Fix this by adding proper support for the device.
  9. diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
  10. index ece7098..87e7eef 100644
  11. --- a/target/linux/ar71xx/base-files/etc/diag.sh
  12. +++ b/target/linux/ar71xx/base-files/etc/diag.sh
  13. @@ -273,7 +273,8 @@ get_status_led() {
  14. tl-wdr4300 | \
  15. tl-wr703n | \
  16. tl-wr710n | \
  17. - tl-wr720n-v3)
  18. + tl-wr720n-v3 | \
  19. + tl-wr941nd-v6)
  20. status_led="tp-link:blue:system"
  21. ;;
  22. tl-wr841n-v9)
  23. diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
  24. index d628f1a..1aacf5a 100644
  25. --- a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
  26. +++ b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
  27. @@ -452,6 +452,15 @@ tl-wr941nd-v5)
  28. ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
  29. ;;
  30. +tl-wr941nd-v6)
  31. + ucidef_set_led_netdev "wan" "WAN" "tp-link:blue:wan" "eth0"
  32. + ucidef_set_led_switch "lan1" "LAN1" "tp-link:blue:lan1" "switch0" "0x10"
  33. + ucidef_set_led_switch "lan2" "LAN2" "tp-link:blue:lan2" "switch0" "0x08"
  34. + ucidef_set_led_switch "lan3" "LAN3" "tp-link:blue:lan3" "switch0" "0x04"
  35. + ucidef_set_led_switch "lan4" "LAN4" "tp-link:blue:lan4" "switch0" "0x02"
  36. + ucidef_set_led_wlan "wlan" "WLAN" "tp-link:blue:wlan" "phy0tpt"
  37. + ;;
  38. +
  39. tl-wa830re-v2)
  40. ucidef_set_led_netdev "lan" "LAN" "tp-link:green:lan" "eth0"
  41. ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
  42. diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
  43. index 7e26886..3e52942 100644
  44. --- a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
  45. +++ b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
  46. @@ -225,6 +225,7 @@ tl-mr3420-v2 |\
  47. tl-wr841n-v8 |\
  48. tl-wr842n-v2 |\
  49. tl-wr941nd-v5 |\
  50. +tl-wr941nd-v6 |\
  51. wnr2000-v3 |\
  52. wnr2000-v4 |\
  53. wnr2200 |\
  54. diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
  55. index e1d03ea..7551697 100755
  56. --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
  57. +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
  58. @@ -784,6 +784,9 @@ ar71xx_board_detect() {
  59. *"TL-WR941N/ND v5")
  60. name="tl-wr941nd-v5"
  61. ;;
  62. + *"TL-WR941N/ND v6")
  63. + name="tl-wr941nd-v6"
  64. + ;;
  65. *"TL-WR703N v1")
  66. name="tl-wr703n"
  67. ;;
  68. diff --git a/target/linux/ar71xx/base-files/lib/preinit/05_set_preinit_iface_ar71xx b/target/linux/ar71xx/base-files/lib/preinit/05_set_preinit_iface_ar71xx
  69. index f11ea8c..fd337e1 100644
  70. --- a/target/linux/ar71xx/base-files/lib/preinit/05_set_preinit_iface_ar71xx
  71. +++ b/target/linux/ar71xx/base-files/lib/preinit/05_set_preinit_iface_ar71xx
  72. @@ -35,6 +35,7 @@ set_preinit_iface() {
  73. tl-wr720n-v3 |\
  74. tl-wr841n-v8 |\
  75. tl-wr842n-v2 |\
  76. + tl-wr941nd-v6 |\
  77. wnr2000-v3 |\
  78. wnr2200 |\
  79. wnr612-v2 |\
  80. diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
  81. index e5376ef..88b02ee 100755
  82. --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
  83. +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
  84. @@ -351,6 +351,7 @@ platform_check_image() {
  85. tl-wr842n-v2 | \
  86. tl-wr941nd | \
  87. tl-wr941nd-v5 | \
  88. + tl-wr941nd-v6 | \
  89. tl-wr1041n-v2 | \
  90. tl-wr1043nd | \
  91. tl-wr1043nd-v2 | \
  92. diff --git a/target/linux/ar71xx/config-3.18 b/target/linux/ar71xx/config-3.18
  93. index d661aa7..bf618a4 100644
  94. --- a/target/linux/ar71xx/config-3.18
  95. +++ b/target/linux/ar71xx/config-3.18
  96. @@ -130,6 +130,7 @@ CONFIG_ATH79_MACH_TL_WR841N_V1=y
  97. CONFIG_ATH79_MACH_TL_WR841N_V8=y
  98. CONFIG_ATH79_MACH_TL_WR841N_V9=y
  99. CONFIG_ATH79_MACH_TL_WR941ND=y
  100. +CONFIG_ATH79_MACH_TL_WR941ND_V6=y
  101. CONFIG_ATH79_MACH_TUBE2H=y
  102. CONFIG_ATH79_MACH_UBNT=y
  103. CONFIG_ATH79_MACH_UBNT_XM=y
  104. diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr941nd-v6.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr941nd-v6.c
  105. new file mode 100644
  106. index 0000000..55b4c00
  107. --- /dev/null
  108. +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr941nd-v6.c
  109. @@ -0,0 +1,151 @@
  110. +/*
  111. + * TP-LINK TL-WR941N/ND v6 board support
  112. + *
  113. + * Copyright (C) 2015 Matthias Schiffer <mschiffer@universe-factory.net>
  114. + *
  115. + * This program is free software; you can redistribute it and/or modify it
  116. + * under the terms of the GNU General Public License version 2 as published
  117. + * by the Free Software Foundation.
  118. + */
  119. +
  120. +#include <linux/gpio.h>
  121. +#include <linux/platform_device.h>
  122. +
  123. +#include <asm/mach-ath79/ath79.h>
  124. +#include <asm/mach-ath79/ar71xx_regs.h>
  125. +
  126. +#include "common.h"
  127. +#include "dev-eth.h"
  128. +#include "dev-gpio-buttons.h"
  129. +#include "dev-leds-gpio.h"
  130. +#include "dev-m25p80.h"
  131. +#include "dev-wmac.h"
  132. +#include "machtypes.h"
  133. +
  134. +
  135. +#define TL_WR941ND_V6_GPIO_LED_QSS 3
  136. +#define TL_WR941ND_V6_GPIO_LED_WAN 14
  137. +#define TL_WR941ND_V6_GPIO_LED_WAN_RED 15
  138. +#define TL_WR941ND_V6_GPIO_LED_LAN1 7
  139. +#define TL_WR941ND_V6_GPIO_LED_LAN2 6
  140. +#define TL_WR941ND_V6_GPIO_LED_LAN3 5
  141. +#define TL_WR941ND_V6_GPIO_LED_LAN4 4
  142. +#define TL_WR941ND_V6_GPIO_LED_WLAN 8
  143. +#define TL_WR941ND_V6_GPIO_LED_SYSTEM 18
  144. +
  145. +#define TL_WR941ND_V6_GPIO_BTN_RESET 1
  146. +#define TL_WR941ND_V6_GPIO_BTN_RFKILL 2
  147. +
  148. +#define TL_WR941ND_V6_KEYS_POLL_INTERVAL 20
  149. +#define TL_WR941ND_V6_KEYS_DEBOUNCE_INTERVAL (3 * TL_WR941ND_V6_KEYS_POLL_INTERVAL)
  150. +
  151. +
  152. +static struct gpio_led tl_wr941nd_v6_leds_gpio[] __initdata = {
  153. + {
  154. + .name = "tp-link:blue:qss",
  155. + .gpio = TL_WR941ND_V6_GPIO_LED_QSS,
  156. + .active_low = 1,
  157. + },
  158. + {
  159. + .name = "tp-link:blue:wan",
  160. + .gpio = TL_WR941ND_V6_GPIO_LED_WAN,
  161. + .active_low = 1,
  162. + },
  163. + {
  164. + .name = "tp-link:red:wan",
  165. + .gpio = TL_WR941ND_V6_GPIO_LED_WAN_RED,
  166. + .active_low = 0,
  167. + },
  168. + {
  169. + .name = "tp-link:blue:lan1",
  170. + .gpio = TL_WR941ND_V6_GPIO_LED_LAN1,
  171. + .active_low = 1,
  172. + },
  173. + {
  174. + .name = "tp-link:blue:lan2",
  175. + .gpio = TL_WR941ND_V6_GPIO_LED_LAN2,
  176. + .active_low = 1,
  177. + },
  178. + {
  179. + .name = "tp-link:blue:lan3",
  180. + .gpio = TL_WR941ND_V6_GPIO_LED_LAN3,
  181. + .active_low = 1,
  182. + },
  183. + {
  184. + .name = "tp-link:blue:lan4",
  185. + .gpio = TL_WR941ND_V6_GPIO_LED_LAN4,
  186. + .active_low = 1,
  187. + },
  188. + {
  189. + .name = "tp-link:blue:wlan",
  190. + .gpio = TL_WR941ND_V6_GPIO_LED_WLAN,
  191. + .active_low = 1,
  192. + },
  193. + {
  194. + .name = "tp-link:blue:system",
  195. + .gpio = TL_WR941ND_V6_GPIO_LED_SYSTEM,
  196. + .active_low = 1,
  197. + },
  198. +};
  199. +
  200. +static struct gpio_keys_button tl_wr941nd_v6_gpio_keys[] __initdata = {
  201. + {
  202. + .desc = "Reset button",
  203. + .type = EV_KEY,
  204. + .code = KEY_RESTART,
  205. + .debounce_interval = TL_WR941ND_V6_KEYS_DEBOUNCE_INTERVAL,
  206. + .gpio = TL_WR941ND_V6_GPIO_BTN_RESET,
  207. + .active_low = 1,
  208. + }, {
  209. + .desc = "RFKILL button",
  210. + .type = EV_KEY,
  211. + .code = KEY_RFKILL,
  212. + .debounce_interval = TL_WR941ND_V6_KEYS_DEBOUNCE_INTERVAL,
  213. + .gpio = TL_WR941ND_V6_GPIO_BTN_RFKILL,
  214. + .active_low = 1,
  215. + }
  216. +};
  217. +
  218. +
  219. +static const char *tl_wr941n_v6_part_probes[] = {
  220. + "tp-link",
  221. + NULL,
  222. +};
  223. +
  224. +static struct flash_platform_data tl_wr941n_v6_flash_data = {
  225. + .part_probes = tl_wr941n_v6_part_probes,
  226. +};
  227. +
  228. +
  229. +static void __init tl_wr941nd_v6_setup(void)
  230. +{
  231. + u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00);
  232. + u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
  233. +
  234. + ath79_register_m25p80(&tl_wr941n_v6_flash_data);
  235. +
  236. + ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wr941nd_v6_leds_gpio),
  237. + tl_wr941nd_v6_leds_gpio);
  238. +
  239. + ath79_register_gpio_keys_polled(-1, TL_WR941ND_V6_KEYS_POLL_INTERVAL,
  240. + ARRAY_SIZE(tl_wr941nd_v6_gpio_keys),
  241. + tl_wr941nd_v6_gpio_keys);
  242. +
  243. + ath79_register_mdio(0, 0x0);
  244. +
  245. + ath79_init_mac(ath79_eth0_data.mac_addr, mac, 1);
  246. + ath79_init_mac(ath79_eth1_data.mac_addr, mac, -1);
  247. +
  248. + ath79_switch_data.phy4_mii_en = 1;
  249. + ath79_switch_data.phy_poll_mask = BIT(0);
  250. + ath79_eth0_data.phy_mask = BIT(0);
  251. +
  252. + ath79_register_eth(0);
  253. + ath79_register_eth(1);
  254. +
  255. + ath79_register_wmac(ee, mac);
  256. +
  257. +}
  258. +
  259. +MIPS_MACHINE(ATH79_MACH_TL_WR941ND_V6, "TL-WR941ND-v6", "TP-LINK TL-WR941N/ND v6",
  260. + tl_wr941nd_v6_setup);
  261. diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
  262. index 0600f98..9a6a794 100644
  263. --- a/target/linux/ar71xx/image/Makefile
  264. +++ b/target/linux/ar71xx/image/Makefile
  265. @@ -576,7 +576,7 @@ endef
  266. define Device/tl-wr941nd-v6
  267. $(Device/tplink-4mlzma)
  268. - BOARDNAME := TL-WDR3500
  269. + BOARDNAME := TL-WR941ND-v6
  270. DEVICE_PROFILE := TLWR941
  271. TPLINK_HWID := 0x09410006
  272. endef
  273. diff --git a/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch b/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
  274. index 941cb49..d1246a9 100644
  275. --- a/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
  276. +++ b/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
  277. @@ -1,6 +1,6 @@
  278. --- a/arch/mips/ath79/machtypes.h
  279. +++ b/arch/mips/ath79/machtypes.h
  280. -@@ -16,22 +16,195 @@
  281. +@@ -16,22 +16,196 @@
  282. enum ath79_mach_type {
  283. ATH79_MACH_GENERIC = 0,
  284. @@ -147,6 +147,7 @@
  285. + ATH79_MACH_TL_WR842N_V2, /* TP-LINK TL-WR842N/ND v2 */
  286. + ATH79_MACH_TL_WR941ND, /* TP-LINK TL-WR941ND */
  287. + ATH79_MACH_TL_WR941ND_V5, /* TP-LINK TL-WR941ND v5 */
  288. ++ ATH79_MACH_TL_WR941ND_V6, /* TP-LINK TL-WR941ND v6 */
  289. + ATH79_MACH_TUBE2H, /* Alfa Network Tube2H */
  290. + ATH79_MACH_UBNT_AIRGW, /* Ubiquiti AirGateway */
  291. ATH79_MACH_UBNT_AIRROUTER, /* Ubiquiti AirRouter */
  292. @@ -269,7 +270,7 @@
  293. config ATH79_MACH_AP121
  294. bool "Atheros AP121 reference board"
  295. select SOC_AR933X
  296. -@@ -11,62 +75,1030 @@ config ATH79_MACH_AP121
  297. +@@ -11,62 +75,1039 @@ config ATH79_MACH_AP121
  298. select ATH79_DEV_M25P80
  299. select ATH79_DEV_USB
  300. select ATH79_DEV_WMAC
  301. @@ -1233,6 +1234,15 @@
  302. + select ATH79_DEV_M25P80
  303. + select ATH79_DEV_WMAC
  304. +
  305. ++config ATH79_MACH_TL_WR941ND_V6
  306. ++ bool "TP-LINK TL-WR941ND v6 support"
  307. ++ select SOC_QCA956X
  308. ++ select ATH79_DEV_ETH
  309. ++ select ATH79_DEV_GPIO_BUTTONS
  310. ++ select ATH79_DEV_LEDS_GPIO
  311. ++ select ATH79_DEV_M25P80
  312. ++ select ATH79_DEV_WMAC
  313. ++
  314. +config ATH79_MACH_TL_WR1041N_V2
  315. + bool "TP-LINK TL-WR1041N v2 support"
  316. + select SOC_AR934X
  317. @@ -1328,7 +1338,7 @@
  318. config ATH79_MACH_UBNT_XM
  319. bool "Ubiquiti Networks XM/UniFi boards"
  320. -@@ -83,6 +1115,97 @@ config ATH79_MACH_UBNT_XM
  321. +@@ -83,6 +1124,97 @@ config ATH79_MACH_UBNT_XM
  322. Say 'Y' here if you want your kernel to support the
  323. Ubiquiti Networks XM (rev 1.0) board.
  324. @@ -1426,7 +1436,7 @@
  325. endmenu
  326. config SOC_AR71XX
  327. -@@ -124,7 +1247,10 @@ config ATH79_DEV_DSA
  328. +@@ -124,7 +1256,10 @@ config ATH79_DEV_DSA
  329. config ATH79_DEV_ETH
  330. def_bool n
  331. @@ -1438,7 +1448,7 @@
  332. def_bool n
  333. config ATH79_DEV_GPIO_BUTTONS
  334. -@@ -154,6 +1280,11 @@ config ATH79_PCI_ATH9K_FIXUP
  335. +@@ -154,6 +1289,11 @@ config ATH79_PCI_ATH9K_FIXUP
  336. def_bool n
  337. config ATH79_ROUTERBOOT
  338. @@ -1452,7 +1462,7 @@
  339. endif
  340. --- a/arch/mips/ath79/Makefile
  341. +++ b/arch/mips/ath79/Makefile
  342. -@@ -38,9 +38,124 @@ obj-$(CONFIG_ATH79_ROUTERBOOT) += route
  343. +@@ -38,9 +38,125 @@ obj-$(CONFIG_ATH79_ROUTERBOOT) += route
  344. #
  345. # Machines
  346. #
  347. @@ -1543,6 +1553,7 @@
  348. +obj-$(CONFIG_ATH79_MACH_TL_WR841N_V8) += mach-tl-wr841n-v8.o
  349. +obj-$(CONFIG_ATH79_MACH_TL_WR841N_V9) += mach-tl-wr841n-v9.o
  350. +obj-$(CONFIG_ATH79_MACH_TL_WR941ND) += mach-tl-wr941nd.o
  351. ++obj-$(CONFIG_ATH79_MACH_TL_WR941ND_V6) += mach-tl-wr941nd-v6.o
  352. +obj-$(CONFIG_ATH79_MACH_TL_WR1041N_V2) += mach-tl-wr1041n-v2.o
  353. +obj-$(CONFIG_ATH79_MACH_TL_WR1043ND) += mach-tl-wr1043nd.o
  354. +obj-$(CONFIG_ATH79_MACH_TL_WR1043ND_V2) += mach-tl-wr1043nd-v2.o