On Thu, Oct 15, 2009 at 4:59 AM, Len Brown <lenb@xxxxxxxxxx> wrote: > From: Darren Salt <linux@xxxxxxxxxxxxxxxxxxxxxxxxxxx> > > This works around what I think is actually a bug in rt2860sta which is > triggered when the hardware "disappears" from beneath the driver, i.e. when > wireless is toggled off via ACPI. It does so by ensuring that the rfkill > soft-block flag is set before the hardware is disabled. > > I do not know whether this patch is required if rt2800pci is in use instead > of rt2860sta; at the time of submission of this patch, I've not been able to > test this. > > (Ref. http://bugzilla.kernel.org/show_bug.cgi?id=13390) > > Signed-off-by: Darren Salt <linux@xxxxxxxxxxxxxxxxxxxxxxxxxxx> > Signed-off-by: Len Brown <len.brown@xxxxxxxxx> > --- > drivers/platform/x86/eeepc-laptop.c | 27 +++++++++++++++++++-------- > 1 files changed, 19 insertions(+), 8 deletions(-) > > diff --git a/drivers/platform/x86/eeepc-laptop.c b/drivers/platform/x86/eeepc-laptop.c > index 789d6ae..d379e74 100644 > --- a/drivers/platform/x86/eeepc-laptop.c > +++ b/drivers/platform/x86/eeepc-laptop.c > @@ -150,6 +150,8 @@ struct eeepc_hotk { > /* The actual device the driver binds to */ > static struct eeepc_hotk *ehotk; > > +static void eeepc_rfkill_hotplug(bool real); > + > /* Platform device/driver */ > static int eeepc_hotk_thaw(struct device *device); > static int eeepc_hotk_restore(struct device *device); > @@ -343,7 +345,16 @@ static bool eeepc_wlan_rfkill_blocked(void) > static int eeepc_rfkill_set(void *data, bool blocked) > { > unsigned long asl = (unsigned long)data; > - return set_acpi(asl, !blocked); > + int ret; > + > + if (asl != CM_ASL_WLAN) > + return set_acpi(asl, !blocked); > + > + /* hack to avoid panic with rt2860sta */ > + if (blocked) > + eeepc_rfkill_hotplug(false); > + ret = set_acpi(asl, !blocked); > + return ret; > } > > static const struct rfkill_ops eeepc_rfkill_ops = { > @@ -643,13 +654,13 @@ static int eeepc_get_adapter_status(struct hotplug_slot *hotplug_slot, > return 0; > } > > -static void eeepc_rfkill_hotplug(void) > +static void eeepc_rfkill_hotplug(bool real) > { > struct pci_dev *dev; > struct pci_bus *bus; > - bool blocked = eeepc_wlan_rfkill_blocked(); > + bool blocked = real ? eeepc_wlan_rfkill_blocked() : true; > > - if (ehotk->wlan_rfkill) > + if (real && ehotk->wlan_rfkill) > rfkill_set_sw_state(ehotk->wlan_rfkill, blocked); > > mutex_lock(&ehotk->hotplug_lock); > @@ -692,7 +703,7 @@ static void eeepc_rfkill_notify(acpi_handle handle, u32 event, void *data) > if (event != ACPI_NOTIFY_BUS_CHECK) > return; > > - eeepc_rfkill_hotplug(); > + eeepc_rfkill_hotplug(true); > } > > static void eeepc_hotk_notify(struct acpi_device *device, u32 event) > @@ -850,7 +861,7 @@ static int eeepc_hotk_restore(struct device *device) > { > /* Refresh both wlan rfkill state and pci hotplug */ > if (ehotk->wlan_rfkill) > - eeepc_rfkill_hotplug(); > + eeepc_rfkill_hotplug(true); > > if (ehotk->bluetooth_rfkill) > rfkill_set_sw_state(ehotk->bluetooth_rfkill, > @@ -993,7 +1004,7 @@ static void eeepc_rfkill_exit(void) > * Refresh pci hotplug in case the rfkill state was changed after > * eeepc_unregister_rfkill_notifier() > */ > - eeepc_rfkill_hotplug(); > + eeepc_rfkill_hotplug(true); > if (ehotk->hotplug_slot) > pci_hp_deregister(ehotk->hotplug_slot); > > @@ -1109,7 +1120,7 @@ static int eeepc_rfkill_init(struct device *dev) > * Refresh pci hotplug in case the rfkill state was changed during > * setup. > */ > - eeepc_rfkill_hotplug(); > + eeepc_rfkill_hotplug(true); > > exit: > if (result && result != -ENODEV) > -- > 1.6.0.6 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-acpi" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > Hi Len, I sent you a revert request 2 days ago for this patch, Darren reported some problems with it. You may have missed it, it can be found at: http://marc.info/?l=linux-acpi&m=125542258501548&w=2 . Is it still time to revert ? Thanks, -- Corentin Chary http://xf.iksaif.net -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html