Commit 08e31686 authored by Len Brown's avatar Len Brown

Pull thinkpad into release branch

parents d6da5ce8 f432255e
This diff is collapsed.
...@@ -150,6 +150,7 @@ config THINKPAD_ACPI ...@@ -150,6 +150,7 @@ config THINKPAD_ACPI
depends on X86 && ACPI depends on X86 && ACPI
select BACKLIGHT_CLASS_DEVICE select BACKLIGHT_CLASS_DEVICE
select HWMON select HWMON
select NVRAM
---help--- ---help---
This is a driver for the IBM and Lenovo ThinkPad laptops. It adds This is a driver for the IBM and Lenovo ThinkPad laptops. It adds
support for Fn-Fx key combinations, Bluetooth control, video support for Fn-Fx key combinations, Bluetooth control, video
...@@ -196,4 +197,17 @@ config THINKPAD_ACPI_BAY ...@@ -196,4 +197,17 @@ config THINKPAD_ACPI_BAY
If you are not sure, say Y here. If you are not sure, say Y here.
config THINKPAD_ACPI_INPUT_ENABLED
bool "Enable input layer support by default"
depends on THINKPAD_ACPI
default y
---help---
Enables hot key handling over the input layer by default. If unset,
the driver does not enable any hot key handling by default, and also
starts up with a mostly empty keymap.
If you are not sure, say Y here. Say N to retain the deprecated
behavior of ibm-acpi, and thinkpad-acpi for kernels up to 2.6.21.
endif # MISC_DEVICES endif # MISC_DEVICES
This diff is collapsed.
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include <linux/list.h> #include <linux/list.h>
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/nvram.h>
#include <linux/proc_fs.h> #include <linux/proc_fs.h>
#include <linux/sysfs.h> #include <linux/sysfs.h>
#include <linux/backlight.h> #include <linux/backlight.h>
...@@ -39,6 +40,7 @@ ...@@ -39,6 +40,7 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/hwmon.h> #include <linux/hwmon.h>
#include <linux/hwmon-sysfs.h> #include <linux/hwmon-sysfs.h>
#include <linux/input.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <linux/dmi.h> #include <linux/dmi.h>
...@@ -48,6 +50,7 @@ ...@@ -48,6 +50,7 @@
#include <acpi/acpi_drivers.h> #include <acpi/acpi_drivers.h>
#include <acpi/acnamesp.h> #include <acpi/acnamesp.h>
#include <linux/pci_ids.h>
/**************************************************************************** /****************************************************************************
* Main driver * Main driver
...@@ -78,6 +81,11 @@ ...@@ -78,6 +81,11 @@
#define TP_CMOS_BRIGHTNESS_UP 4 #define TP_CMOS_BRIGHTNESS_UP 4
#define TP_CMOS_BRIGHTNESS_DOWN 5 #define TP_CMOS_BRIGHTNESS_DOWN 5
/* ThinkPad CMOS NVRAM constants */
#define TP_NVRAM_ADDR_BRIGHTNESS 0x5e
#define TP_NVRAM_MASK_LEVEL_BRIGHTNESS 0x07
#define TP_NVRAM_POS_LEVEL_BRIGHTNESS 0
#define onoff(status,bit) ((status) & (1 << (bit)) ? "on" : "off") #define onoff(status,bit) ((status) & (1 << (bit)) ? "on" : "off")
#define enabled(status,bit) ((status) & (1 << (bit)) ? "enabled" : "disabled") #define enabled(status,bit) ((status) & (1 << (bit)) ? "enabled" : "disabled")
#define strlencmp(a,b) (strncmp((a), (b), strlen(b))) #define strlencmp(a,b) (strncmp((a), (b), strlen(b)))
...@@ -98,9 +106,13 @@ static const char *str_supported(int is_supported); ...@@ -98,9 +106,13 @@ static const char *str_supported(int is_supported);
#define vdbg_printk(a_dbg_level, format, arg...) #define vdbg_printk(a_dbg_level, format, arg...)
#endif #endif
/* Input IDs */
#define TPACPI_HKEY_INPUT_VENDOR PCI_VENDOR_ID_IBM
#define TPACPI_HKEY_INPUT_PRODUCT 0x5054 /* "TP" */
#define TPACPI_HKEY_INPUT_VERSION 0x4101
/* ACPI HIDs */ /* ACPI HIDs */
#define IBM_HKEY_HID "IBM0068" #define IBM_HKEY_HID "IBM0068"
#define IBM_PCI_HID "PNP0A03"
/* ACPI helpers */ /* ACPI helpers */
static int __must_check acpi_evalf(acpi_handle handle, static int __must_check acpi_evalf(acpi_handle handle,
...@@ -161,6 +173,7 @@ static int parse_strtoul(const char *buf, unsigned long max, ...@@ -161,6 +173,7 @@ static int parse_strtoul(const char *buf, unsigned long max,
static struct platform_device *tpacpi_pdev; static struct platform_device *tpacpi_pdev;
static struct class_device *tpacpi_hwmon; static struct class_device *tpacpi_hwmon;
static struct platform_driver tpacpi_pdriver; static struct platform_driver tpacpi_pdriver;
static struct input_dev *tpacpi_inputdev;
static int tpacpi_create_driver_attributes(struct device_driver *drv); static int tpacpi_create_driver_attributes(struct device_driver *drv);
static void tpacpi_remove_driver_attributes(struct device_driver *drv); static void tpacpi_remove_driver_attributes(struct device_driver *drv);
...@@ -168,9 +181,7 @@ static void tpacpi_remove_driver_attributes(struct device_driver *drv); ...@@ -168,9 +181,7 @@ static void tpacpi_remove_driver_attributes(struct device_driver *drv);
static int experimental; static int experimental;
static u32 dbg_level; static u32 dbg_level;
static int force_load; static int force_load;
static char *ibm_thinkpad_ec_found;
static char* check_dmi_for_ec(void);
static int thinkpad_acpi_module_init(void); static int thinkpad_acpi_module_init(void);
static void thinkpad_acpi_module_exit(void); static void thinkpad_acpi_module_exit(void);
...@@ -197,6 +208,7 @@ struct ibm_struct { ...@@ -197,6 +208,7 @@ struct ibm_struct {
int (*read) (char *); int (*read) (char *);
int (*write) (char *); int (*write) (char *);
void (*exit) (void); void (*exit) (void);
void (*resume) (void);
struct list_head all_drivers; struct list_head all_drivers;
...@@ -228,12 +240,29 @@ static struct { ...@@ -228,12 +240,29 @@ static struct {
u16 bluetooth:1; u16 bluetooth:1;
u16 hotkey:1; u16 hotkey:1;
u16 hotkey_mask:1; u16 hotkey_mask:1;
u16 hotkey_wlsw:1;
u16 light:1; u16 light:1;
u16 light_status:1; u16 light_status:1;
u16 wan:1; u16 wan:1;
u16 fan_ctrl_status_undef:1; u16 fan_ctrl_status_undef:1;
u16 input_device_registered:1;
} tp_features; } tp_features;
struct thinkpad_id_data {
unsigned int vendor; /* ThinkPad vendor:
* PCI_VENDOR_ID_IBM/PCI_VENDOR_ID_LENOVO */
char *bios_version_str; /* Something like 1ZET51WW (1.03z) */
char *ec_version_str; /* Something like 1ZHT51WW-1.04a */
u16 bios_model; /* Big Endian, TP-1Y = 0x5931, 0 = unknown */
u16 ec_model;
char *model_str;
};
static struct thinkpad_id_data thinkpad_id;
static struct list_head tpacpi_all_drivers; static struct list_head tpacpi_all_drivers;
static struct ibm_init_struct ibms_init[]; static struct ibm_init_struct ibms_init[];
...@@ -300,6 +329,7 @@ static int bluetooth_write(char *buf); ...@@ -300,6 +329,7 @@ static int bluetooth_write(char *buf);
static struct backlight_device *ibm_backlight_device; static struct backlight_device *ibm_backlight_device;
static int brightness_offset = 0x31; static int brightness_offset = 0x31;
static int brightness_mode;
static int brightness_init(struct ibm_init_struct *iibm); static int brightness_init(struct ibm_init_struct *iibm);
static void brightness_exit(void); static void brightness_exit(void);
...@@ -415,14 +445,14 @@ static int fan_write_cmd_watchdog(const char *cmd, int *rc); ...@@ -415,14 +445,14 @@ static int fan_write_cmd_watchdog(const char *cmd, int *rc);
*/ */
static int hotkey_orig_status; static int hotkey_orig_status;
static int hotkey_orig_mask; static u32 hotkey_orig_mask;
static struct mutex hotkey_mutex; static struct mutex hotkey_mutex;
static int hotkey_init(struct ibm_init_struct *iibm); static int hotkey_init(struct ibm_init_struct *iibm);
static void hotkey_exit(void); static void hotkey_exit(void);
static int hotkey_get(int *status, int *mask); static int hotkey_get(int *status, u32 *mask);
static int hotkey_set(int status, int mask); static int hotkey_set(int status, u32 mask);
static void hotkey_notify(struct ibm_struct *ibm, u32 event); static void hotkey_notify(struct ibm_struct *ibm, u32 event);
static int hotkey_read(char *p); static int hotkey_read(char *p);
static int hotkey_write(char *buf); static int hotkey_write(char *buf);
......
...@@ -2040,6 +2040,8 @@ ...@@ -2040,6 +2040,8 @@
#define PCI_DEVICE_ID_ALTIMA_AC9100 0x03ea #define PCI_DEVICE_ID_ALTIMA_AC9100 0x03ea
#define PCI_DEVICE_ID_ALTIMA_AC1003 0x03eb #define PCI_DEVICE_ID_ALTIMA_AC1003 0x03eb
#define PCI_VENDOR_ID_LENOVO 0x17aa
#define PCI_VENDOR_ID_ARECA 0x17d3 #define PCI_VENDOR_ID_ARECA 0x17d3
#define PCI_DEVICE_ID_ARECA_1110 0x1110 #define PCI_DEVICE_ID_ARECA_1110 0x1110
#define PCI_DEVICE_ID_ARECA_1120 0x1120 #define PCI_DEVICE_ID_ARECA_1120 0x1120
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment