提交 8819de7f 编写于 作者: A Andy Ross 提交者: Matthew Garrett

asus-laptop: Platform detection for Pegatron Lucid

Recognize the Pegatron Lucid tablets by their method signatures.
Signed-off-by: NAndy Ross <andy.ross@windriver.com>
Signed-off-by: NCorentin Chary <corentin.chary@gmail.com>
Signed-off-by: NMatthew Garrett <mjg@redhat.com>
上级 ba05b237
...@@ -64,15 +64,17 @@ config ASUS_LAPTOP ...@@ -64,15 +64,17 @@ config ASUS_LAPTOP
depends on INPUT depends on INPUT
depends on RFKILL || RFKILL = n depends on RFKILL || RFKILL = n
select INPUT_SPARSEKMAP select INPUT_SPARSEKMAP
select INPUT_POLLDEV
---help--- ---help---
This is the new Linux driver for Asus laptops. It may also support some This is a driver for Asus laptops, Lenovo SL and the Pegatron
MEDION, JVC or VICTOR laptops. It makes all the extra buttons generate Lucid tablet. It may also support some MEDION, JVC or VICTOR
standard ACPI events and input events. It also adds laptops. It makes all the extra buttons generate standard
support for video output switching, LCD backlight control, Bluetooth and ACPI events and input events. It also adds support for video
Wlan control, and most importantly, allows you to blink those fancy LEDs. output switching, LCD backlight control, Bluetooth and Wlan
control, and most importantly, allows you to blink those
fancy LEDs.
For more information and a userspace daemon for handling the extra For more information see <http://acpi4asus.sf.net>.
buttons see <http://acpi4asus.sf.net>.
If you have an ACPI-compatible ASUS laptop, say Y or M here. If you have an ACPI-compatible ASUS laptop, say Y or M here.
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
* *
* Copyright (C) 2002-2005 Julien Lerouge, 2003-2006 Karol Kozimor * Copyright (C) 2002-2005 Julien Lerouge, 2003-2006 Karol Kozimor
* Copyright (C) 2006-2007 Corentin Chary * Copyright (C) 2006-2007 Corentin Chary
* Copyright (C) 2011 Wind River Systems
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
...@@ -48,6 +49,7 @@ ...@@ -48,6 +49,7 @@
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include <linux/input.h> #include <linux/input.h>
#include <linux/input/sparse-keymap.h> #include <linux/input/sparse-keymap.h>
#include <linux/input-polldev.h>
#include <linux/rfkill.h> #include <linux/rfkill.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/dmi.h> #include <linux/dmi.h>
...@@ -173,6 +175,12 @@ MODULE_PARM_DESC(wwan_status, "Set the wireless status on boot " ...@@ -173,6 +175,12 @@ MODULE_PARM_DESC(wwan_status, "Set the wireless status on boot "
#define METHOD_KBD_LIGHT_SET "SLKB" #define METHOD_KBD_LIGHT_SET "SLKB"
#define METHOD_KBD_LIGHT_GET "GLKB" #define METHOD_KBD_LIGHT_GET "GLKB"
/* For Pegatron Lucid tablet */
#define DEVICE_NAME_PEGA "Lucid"
#define METHOD_PEGA_ENABLE "ENPR"
#define METHOD_PEGA_DISABLE "DAPR"
#define METHOD_PEGA_READ "RDLN"
/* /*
* Define a specific led structure to keep the main structure clean * Define a specific led structure to keep the main structure clean
*/ */
...@@ -209,6 +217,7 @@ struct asus_laptop { ...@@ -209,6 +217,7 @@ struct asus_laptop {
int wireless_status; int wireless_status;
bool have_rsts; bool have_rsts;
bool is_pega_lucid;
struct rfkill *gps_rfkill; struct rfkill *gps_rfkill;
...@@ -323,6 +332,14 @@ static int acpi_check_handle(acpi_handle handle, const char *method, ...@@ -323,6 +332,14 @@ static int acpi_check_handle(acpi_handle handle, const char *method,
return 0; return 0;
} }
static bool asus_check_pega_lucid(struct asus_laptop *asus)
{
return !strcmp(asus->name, DEVICE_NAME_PEGA) &&
!acpi_check_handle(asus->handle, METHOD_PEGA_ENABLE, NULL) &&
!acpi_check_handle(asus->handle, METHOD_PEGA_DISABLE, NULL) &&
!acpi_check_handle(asus->handle, METHOD_PEGA_READ, NULL);
}
/* Generic LED function */ /* Generic LED function */
static int asus_led_set(struct asus_laptop *asus, const char *method, static int asus_led_set(struct asus_laptop *asus, const char *method,
int value) int value)
...@@ -1203,7 +1220,6 @@ static mode_t asus_sysfs_is_visible(struct kobject *kobj, ...@@ -1203,7 +1220,6 @@ static mode_t asus_sysfs_is_visible(struct kobject *kobj,
attr == &dev_attr_ls_level.attr) { attr == &dev_attr_ls_level.attr) {
supported = !acpi_check_handle(handle, METHOD_ALS_CONTROL, NULL) && supported = !acpi_check_handle(handle, METHOD_ALS_CONTROL, NULL) &&
!acpi_check_handle(handle, METHOD_ALS_LEVEL, NULL); !acpi_check_handle(handle, METHOD_ALS_LEVEL, NULL);
} else if (attr == &dev_attr_gps.attr) { } else if (attr == &dev_attr_gps.attr) {
supported = !acpi_check_handle(handle, METHOD_GPS_ON, NULL) && supported = !acpi_check_handle(handle, METHOD_GPS_ON, NULL) &&
!acpi_check_handle(handle, METHOD_GPS_OFF, NULL) && !acpi_check_handle(handle, METHOD_GPS_OFF, NULL) &&
...@@ -1439,9 +1455,10 @@ static int __devinit asus_acpi_add(struct acpi_device *device) ...@@ -1439,9 +1455,10 @@ static int __devinit asus_acpi_add(struct acpi_device *device)
goto fail_platform; goto fail_platform;
/* /*
* Register the platform device first. It is used as a parent for the * Need platform type detection first, then the platform
* sub-devices below. * device. It is used as a parent for the sub-devices below.
*/ */
asus->is_pega_lucid = asus_check_pega_lucid(asus);
result = asus_platform_init(asus); result = asus_platform_init(asus);
if (result) if (result)
goto fail_platform; goto fail_platform;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册