033-MIPS-BCM47XX-Add-support-for-Netgear-WNR1000-V3.patch 4.1 KB

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