2008-06-29 17:20:24

by drago01

[permalink] [raw]
Subject: [PATCH] b43/b43legacy: add RFKILL_STATE_HARD_BLOCKED support

Hi,

The attached patch adds RFKILL_STATE_HARD_BLOCKED to the b43/b43legacy drivers.
Note: I don't have any hardware to test on, so if you have the
hardware please test.

-----------

This patch sets the rfkill state to RFKILL_STATE_HARD_BLOCKED when the
radio is killed
by the hardware switch.

Signed-off-by: Adel Gadllah <[email protected]>

diff --git a/drivers/net/wireless/b43/rfkill.c
b/drivers/net/wireless/b43/rfkill.c
index 4cca203..4c0dd99 100644
--- a/drivers/net/wireless/b43/rfkill.c
+++ b/drivers/net/wireless/b43/rfkill.c
@@ -43,6 +43,23 @@ static bool b43_is_hw_radio_enabled(struct b43_wldev *dev)
return 0;
}

+/* Update the rfkill state */
+static void b43_rfkill_update_state(struct b43_wldev *dev)
+{
+ struct b43_rfkill *rfk = &(dev->wl->rfkill);
+
+ if (!dev->radio_hw_enable) {
+ rfk->rfkill->state = RFKILL_STATE_HARD_BLOCKED;
+ return;
+ }
+
+ if (!dev->phy.radio_on)
+ rfk->rfkill->state = RFKILL_STATE_SOFT_BLOCKED;
+ else
+ rfk->rfkill->state = RFKILL_STATE_UNBLOCKED;
+
+}
+
/* The poll callback for the hardware button. */
static void b43_rfkill_poll(struct input_polled_dev *poll_dev)
{
@@ -60,6 +77,7 @@ static void b43_rfkill_poll(struct input_polled_dev *poll_dev)
if (unlikely(enabled != dev->radio_hw_enable)) {
dev->radio_hw_enable = enabled;
report_change = 1;
+ b43_rfkill_update_state(dev);
b43info(wl, "Radio hardware status changed to %s\n",
enabled ? "ENABLED" : "DISABLED");
}
diff --git a/drivers/net/wireless/b43legacy/rfkill.c
b/drivers/net/wireless/b43legacy/rfkill.c
index 8935a30..19dabb7 100644
--- a/drivers/net/wireless/b43legacy/rfkill.c
+++ b/drivers/net/wireless/b43legacy/rfkill.c
@@ -44,6 +44,23 @@ static bool b43legacy_is_hw_radio_enabled(struct
b43legacy_wldev *dev)
return 0;
}

+/* Update the rfkill state */
+static void b43legacy_rfkill_update_state(struct b43legacy_wldev *dev)
+{
+ struct b43_rfkill *rfk = &(dev->wl->rfkill);
+
+ if (!dev->radio_hw_enable) {
+ rfk->rfkill->state = RFKILL_STATE_HARD_BLOCKED;
+ return;
+ }
+
+ if (!dev->phy.radio_on)
+ rfk->rfkill->state = RFKILL_STATE_SOFT_BLOCKED;
+ else
+ rfk->rfkill->state = RFKILL_STATE_UNBLOCKED;
+
+}
+
/* The poll callback for the hardware button. */
static void b43legacy_rfkill_poll(struct input_polled_dev *poll_dev)
{
@@ -61,6 +78,7 @@ static void b43legacy_rfkill_poll(struct
input_polled_dev *poll_dev)
if (unlikely(enabled != dev->radio_hw_enable)) {
dev->radio_hw_enable = enabled;
report_change = 1;
+ b43legacy_rfkill_update_state(dev);
b43legacyinfo(wl, "Radio hardware status changed to %s\n",
enabled ? "ENABLED" : "DISABLED");
}


Subject: Re: [PATCH] b43/b43legacy: add RFKILL_STATE_HARD_BLOCKED support

On Sun, 29 Jun 2008, drago01 wrote:
> The attached patch adds RFKILL_STATE_HARD_BLOCKED to the b43/b43legacy drivers.

While at it, if b43 still has any input layer stuff, especially any input
polldev stuff, please rip that off.

Userspace or a platform driver should listen to the b43 reports on the
rfkill notifier chain (or uevents) and issue the input events.

--
"One disk to rule them all, One disk to find them. One disk to bring
them all and in the darkness grind them. In the Land of Redmond
where the shadows lie." -- The Silicon Valley Tarot
Henrique Holschuh

2008-06-30 21:47:13

by John W. Linville

[permalink] [raw]
Subject: Re: [PATCH] b43/b43legacy: add RFKILL_STATE_HARD_BLOCKED support

On Sun, Jun 29, 2008 at 07:20:21PM +0200, drago01 wrote:

> diff --git a/drivers/net/wireless/b43/rfkill.c
> b/drivers/net/wireless/b43/rfkill.c
> index 4cca203..4c0dd99 100644
> --- a/drivers/net/wireless/b43/rfkill.c
> +++ b/drivers/net/wireless/b43/rfkill.c
> @@ -43,6 +43,23 @@ static bool b43_is_hw_radio_enabled(struct b43_wldev *dev)
> return 0;
> }
>
> +/* Update the rfkill state */
> +static void b43_rfkill_update_state(struct b43_wldev *dev)
> +{
> + struct b43_rfkill *rfk = &(dev->wl->rfkill);

<snip>


> diff --git a/drivers/net/wireless/b43legacy/rfkill.c
> b/drivers/net/wireless/b43legacy/rfkill.c
> index 8935a30..19dabb7 100644
> --- a/drivers/net/wireless/b43legacy/rfkill.c
> +++ b/drivers/net/wireless/b43legacy/rfkill.c
> @@ -44,6 +44,23 @@ static bool b43legacy_is_hw_radio_enabled(struct
> b43legacy_wldev *dev)
> return 0;
> }
>
> +/* Update the rfkill state */
> +static void b43legacy_rfkill_update_state(struct b43legacy_wldev *dev)
> +{
> + struct b43_rfkill *rfk = &(dev->wl->rfkill);

In b43legacy the structure name is 'b43legacy_rfkill'. Please make
sure you compile patches before submitting them.

John
--
John W. Linville
[email protected]