[ping] Re: eeepc: rfkill on 900A defunct

2011-04-19 Thread Jiri Slaby
On 03/09/2011 01:50 PM, Woody Suwalski wrote:
> Jiri Slaby wrote:
>> On 03/08/2011 11:22 AM, Corentin Chary wrote:
>>   
>>> On Tue, Mar 8, 2011 at 10:06 AM, Jiri Slaby  wrote:
>>> 
 On 02/28/2011 10:49 AM, Jiri Slaby wrote:
   
> On 11/24/2010 09:18 PM, Matthew Garrett wrote:
> 
>> Hm. As a shorter term fix, can you try this (entirely untested!)
>> approach?
>>
> What is the status of this? Was there any alternative merged?
>  
 Ping.

>>> Because this is Matthew's patch, and I have no hardware to test that
>>> patch, I'm not touching it.
>>>
>>> Jiri, on what models was this patch tested (only got 701 and 901 here) ?
>>>  
>> It was 900A.
>>
>> thanks,
>>
> I have tested it on 900A and it does the trick.
> wlan can now be turned off/on (did not notice the problem before Jiri
> posted the patch ;-) ). So it should go in...

Any updates? Matthew?

-- 
js
--
To unsubscribe from this list: send the line "unsubscribe platform-driver-x86" 
in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: eeepc: rfkill on 900A defunct

2011-03-09 Thread Woody Suwalski

Jiri Slaby wrote:

On 03/08/2011 11:22 AM, Corentin Chary wrote:
   

On Tue, Mar 8, 2011 at 10:06 AM, Jiri Slaby  wrote:
 

On 02/28/2011 10:49 AM, Jiri Slaby wrote:
   

On 11/24/2010 09:18 PM, Matthew Garrett wrote:
 

Hm. As a shorter term fix, can you try this (entirely untested!)
approach?
   

What is the status of this? Was there any alternative merged?
 

Ping.
   

Because this is Matthew's patch, and I have no hardware to test that
patch, I'm not touching it.

Jiri, on what models was this patch tested (only got 701 and 901 here) ?
 

It was 900A.

thanks,
   

I have tested it on 900A and it does the trick.
wlan can now be turned off/on (did not notice the problem before Jiri 
posted the patch ;-) ). So it should go in...


Woody

--
To unsubscribe from this list: send the line "unsubscribe platform-driver-x86" 
in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: eeepc: rfkill on 900A defunct

2011-03-08 Thread Jiri Slaby
On 03/08/2011 11:22 AM, Corentin Chary wrote:
> On Tue, Mar 8, 2011 at 10:06 AM, Jiri Slaby  wrote:
>> On 02/28/2011 10:49 AM, Jiri Slaby wrote:
>>> On 11/24/2010 09:18 PM, Matthew Garrett wrote:
 Hm. As a shorter term fix, can you try this (entirely untested!)
 approach?
>>>
>>> What is the status of this? Was there any alternative merged?
>>
>> Ping.
> 
> Because this is Matthew's patch, and I have no hardware to test that
> patch, I'm not touching it.
> 
> Jiri, on what models was this patch tested (only got 701 and 901 here) ?

It was 900A.

thanks,
-- 
js
--
To unsubscribe from this list: send the line "unsubscribe platform-driver-x86" 
in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: eeepc: rfkill on 900A defunct

2011-03-08 Thread Corentin Chary
On Tue, Mar 8, 2011 at 10:06 AM, Jiri Slaby  wrote:
> On 02/28/2011 10:49 AM, Jiri Slaby wrote:
>> On 11/24/2010 09:18 PM, Matthew Garrett wrote:
>>> Hm. As a shorter term fix, can you try this (entirely untested!)
>>> approach?
>>
>> What is the status of this? Was there any alternative merged?
>
> Ping.

Because this is Matthew's patch, and I have no hardware to test that
patch, I'm not touching it.

Jiri, on what models was this patch tested (only got 701 and 901 here) ?
Matthew, will you merge this patch in your tree ?

Thanks,
-- 
Corentin Chary
http://xf.iksaif.net
--
To unsubscribe from this list: send the line "unsubscribe platform-driver-x86" 
in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: eeepc: rfkill on 900A defunct

2011-03-08 Thread Jiri Slaby
On 02/28/2011 10:49 AM, Jiri Slaby wrote:
> On 11/24/2010 09:18 PM, Matthew Garrett wrote:
>> Hm. As a shorter term fix, can you try this (entirely untested!) 
>> approach?
> 
> What is the status of this? Was there any alternative merged?

Ping.

>> diff --git a/drivers/platform/x86/eeepc-laptop.c 
>> b/drivers/platform/x86/eeepc-laptop.c
>> index b2edfdc..8f817d6 100644
>> --- a/drivers/platform/x86/eeepc-laptop.c
>> +++ b/drivers/platform/x86/eeepc-laptop.c
>> @@ -574,8 +574,9 @@ static bool eeepc_wlan_rfkill_blocked(struct 
>> eeepc_laptop *eeepc)
>>  return true;
>>  }
>>  
>> -static void eeepc_rfkill_hotplug(struct eeepc_laptop *eeepc)
>> +static void eeepc_rfkill_hotplug(struct eeepc_laptop *eeepc, acpi_handle 
>> handle)
>>  {
>> +struct pci_dev *port;
>>  struct pci_dev *dev;
>>  struct pci_bus *bus;
>>  bool blocked = eeepc_wlan_rfkill_blocked(eeepc);
>> @@ -588,9 +589,17 @@ static void eeepc_rfkill_hotplug(struct eeepc_laptop 
>> *eeepc)
>>  mutex_lock(&eeepc->hotplug_lock);
>>  
>>  if (eeepc->hotplug_slot) {
>> -bus = pci_find_bus(0, 1);
>> +port = acpi_get_pci_dev(handle);
>> +
>> +if (!port) {
>> +pr_warning("Unable to find port\n");
>> +goto out_unlock;
>> +}
>> +
>> +bus = port->subordinate;
>> +
>>  if (!bus) {
>> -pr_warning("Unable to find PCI bus 1?\n");
>> +pr_warning("Unable to find PCI bus?\n");
>>  goto out_unlock;
>>  }
>>  
>> @@ -636,6 +645,17 @@ out_unlock:
>>  mutex_unlock(&eeepc->hotplug_lock);
>>  }
>>  
>> +static void eeepc_rfkill_hotplug_update(struct eeepc_laptop *eeepc, char 
>> *node)
>> +{
>> +acpi_status status = AE_OK;
>> +acpi_handle handle;
>> +
>> +status = acpi_get_handle(NULL, node, &handle);
>> +
>> +if (ACPI_SUCCESS(status))
>> +eeepc_rfkill_hotplug(eeepc, handle);
>> +}
>> +
>>  static void eeepc_rfkill_notify(acpi_handle handle, u32 event, void *data)
>>  {
>>  struct eeepc_laptop *eeepc = data;
>> @@ -643,7 +663,7 @@ static void eeepc_rfkill_notify(acpi_handle handle, u32 
>> event, void *data)
>>  if (event != ACPI_NOTIFY_BUS_CHECK)
>>  return;
>>  
>> -eeepc_rfkill_hotplug(eeepc);
>> +eeepc_rfkill_hotplug(eeepc, handle);
>>  }
>>  
>>  static int eeepc_register_rfkill_notifier(struct eeepc_laptop *eeepc,
>> @@ -661,6 +681,11 @@ static int eeepc_register_rfkill_notifier(struct 
>> eeepc_laptop *eeepc,
>>   eeepc);
>>  if (ACPI_FAILURE(status))
>>  pr_warning("Failed to register notify on %s\n", node);
>> +/*
>> + * Refresh pci hotplug in case the rfkill state was
>> + * changed during setup.
>> + */
>> +eeepc_rfkill_hotplug(eeepc, handle);
>>  } else
>>  return -ENODEV;
>>  
>> @@ -682,6 +707,12 @@ static void eeepc_unregister_rfkill_notifier(struct 
>> eeepc_laptop *eeepc,
>>  if (ACPI_FAILURE(status))
>>  pr_err("Error removing rfkill notify handler %s\n",
>>  node);
>> +/*
>> + * Refresh pci hotplug in case the rfkill
>> + * state was changed after
>> + * eeepc_unregister_rfkill_notifier()
>> + */
>> +eeepc_rfkill_hotplug(eeepc, handle);
>>  }
>>  }
>>  
>> @@ -805,11 +836,7 @@ static void eeepc_rfkill_exit(struct eeepc_laptop 
>> *eeepc)
>>  rfkill_destroy(eeepc->wlan_rfkill);
>>  eeepc->wlan_rfkill = NULL;
>>  }
>> -/*
>> - * Refresh pci hotplug in case the rfkill state was changed after
>> - * eeepc_unregister_rfkill_notifier()
>> - */
>> -eeepc_rfkill_hotplug(eeepc);
>> +
>>  if (eeepc->hotplug_slot)
>>  pci_hp_deregister(eeepc->hotplug_slot);
>>  
>> @@ -878,11 +905,6 @@ static int eeepc_rfkill_init(struct eeepc_laptop *eeepc)
>>  eeepc_register_rfkill_notifier(eeepc, "\\_SB.PCI0.P0P5");
>>  eeepc_register_rfkill_notifier(eeepc, "\\_SB.PCI0.P0P6");
>>  eeepc_register_rfkill_notifier(eeepc, "\\_SB.PCI0.P0P7");
>> -/*
>> - * Refresh pci hotplug in case the rfkill state was changed during
>> - * setup.
>> - */
>> -eeepc_rfkill_hotplug(eeepc);
>>  
>>  exit:
>>  if (result && result != -ENODEV)
>> @@ -917,8 +939,11 @@ static int eeepc_hotk_restore(struct device *device)
>>  struct eeepc_laptop *eeepc = dev_get_drvdata(device);
>>  
>>  /* Refresh both wlan rfkill state and pci hotplug */
>> -if (eeepc->wlan_rfkill)
>> -eeepc_rfkill_hotplug(eeepc);
>> +if (eeepc->wlan_rfkill) {
>> +eeepc_rfkill_hotplug_update(eeepc, "\\_SB.PCI0.P0P5");
>> +eeepc_rfkill_hotplug_update(eeepc, "\\_SB.PCI0.P0P6");
>> +

Re: eeepc: rfkill on 900A defunct

2011-02-28 Thread Jiri Slaby
On 11/24/2010 09:18 PM, Matthew Garrett wrote:
> Hm. As a shorter term fix, can you try this (entirely untested!) 
> approach?

What is the status of this? Was there any alternative merged?

> diff --git a/drivers/platform/x86/eeepc-laptop.c 
> b/drivers/platform/x86/eeepc-laptop.c
> index b2edfdc..8f817d6 100644
> --- a/drivers/platform/x86/eeepc-laptop.c
> +++ b/drivers/platform/x86/eeepc-laptop.c
> @@ -574,8 +574,9 @@ static bool eeepc_wlan_rfkill_blocked(struct eeepc_laptop 
> *eeepc)
>   return true;
>  }
>  
> -static void eeepc_rfkill_hotplug(struct eeepc_laptop *eeepc)
> +static void eeepc_rfkill_hotplug(struct eeepc_laptop *eeepc, acpi_handle 
> handle)
>  {
> + struct pci_dev *port;
>   struct pci_dev *dev;
>   struct pci_bus *bus;
>   bool blocked = eeepc_wlan_rfkill_blocked(eeepc);
> @@ -588,9 +589,17 @@ static void eeepc_rfkill_hotplug(struct eeepc_laptop 
> *eeepc)
>   mutex_lock(&eeepc->hotplug_lock);
>  
>   if (eeepc->hotplug_slot) {
> - bus = pci_find_bus(0, 1);
> + port = acpi_get_pci_dev(handle);
> +
> + if (!port) {
> + pr_warning("Unable to find port\n");
> + goto out_unlock;
> + }
> +
> + bus = port->subordinate;
> +
>   if (!bus) {
> - pr_warning("Unable to find PCI bus 1?\n");
> + pr_warning("Unable to find PCI bus?\n");
>   goto out_unlock;
>   }
>  
> @@ -636,6 +645,17 @@ out_unlock:
>   mutex_unlock(&eeepc->hotplug_lock);
>  }
>  
> +static void eeepc_rfkill_hotplug_update(struct eeepc_laptop *eeepc, char 
> *node)
> +{
> + acpi_status status = AE_OK;
> + acpi_handle handle;
> +
> + status = acpi_get_handle(NULL, node, &handle);
> +
> + if (ACPI_SUCCESS(status))
> + eeepc_rfkill_hotplug(eeepc, handle);
> +}
> +
>  static void eeepc_rfkill_notify(acpi_handle handle, u32 event, void *data)
>  {
>   struct eeepc_laptop *eeepc = data;
> @@ -643,7 +663,7 @@ static void eeepc_rfkill_notify(acpi_handle handle, u32 
> event, void *data)
>   if (event != ACPI_NOTIFY_BUS_CHECK)
>   return;
>  
> - eeepc_rfkill_hotplug(eeepc);
> + eeepc_rfkill_hotplug(eeepc, handle);
>  }
>  
>  static int eeepc_register_rfkill_notifier(struct eeepc_laptop *eeepc,
> @@ -661,6 +681,11 @@ static int eeepc_register_rfkill_notifier(struct 
> eeepc_laptop *eeepc,
>eeepc);
>   if (ACPI_FAILURE(status))
>   pr_warning("Failed to register notify on %s\n", node);
> + /*
> +  * Refresh pci hotplug in case the rfkill state was
> +  * changed during setup.
> +  */
> + eeepc_rfkill_hotplug(eeepc, handle);
>   } else
>   return -ENODEV;
>  
> @@ -682,6 +707,12 @@ static void eeepc_unregister_rfkill_notifier(struct 
> eeepc_laptop *eeepc,
>   if (ACPI_FAILURE(status))
>   pr_err("Error removing rfkill notify handler %s\n",
>   node);
> + /*
> +  * Refresh pci hotplug in case the rfkill
> +  * state was changed after
> +  * eeepc_unregister_rfkill_notifier()
> +  */
> + eeepc_rfkill_hotplug(eeepc, handle);
>   }
>  }
>  
> @@ -805,11 +836,7 @@ static void eeepc_rfkill_exit(struct eeepc_laptop *eeepc)
>   rfkill_destroy(eeepc->wlan_rfkill);
>   eeepc->wlan_rfkill = NULL;
>   }
> - /*
> -  * Refresh pci hotplug in case the rfkill state was changed after
> -  * eeepc_unregister_rfkill_notifier()
> -  */
> - eeepc_rfkill_hotplug(eeepc);
> +
>   if (eeepc->hotplug_slot)
>   pci_hp_deregister(eeepc->hotplug_slot);
>  
> @@ -878,11 +905,6 @@ static int eeepc_rfkill_init(struct eeepc_laptop *eeepc)
>   eeepc_register_rfkill_notifier(eeepc, "\\_SB.PCI0.P0P5");
>   eeepc_register_rfkill_notifier(eeepc, "\\_SB.PCI0.P0P6");
>   eeepc_register_rfkill_notifier(eeepc, "\\_SB.PCI0.P0P7");
> - /*
> -  * Refresh pci hotplug in case the rfkill state was changed during
> -  * setup.
> -  */
> - eeepc_rfkill_hotplug(eeepc);
>  
>  exit:
>   if (result && result != -ENODEV)
> @@ -917,8 +939,11 @@ static int eeepc_hotk_restore(struct device *device)
>   struct eeepc_laptop *eeepc = dev_get_drvdata(device);
>  
>   /* Refresh both wlan rfkill state and pci hotplug */
> - if (eeepc->wlan_rfkill)
> - eeepc_rfkill_hotplug(eeepc);
> + if (eeepc->wlan_rfkill) {
> + eeepc_rfkill_hotplug_update(eeepc, "\\_SB.PCI0.P0P5");
> + eeepc_rfkill_hotplug_update(eeepc, "\\_SB.PCI0.P0P6");
> + eeepc_rfkill_hotplug_update(eeepc, "\\_SB.PCI0.P0P7");
> + }
>  
>   if (eeepc->bluetooth_rfkill)
>   

Re: eeepc: rfkill on 900A defunct

2010-12-13 Thread Jiri Slaby
On 11/24/2010 09:18 PM, Matthew Garrett wrote:
> Hm. As a shorter term fix, can you try this (entirely untested!) 
> approach?

Yes, this one works:
https://bugzilla.novell.com/show_bug.cgi?id=595586#c27

> diff --git a/drivers/platform/x86/eeepc-laptop.c 
> b/drivers/platform/x86/eeepc-laptop.c
> index b2edfdc..8f817d6 100644
> --- a/drivers/platform/x86/eeepc-laptop.c
> +++ b/drivers/platform/x86/eeepc-laptop.c
> @@ -574,8 +574,9 @@ static bool eeepc_wlan_rfkill_blocked(struct eeepc_laptop 
> *eeepc)
>   return true;
>  }
>  
> -static void eeepc_rfkill_hotplug(struct eeepc_laptop *eeepc)
> +static void eeepc_rfkill_hotplug(struct eeepc_laptop *eeepc, acpi_handle 
> handle)
>  {
> + struct pci_dev *port;
>   struct pci_dev *dev;
>   struct pci_bus *bus;
>   bool blocked = eeepc_wlan_rfkill_blocked(eeepc);
> @@ -588,9 +589,17 @@ static void eeepc_rfkill_hotplug(struct eeepc_laptop 
> *eeepc)
>   mutex_lock(&eeepc->hotplug_lock);
>  
>   if (eeepc->hotplug_slot) {
> - bus = pci_find_bus(0, 1);
> + port = acpi_get_pci_dev(handle);
> +
> + if (!port) {
> + pr_warning("Unable to find port\n");
> + goto out_unlock;
> + }
> +
> + bus = port->subordinate;
> +
>   if (!bus) {
> - pr_warning("Unable to find PCI bus 1?\n");
> + pr_warning("Unable to find PCI bus?\n");
>   goto out_unlock;
>   }
>  
> @@ -636,6 +645,17 @@ out_unlock:
>   mutex_unlock(&eeepc->hotplug_lock);
>  }
>  
> +static void eeepc_rfkill_hotplug_update(struct eeepc_laptop *eeepc, char 
> *node)
> +{
> + acpi_status status = AE_OK;
> + acpi_handle handle;
> +
> + status = acpi_get_handle(NULL, node, &handle);
> +
> + if (ACPI_SUCCESS(status))
> + eeepc_rfkill_hotplug(eeepc, handle);
> +}
> +
>  static void eeepc_rfkill_notify(acpi_handle handle, u32 event, void *data)
>  {
>   struct eeepc_laptop *eeepc = data;
> @@ -643,7 +663,7 @@ static void eeepc_rfkill_notify(acpi_handle handle, u32 
> event, void *data)
>   if (event != ACPI_NOTIFY_BUS_CHECK)
>   return;
>  
> - eeepc_rfkill_hotplug(eeepc);
> + eeepc_rfkill_hotplug(eeepc, handle);
>  }
>  
>  static int eeepc_register_rfkill_notifier(struct eeepc_laptop *eeepc,
> @@ -661,6 +681,11 @@ static int eeepc_register_rfkill_notifier(struct 
> eeepc_laptop *eeepc,
>eeepc);
>   if (ACPI_FAILURE(status))
>   pr_warning("Failed to register notify on %s\n", node);
> + /*
> +  * Refresh pci hotplug in case the rfkill state was
> +  * changed during setup.
> +  */
> + eeepc_rfkill_hotplug(eeepc, handle);
>   } else
>   return -ENODEV;
>  
> @@ -682,6 +707,12 @@ static void eeepc_unregister_rfkill_notifier(struct 
> eeepc_laptop *eeepc,
>   if (ACPI_FAILURE(status))
>   pr_err("Error removing rfkill notify handler %s\n",
>   node);
> + /*
> +  * Refresh pci hotplug in case the rfkill
> +  * state was changed after
> +  * eeepc_unregister_rfkill_notifier()
> +  */
> + eeepc_rfkill_hotplug(eeepc, handle);
>   }
>  }
>  
> @@ -805,11 +836,7 @@ static void eeepc_rfkill_exit(struct eeepc_laptop *eeepc)
>   rfkill_destroy(eeepc->wlan_rfkill);
>   eeepc->wlan_rfkill = NULL;
>   }
> - /*
> -  * Refresh pci hotplug in case the rfkill state was changed after
> -  * eeepc_unregister_rfkill_notifier()
> -  */
> - eeepc_rfkill_hotplug(eeepc);
> +
>   if (eeepc->hotplug_slot)
>   pci_hp_deregister(eeepc->hotplug_slot);
>  
> @@ -878,11 +905,6 @@ static int eeepc_rfkill_init(struct eeepc_laptop *eeepc)
>   eeepc_register_rfkill_notifier(eeepc, "\\_SB.PCI0.P0P5");
>   eeepc_register_rfkill_notifier(eeepc, "\\_SB.PCI0.P0P6");
>   eeepc_register_rfkill_notifier(eeepc, "\\_SB.PCI0.P0P7");
> - /*
> -  * Refresh pci hotplug in case the rfkill state was changed during
> -  * setup.
> -  */
> - eeepc_rfkill_hotplug(eeepc);
>  
>  exit:
>   if (result && result != -ENODEV)
> @@ -917,8 +939,11 @@ static int eeepc_hotk_restore(struct device *device)
>   struct eeepc_laptop *eeepc = dev_get_drvdata(device);
>  
>   /* Refresh both wlan rfkill state and pci hotplug */
> - if (eeepc->wlan_rfkill)
> - eeepc_rfkill_hotplug(eeepc);
> + if (eeepc->wlan_rfkill) {
> + eeepc_rfkill_hotplug_update(eeepc, "\\_SB.PCI0.P0P5");
> + eeepc_rfkill_hotplug_update(eeepc, "\\_SB.PCI0.P0P6");
> + eeepc_rfkill_hotplug_update(eeepc, "\\_SB.PCI0.P0P7");
> + }
>  
>   if (eeepc->bluetooth_rf

Re: eeepc: rfkill on 900A defunct

2010-11-26 Thread Woody Suwalski

Matthew Garrett wrote:

Hm. As a shorter term fix, can you try this (entirely untested!)
approach?

diff --git a/drivers/platform/x86/eeepc-laptop.c 
b/drivers/platform/x86/eeepc-laptop.c
index b2edfdc..8f817d6 100644
--- a/drivers/platform/x86/eeepc-laptop.c
+++ b/drivers/platform/x86/eeepc-laptop.c
@@ -574,8 +574,9 @@ static bool eeepc_wlan_rfkill_blocked(struct eeepc_laptop 
*eeepc)
return true;
  }

-static void eeepc_rfkill_hotplug(struct eeepc_laptop *eeepc)
+static void eeepc_rfkill_hotplug(struct eeepc_laptop *eeepc, acpi_handle 
handle)
  {
+   struct pci_dev *port;
struct pci_dev *dev;
struct pci_bus *bus;
bool blocked = eeepc_wlan_rfkill_blocked(eeepc);
@@ -588,9 +589,17 @@ static void eeepc_rfkill_hotplug(struct eeepc_laptop 
*eeepc)
mutex_lock(&eeepc->hotplug_lock);

if (eeepc->hotplug_slot) {
-   bus = pci_find_bus(0, 1);
+   port = acpi_get_pci_dev(handle);
+
+   if (!port) {
+   pr_warning("Unable to find port\n");
+   goto out_unlock;
+   }
+
+   bus = port->subordinate;
+
if (!bus) {
-   pr_warning("Unable to find PCI bus 1?\n");
+   pr_warning("Unable to find PCI bus?\n");
goto out_unlock;
}

@@ -636,6 +645,17 @@ out_unlock:
mutex_unlock(&eeepc->hotplug_lock);
  }

+static void eeepc_rfkill_hotplug_update(struct eeepc_laptop *eeepc, char *node)
+{
+   acpi_status status = AE_OK;
+   acpi_handle handle;
+
+   status = acpi_get_handle(NULL, node,&handle);
+
+   if (ACPI_SUCCESS(status))
+   eeepc_rfkill_hotplug(eeepc, handle);
+}
+
  static void eeepc_rfkill_notify(acpi_handle handle, u32 event, void *data)
  {
struct eeepc_laptop *eeepc = data;
@@ -643,7 +663,7 @@ static void eeepc_rfkill_notify(acpi_handle handle, u32 
event, void *data)
if (event != ACPI_NOTIFY_BUS_CHECK)
return;

-   eeepc_rfkill_hotplug(eeepc);
+   eeepc_rfkill_hotplug(eeepc, handle);
  }

  static int eeepc_register_rfkill_notifier(struct eeepc_laptop *eeepc,
@@ -661,6 +681,11 @@ static int eeepc_register_rfkill_notifier(struct 
eeepc_laptop *eeepc,
 eeepc);
if (ACPI_FAILURE(status))
pr_warning("Failed to register notify on %s\n", node);
+   /*
+* Refresh pci hotplug in case the rfkill state was
+* changed during setup.
+*/
+   eeepc_rfkill_hotplug(eeepc, handle);
} else
return -ENODEV;

@@ -682,6 +707,12 @@ static void eeepc_unregister_rfkill_notifier(struct 
eeepc_laptop *eeepc,
if (ACPI_FAILURE(status))
pr_err("Error removing rfkill notify handler %s\n",
node);
+   /*
+* Refresh pci hotplug in case the rfkill
+* state was changed after
+* eeepc_unregister_rfkill_notifier()
+*/
+   eeepc_rfkill_hotplug(eeepc, handle);
}
  }

@@ -805,11 +836,7 @@ static void eeepc_rfkill_exit(struct eeepc_laptop *eeepc)
rfkill_destroy(eeepc->wlan_rfkill);
eeepc->wlan_rfkill = NULL;
}
-   /*
-* Refresh pci hotplug in case the rfkill state was changed after
-* eeepc_unregister_rfkill_notifier()
-*/
-   eeepc_rfkill_hotplug(eeepc);
+
if (eeepc->hotplug_slot)
pci_hp_deregister(eeepc->hotplug_slot);

@@ -878,11 +905,6 @@ static int eeepc_rfkill_init(struct eeepc_laptop *eeepc)
eeepc_register_rfkill_notifier(eeepc, "\\_SB.PCI0.P0P5");
eeepc_register_rfkill_notifier(eeepc, "\\_SB.PCI0.P0P6");
eeepc_register_rfkill_notifier(eeepc, "\\_SB.PCI0.P0P7");
-   /*
-* Refresh pci hotplug in case the rfkill state was changed during
-* setup.
-*/
-   eeepc_rfkill_hotplug(eeepc);

  exit:
if (result&&  result != -ENODEV)
@@ -917,8 +939,11 @@ static int eeepc_hotk_restore(struct device *device)
struct eeepc_laptop *eeepc = dev_get_drvdata(device);

/* Refresh both wlan rfkill state and pci hotplug */
-   if (eeepc->wlan_rfkill)
-   eeepc_rfkill_hotplug(eeepc);
+   if (eeepc->wlan_rfkill) {
+   eeepc_rfkill_hotplug_update(eeepc, "\\_SB.PCI0.P0P5");
+   eeepc_rfkill_hotplug_update(eeepc, "\\_SB.PCI0.P0P6");
+   eeepc_rfkill_hotplug_update(eeepc, "\\_SB.PCI0.P0P7");
+   }

if (eeepc->bluetooth_rfkill)
rfkill_set_sw_state(eeepc->bluetooth_rfkill,
   
Did a quick test. The 900A seems printing the "Port not found" warning, 
but the ath5k comes down and then up OK.
Mind you, I think they are doing

Re: eeepc: rfkill on 900A defunct

2010-11-24 Thread Matthew Garrett
Hm. As a shorter term fix, can you try this (entirely untested!) 
approach?

diff --git a/drivers/platform/x86/eeepc-laptop.c 
b/drivers/platform/x86/eeepc-laptop.c
index b2edfdc..8f817d6 100644
--- a/drivers/platform/x86/eeepc-laptop.c
+++ b/drivers/platform/x86/eeepc-laptop.c
@@ -574,8 +574,9 @@ static bool eeepc_wlan_rfkill_blocked(struct eeepc_laptop 
*eeepc)
return true;
 }
 
-static void eeepc_rfkill_hotplug(struct eeepc_laptop *eeepc)
+static void eeepc_rfkill_hotplug(struct eeepc_laptop *eeepc, acpi_handle 
handle)
 {
+   struct pci_dev *port;
struct pci_dev *dev;
struct pci_bus *bus;
bool blocked = eeepc_wlan_rfkill_blocked(eeepc);
@@ -588,9 +589,17 @@ static void eeepc_rfkill_hotplug(struct eeepc_laptop 
*eeepc)
mutex_lock(&eeepc->hotplug_lock);
 
if (eeepc->hotplug_slot) {
-   bus = pci_find_bus(0, 1);
+   port = acpi_get_pci_dev(handle);
+
+   if (!port) {
+   pr_warning("Unable to find port\n");
+   goto out_unlock;
+   }
+
+   bus = port->subordinate;
+
if (!bus) {
-   pr_warning("Unable to find PCI bus 1?\n");
+   pr_warning("Unable to find PCI bus?\n");
goto out_unlock;
}
 
@@ -636,6 +645,17 @@ out_unlock:
mutex_unlock(&eeepc->hotplug_lock);
 }
 
+static void eeepc_rfkill_hotplug_update(struct eeepc_laptop *eeepc, char *node)
+{
+   acpi_status status = AE_OK;
+   acpi_handle handle;
+
+   status = acpi_get_handle(NULL, node, &handle);
+
+   if (ACPI_SUCCESS(status))
+   eeepc_rfkill_hotplug(eeepc, handle);
+}
+
 static void eeepc_rfkill_notify(acpi_handle handle, u32 event, void *data)
 {
struct eeepc_laptop *eeepc = data;
@@ -643,7 +663,7 @@ static void eeepc_rfkill_notify(acpi_handle handle, u32 
event, void *data)
if (event != ACPI_NOTIFY_BUS_CHECK)
return;
 
-   eeepc_rfkill_hotplug(eeepc);
+   eeepc_rfkill_hotplug(eeepc, handle);
 }
 
 static int eeepc_register_rfkill_notifier(struct eeepc_laptop *eeepc,
@@ -661,6 +681,11 @@ static int eeepc_register_rfkill_notifier(struct 
eeepc_laptop *eeepc,
 eeepc);
if (ACPI_FAILURE(status))
pr_warning("Failed to register notify on %s\n", node);
+   /*
+* Refresh pci hotplug in case the rfkill state was
+* changed during setup.
+*/
+   eeepc_rfkill_hotplug(eeepc, handle);
} else
return -ENODEV;
 
@@ -682,6 +707,12 @@ static void eeepc_unregister_rfkill_notifier(struct 
eeepc_laptop *eeepc,
if (ACPI_FAILURE(status))
pr_err("Error removing rfkill notify handler %s\n",
node);
+   /*
+* Refresh pci hotplug in case the rfkill
+* state was changed after
+* eeepc_unregister_rfkill_notifier()
+*/
+   eeepc_rfkill_hotplug(eeepc, handle);
}
 }
 
@@ -805,11 +836,7 @@ static void eeepc_rfkill_exit(struct eeepc_laptop *eeepc)
rfkill_destroy(eeepc->wlan_rfkill);
eeepc->wlan_rfkill = NULL;
}
-   /*
-* Refresh pci hotplug in case the rfkill state was changed after
-* eeepc_unregister_rfkill_notifier()
-*/
-   eeepc_rfkill_hotplug(eeepc);
+
if (eeepc->hotplug_slot)
pci_hp_deregister(eeepc->hotplug_slot);
 
@@ -878,11 +905,6 @@ static int eeepc_rfkill_init(struct eeepc_laptop *eeepc)
eeepc_register_rfkill_notifier(eeepc, "\\_SB.PCI0.P0P5");
eeepc_register_rfkill_notifier(eeepc, "\\_SB.PCI0.P0P6");
eeepc_register_rfkill_notifier(eeepc, "\\_SB.PCI0.P0P7");
-   /*
-* Refresh pci hotplug in case the rfkill state was changed during
-* setup.
-*/
-   eeepc_rfkill_hotplug(eeepc);
 
 exit:
if (result && result != -ENODEV)
@@ -917,8 +939,11 @@ static int eeepc_hotk_restore(struct device *device)
struct eeepc_laptop *eeepc = dev_get_drvdata(device);
 
/* Refresh both wlan rfkill state and pci hotplug */
-   if (eeepc->wlan_rfkill)
-   eeepc_rfkill_hotplug(eeepc);
+   if (eeepc->wlan_rfkill) {
+   eeepc_rfkill_hotplug_update(eeepc, "\\_SB.PCI0.P0P5");
+   eeepc_rfkill_hotplug_update(eeepc, "\\_SB.PCI0.P0P6");
+   eeepc_rfkill_hotplug_update(eeepc, "\\_SB.PCI0.P0P7");
+   }
 
if (eeepc->bluetooth_rfkill)
rfkill_set_sw_state(eeepc->bluetooth_rfkill,
-- 
Matthew Garrett | [email protected]
--
To unsubscribe from this list: send the line "unsubscribe platform-driver-x86" 
in
the body of a message to [email protected]

Re: eeepc: rfkill on 900A defunct

2010-11-24 Thread Matthew Garrett
On Wed, Nov 24, 2010 at 03:53:35PM +0100, Jiri Slaby wrote:

> but without hotplug support (pciehp cannot be bound to it). However the
> eeepc-laptop driver expects the wifi on the 1st bus (pci_find_bus(0,
> 1)), so it operates on a NIC on this machine instead of wifi.

Yeah, this really needs to be fixed. We need to shift this code out of 
eeepc-laptop and just have the PCI core handle it - that is, if we get a 
hotplug notification, we need to rescan the slot even if we don't have a 
hotplug driver bound to it. Let me look into that.

-- 
Matthew Garrett | [email protected]
--
To unsubscribe from this list: send the line "unsubscribe platform-driver-x86" 
in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html