aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rt2x00/rt2800lib.c
diff options
context:
space:
mode:
authorLayne Edwards <ledwards@astrumtech.net>2011-04-18 09:26:00 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-04-19 15:38:55 -0400
commit44704e5d7d56625ff93d5a119ca846ae4de9061c (patch)
tree77ff48105e296b66632b0f265d395e1619344777 /drivers/net/wireless/rt2x00/rt2800lib.c
parent93ae2dd2230393566738a5f211ffbaa33b056d56 (diff)
rt2x00: Enable WLAN LED on Ralink SoC (rt305x) devices
This patch adds WLAN LED support to the mac80211 rt2x00 driver for Ralink SoC (rt305x) devices. The current WLAN LED drivers in rt2800lib.c set the LED brightness via an MCU request, but do nothing for SoC. This patch checks for SoC and sets the register to enable the WLAN LED (instead of an MCU request). This enables the WLAN LED for RT305x devices. Signed-off-by: Layne Edwards <ledwards@astrumtech.net> Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2800lib.c')
-rw-r--r--drivers/net/wireless/rt2x00/rt2800lib.c60
1 files changed, 42 insertions, 18 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index 769c05c0cbaa..13ccc1bbeb4b 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -949,25 +949,49 @@ static void rt2800_brightness_set(struct led_classdev *led_cdev,
949 unsigned int ledmode = 949 unsigned int ledmode =
950 rt2x00_get_field16(led->rt2x00dev->led_mcu_reg, 950 rt2x00_get_field16(led->rt2x00dev->led_mcu_reg,
951 EEPROM_FREQ_LED_MODE); 951 EEPROM_FREQ_LED_MODE);
952 u32 reg;
952 953
953 if (led->type == LED_TYPE_RADIO) { 954 /* Check for SoC (SOC devices don't support MCU requests) */
954 rt2800_mcu_request(led->rt2x00dev, MCU_LED, 0xff, ledmode, 955 if (rt2x00_is_soc(led->rt2x00dev)) {
955 enabled ? 0x20 : 0); 956 rt2800_register_read(led->rt2x00dev, LED_CFG, &reg);
956 } else if (led->type == LED_TYPE_ASSOC) { 957
957 rt2800_mcu_request(led->rt2x00dev, MCU_LED, 0xff, ledmode, 958 /* Set LED Polarity */
958 enabled ? (bg_mode ? 0x60 : 0xa0) : 0x20); 959 rt2x00_set_field32(&reg, LED_CFG_LED_POLAR, polarity);
959 } else if (led->type == LED_TYPE_QUALITY) { 960
960 /* 961 /* Set LED Mode */
961 * The brightness is divided into 6 levels (0 - 5), 962 if (led->type == LED_TYPE_RADIO) {
962 * The specs tell us the following levels: 963 rt2x00_set_field32(&reg, LED_CFG_G_LED_MODE,
963 * 0, 1 ,3, 7, 15, 31 964 enabled ? 3 : 0);
964 * to determine the level in a simple way we can simply 965 } else if (led->type == LED_TYPE_ASSOC) {
965 * work with bitshifting: 966 rt2x00_set_field32(&reg, LED_CFG_Y_LED_MODE,
966 * (1 << level) - 1 967 enabled ? 3 : 0);
967 */ 968 } else if (led->type == LED_TYPE_QUALITY) {
968 rt2800_mcu_request(led->rt2x00dev, MCU_LED_STRENGTH, 0xff, 969 rt2x00_set_field32(&reg, LED_CFG_R_LED_MODE,
969 (1 << brightness / (LED_FULL / 6)) - 1, 970 enabled ? 3 : 0);
970 polarity); 971 }
972
973 rt2800_register_write(led->rt2x00dev, LED_CFG, reg);
974
975 } else {
976 if (led->type == LED_TYPE_RADIO) {
977 rt2800_mcu_request(led->rt2x00dev, MCU_LED, 0xff, ledmode,
978 enabled ? 0x20 : 0);
979 } else if (led->type == LED_TYPE_ASSOC) {
980 rt2800_mcu_request(led->rt2x00dev, MCU_LED, 0xff, ledmode,
981 enabled ? (bg_mode ? 0x60 : 0xa0) : 0x20);
982 } else if (led->type == LED_TYPE_QUALITY) {
983 /*
984 * The brightness is divided into 6 levels (0 - 5),
985 * The specs tell us the following levels:
986 * 0, 1 ,3, 7, 15, 31
987 * to determine the level in a simple way we can simply
988 * work with bitshifting:
989 * (1 << level) - 1
990 */
991 rt2800_mcu_request(led->rt2x00dev, MCU_LED_STRENGTH, 0xff,
992 (1 << brightness / (LED_FULL / 6)) - 1,
993 polarity);
994 }
971 } 995 }
972} 996}
973 997