forked from asus-devs/android_kernel_asus_msm8916
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'for_linus' of git://cavan.codon.org.uk/platform-drivers…
…-x86 Pull x86 platform drivers from Matthew Garrett: "Small set of updates, mainly trivial bugfixes and some small updates to deal with newer hardware. There's also a new driver that allows qemu guests to notify the hypervisor that they've just paniced, which seems useful." * 'for_linus' of git://cavan.codon.org.uk/platform-drivers-x86: Add support for fan button on Ideapad Z580 pvpanic: pvpanic device driver asus-nb-wmi: set wapf=4 for ASUSTeK COMPUTER INC. X75A drivers: platform: x86: Use PTR_RET function sony-laptop: SVS151290S kbd backlight and gfx switch support hp-wmi: add more definitions for new event_id's dell-laptop: Fix krealloc() misuse in parse_da_table() hp_accel: Ignore the error from lis3lv02d_poweron() at resume dell: add new dell WMI format for the AIO machines
- Loading branch information
Showing
10 changed files
with
242 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
/* | ||
* pvpanic.c - pvpanic Device Support | ||
* | ||
* Copyright (C) 2013 Fujitsu. | ||
* | ||
* 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 | ||
* the Free Software Foundation; either version 2 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, write to the Free Software | ||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||
*/ | ||
|
||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt | ||
|
||
#include <linux/kernel.h> | ||
#include <linux/module.h> | ||
#include <linux/init.h> | ||
#include <linux/types.h> | ||
#include <acpi/acpi_bus.h> | ||
#include <acpi/acpi_drivers.h> | ||
|
||
MODULE_AUTHOR("Hu Tao <hutao@cn.fujitsu.com>"); | ||
MODULE_DESCRIPTION("pvpanic device driver"); | ||
MODULE_LICENSE("GPL"); | ||
|
||
static int pvpanic_add(struct acpi_device *device); | ||
static int pvpanic_remove(struct acpi_device *device); | ||
|
||
static const struct acpi_device_id pvpanic_device_ids[] = { | ||
{ "QEMU0001", 0 }, | ||
{ "", 0 }, | ||
}; | ||
MODULE_DEVICE_TABLE(acpi, pvpanic_device_ids); | ||
|
||
#define PVPANIC_PANICKED (1 << 0) | ||
|
||
static u16 port; | ||
|
||
static struct acpi_driver pvpanic_driver = { | ||
.name = "pvpanic", | ||
.class = "QEMU", | ||
.ids = pvpanic_device_ids, | ||
.ops = { | ||
.add = pvpanic_add, | ||
.remove = pvpanic_remove, | ||
}, | ||
.owner = THIS_MODULE, | ||
}; | ||
|
||
static void | ||
pvpanic_send_event(unsigned int event) | ||
{ | ||
outb(event, port); | ||
} | ||
|
||
static int | ||
pvpanic_panic_notify(struct notifier_block *nb, unsigned long code, | ||
void *unused) | ||
{ | ||
pvpanic_send_event(PVPANIC_PANICKED); | ||
return NOTIFY_DONE; | ||
} | ||
|
||
static struct notifier_block pvpanic_panic_nb = { | ||
.notifier_call = pvpanic_panic_notify, | ||
}; | ||
|
||
|
||
static acpi_status | ||
pvpanic_walk_resources(struct acpi_resource *res, void *context) | ||
{ | ||
switch (res->type) { | ||
case ACPI_RESOURCE_TYPE_END_TAG: | ||
return AE_OK; | ||
|
||
case ACPI_RESOURCE_TYPE_IO: | ||
port = res->data.io.minimum; | ||
return AE_OK; | ||
|
||
default: | ||
return AE_ERROR; | ||
} | ||
} | ||
|
||
static int pvpanic_add(struct acpi_device *device) | ||
{ | ||
acpi_status status; | ||
u64 ret; | ||
|
||
status = acpi_evaluate_integer(device->handle, "_STA", NULL, | ||
&ret); | ||
|
||
if (ACPI_FAILURE(status) || (ret & 0x0B) != 0x0B) | ||
return -ENODEV; | ||
|
||
acpi_walk_resources(device->handle, METHOD_NAME__CRS, | ||
pvpanic_walk_resources, NULL); | ||
|
||
if (!port) | ||
return -ENODEV; | ||
|
||
atomic_notifier_chain_register(&panic_notifier_list, | ||
&pvpanic_panic_nb); | ||
|
||
return 0; | ||
} | ||
|
||
static int pvpanic_remove(struct acpi_device *device) | ||
{ | ||
|
||
atomic_notifier_chain_unregister(&panic_notifier_list, | ||
&pvpanic_panic_nb); | ||
return 0; | ||
} | ||
|
||
module_acpi_driver(pvpanic_driver); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.