Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: drivers/scsi/fcoe/fcoe.c
This commit is contained in:
@@ -269,16 +269,16 @@ static struct key_entry asus_keymap[] = {
|
||||
{KE_KEY, 0x34, KEY_SWITCHVIDEOMODE},
|
||||
{KE_KEY, 0x40, KEY_PREVIOUSSONG},
|
||||
{KE_KEY, 0x41, KEY_NEXTSONG},
|
||||
{KE_KEY, 0x43, KEY_STOP},
|
||||
{KE_KEY, 0x43, KEY_STOPCD},
|
||||
{KE_KEY, 0x45, KEY_PLAYPAUSE},
|
||||
{KE_KEY, 0x50, KEY_EMAIL},
|
||||
{KE_KEY, 0x51, KEY_WWW},
|
||||
{KE_KEY, 0x5C, BTN_EXTRA}, /* Performance */
|
||||
{KE_KEY, 0x5C, KEY_SCREENLOCK}, /* Screenlock */
|
||||
{KE_KEY, 0x5D, KEY_WLAN},
|
||||
{KE_KEY, 0x61, KEY_SWITCHVIDEOMODE},
|
||||
{KE_KEY, 0x6B, BTN_TOUCH}, /* Lock Mouse */
|
||||
{KE_KEY, 0x82, KEY_CAMERA},
|
||||
{KE_KEY, 0x8A, KEY_TV},
|
||||
{KE_KEY, 0x8A, KEY_PROG1},
|
||||
{KE_KEY, 0x95, KEY_MEDIA},
|
||||
{KE_KEY, 0x99, KEY_PHONE},
|
||||
{KE_END, 0},
|
||||
|
@@ -158,6 +158,7 @@ enum { KE_KEY, KE_END };
|
||||
static struct key_entry eeepc_keymap[] = {
|
||||
/* Sleep already handled via generic ACPI code */
|
||||
{KE_KEY, 0x10, KEY_WLAN },
|
||||
{KE_KEY, 0x11, KEY_WLAN },
|
||||
{KE_KEY, 0x12, KEY_PROG1 },
|
||||
{KE_KEY, 0x13, KEY_MUTE },
|
||||
{KE_KEY, 0x14, KEY_VOLUMEDOWN },
|
||||
@@ -166,6 +167,8 @@ static struct key_entry eeepc_keymap[] = {
|
||||
{KE_KEY, 0x1b, KEY_ZOOM },
|
||||
{KE_KEY, 0x1c, KEY_PROG2 },
|
||||
{KE_KEY, 0x1d, KEY_PROG3 },
|
||||
{KE_KEY, NOTIFY_BRN_MIN, KEY_BRIGHTNESSDOWN },
|
||||
{KE_KEY, NOTIFY_BRN_MIN + 2, KEY_BRIGHTNESSUP },
|
||||
{KE_KEY, 0x30, KEY_SWITCHVIDEOMODE },
|
||||
{KE_KEY, 0x31, KEY_SWITCHVIDEOMODE },
|
||||
{KE_KEY, 0x32, KEY_SWITCHVIDEOMODE },
|
||||
@@ -381,11 +384,13 @@ static ssize_t show_sys_acpi(int cm, char *buf)
|
||||
EEEPC_CREATE_DEVICE_ATTR(camera, CM_ASL_CAMERA);
|
||||
EEEPC_CREATE_DEVICE_ATTR(cardr, CM_ASL_CARDREADER);
|
||||
EEEPC_CREATE_DEVICE_ATTR(disp, CM_ASL_DISPLAYSWITCH);
|
||||
EEEPC_CREATE_DEVICE_ATTR(cpufv, CM_ASL_CPUFV);
|
||||
|
||||
static struct attribute *platform_attributes[] = {
|
||||
&dev_attr_camera.attr,
|
||||
&dev_attr_cardr.attr,
|
||||
&dev_attr_disp.attr,
|
||||
&dev_attr_cpufv.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
@@ -512,15 +517,21 @@ static int eeepc_hotk_check(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void notify_brn(void)
|
||||
static int notify_brn(void)
|
||||
{
|
||||
/* returns the *previous* brightness, or -1 */
|
||||
struct backlight_device *bd = eeepc_backlight_device;
|
||||
if (bd)
|
||||
if (bd) {
|
||||
int old = bd->props.brightness;
|
||||
bd->props.brightness = read_brightness(bd);
|
||||
return old;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void eeepc_rfkill_notify(acpi_handle handle, u32 event, void *data)
|
||||
{
|
||||
enum rfkill_state state;
|
||||
struct pci_dev *dev;
|
||||
struct pci_bus *bus = pci_find_bus(0, 1);
|
||||
|
||||
@@ -532,7 +543,9 @@ static void eeepc_rfkill_notify(acpi_handle handle, u32 event, void *data)
|
||||
return;
|
||||
}
|
||||
|
||||
if (get_acpi(CM_ASL_WLAN) == 1) {
|
||||
eeepc_wlan_rfkill_state(ehotk->eeepc_wlan_rfkill, &state);
|
||||
|
||||
if (state == RFKILL_STATE_UNBLOCKED) {
|
||||
dev = pci_get_slot(bus, 0);
|
||||
if (dev) {
|
||||
/* Device already present */
|
||||
@@ -552,23 +565,41 @@ static void eeepc_rfkill_notify(acpi_handle handle, u32 event, void *data)
|
||||
pci_dev_put(dev);
|
||||
}
|
||||
}
|
||||
|
||||
rfkill_force_state(ehotk->eeepc_wlan_rfkill, state);
|
||||
}
|
||||
|
||||
static void eeepc_hotk_notify(acpi_handle handle, u32 event, void *data)
|
||||
{
|
||||
static struct key_entry *key;
|
||||
u16 count;
|
||||
int brn = -ENODEV;
|
||||
|
||||
if (!ehotk)
|
||||
return;
|
||||
if (event >= NOTIFY_BRN_MIN && event <= NOTIFY_BRN_MAX)
|
||||
notify_brn();
|
||||
brn = notify_brn();
|
||||
count = ehotk->event_count[event % 128]++;
|
||||
acpi_bus_generate_proc_event(ehotk->device, event, count);
|
||||
acpi_bus_generate_netlink_event(ehotk->device->pnp.device_class,
|
||||
dev_name(&ehotk->device->dev), event,
|
||||
count);
|
||||
if (ehotk->inputdev) {
|
||||
if (brn != -ENODEV) {
|
||||
/* brightness-change events need special
|
||||
* handling for conversion to key events
|
||||
*/
|
||||
if (brn < 0)
|
||||
brn = event;
|
||||
else
|
||||
brn += NOTIFY_BRN_MIN;
|
||||
if (event < brn)
|
||||
event = NOTIFY_BRN_MIN; /* brightness down */
|
||||
else if (event > brn)
|
||||
event = NOTIFY_BRN_MIN + 2; /* ... up */
|
||||
else
|
||||
event = NOTIFY_BRN_MIN + 1; /* ... unchanged */
|
||||
}
|
||||
key = eepc_get_entry_by_scancode(event);
|
||||
if (key) {
|
||||
switch (key->type) {
|
||||
@@ -649,6 +680,9 @@ static int eeepc_hotk_add(struct acpi_device *device)
|
||||
if (ACPI_FAILURE(status))
|
||||
printk(EEEPC_ERR "Error installing notify handler\n");
|
||||
|
||||
eeepc_register_rfkill_notifier("\\_SB.PCI0.P0P6");
|
||||
eeepc_register_rfkill_notifier("\\_SB.PCI0.P0P7");
|
||||
|
||||
if (get_acpi(CM_ASL_WLAN) != -1) {
|
||||
ehotk->eeepc_wlan_rfkill = rfkill_allocate(&device->dev,
|
||||
RFKILL_TYPE_WLAN);
|
||||
@@ -704,9 +738,6 @@ static int eeepc_hotk_add(struct acpi_device *device)
|
||||
goto bluetooth_fail;
|
||||
}
|
||||
|
||||
eeepc_register_rfkill_notifier("\\_SB.PCI0.P0P6");
|
||||
eeepc_register_rfkill_notifier("\\_SB.PCI0.P0P7");
|
||||
|
||||
return 0;
|
||||
|
||||
bluetooth_fail:
|
||||
@@ -717,6 +748,8 @@ static int eeepc_hotk_add(struct acpi_device *device)
|
||||
wlan_fail:
|
||||
if (ehotk->eeepc_wlan_rfkill)
|
||||
rfkill_free(ehotk->eeepc_wlan_rfkill);
|
||||
eeepc_unregister_rfkill_notifier("\\_SB.PCI0.P0P6");
|
||||
eeepc_unregister_rfkill_notifier("\\_SB.PCI0.P0P7");
|
||||
ehotk_fail:
|
||||
kfree(ehotk);
|
||||
ehotk = NULL;
|
||||
|
@@ -317,7 +317,8 @@ static void sony_laptop_report_input_event(u8 event)
|
||||
struct input_dev *key_dev = sony_laptop_input.key_dev;
|
||||
struct sony_laptop_keypress kp = { NULL };
|
||||
|
||||
if (event == SONYPI_EVENT_FNKEY_RELEASED) {
|
||||
if (event == SONYPI_EVENT_FNKEY_RELEASED ||
|
||||
event == SONYPI_EVENT_ANYBUTTON_RELEASED) {
|
||||
/* Nothing, not all VAIOs generate this event */
|
||||
return;
|
||||
}
|
||||
@@ -905,7 +906,6 @@ static struct sony_nc_event sony_127_events[] = {
|
||||
{ 0x05, SONYPI_EVENT_ANYBUTTON_RELEASED },
|
||||
{ 0x86, SONYPI_EVENT_PKEY_P5 },
|
||||
{ 0x06, SONYPI_EVENT_ANYBUTTON_RELEASED },
|
||||
{ 0x06, SONYPI_EVENT_ANYBUTTON_RELEASED },
|
||||
{ 0x87, SONYPI_EVENT_SETTINGKEY_PRESSED },
|
||||
{ 0x07, SONYPI_EVENT_ANYBUTTON_RELEASED },
|
||||
{ 0, 0 },
|
||||
@@ -1004,6 +1004,7 @@ static int sony_nc_function_setup(struct acpi_device *device)
|
||||
sony_call_snc_handle(0x0100, 0, &result);
|
||||
sony_call_snc_handle(0x0101, 0, &result);
|
||||
sony_call_snc_handle(0x0102, 0x100, &result);
|
||||
sony_call_snc_handle(0x0127, 0, &result);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1040,7 +1041,7 @@ static int sony_nc_resume(struct acpi_device *device)
|
||||
|
||||
/* set the last requested brightness level */
|
||||
if (sony_backlight_device &&
|
||||
!sony_backlight_update_status(sony_backlight_device))
|
||||
sony_backlight_update_status(sony_backlight_device) < 0)
|
||||
printk(KERN_WARNING DRV_PFX "unable to restore brightness level\n");
|
||||
|
||||
return 0;
|
||||
@@ -1101,8 +1102,11 @@ static int sony_nc_setup_wifi_rfkill(struct acpi_device *device)
|
||||
err = rfkill_register(sony_wifi_rfkill);
|
||||
if (err)
|
||||
rfkill_free(sony_wifi_rfkill);
|
||||
else
|
||||
else {
|
||||
sony_rfkill_devices[SONY_WIFI] = sony_wifi_rfkill;
|
||||
sony_nc_rfkill_set(sony_wifi_rfkill->data,
|
||||
RFKILL_STATE_UNBLOCKED);
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -1122,8 +1126,11 @@ static int sony_nc_setup_bluetooth_rfkill(struct acpi_device *device)
|
||||
err = rfkill_register(sony_bluetooth_rfkill);
|
||||
if (err)
|
||||
rfkill_free(sony_bluetooth_rfkill);
|
||||
else
|
||||
else {
|
||||
sony_rfkill_devices[SONY_BLUETOOTH] = sony_bluetooth_rfkill;
|
||||
sony_nc_rfkill_set(sony_bluetooth_rfkill->data,
|
||||
RFKILL_STATE_UNBLOCKED);
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -1142,8 +1149,11 @@ static int sony_nc_setup_wwan_rfkill(struct acpi_device *device)
|
||||
err = rfkill_register(sony_wwan_rfkill);
|
||||
if (err)
|
||||
rfkill_free(sony_wwan_rfkill);
|
||||
else
|
||||
else {
|
||||
sony_rfkill_devices[SONY_WWAN] = sony_wwan_rfkill;
|
||||
sony_nc_rfkill_set(sony_wwan_rfkill->data,
|
||||
RFKILL_STATE_UNBLOCKED);
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -1162,8 +1172,11 @@ static int sony_nc_setup_wimax_rfkill(struct acpi_device *device)
|
||||
err = rfkill_register(sony_wimax_rfkill);
|
||||
if (err)
|
||||
rfkill_free(sony_wimax_rfkill);
|
||||
else
|
||||
else {
|
||||
sony_rfkill_devices[SONY_WIMAX] = sony_wimax_rfkill;
|
||||
sony_nc_rfkill_set(sony_wimax_rfkill->data,
|
||||
RFKILL_STATE_UNBLOCKED);
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@@ -21,7 +21,7 @@
|
||||
* 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#define TPACPI_VERSION "0.22"
|
||||
#define TPACPI_VERSION "0.23"
|
||||
#define TPACPI_SYSFS_VERSION 0x020300
|
||||
|
||||
/*
|
||||
@@ -303,11 +303,17 @@ static u32 dbg_level;
|
||||
|
||||
static struct workqueue_struct *tpacpi_wq;
|
||||
|
||||
enum led_status_t {
|
||||
TPACPI_LED_OFF = 0,
|
||||
TPACPI_LED_ON,
|
||||
TPACPI_LED_BLINK,
|
||||
};
|
||||
|
||||
/* Special LED class that can defer work */
|
||||
struct tpacpi_led_classdev {
|
||||
struct led_classdev led_classdev;
|
||||
struct work_struct work;
|
||||
enum led_brightness new_brightness;
|
||||
enum led_status_t new_state;
|
||||
unsigned int led;
|
||||
};
|
||||
|
||||
@@ -2946,12 +2952,18 @@ static int hotkey_read(char *p)
|
||||
return len;
|
||||
}
|
||||
|
||||
static void hotkey_enabledisable_warn(void)
|
||||
static void hotkey_enabledisable_warn(bool enable)
|
||||
{
|
||||
tpacpi_log_usertask("procfs hotkey enable/disable");
|
||||
WARN(1, TPACPI_WARN
|
||||
"hotkey enable/disable functionality has been "
|
||||
"removed from the driver. Hotkeys are always enabled.\n");
|
||||
if (!WARN((tpacpi_lifecycle == TPACPI_LIFE_RUNNING || !enable),
|
||||
TPACPI_WARN
|
||||
"hotkey enable/disable functionality has been "
|
||||
"removed from the driver. Hotkeys are always "
|
||||
"enabled\n"))
|
||||
printk(TPACPI_ERR
|
||||
"Please remove the hotkey=enable module "
|
||||
"parameter, it is deprecated. Hotkeys are always "
|
||||
"enabled\n");
|
||||
}
|
||||
|
||||
static int hotkey_write(char *buf)
|
||||
@@ -2971,9 +2983,9 @@ static int hotkey_write(char *buf)
|
||||
res = 0;
|
||||
while ((cmd = next_cmd(&buf))) {
|
||||
if (strlencmp(cmd, "enable") == 0) {
|
||||
hotkey_enabledisable_warn();
|
||||
hotkey_enabledisable_warn(1);
|
||||
} else if (strlencmp(cmd, "disable") == 0) {
|
||||
hotkey_enabledisable_warn();
|
||||
hotkey_enabledisable_warn(0);
|
||||
res = -EPERM;
|
||||
} else if (strlencmp(cmd, "reset") == 0) {
|
||||
mask = hotkey_orig_mask;
|
||||
@@ -4207,7 +4219,7 @@ static void light_set_status_worker(struct work_struct *work)
|
||||
container_of(work, struct tpacpi_led_classdev, work);
|
||||
|
||||
if (likely(tpacpi_lifecycle == TPACPI_LIFE_RUNNING))
|
||||
light_set_status((data->new_brightness != LED_OFF));
|
||||
light_set_status((data->new_state != TPACPI_LED_OFF));
|
||||
}
|
||||
|
||||
static void light_sysfs_set(struct led_classdev *led_cdev,
|
||||
@@ -4217,7 +4229,8 @@ static void light_sysfs_set(struct led_classdev *led_cdev,
|
||||
container_of(led_cdev,
|
||||
struct tpacpi_led_classdev,
|
||||
led_classdev);
|
||||
data->new_brightness = brightness;
|
||||
data->new_state = (brightness != LED_OFF) ?
|
||||
TPACPI_LED_ON : TPACPI_LED_OFF;
|
||||
queue_work(tpacpi_wq, &data->work);
|
||||
}
|
||||
|
||||
@@ -4724,12 +4737,6 @@ enum { /* For TPACPI_LED_OLD */
|
||||
TPACPI_LED_EC_HLMS = 0x0e, /* EC reg to select led to command */
|
||||
};
|
||||
|
||||
enum led_status_t {
|
||||
TPACPI_LED_OFF = 0,
|
||||
TPACPI_LED_ON,
|
||||
TPACPI_LED_BLINK,
|
||||
};
|
||||
|
||||
static enum led_access_mode led_supported;
|
||||
|
||||
TPACPI_HANDLE(led, ec, "SLED", /* 570 */
|
||||
@@ -4841,23 +4848,13 @@ static int led_set_status(const unsigned int led,
|
||||
return rc;
|
||||
}
|
||||
|
||||
static void led_sysfs_set_status(unsigned int led,
|
||||
enum led_brightness brightness)
|
||||
{
|
||||
led_set_status(led,
|
||||
(brightness == LED_OFF) ?
|
||||
TPACPI_LED_OFF :
|
||||
(tpacpi_led_state_cache[led] == TPACPI_LED_BLINK) ?
|
||||
TPACPI_LED_BLINK : TPACPI_LED_ON);
|
||||
}
|
||||
|
||||
static void led_set_status_worker(struct work_struct *work)
|
||||
{
|
||||
struct tpacpi_led_classdev *data =
|
||||
container_of(work, struct tpacpi_led_classdev, work);
|
||||
|
||||
if (likely(tpacpi_lifecycle == TPACPI_LIFE_RUNNING))
|
||||
led_sysfs_set_status(data->led, data->new_brightness);
|
||||
led_set_status(data->led, data->new_state);
|
||||
}
|
||||
|
||||
static void led_sysfs_set(struct led_classdev *led_cdev,
|
||||
@@ -4866,7 +4863,13 @@ static void led_sysfs_set(struct led_classdev *led_cdev,
|
||||
struct tpacpi_led_classdev *data = container_of(led_cdev,
|
||||
struct tpacpi_led_classdev, led_classdev);
|
||||
|
||||
data->new_brightness = brightness;
|
||||
if (brightness == LED_OFF)
|
||||
data->new_state = TPACPI_LED_OFF;
|
||||
else if (tpacpi_led_state_cache[data->led] != TPACPI_LED_BLINK)
|
||||
data->new_state = TPACPI_LED_ON;
|
||||
else
|
||||
data->new_state = TPACPI_LED_BLINK;
|
||||
|
||||
queue_work(tpacpi_wq, &data->work);
|
||||
}
|
||||
|
||||
@@ -4884,7 +4887,7 @@ static int led_sysfs_blink_set(struct led_classdev *led_cdev,
|
||||
} else if ((*delay_on != 500) || (*delay_off != 500))
|
||||
return -EINVAL;
|
||||
|
||||
data->new_brightness = TPACPI_LED_BLINK;
|
||||
data->new_state = TPACPI_LED_BLINK;
|
||||
queue_work(tpacpi_wq, &data->work);
|
||||
|
||||
return 0;
|
||||
@@ -7857,6 +7860,15 @@ static int __init thinkpad_acpi_module_init(void)
|
||||
|
||||
MODULE_ALIAS(TPACPI_DRVR_SHORTNAME);
|
||||
|
||||
/*
|
||||
* This will autoload the driver in almost every ThinkPad
|
||||
* in widespread use.
|
||||
*
|
||||
* Only _VERY_ old models, like the 240, 240x and 570 lack
|
||||
* the HKEY event interface.
|
||||
*/
|
||||
MODULE_DEVICE_TABLE(acpi, ibm_htk_device_ids);
|
||||
|
||||
/*
|
||||
* DMI matching for module autoloading
|
||||
*
|
||||
@@ -7869,18 +7881,13 @@ MODULE_ALIAS(TPACPI_DRVR_SHORTNAME);
|
||||
#define IBM_BIOS_MODULE_ALIAS(__type) \
|
||||
MODULE_ALIAS("dmi:bvnIBM:bvr" __type "ET??WW*")
|
||||
|
||||
/* Non-ancient thinkpads */
|
||||
MODULE_ALIAS("dmi:bvnIBM:*:svnIBM:*:pvrThinkPad*:rvnIBM:*");
|
||||
MODULE_ALIAS("dmi:bvnLENOVO:*:svnLENOVO:*:pvrThinkPad*:rvnLENOVO:*");
|
||||
|
||||
/* Ancient thinkpad BIOSes have to be identified by
|
||||
* BIOS type or model number, and there are far less
|
||||
* BIOS types than model numbers... */
|
||||
IBM_BIOS_MODULE_ALIAS("I[BDHIMNOTWVYZ]");
|
||||
IBM_BIOS_MODULE_ALIAS("1[0368A-GIKM-PST]");
|
||||
IBM_BIOS_MODULE_ALIAS("K[UX-Z]");
|
||||
IBM_BIOS_MODULE_ALIAS("I[MU]"); /* 570, 570e */
|
||||
|
||||
MODULE_AUTHOR("Borislav Deianov, Henrique de Moraes Holschuh");
|
||||
MODULE_AUTHOR("Borislav Deianov <borislav@users.sf.net>");
|
||||
MODULE_AUTHOR("Henrique de Moraes Holschuh <hmh@hmh.eng.br>");
|
||||
MODULE_DESCRIPTION(TPACPI_DESC);
|
||||
MODULE_VERSION(TPACPI_VERSION);
|
||||
MODULE_LICENSE("GPL");
|
||||
|
Reference in New Issue
Block a user