ath79/mikrotik: use routerbootpart partitions
[oweals/openwrt.git] / target / linux / bcm47xx / patches-4.14 / 032-MIPS-BCM47XX-Add-support-for-Netgear-WNR1000-V3.patch
1 From 88b882ba0b0b7439d16d2c9df7f111cdf793443b Mon Sep 17 00:00:00 2001
2 From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
3 Date: Sun, 8 Apr 2018 22:39:15 +0200
4 Subject: [PATCH] MIPS: BCM47XX: Add support for Netgear WNR1000 V3
5
6 This adds support for detecting this model board and registers some LEDs
7 and buttons.
8
9 There are two uncommon things regarding this device:
10 1) It can use two different "board_id" ID values.
11    Unit I have uses "U12H139T00_NETGEAR" value. This magic is also used
12    in firmware file header. There are two reports (one from an OpenWrt
13    user) of a different "U12H139T50_NETGEAR" magic though.
14 2) Power LEDs share GPIOs with buttons.
15    Amber one seems to share GPIO 2 with WPS button and green one seems
16    to share GPIO 3 with reset button. It remains unknown how to support
17    them and handle buttons at the same time. For that reason they aren't
18    added to the list of supported LEDs.
19 ---
20  arch/mips/bcm47xx/board.c                          | 2 ++
21  arch/mips/bcm47xx/buttons.c                        | 9 +++++++++
22  arch/mips/bcm47xx/leds.c                           | 9 +++++++++
23  arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h | 1 +
24  4 files changed, 21 insertions(+)
25
26 --- a/arch/mips/bcm47xx/board.c
27 +++ b/arch/mips/bcm47xx/board.c
28 @@ -172,6 +172,8 @@ struct bcm47xx_board_type_list1 bcm47xx_
29         {{BCM47XX_BOARD_NETGEAR_WNDR4000, "Netgear WNDR4000"}, "U12H181T00_NETGEAR"},
30         {{BCM47XX_BOARD_NETGEAR_WNDR4500V1, "Netgear WNDR4500 V1"}, "U12H189T00_NETGEAR"},
31         {{BCM47XX_BOARD_NETGEAR_WNDR4500V2, "Netgear WNDR4500 V2"}, "U12H224T00_NETGEAR"},
32 +       {{BCM47XX_BOARD_NETGEAR_WNR1000_V3, "Netgear WNR1000 V3"}, "U12H139T00_NETGEAR"},
33 +       {{BCM47XX_BOARD_NETGEAR_WNR1000_V3, "Netgear WNR1000 V3"}, "U12H139T50_NETGEAR"},
34         {{BCM47XX_BOARD_NETGEAR_WNR2000, "Netgear WNR2000"}, "U12H114T00_NETGEAR"},
35         {{BCM47XX_BOARD_NETGEAR_WNR3500L, "Netgear WNR3500L"}, "U12H136T99_NETGEAR"},
36         {{BCM47XX_BOARD_NETGEAR_WNR3500U, "Netgear WNR3500U"}, "U12H136T00_NETGEAR"},
37 --- a/arch/mips/bcm47xx/buttons.c
38 +++ b/arch/mips/bcm47xx/buttons.c
39 @@ -412,6 +412,12 @@ bcm47xx_buttons_netgear_wndr4500v1[] __i
40  };
41  
42  static const struct gpio_keys_button
43 +bcm47xx_buttons_netgear_wnr1000_v3[] __initconst = {
44 +       BCM47XX_GPIO_KEY(2, KEY_WPS_BUTTON),
45 +       BCM47XX_GPIO_KEY(3, KEY_RESTART),
46 +};
47 +
48 +static const struct gpio_keys_button
49  bcm47xx_buttons_netgear_wnr3500lv1[] __initconst = {
50         BCM47XX_GPIO_KEY(4, KEY_RESTART),
51         BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
52 @@ -670,6 +676,9 @@ int __init bcm47xx_buttons_register(void
53         case BCM47XX_BOARD_NETGEAR_WNDR4500V1:
54                 err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr4500v1);
55                 break;
56 +       case BCM47XX_BOARD_NETGEAR_WNR1000_V3:
57 +               err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr1000_v3);
58 +               break;
59         case BCM47XX_BOARD_NETGEAR_WNR3500L:
60                 err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr3500lv1);
61                 break;
62 --- a/arch/mips/bcm47xx/leds.c
63 +++ b/arch/mips/bcm47xx/leds.c
64 @@ -498,6 +498,12 @@ bcm47xx_leds_netgear_wndr4500v1[] __init
65  };
66  
67  static const struct gpio_led
68 +bcm47xx_leds_netgear_wnr1000_v3[] __initconst = {
69 +       BCM47XX_GPIO_LED(0, "blue", "wlan", 0, LEDS_GPIO_DEFSTATE_OFF),
70 +       BCM47XX_GPIO_LED(1, "green", "wps", 0, LEDS_GPIO_DEFSTATE_OFF),
71 +};
72 +
73 +static const struct gpio_led
74  bcm47xx_leds_netgear_wnr3500lv1[] __initconst = {
75         BCM47XX_GPIO_LED(0, "blue", "wlan", 1, LEDS_GPIO_DEFSTATE_OFF),
76         BCM47XX_GPIO_LED(1, "green", "wps", 1, LEDS_GPIO_DEFSTATE_OFF),
77 @@ -758,6 +764,9 @@ void __init bcm47xx_leds_register(void)
78         case BCM47XX_BOARD_NETGEAR_WNDR4500V1:
79                 bcm47xx_set_pdata(bcm47xx_leds_netgear_wndr4500v1);
80                 break;
81 +       case BCM47XX_BOARD_NETGEAR_WNR1000_V3:
82 +               bcm47xx_set_pdata(bcm47xx_leds_netgear_wnr1000_v3);
83 +               break;
84         case BCM47XX_BOARD_NETGEAR_WNR3500L:
85                 bcm47xx_set_pdata(bcm47xx_leds_netgear_wnr3500lv1);
86                 break;
87 --- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
88 +++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
89 @@ -110,6 +110,7 @@ enum bcm47xx_board {
90         BCM47XX_BOARD_NETGEAR_WNDR4000,
91         BCM47XX_BOARD_NETGEAR_WNDR4500V1,
92         BCM47XX_BOARD_NETGEAR_WNDR4500V2,
93 +       BCM47XX_BOARD_NETGEAR_WNR1000_V3,
94         BCM47XX_BOARD_NETGEAR_WNR2000,
95         BCM47XX_BOARD_NETGEAR_WNR3500L,
96         BCM47XX_BOARD_NETGEAR_WNR3500U,