Ключевые слова:notebook, linux, led, kernel, patch, (найти похожие документы)
From: Владимиров Дмитрий <dima@vladimirov.org.>
Newsgroups: email
Date: Mon, 29 Jun 2008 17:02:14 +0000 (UTC)
Subject: Настройка LED WiFi Broadcom ноутбука HP G5000 для отображения состояния RF-модуля
-------------------
Исследование вопроса используя известный поисковик так и не привело к положительному
результату, а именно, в ноутбуке HP G5000 не работала индикация состояния WiFi адаптера
Broadcom BCM94311MCG (rev 01). Предлагается решение данного вопроса. Предполагается,
что драйвера и firmware уже установлены (в моем случае это Slackware 12.1 и ядро 2.6.25.7),
в этом состоянии светодиодный индикатор кнопки светит постоянно, в не зависимости от
состояния RF-модуля. Dmesg, однако, исправно показывает изменение состояния радиомодуля
адаптера при нажатии на кнопку. Этот недочет мы и постараемся исправить - заставим светодиодный
индикатор кнопки отображать состояние RF-модуля адаптера. Если есть необходимость при загрузке
не включать радиомодуль адаптера, следует раскомментировать 2 строки после "case B43_LED_RADIO_ALL:".
Загрузить патч можно по ссылке: http://www.vladimirov.org/b43.patch--- drivers/net/wireless/b43/leds.c 2008-04-17 06:49:44.000000000 +0400
+++ drivers/net/wireless/b43/leds.c 2008-06-19 14:03:10.000000000 +0400
@@ -30,7 +30,7 @@
#include "leds.h"
-static void b43_led_turn_on(struct b43_wldev *dev, u8 led_index,
+void b43_led_turn_on(struct b43_wldev *dev, u8 led_index,
bool activelow)
{
struct b43_wl *wl = dev->wl;
@@ -47,7 +47,7 @@
spin_unlock_irqrestore(&wl->leds_lock, flags);
}
-static void b43_led_turn_off(struct b43_wldev *dev, u8 led_index,
+void b43_led_turn_off(struct b43_wldev *dev, u8 led_index,
bool activelow)
{
struct b43_wl *wl = dev->wl;
@@ -158,6 +158,8 @@
led_index, activelow);
break;
case B43_LED_RADIO_ALL:
+// b43info(dev->wl, "Switch off WiFi RF-module on startup\n");
+// b43_led_turn_off(dev, led_index, activelow);
case B43_LED_RADIO_A:
case B43_LED_RADIO_B:
case B43_LED_MODE_BG:
--- drivers/net/wireless/b43/leds.h 2008-04-17 06:49:44.000000000 +0400
+++ drivers/net/wireless/b43/leds.h 2008-06-19 14:01:13.000000000 +0400
@@ -44,6 +44,8 @@
void b43_leds_init(struct b43_wldev *dev);
void b43_leds_exit(struct b43_wldev *dev);
+void b43_led_turn_on(struct b43_wldev *dev, u8 led_index, bool activelow);
+void b43_led_turn_off(struct b43_wldev *dev, u8 led_index, bool activelow);
#else /* CONFIG_B43_LEDS */
--- drivers/net/wireless/b43/rfkill.c 2008-04-17 06:49:44.000000000 +0400
+++ drivers/net/wireless/b43/rfkill.c 2008-06-19 14:02:08.000000000 +0400
@@ -24,6 +24,7 @@
#include "rfkill.h"
#include "b43.h"
+#include "leds.h"
#include <linux/kmod.h>
@@ -50,6 +51,7 @@
struct b43_wl *wl = dev->wl;
bool enabled;
bool report_change = 0;
+ int i;
mutex_lock(&wl->mutex);
if (unlikely(b43_status(dev) < B43_STAT_INITIALIZED)) {
@@ -62,6 +64,13 @@
report_change = 1;
b43info(wl, "Radio hardware status changed to %s\n",
enabled ? "ENABLED" : "DISABLED");
+ if (enabled) {
+ for (i = 0; i <= 3; i++)
+ b43_led_turn_on(dev, i, i >> 1);
+ } else {
+ for (i = 0; i <= 3; i++)
+ b43_led_turn_off(dev, i, i >> 1);
+ }
}
mutex_unlock(&wl->mutex);