Re: [PATCH 4/4] Detect the WiFi/Bluetooth/3G devices available

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Carlos, 

æ æï2010-11-07 æ 21:54 -0700ïJoey Lee æåï
> Hi Jean, 
> 
> On æ, 2010-10-31 at 00:36 +0800, Lee, Chun-Yi wrote:
> >  static acpi_status WMID_set_capabilities(void)
> >  {
> >  	struct acpi_buffer out = {ACPI_ALLOCATE_BUFFER, NULL};
> > @@ -844,16 +869,24 @@ static acpi_status WMID_set_capabilities(void)
> >  		return AE_ERROR;
> >  	}
> >  
> > -	/* Not sure on the meaning of the relevant bits yet to detect these */
> > -	interface->capability |= ACER_CAP_WIRELESS;
> > -	interface->capability |= ACER_CAP_THREEG;
> > +	dmi_walk(type_aa_dmi_decode, NULL);
> > +	if (type_aa) {
> > +		if (type_aa->commun_func_bitmap & ACER_WMID3_GDS_WIRELESS)
> > +			interface->capability |= ACER_CAP_WIRELESS;
> > +		if (type_aa->commun_func_bitmap & ACER_WMID3_GDS_THREEG)
> > +			interface->capability |= ACER_CAP_THREEG;
> > +		if (type_aa->commun_func_bitmap & ACER_WMID3_GDS_BLUETOOTH)
> > +			interface->capability |= ACER_CAP_BLUETOOTH;
> > +	} else {
> > +		interface->capability |= ACER_CAP_WIRELESS;
> > +		interface->capability |= ACER_CAP_THREEG;
> > +		if (devices & 0x10)
> > +			interface->capability |= ACER_CAP_BLUETOOTH;
> > +	}
> >  
> 
> Thank's for your review and found out cann't use a global pointer to a
> DMI record to keep track of what dmi_walk() found. I modified the patch
> like following:
> 
> 
> >From c8f99f9856bc79aa8f525595e5ff115f3d6c3c69 Mon Sep 17 00:00:00 2001
> From: Lee, Chun-Yi <jlee@xxxxxxxxxx>
> Date: Mon, 8 Nov 2010 16:40:55 +0800
> Subject: [PATCH 4/4] Detect the WiFi/Bluetooth/3G devices available
> 
> Check the Acer OEM-specific Type AA to detect the WiFi/Bluetooth/3G
> devices available or not, and set the devices capability flag.
> 
> Signed-off-by: Lee, Chun-Yi <jlee@xxxxxxxxxx>
> Reviewed-by: Jean Delvare <jdelvare@xxxxxxx>
> ---
>  drivers/platform/x86/acer-wmi.c |   49 +++++++++++++++++++++++++++++++++-----
>  1 files changed, 42 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
> index 6ac4656..dc23140 100644
> --- a/drivers/platform/x86/acer-wmi.c
> +++ b/drivers/platform/x86/acer-wmi.c
> @@ -39,6 +39,7 @@
>  #include <linux/slab.h>
>  #include <linux/input.h>
>  #include <linux/input/sparse-keymap.h>
> +#include <linux/dmi.h>
>  
>  #include <acpi/acpi_drivers.h>
>  
> @@ -138,7 +139,9 @@ struct lm_return_value {
>  /*
>   * GUID3 Get Device Status device flags
>   */
> +#define ACER_WMID3_GDS_WIRELESS		(1<<0)	/* WiFi */
>  #define ACER_WMID3_GDS_THREEG		(1<<6)	/* 3G */
> +#define ACER_WMID3_GDS_BLUETOOTH	(1<<11)	/* BT */
>  
>  struct wmid3_gds_input_param {	/* Get Device Status input parameter */
>  	u8 function_num;	/* Function Number */
> @@ -153,6 +156,13 @@ struct wmid3_gds_return_value {	/* Get Device Status return value*/
>  	u32 reserved;
>  } __attribute__((packed));
>  
> +struct hotkey_function_type_aa {
> +	u8 type;
> +	u8 length;
> +	u16 handle;
> +	u16 commun_func_bitmap;
> +} __attribute__((packed));
> +
>  /*
>   * Interface capability flags
>   */
> @@ -184,6 +194,7 @@ static int brightness = -1;
>  static int threeg = -1;
>  static int force_series;
>  static bool ec_raw_mode;
> +static bool has_type_aa;
>  
>  module_param(mailled, int, 0444);
>  module_param(brightness, int, 0444);
> @@ -824,6 +835,28 @@ static acpi_status WMID_set_u32(u32 value, u32 cap, struct wmi_interface *iface)
>  	return WMI_execute_u32(method_id, (u32)value, NULL);
>  }
>  
> +static void type_aa_dmi_decode(const struct dmi_header *header, void *dummy)
> +{
> +	struct hotkey_function_type_aa *type_aa;
> +
> +	/* We are looking for OEM-specific Type AAh */
> +	if (header->type != 0xAA)
> +		return;
> +
> +	has_type_aa = true;
> +	type_aa = (struct hotkey_function_type_aa *) header;
> +
> +	printk(ACER_INFO "Function bitmap for Communication Button: 0x%x\n",
> +		type_aa->commun_func_bitmap);
> +
> +	if (type_aa->commun_func_bitmap & ACER_WMID3_GDS_WIRELESS)
> +		interface->capability |= ACER_CAP_WIRELESS;
> +	if (type_aa->commun_func_bitmap & ACER_WMID3_GDS_THREEG)
> +		interface->capability |= ACER_CAP_THREEG;
> +	if (type_aa->commun_func_bitmap & ACER_WMID3_GDS_BLUETOOTH)
> +		interface->capability |= ACER_CAP_BLUETOOTH;
> +}
> +
>  static acpi_status WMID_set_capabilities(void)
>  {
>  	struct acpi_buffer out = {ACPI_ALLOCATE_BUFFER, NULL};
> @@ -844,16 +877,17 @@ static acpi_status WMID_set_capabilities(void)
>  		return AE_ERROR;
>  	}
>  
> -	/* Not sure on the meaning of the relevant bits yet to detect these */
> -	interface->capability |= ACER_CAP_WIRELESS;
> -	interface->capability |= ACER_CAP_THREEG;
> +	dmi_walk(type_aa_dmi_decode, NULL);
> +	if (!has_type_aa) {
> +		interface->capability |= ACER_CAP_WIRELESS;
> +		interface->capability |= ACER_CAP_THREEG;
> +		if (devices & 0x10)
> +			interface->capability |= ACER_CAP_BLUETOOTH;
> +	}
>  
>  	/* WMID always provides brightness methods */
>  	interface->capability |= ACER_CAP_BRIGHTNESS;
>  
> -	if (devices & 0x10)
> -		interface->capability |= ACER_CAP_BLUETOOTH;
> -
>  	if (!(devices & 0x20))
>  		max_brightness = 0x9;
>  
> @@ -932,7 +966,8 @@ static void __init acer_commandline_init(void)
>  	 * capability isn't available on the given interface
>  	 */
>  	set_u32(mailled, ACER_CAP_MAILLED);
> -	set_u32(threeg, ACER_CAP_THREEG);
> +	if (!has_type_aa)
> +		set_u32(threeg, ACER_CAP_THREEG);
>  	set_u32(brightness, ACER_CAP_BRIGHTNESS);
>  }
>  

Could you please give me any suggestion for the acer-wmi patches 1/4 -
4/4?
Does those patches good enough for you to merge to mainline?


Thank's a lot!
Joey Lee

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux