Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mjg59/platform-drivers-x86
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mjg59/platform-drivers-x86: (43 commits) acer-wmi: support integer return type from WMI methods msi-laptop: fix section mismatch in reference from the function load_scm_model_init acer-wmi: support to set communication device state by new wmid method acer-wmi: allow 64-bits return buffer from WMI methods acer-wmi: check the existence of internal 3G device when set capability platform/x86:delete two unused variables support wlan hotkey on Acer Travelmate 5735Z platform-x86: intel_mid_thermal: Fix memory leak platform/x86: Fix Makefile for intel_mid_powerbtn platform/x86: Simplify intel_mid_powerbtn acer-wmi: Delete out-of-date documentation acerhdf: Clean up includes acerhdf: Drop pointless dependency on THERMAL_HWMON acer-wmi: Update MAINTAINERS wmi: Orphan ACPI-WMI driver tc1100-wmi: Orphan driver acer-wmi: does not allow negative number set to initial device state platform/oaktrail: ACPI EC Extra driver for Oaktrail thinkpad_acpi: Convert printks to pr_<level> thinkpad_acpi: Correct !CONFIG_THINKPAD_ACPI_VIDEO warning ...
This commit is contained in:
commit
2ba781ced9
35 changed files with 1355 additions and 1154 deletions
|
@ -1,184 +0,0 @@
|
|||
Acer Laptop WMI Extras Driver
|
||||
http://code.google.com/p/aceracpi
|
||||
Version 0.3
|
||||
4th April 2009
|
||||
|
||||
Copyright 2007-2009 Carlos Corbacho <carlos@strangeworlds.co.uk>
|
||||
|
||||
acer-wmi is a driver to allow you to control various parts of your Acer laptop
|
||||
hardware under Linux which are exposed via ACPI-WMI.
|
||||
|
||||
This driver completely replaces the old out-of-tree acer_acpi, which I am
|
||||
currently maintaining for bug fixes only on pre-2.6.25 kernels. All development
|
||||
work is now focused solely on acer-wmi.
|
||||
|
||||
Disclaimer
|
||||
**********
|
||||
|
||||
Acer and Wistron have provided nothing towards the development acer_acpi or
|
||||
acer-wmi. All information we have has been through the efforts of the developers
|
||||
and the users to discover as much as possible about the hardware.
|
||||
|
||||
As such, I do warn that this could break your hardware - this is extremely
|
||||
unlikely of course, but please bear this in mind.
|
||||
|
||||
Background
|
||||
**********
|
||||
|
||||
acer-wmi is derived from acer_acpi, originally developed by Mark
|
||||
Smith in 2005, then taken over by Carlos Corbacho in 2007, in order to activate
|
||||
the wireless LAN card under a 64-bit version of Linux, as acerhk[1] (the
|
||||
previous solution to the problem) relied on making 32 bit BIOS calls which are
|
||||
not possible in kernel space from a 64 bit OS.
|
||||
|
||||
[1] acerhk: http://www.cakey.de/acerhk/
|
||||
|
||||
Supported Hardware
|
||||
******************
|
||||
|
||||
NOTE: The Acer Aspire One is not supported hardware. It cannot work with
|
||||
acer-wmi until Acer fix their ACPI-WMI implementation on them, so has been
|
||||
blacklisted until that happens.
|
||||
|
||||
Please see the website for the current list of known working hardware:
|
||||
|
||||
http://code.google.com/p/aceracpi/wiki/SupportedHardware
|
||||
|
||||
If your laptop is not listed, or listed as unknown, and works with acer-wmi,
|
||||
please contact me with a copy of the DSDT.
|
||||
|
||||
If your Acer laptop doesn't work with acer-wmi, I would also like to see the
|
||||
DSDT.
|
||||
|
||||
To send me the DSDT, as root/sudo:
|
||||
|
||||
cat /sys/firmware/acpi/tables/DSDT > dsdt
|
||||
|
||||
And send me the resulting 'dsdt' file.
|
||||
|
||||
Usage
|
||||
*****
|
||||
|
||||
On Acer laptops, acer-wmi should already be autoloaded based on DMI matching.
|
||||
For non-Acer laptops, until WMI based autoloading support is added, you will
|
||||
need to manually load acer-wmi.
|
||||
|
||||
acer-wmi creates /sys/devices/platform/acer-wmi, and fills it with various
|
||||
files whose usage is detailed below, which enables you to control some of the
|
||||
following (varies between models):
|
||||
|
||||
* the wireless LAN card radio
|
||||
* inbuilt Bluetooth adapter
|
||||
* inbuilt 3G card
|
||||
* mail LED of your laptop
|
||||
* brightness of the LCD panel
|
||||
|
||||
Wireless
|
||||
********
|
||||
|
||||
With regards to wireless, all acer-wmi does is enable the radio on the card. It
|
||||
is not responsible for the wireless LED - once the radio is enabled, this is
|
||||
down to the wireless driver for your card. So the behaviour of the wireless LED,
|
||||
once you enable the radio, will depend on your hardware and driver combination.
|
||||
|
||||
e.g. With the BCM4318 on the Acer Aspire 5020 series:
|
||||
|
||||
ndiswrapper: Light blinks on when transmitting
|
||||
b43: Solid light, blinks off when transmitting
|
||||
|
||||
Wireless radio control is unconditionally enabled - all Acer laptops that support
|
||||
acer-wmi come with built-in wireless. However, should you feel so inclined to
|
||||
ever wish to remove the card, or swap it out at some point, please get in touch
|
||||
with me, as we may well be able to gain some data on wireless card detection.
|
||||
|
||||
The wireless radio is exposed through rfkill.
|
||||
|
||||
Bluetooth
|
||||
*********
|
||||
|
||||
For bluetooth, this is an internal USB dongle, so once enabled, you will get
|
||||
a USB device connection event, and a new USB device appears. When you disable
|
||||
bluetooth, you get the reverse - a USB device disconnect event, followed by the
|
||||
device disappearing again.
|
||||
|
||||
Bluetooth is autodetected by acer-wmi, so if you do not have a bluetooth module
|
||||
installed in your laptop, this file won't exist (please be aware that it is
|
||||
quite common for Acer not to fit bluetooth to their laptops - so just because
|
||||
you have a bluetooth button on the laptop, doesn't mean that bluetooth is
|
||||
installed).
|
||||
|
||||
For the adventurously minded - if you want to buy an internal bluetooth
|
||||
module off the internet that is compatible with your laptop and fit it, then
|
||||
it will work just fine with acer-wmi.
|
||||
|
||||
Bluetooth is exposed through rfkill.
|
||||
|
||||
3G
|
||||
**
|
||||
|
||||
3G is currently not autodetected, so the 'threeg' file is always created under
|
||||
sysfs. So far, no-one in possession of an Acer laptop with 3G built-in appears to
|
||||
have tried Linux, or reported back, so we don't have any information on this.
|
||||
|
||||
If you have an Acer laptop that does have a 3G card in, please contact me so we
|
||||
can properly detect these, and find out a bit more about them.
|
||||
|
||||
To read the status of the 3G card (0=off, 1=on):
|
||||
cat /sys/devices/platform/acer-wmi/threeg
|
||||
|
||||
To enable the 3G card:
|
||||
echo 1 > /sys/devices/platform/acer-wmi/threeg
|
||||
|
||||
To disable the 3G card:
|
||||
echo 0 > /sys/devices/platform/acer-wmi/threeg
|
||||
|
||||
To set the state of the 3G card when loading acer-wmi, pass:
|
||||
threeg=X (where X is 0 or 1)
|
||||
|
||||
Mail LED
|
||||
********
|
||||
|
||||
This can be found in most older Acer laptops supported by acer-wmi, and many
|
||||
newer ones - it is built into the 'mail' button, and blinks when active.
|
||||
|
||||
On newer (WMID) laptops though, we have no way of detecting the mail LED. If
|
||||
your laptop identifies itself in dmesg as a WMID model, then please try loading
|
||||
acer_acpi with:
|
||||
|
||||
force_series=2490
|
||||
|
||||
This will use a known alternative method of reading/ writing the mail LED. If
|
||||
it works, please report back to me with the DMI data from your laptop so this
|
||||
can be added to acer-wmi.
|
||||
|
||||
The LED is exposed through the LED subsystem, and can be found in:
|
||||
|
||||
/sys/devices/platform/acer-wmi/leds/acer-wmi::mail/
|
||||
|
||||
The mail LED is autodetected, so if you don't have one, the LED device won't
|
||||
be registered.
|
||||
|
||||
Backlight
|
||||
*********
|
||||
|
||||
The backlight brightness control is available on all acer-wmi supported
|
||||
hardware. The maximum brightness level is usually 15, but on some newer laptops
|
||||
it's 10 (this is again autodetected).
|
||||
|
||||
The backlight is exposed through the backlight subsystem, and can be found in:
|
||||
|
||||
/sys/devices/platform/acer-wmi/backlight/acer-wmi/
|
||||
|
||||
Credits
|
||||
*******
|
||||
|
||||
Olaf Tauber, who did the real hard work when he developed acerhk
|
||||
http://www.cakey.de/acerhk/
|
||||
All the authors of laptop ACPI modules in the kernel, whose work
|
||||
was an inspiration in the early days of acer_acpi
|
||||
Mathieu Segaud, who solved the problem with having to modprobe the driver
|
||||
twice in acer_acpi 0.2.
|
||||
Jim Ramsay, who added support for the WMID interface
|
||||
Mark Smith, who started the original acer_acpi
|
||||
|
||||
And the many people who have used both acer_acpi and acer-wmi.
|
11
MAINTAINERS
11
MAINTAINERS
|
@ -223,10 +223,8 @@ S: Maintained
|
|||
F: drivers/platform/x86/acerhdf.c
|
||||
|
||||
ACER WMI LAPTOP EXTRAS
|
||||
M: Carlos Corbacho <carlos@strangeworlds.co.uk>
|
||||
L: aceracpi@googlegroups.com (subscribers-only)
|
||||
M: Joey Lee <jlee@novell.com>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
W: http://code.google.com/p/aceracpi
|
||||
S: Maintained
|
||||
F: drivers/platform/x86/acer-wmi.c
|
||||
|
||||
|
@ -271,10 +269,8 @@ S: Supported
|
|||
F: drivers/acpi/video.c
|
||||
|
||||
ACPI WMI DRIVER
|
||||
M: Carlos Corbacho <carlos@strangeworlds.co.uk>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
W: http://www.lesswatts.org/projects/acpi/
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
F: drivers/platform/x86/wmi.c
|
||||
|
||||
AD1889 ALSA SOUND DRIVER
|
||||
|
@ -3033,9 +3029,8 @@ S: Maintained
|
|||
F: drivers/net/wireless/hostap/
|
||||
|
||||
HP COMPAQ TC1100 TABLET WMI EXTRAS DRIVER
|
||||
M: Carlos Corbacho <carlos@strangeworlds.co.uk>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Odd Fixes
|
||||
S: Orphan
|
||||
F: drivers/platform/x86/tc1100-wmi.c
|
||||
|
||||
HP100: Driver for HP 10/100 Mbit/s Voice Grade Network Adapter Series
|
||||
|
|
|
@ -39,7 +39,7 @@ config ACER_WMI
|
|||
|
||||
config ACERHDF
|
||||
tristate "Acer Aspire One temperature and fan driver"
|
||||
depends on THERMAL && THERMAL_HWMON && ACPI
|
||||
depends on THERMAL && ACPI
|
||||
---help---
|
||||
This is a driver for Acer Aspire One netbooks. It allows to access
|
||||
the temperature sensor and to control the fan.
|
||||
|
@ -760,4 +760,13 @@ config MXM_WMI
|
|||
MXM is a standard for laptop graphics cards, the WMI interface
|
||||
is required for switchable nvidia graphics machines
|
||||
|
||||
config INTEL_OAKTRAIL
|
||||
tristate "Intel Oaktrail Platform Extras"
|
||||
depends on ACPI
|
||||
depends on RFKILL && BACKLIGHT_CLASS_DEVICE && ACPI
|
||||
---help---
|
||||
Intel Oaktrail platform need this driver to provide interfaces to
|
||||
enable/disable the Camera, WiFi, BT etc. devices. If in doubt, say Y
|
||||
here; it will only load on supported platforms.
|
||||
|
||||
endif # X86_PLATFORM_DEVICES
|
||||
|
|
|
@ -41,5 +41,6 @@ obj-$(CONFIG_XO1_RFKILL) += xo1-rfkill.o
|
|||
obj-$(CONFIG_XO15_EBOOK) += xo15-ebook.o
|
||||
obj-$(CONFIG_IBM_RTL) += ibm_rtl.o
|
||||
obj-$(CONFIG_SAMSUNG_LAPTOP) += samsung-laptop.o
|
||||
obj-$(CONFIG_INTEL_MFLD_THERMAL) += intel_mid_thermal.o
|
||||
obj-$(CONFIG_MXM_WMI) += mxm-wmi.o
|
||||
obj-$(CONFIG_INTEL_MID_POWER_BUTTON) += intel_mid_powerbtn.o
|
||||
obj-$(CONFIG_INTEL_OAKTRAIL) += intel_oaktrail.o
|
||||
|
|
|
@ -98,13 +98,26 @@ enum acer_wmi_event_ids {
|
|||
|
||||
static const struct key_entry acer_wmi_keymap[] = {
|
||||
{KE_KEY, 0x01, {KEY_WLAN} }, /* WiFi */
|
||||
{KE_KEY, 0x03, {KEY_WLAN} }, /* WiFi */
|
||||
{KE_KEY, 0x12, {KEY_BLUETOOTH} }, /* BT */
|
||||
{KE_KEY, 0x21, {KEY_PROG1} }, /* Backup */
|
||||
{KE_KEY, 0x22, {KEY_PROG2} }, /* Arcade */
|
||||
{KE_KEY, 0x23, {KEY_PROG3} }, /* P_Key */
|
||||
{KE_KEY, 0x24, {KEY_PROG4} }, /* Social networking_Key */
|
||||
{KE_IGNORE, 0x41, {KEY_MUTE} },
|
||||
{KE_IGNORE, 0x42, {KEY_PREVIOUSSONG} },
|
||||
{KE_IGNORE, 0x43, {KEY_NEXTSONG} },
|
||||
{KE_IGNORE, 0x44, {KEY_PLAYPAUSE} },
|
||||
{KE_IGNORE, 0x45, {KEY_STOP} },
|
||||
{KE_IGNORE, 0x48, {KEY_VOLUMEUP} },
|
||||
{KE_IGNORE, 0x49, {KEY_VOLUMEDOWN} },
|
||||
{KE_IGNORE, 0x61, {KEY_SWITCHVIDEOMODE} },
|
||||
{KE_IGNORE, 0x62, {KEY_BRIGHTNESSUP} },
|
||||
{KE_IGNORE, 0x63, {KEY_BRIGHTNESSDOWN} },
|
||||
{KE_KEY, 0x64, {KEY_SWITCHVIDEOMODE} }, /* Display Switch */
|
||||
{KE_IGNORE, 0x81, {KEY_SLEEP} },
|
||||
{KE_KEY, 0x82, {KEY_TOUCHPAD_TOGGLE} }, /* Touch Pad On/Off */
|
||||
{KE_IGNORE, 0x83, {KEY_TOUCHPAD_TOGGLE} },
|
||||
{KE_END, 0}
|
||||
};
|
||||
|
||||
|
@ -122,6 +135,7 @@ struct event_return_value {
|
|||
*/
|
||||
#define ACER_WMID3_GDS_WIRELESS (1<<0) /* WiFi */
|
||||
#define ACER_WMID3_GDS_THREEG (1<<6) /* 3G */
|
||||
#define ACER_WMID3_GDS_WIMAX (1<<7) /* WiMAX */
|
||||
#define ACER_WMID3_GDS_BLUETOOTH (1<<11) /* BT */
|
||||
|
||||
struct lm_input_params {
|
||||
|
@ -737,8 +751,11 @@ WMI_execute_u32(u32 method_id, u32 in, u32 *out)
|
|||
|
||||
obj = (union acpi_object *) result.pointer;
|
||||
if (obj && obj->type == ACPI_TYPE_BUFFER &&
|
||||
obj->buffer.length == sizeof(u32)) {
|
||||
(obj->buffer.length == sizeof(u32) ||
|
||||
obj->buffer.length == sizeof(u64))) {
|
||||
tmp = *((u32 *) obj->buffer.pointer);
|
||||
} else if (obj->type == ACPI_TYPE_INTEGER) {
|
||||
tmp = (u32) obj->integer.value;
|
||||
} else {
|
||||
tmp = 0;
|
||||
}
|
||||
|
@ -866,8 +883,11 @@ static acpi_status WMID_set_capabilities(void)
|
|||
|
||||
obj = (union acpi_object *) out.pointer;
|
||||
if (obj && obj->type == ACPI_TYPE_BUFFER &&
|
||||
obj->buffer.length == sizeof(u32)) {
|
||||
(obj->buffer.length == sizeof(u32) ||
|
||||
obj->buffer.length == sizeof(u64))) {
|
||||
devices = *((u32 *) obj->buffer.pointer);
|
||||
} else if (obj->type == ACPI_TYPE_INTEGER) {
|
||||
devices = (u32) obj->integer.value;
|
||||
} else {
|
||||
kfree(out.pointer);
|
||||
return AE_ERROR;
|
||||
|
@ -876,7 +896,8 @@ static acpi_status WMID_set_capabilities(void)
|
|||
dmi_walk(type_aa_dmi_decode, NULL);
|
||||
if (!has_type_aa) {
|
||||
interface->capability |= ACER_CAP_WIRELESS;
|
||||
interface->capability |= ACER_CAP_THREEG;
|
||||
if (devices & 0x40)
|
||||
interface->capability |= ACER_CAP_THREEG;
|
||||
if (devices & 0x10)
|
||||
interface->capability |= ACER_CAP_BLUETOOTH;
|
||||
}
|
||||
|
@ -961,10 +982,12 @@ static void __init acer_commandline_init(void)
|
|||
* These will all fail silently if the value given is invalid, or the
|
||||
* capability isn't available on the given interface
|
||||
*/
|
||||
set_u32(mailled, ACER_CAP_MAILLED);
|
||||
if (!has_type_aa)
|
||||
if (mailled >= 0)
|
||||
set_u32(mailled, ACER_CAP_MAILLED);
|
||||
if (!has_type_aa && threeg >= 0)
|
||||
set_u32(threeg, ACER_CAP_THREEG);
|
||||
set_u32(brightness, ACER_CAP_BRIGHTNESS);
|
||||
if (brightness >= 0)
|
||||
set_u32(brightness, ACER_CAP_BRIGHTNESS);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1081,7 +1104,7 @@ static acpi_status wmid3_get_device_status(u32 *value, u16 device)
|
|||
return AE_ERROR;
|
||||
}
|
||||
if (obj->buffer.length != 8) {
|
||||
pr_warning("Unknown buffer length %d\n", obj->buffer.length);
|
||||
pr_warn("Unknown buffer length %d\n", obj->buffer.length);
|
||||
kfree(obj);
|
||||
return AE_ERROR;
|
||||
}
|
||||
|
@ -1090,8 +1113,8 @@ static acpi_status wmid3_get_device_status(u32 *value, u16 device)
|
|||
kfree(obj);
|
||||
|
||||
if (return_value.error_code || return_value.ec_return_value)
|
||||
pr_warning("Get Device Status failed: "
|
||||
"0x%x - 0x%x\n", return_value.error_code,
|
||||
pr_warn("Get Device Status failed: 0x%x - 0x%x\n",
|
||||
return_value.error_code,
|
||||
return_value.ec_return_value);
|
||||
else
|
||||
*value = !!(return_value.devices & device);
|
||||
|
@ -1124,6 +1147,114 @@ static acpi_status get_device_status(u32 *value, u32 cap)
|
|||
}
|
||||
}
|
||||
|
||||
static acpi_status wmid3_set_device_status(u32 value, u16 device)
|
||||
{
|
||||
struct wmid3_gds_return_value return_value;
|
||||
acpi_status status;
|
||||
union acpi_object *obj;
|
||||
u16 devices;
|
||||
struct wmid3_gds_input_param params = {
|
||||
.function_num = 0x1,
|
||||
.hotkey_number = 0x01,
|
||||
.devices = ACER_WMID3_GDS_WIRELESS &
|
||||
ACER_WMID3_GDS_THREEG &
|
||||
ACER_WMID3_GDS_WIMAX &
|
||||
ACER_WMID3_GDS_BLUETOOTH,
|
||||
};
|
||||
struct acpi_buffer input = {
|
||||
sizeof(struct wmid3_gds_input_param),
|
||||
¶ms
|
||||
};
|
||||
struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL };
|
||||
struct acpi_buffer output2 = { ACPI_ALLOCATE_BUFFER, NULL };
|
||||
|
||||
status = wmi_evaluate_method(WMID_GUID3, 0, 0x2, &input, &output);
|
||||
if (ACPI_FAILURE(status))
|
||||
return status;
|
||||
|
||||
obj = output.pointer;
|
||||
|
||||
if (!obj)
|
||||
return AE_ERROR;
|
||||
else if (obj->type != ACPI_TYPE_BUFFER) {
|
||||
kfree(obj);
|
||||
return AE_ERROR;
|
||||
}
|
||||
if (obj->buffer.length != 8) {
|
||||
pr_warning("Unknown buffer length %d\n", obj->buffer.length);
|
||||
kfree(obj);
|
||||
return AE_ERROR;
|
||||
}
|
||||
|
||||
return_value = *((struct wmid3_gds_return_value *)obj->buffer.pointer);
|
||||
kfree(obj);
|
||||
|
||||
if (return_value.error_code || return_value.ec_return_value) {
|
||||
pr_warning("Get Current Device Status failed: "
|
||||
"0x%x - 0x%x\n", return_value.error_code,
|
||||
return_value.ec_return_value);
|
||||
return status;
|
||||
}
|
||||
|
||||
devices = return_value.devices;
|
||||
params.function_num = 0x2;
|
||||
params.hotkey_number = 0x01;
|
||||
params.devices = (value) ? (devices | device) : (devices & ~device);
|
||||
|
||||
status = wmi_evaluate_method(WMID_GUID3, 0, 0x1, &input, &output2);
|
||||
if (ACPI_FAILURE(status))
|
||||
return status;
|
||||
|
||||
obj = output2.pointer;
|
||||
|
||||
if (!obj)
|
||||
return AE_ERROR;
|
||||
else if (obj->type != ACPI_TYPE_BUFFER) {
|
||||
kfree(obj);
|
||||
return AE_ERROR;
|
||||
}
|
||||
if (obj->buffer.length != 4) {
|
||||
pr_warning("Unknown buffer length %d\n", obj->buffer.length);
|
||||
kfree(obj);
|
||||
return AE_ERROR;
|
||||
}
|
||||
|
||||
return_value = *((struct wmid3_gds_return_value *)obj->buffer.pointer);
|
||||
kfree(obj);
|
||||
|
||||
if (return_value.error_code || return_value.ec_return_value)
|
||||
pr_warning("Set Device Status failed: "
|
||||
"0x%x - 0x%x\n", return_value.error_code,
|
||||
return_value.ec_return_value);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
static acpi_status set_device_status(u32 value, u32 cap)
|
||||
{
|
||||
if (wmi_has_guid(WMID_GUID3)) {
|
||||
u16 device;
|
||||
|
||||
switch (cap) {
|
||||
case ACER_CAP_WIRELESS:
|
||||
device = ACER_WMID3_GDS_WIRELESS;
|
||||
break;
|
||||
case ACER_CAP_BLUETOOTH:
|
||||
device = ACER_WMID3_GDS_BLUETOOTH;
|
||||
break;
|
||||
case ACER_CAP_THREEG:
|
||||
device = ACER_WMID3_GDS_THREEG;
|
||||
break;
|
||||
default:
|
||||
return AE_ERROR;
|
||||
}
|
||||
return wmid3_set_device_status(value, device);
|
||||
|
||||
} else {
|
||||
return set_u32(value, cap);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Rfkill devices
|
||||
*/
|
||||
|
@ -1160,7 +1291,7 @@ static int acer_rfkill_set(void *data, bool blocked)
|
|||
u32 cap = (unsigned long)data;
|
||||
|
||||
if (rfkill_inited) {
|
||||
status = set_u32(!blocked, cap);
|
||||
status = set_device_status(!blocked, cap);
|
||||
if (ACPI_FAILURE(status))
|
||||
return -ENODEV;
|
||||
}
|
||||
|
@ -1317,7 +1448,7 @@ static void acer_wmi_notify(u32 value, void *context)
|
|||
|
||||
status = wmi_get_event_data(value, &response);
|
||||
if (status != AE_OK) {
|
||||
pr_warning("bad event status 0x%x\n", status);
|
||||
pr_warn("bad event status 0x%x\n", status);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1326,12 +1457,12 @@ static void acer_wmi_notify(u32 value, void *context)
|
|||
if (!obj)
|
||||
return;
|
||||
if (obj->type != ACPI_TYPE_BUFFER) {
|
||||
pr_warning("Unknown response received %d\n", obj->type);
|
||||
pr_warn("Unknown response received %d\n", obj->type);
|
||||
kfree(obj);
|
||||
return;
|
||||
}
|
||||
if (obj->buffer.length != 8) {
|
||||
pr_warning("Unknown buffer length %d\n", obj->buffer.length);
|
||||
pr_warn("Unknown buffer length %d\n", obj->buffer.length);
|
||||
kfree(obj);
|
||||
return;
|
||||
}
|
||||
|
@ -1343,7 +1474,7 @@ static void acer_wmi_notify(u32 value, void *context)
|
|||
case WMID_HOTKEY_EVENT:
|
||||
if (return_value.device_state) {
|
||||
u16 device_state = return_value.device_state;
|
||||
pr_debug("deivces states: 0x%x\n", device_state);
|
||||
pr_debug("device state: 0x%x\n", device_state);
|
||||
if (has_cap(ACER_CAP_WIRELESS))
|
||||
rfkill_set_sw_state(wireless_rfkill,
|
||||
!(device_state & ACER_WMID3_GDS_WIRELESS));
|
||||
|
@ -1356,11 +1487,11 @@ static void acer_wmi_notify(u32 value, void *context)
|
|||
}
|
||||
if (!sparse_keymap_report_event(acer_wmi_input_dev,
|
||||
return_value.key_num, 1, true))
|
||||
pr_warning("Unknown key number - 0x%x\n",
|
||||
pr_warn("Unknown key number - 0x%x\n",
|
||||
return_value.key_num);
|
||||
break;
|
||||
default:
|
||||
pr_warning("Unknown function number - %d - %d\n",
|
||||
pr_warn("Unknown function number - %d - %d\n",
|
||||
return_value.function, return_value.key_num);
|
||||
break;
|
||||
}
|
||||
|
@ -1389,7 +1520,7 @@ wmid3_set_lm_mode(struct lm_input_params *params,
|
|||
return AE_ERROR;
|
||||
}
|
||||
if (obj->buffer.length != 4) {
|
||||
pr_warning("Unknown buffer length %d\n", obj->buffer.length);
|
||||
pr_warn("Unknown buffer length %d\n", obj->buffer.length);
|
||||
kfree(obj);
|
||||
return AE_ERROR;
|
||||
}
|
||||
|
@ -1414,11 +1545,11 @@ static int acer_wmi_enable_ec_raw(void)
|
|||
status = wmid3_set_lm_mode(¶ms, &return_value);
|
||||
|
||||
if (return_value.error_code || return_value.ec_return_value)
|
||||
pr_warning("Enabling EC raw mode failed: "
|
||||
"0x%x - 0x%x\n", return_value.error_code,
|
||||
return_value.ec_return_value);
|
||||
pr_warn("Enabling EC raw mode failed: 0x%x - 0x%x\n",
|
||||
return_value.error_code,
|
||||
return_value.ec_return_value);
|
||||
else
|
||||
pr_info("Enabled EC raw mode");
|
||||
pr_info("Enabled EC raw mode\n");
|
||||
|
||||
return status;
|
||||
}
|
||||
|
@ -1437,9 +1568,9 @@ static int acer_wmi_enable_lm(void)
|
|||
status = wmid3_set_lm_mode(¶ms, &return_value);
|
||||
|
||||
if (return_value.error_code || return_value.ec_return_value)
|
||||
pr_warning("Enabling Launch Manager failed: "
|
||||
"0x%x - 0x%x\n", return_value.error_code,
|
||||
return_value.ec_return_value);
|
||||
pr_warn("Enabling Launch Manager failed: 0x%x - 0x%x\n",
|
||||
return_value.error_code,
|
||||
return_value.ec_return_value);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
@ -1506,8 +1637,11 @@ static u32 get_wmid_devices(void)
|
|||
|
||||
obj = (union acpi_object *) out.pointer;
|
||||
if (obj && obj->type == ACPI_TYPE_BUFFER &&
|
||||
obj->buffer.length == sizeof(u32)) {
|
||||
(obj->buffer.length == sizeof(u32) ||
|
||||
obj->buffer.length == sizeof(u64))) {
|
||||
devices = *((u32 *) obj->buffer.pointer);
|
||||
} else if (obj->type == ACPI_TYPE_INTEGER) {
|
||||
devices = (u32) obj->integer.value;
|
||||
}
|
||||
|
||||
kfree(out.pointer);
|
||||
|
|
|
@ -35,10 +35,8 @@
|
|||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <acpi/acpi_drivers.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/thermal.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
|
|
|
@ -318,7 +318,7 @@ static int acpi_check_handle(acpi_handle handle, const char *method,
|
|||
|
||||
if (status != AE_OK) {
|
||||
if (ret)
|
||||
pr_warning("Error finding %s\n", method);
|
||||
pr_warn("Error finding %s\n", method);
|
||||
return -ENODEV;
|
||||
}
|
||||
return 0;
|
||||
|
@ -383,7 +383,7 @@ static int asus_kled_lvl(struct asus_laptop *asus)
|
|||
rv = acpi_evaluate_integer(asus->handle, METHOD_KBD_LIGHT_GET,
|
||||
¶ms, &kblv);
|
||||
if (ACPI_FAILURE(rv)) {
|
||||
pr_warning("Error reading kled level\n");
|
||||
pr_warn("Error reading kled level\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
return kblv;
|
||||
|
@ -397,7 +397,7 @@ static int asus_kled_set(struct asus_laptop *asus, int kblv)
|
|||
kblv = 0;
|
||||
|
||||
if (write_acpi_int(asus->handle, METHOD_KBD_LIGHT_SET, kblv)) {
|
||||
pr_warning("Keyboard LED display write failed\n");
|
||||
pr_warn("Keyboard LED display write failed\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
return 0;
|
||||
|
@ -531,7 +531,7 @@ static int asus_read_brightness(struct backlight_device *bd)
|
|||
rv = acpi_evaluate_integer(asus->handle, METHOD_BRIGHTNESS_GET,
|
||||
NULL, &value);
|
||||
if (ACPI_FAILURE(rv))
|
||||
pr_warning("Error reading brightness\n");
|
||||
pr_warn("Error reading brightness\n");
|
||||
|
||||
return value;
|
||||
}
|
||||
|
@ -541,7 +541,7 @@ static int asus_set_brightness(struct backlight_device *bd, int value)
|
|||
struct asus_laptop *asus = bl_get_data(bd);
|
||||
|
||||
if (write_acpi_int(asus->handle, METHOD_BRIGHTNESS_SET, value)) {
|
||||
pr_warning("Error changing brightness\n");
|
||||
pr_warn("Error changing brightness\n");
|
||||
return -EIO;
|
||||
}
|
||||
return 0;
|
||||
|
@ -730,7 +730,7 @@ static ssize_t store_ledd(struct device *dev, struct device_attribute *attr,
|
|||
rv = parse_arg(buf, count, &value);
|
||||
if (rv > 0) {
|
||||
if (write_acpi_int(asus->handle, METHOD_LEDD, value)) {
|
||||
pr_warning("LED display write failed\n");
|
||||
pr_warn("LED display write failed\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
asus->ledd_status = (u32) value;
|
||||
|
@ -752,7 +752,7 @@ static int asus_wireless_status(struct asus_laptop *asus, int mask)
|
|||
rv = acpi_evaluate_integer(asus->handle, METHOD_WL_STATUS,
|
||||
NULL, &status);
|
||||
if (ACPI_FAILURE(rv)) {
|
||||
pr_warning("Error reading Wireless status\n");
|
||||
pr_warn("Error reading Wireless status\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
return !!(status & mask);
|
||||
|
@ -764,7 +764,7 @@ static int asus_wireless_status(struct asus_laptop *asus, int mask)
|
|||
static int asus_wlan_set(struct asus_laptop *asus, int status)
|
||||
{
|
||||
if (write_acpi_int(asus->handle, METHOD_WLAN, !!status)) {
|
||||
pr_warning("Error setting wlan status to %d", status);
|
||||
pr_warn("Error setting wlan status to %d\n", status);
|
||||
return -EIO;
|
||||
}
|
||||
return 0;
|
||||
|
@ -792,7 +792,7 @@ static ssize_t store_wlan(struct device *dev, struct device_attribute *attr,
|
|||
static int asus_bluetooth_set(struct asus_laptop *asus, int status)
|
||||
{
|
||||
if (write_acpi_int(asus->handle, METHOD_BLUETOOTH, !!status)) {
|
||||
pr_warning("Error setting bluetooth status to %d", status);
|
||||
pr_warn("Error setting bluetooth status to %d\n", status);
|
||||
return -EIO;
|
||||
}
|
||||
return 0;
|
||||
|
@ -821,7 +821,7 @@ static ssize_t store_bluetooth(struct device *dev,
|
|||
static int asus_wimax_set(struct asus_laptop *asus, int status)
|
||||
{
|
||||
if (write_acpi_int(asus->handle, METHOD_WIMAX, !!status)) {
|
||||
pr_warning("Error setting wimax status to %d", status);
|
||||
pr_warn("Error setting wimax status to %d\n", status);
|
||||
return -EIO;
|
||||
}
|
||||
return 0;
|
||||
|
@ -850,7 +850,7 @@ static ssize_t store_wimax(struct device *dev,
|
|||
static int asus_wwan_set(struct asus_laptop *asus, int status)
|
||||
{
|
||||
if (write_acpi_int(asus->handle, METHOD_WWAN, !!status)) {
|
||||
pr_warning("Error setting wwan status to %d", status);
|
||||
pr_warn("Error setting wwan status to %d\n", status);
|
||||
return -EIO;
|
||||
}
|
||||
return 0;
|
||||
|
@ -880,7 +880,7 @@ static void asus_set_display(struct asus_laptop *asus, int value)
|
|||
{
|
||||
/* no sanity check needed for now */
|
||||
if (write_acpi_int(asus->handle, METHOD_SWITCH_DISPLAY, value))
|
||||
pr_warning("Error setting display\n");
|
||||
pr_warn("Error setting display\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -909,7 +909,7 @@ static ssize_t store_disp(struct device *dev, struct device_attribute *attr,
|
|||
static void asus_als_switch(struct asus_laptop *asus, int value)
|
||||
{
|
||||
if (write_acpi_int(asus->handle, METHOD_ALS_CONTROL, value))
|
||||
pr_warning("Error setting light sensor switch\n");
|
||||
pr_warn("Error setting light sensor switch\n");
|
||||
asus->light_switch = value;
|
||||
}
|
||||
|
||||
|
@ -937,7 +937,7 @@ static ssize_t store_lssw(struct device *dev, struct device_attribute *attr,
|
|||
static void asus_als_level(struct asus_laptop *asus, int value)
|
||||
{
|
||||
if (write_acpi_int(asus->handle, METHOD_ALS_LEVEL, value))
|
||||
pr_warning("Error setting light sensor level\n");
|
||||
pr_warn("Error setting light sensor level\n");
|
||||
asus->light_level = value;
|
||||
}
|
||||
|
||||
|
@ -976,7 +976,7 @@ static int asus_gps_status(struct asus_laptop *asus)
|
|||
rv = acpi_evaluate_integer(asus->handle, METHOD_GPS_STATUS,
|
||||
NULL, &status);
|
||||
if (ACPI_FAILURE(rv)) {
|
||||
pr_warning("Error reading GPS status\n");
|
||||
pr_warn("Error reading GPS status\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
return !!status;
|
||||
|
@ -1284,7 +1284,7 @@ static int asus_laptop_get_info(struct asus_laptop *asus)
|
|||
*/
|
||||
status = acpi_get_table(ACPI_SIG_DSDT, 1, &asus->dsdt_info);
|
||||
if (ACPI_FAILURE(status))
|
||||
pr_warning("Couldn't get the DSDT table header\n");
|
||||
pr_warn("Couldn't get the DSDT table header\n");
|
||||
|
||||
/* We have to write 0 on init this far for all ASUS models */
|
||||
if (write_acpi_int_ret(asus->handle, "INIT", 0, &buffer)) {
|
||||
|
@ -1296,7 +1296,7 @@ static int asus_laptop_get_info(struct asus_laptop *asus)
|
|||
status =
|
||||
acpi_evaluate_integer(asus->handle, "BSTS", NULL, &bsts_result);
|
||||
if (ACPI_FAILURE(status))
|
||||
pr_warning("Error calling BSTS\n");
|
||||
pr_warn("Error calling BSTS\n");
|
||||
else if (bsts_result)
|
||||
pr_notice("BSTS called, 0x%02x returned\n",
|
||||
(uint) bsts_result);
|
||||
|
|
|
@ -425,7 +425,7 @@ static void asus_rfkill_hotplug(struct asus_wmi *asus)
|
|||
if (asus->hotplug_slot) {
|
||||
bus = pci_find_bus(0, 1);
|
||||
if (!bus) {
|
||||
pr_warning("Unable to find PCI bus 1?\n");
|
||||
pr_warn("Unable to find PCI bus 1?\n");
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
|
@ -436,12 +436,12 @@ static void asus_rfkill_hotplug(struct asus_wmi *asus)
|
|||
absent = (l == 0xffffffff);
|
||||
|
||||
if (blocked != absent) {
|
||||
pr_warning("BIOS says wireless lan is %s, "
|
||||
"but the pci device is %s\n",
|
||||
blocked ? "blocked" : "unblocked",
|
||||
absent ? "absent" : "present");
|
||||
pr_warning("skipped wireless hotplug as probably "
|
||||
"inappropriate for this model\n");
|
||||
pr_warn("BIOS says wireless lan is %s, "
|
||||
"but the pci device is %s\n",
|
||||
blocked ? "blocked" : "unblocked",
|
||||
absent ? "absent" : "present");
|
||||
pr_warn("skipped wireless hotplug as probably "
|
||||
"inappropriate for this model\n");
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
|
@ -500,7 +500,7 @@ static int asus_register_rfkill_notifier(struct asus_wmi *asus, char *node)
|
|||
ACPI_SYSTEM_NOTIFY,
|
||||
asus_rfkill_notify, asus);
|
||||
if (ACPI_FAILURE(status))
|
||||
pr_warning("Failed to register notify on %s\n", node);
|
||||
pr_warn("Failed to register notify on %s\n", node);
|
||||
} else
|
||||
return -ENODEV;
|
||||
|
||||
|
@ -1223,7 +1223,7 @@ static int asus_wmi_sysfs_init(struct platform_device *device)
|
|||
/*
|
||||
* Platform device
|
||||
*/
|
||||
static int __init asus_wmi_platform_init(struct asus_wmi *asus)
|
||||
static int asus_wmi_platform_init(struct asus_wmi *asus)
|
||||
{
|
||||
int rv;
|
||||
|
||||
|
@ -1583,12 +1583,12 @@ static int asus_wmi_probe(struct platform_device *pdev)
|
|||
int ret;
|
||||
|
||||
if (!wmi_has_guid(ASUS_WMI_MGMT_GUID)) {
|
||||
pr_warning("Management GUID not found\n");
|
||||
pr_warn("Management GUID not found\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (wdrv->event_guid && !wmi_has_guid(wdrv->event_guid)) {
|
||||
pr_warning("Event GUID not found\n");
|
||||
pr_warn("Event GUID not found\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
|
|
@ -30,6 +30,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/slab.h>
|
||||
|
@ -581,8 +583,7 @@ static int read_led(const char *ledname, int ledmask)
|
|||
if (read_acpi_int(NULL, ledname, &led_status))
|
||||
return led_status;
|
||||
else
|
||||
printk(KERN_WARNING "Asus ACPI: Error reading LED "
|
||||
"status\n");
|
||||
pr_warn("Error reading LED status\n");
|
||||
}
|
||||
return (hotk->status & ledmask) ? 1 : 0;
|
||||
}
|
||||
|
@ -621,8 +622,7 @@ write_led(const char __user *buffer, unsigned long count,
|
|||
led_out = !led_out;
|
||||
|
||||
if (!write_acpi_int(hotk->handle, ledname, led_out, NULL))
|
||||
printk(KERN_WARNING "Asus ACPI: LED (%s) write failed\n",
|
||||
ledname);
|
||||
pr_warn("LED (%s) write failed\n", ledname);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
@ -679,8 +679,7 @@ static ssize_t ledd_proc_write(struct file *file, const char __user *buffer,
|
|||
if (rv > 0) {
|
||||
if (!write_acpi_int
|
||||
(hotk->handle, hotk->methods->mt_ledd, value, NULL))
|
||||
printk(KERN_WARNING
|
||||
"Asus ACPI: LED display write failed\n");
|
||||
pr_warn("LED display write failed\n");
|
||||
else
|
||||
hotk->ledd_status = (u32) value;
|
||||
}
|
||||
|
@ -838,8 +837,7 @@ static int get_lcd_state(void)
|
|||
} else {
|
||||
/* We don't have to check anything if we are here */
|
||||
if (!read_acpi_int(NULL, hotk->methods->lcd_status, &lcd))
|
||||
printk(KERN_WARNING
|
||||
"Asus ACPI: Error reading LCD status\n");
|
||||
pr_warn("Error reading LCD status\n");
|
||||
|
||||
if (hotk->model == L2D)
|
||||
lcd = ~lcd;
|
||||
|
@ -871,7 +869,7 @@ static int set_lcd_state(int value)
|
|||
the exact behaviour is simulated here */
|
||||
}
|
||||
if (ACPI_FAILURE(status))
|
||||
printk(KERN_WARNING "Asus ACPI: Error switching LCD\n");
|
||||
pr_warn("Error switching LCD\n");
|
||||
}
|
||||
return 0;
|
||||
|
||||
|
@ -915,13 +913,11 @@ static int read_brightness(struct backlight_device *bd)
|
|||
if (hotk->methods->brightness_get) { /* SPLV/GPLV laptop */
|
||||
if (!read_acpi_int(hotk->handle, hotk->methods->brightness_get,
|
||||
&value))
|
||||
printk(KERN_WARNING
|
||||
"Asus ACPI: Error reading brightness\n");
|
||||
pr_warn("Error reading brightness\n");
|
||||
} else if (hotk->methods->brightness_status) { /* For D1 for example */
|
||||
if (!read_acpi_int(NULL, hotk->methods->brightness_status,
|
||||
&value))
|
||||
printk(KERN_WARNING
|
||||
"Asus ACPI: Error reading brightness\n");
|
||||
pr_warn("Error reading brightness\n");
|
||||
} else /* No GPLV method */
|
||||
value = hotk->brightness;
|
||||
return value;
|
||||
|
@ -939,8 +935,7 @@ static int set_brightness(int value)
|
|||
if (hotk->methods->brightness_set) {
|
||||
if (!write_acpi_int(hotk->handle, hotk->methods->brightness_set,
|
||||
value, NULL)) {
|
||||
printk(KERN_WARNING
|
||||
"Asus ACPI: Error changing brightness\n");
|
||||
pr_warn("Error changing brightness\n");
|
||||
ret = -EIO;
|
||||
}
|
||||
goto out;
|
||||
|
@ -955,8 +950,7 @@ static int set_brightness(int value)
|
|||
NULL, NULL);
|
||||
(value > 0) ? value-- : value++;
|
||||
if (ACPI_FAILURE(status)) {
|
||||
printk(KERN_WARNING
|
||||
"Asus ACPI: Error changing brightness\n");
|
||||
pr_warn("Error changing brightness\n");
|
||||
ret = -EIO;
|
||||
}
|
||||
}
|
||||
|
@ -1008,7 +1002,7 @@ static void set_display(int value)
|
|||
/* no sanity check needed for now */
|
||||
if (!write_acpi_int(hotk->handle, hotk->methods->display_set,
|
||||
value, NULL))
|
||||
printk(KERN_WARNING "Asus ACPI: Error setting display\n");
|
||||
pr_warn("Error setting display\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1021,8 +1015,7 @@ static int disp_proc_show(struct seq_file *m, void *v)
|
|||
int value = 0;
|
||||
|
||||
if (!read_acpi_int(hotk->handle, hotk->methods->display_get, &value))
|
||||
printk(KERN_WARNING
|
||||
"Asus ACPI: Error reading display status\n");
|
||||
pr_warn("Error reading display status\n");
|
||||
value &= 0x07; /* needed for some models, shouldn't hurt others */
|
||||
seq_printf(m, "%d\n", value);
|
||||
return 0;
|
||||
|
@ -1068,7 +1061,7 @@ asus_proc_add(char *name, const struct file_operations *proc_fops, mode_t mode,
|
|||
proc = proc_create_data(name, mode, acpi_device_dir(device),
|
||||
proc_fops, acpi_driver_data(device));
|
||||
if (!proc) {
|
||||
printk(KERN_WARNING " Unable to create %s fs entry\n", name);
|
||||
pr_warn(" Unable to create %s fs entry\n", name);
|
||||
return -1;
|
||||
}
|
||||
proc->uid = asus_uid;
|
||||
|
@ -1085,8 +1078,8 @@ static int asus_hotk_add_fs(struct acpi_device *device)
|
|||
mode = S_IFREG | S_IRUGO | S_IWUSR | S_IWGRP;
|
||||
} else {
|
||||
mode = S_IFREG | S_IRUSR | S_IRGRP | S_IWUSR | S_IWGRP;
|
||||
printk(KERN_WARNING " asus_uid and asus_gid parameters are "
|
||||
"deprecated, use chown and chmod instead!\n");
|
||||
pr_warn(" asus_uid and asus_gid parameters are "
|
||||
"deprecated, use chown and chmod instead!\n");
|
||||
}
|
||||
|
||||
acpi_device_dir(device) = asus_proc_dir;
|
||||
|
@ -1099,8 +1092,7 @@ static int asus_hotk_add_fs(struct acpi_device *device)
|
|||
proc->uid = asus_uid;
|
||||
proc->gid = asus_gid;
|
||||
} else {
|
||||
printk(KERN_WARNING " Unable to create " PROC_INFO
|
||||
" fs entry\n");
|
||||
pr_warn(" Unable to create " PROC_INFO " fs entry\n");
|
||||
}
|
||||
|
||||
if (hotk->methods->mt_wled) {
|
||||
|
@ -1283,20 +1275,19 @@ static int asus_hotk_get_info(void)
|
|||
*/
|
||||
status = acpi_get_table(ACPI_SIG_DSDT, 1, &asus_info);
|
||||
if (ACPI_FAILURE(status))
|
||||
printk(KERN_WARNING " Couldn't get the DSDT table header\n");
|
||||
pr_warn(" Couldn't get the DSDT table header\n");
|
||||
|
||||
/* We have to write 0 on init this far for all ASUS models */
|
||||
if (!write_acpi_int(hotk->handle, "INIT", 0, &buffer)) {
|
||||
printk(KERN_ERR " Hotkey initialization failed\n");
|
||||
pr_err(" Hotkey initialization failed\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* This needs to be called for some laptops to init properly */
|
||||
if (!read_acpi_int(hotk->handle, "BSTS", &bsts_result))
|
||||
printk(KERN_WARNING " Error calling BSTS\n");
|
||||
pr_warn(" Error calling BSTS\n");
|
||||
else if (bsts_result)
|
||||
printk(KERN_NOTICE " BSTS called, 0x%02x returned\n",
|
||||
bsts_result);
|
||||
pr_notice(" BSTS called, 0x%02x returned\n", bsts_result);
|
||||
|
||||
/*
|
||||
* Try to match the object returned by INIT to the specific model.
|
||||
|
@ -1324,23 +1315,21 @@ static int asus_hotk_get_info(void)
|
|||
if (asus_info &&
|
||||
strncmp(asus_info->oem_table_id, "ODEM", 4) == 0) {
|
||||
hotk->model = P30;
|
||||
printk(KERN_NOTICE
|
||||
" Samsung P30 detected, supported\n");
|
||||
pr_notice(" Samsung P30 detected, supported\n");
|
||||
hotk->methods = &model_conf[hotk->model];
|
||||
kfree(model);
|
||||
return 0;
|
||||
} else {
|
||||
hotk->model = M2E;
|
||||
printk(KERN_NOTICE " unsupported model %s, trying "
|
||||
"default values\n", string);
|
||||
printk(KERN_NOTICE
|
||||
" send /proc/acpi/dsdt to the developers\n");
|
||||
pr_notice(" unsupported model %s, trying default values\n",
|
||||
string);
|
||||
pr_notice(" send /proc/acpi/dsdt to the developers\n");
|
||||
kfree(model);
|
||||
return -ENODEV;
|
||||
}
|
||||
}
|
||||
hotk->methods = &model_conf[hotk->model];
|
||||
printk(KERN_NOTICE " %s model detected, supported\n", string);
|
||||
pr_notice(" %s model detected, supported\n", string);
|
||||
|
||||
/* Sort of per-model blacklist */
|
||||
if (strncmp(string, "L2B", 3) == 0)
|
||||
|
@ -1385,7 +1374,7 @@ static int asus_hotk_check(void)
|
|||
if (hotk->device->status.present) {
|
||||
result = asus_hotk_get_info();
|
||||
} else {
|
||||
printk(KERN_ERR " Hotkey device not present, aborting\n");
|
||||
pr_err(" Hotkey device not present, aborting\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -1399,8 +1388,7 @@ static int asus_hotk_add(struct acpi_device *device)
|
|||
acpi_status status = AE_OK;
|
||||
int result;
|
||||
|
||||
printk(KERN_NOTICE "Asus Laptop ACPI Extras version %s\n",
|
||||
ASUS_ACPI_VERSION);
|
||||
pr_notice("Asus Laptop ACPI Extras version %s\n", ASUS_ACPI_VERSION);
|
||||
|
||||
hotk = kzalloc(sizeof(struct asus_hotk), GFP_KERNEL);
|
||||
if (!hotk)
|
||||
|
@ -1428,15 +1416,14 @@ static int asus_hotk_add(struct acpi_device *device)
|
|||
acpi_evaluate_object(NULL, hotk->methods->brightness_down,
|
||||
NULL, NULL);
|
||||
if (ACPI_FAILURE(status))
|
||||
printk(KERN_WARNING " Error changing brightness\n");
|
||||
pr_warn(" Error changing brightness\n");
|
||||
else {
|
||||
status =
|
||||
acpi_evaluate_object(NULL,
|
||||
hotk->methods->brightness_up,
|
||||
NULL, NULL);
|
||||
if (ACPI_FAILURE(status))
|
||||
printk(KERN_WARNING " Strange, error changing"
|
||||
" brightness\n");
|
||||
pr_warn(" Strange, error changing brightness\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1488,7 +1475,7 @@ static int __init asus_acpi_init(void)
|
|||
|
||||
asus_proc_dir = proc_mkdir(PROC_ASUS, acpi_root_dir);
|
||||
if (!asus_proc_dir) {
|
||||
printk(KERN_ERR "Asus ACPI: Unable to create /proc entry\n");
|
||||
pr_err("Unable to create /proc entry\n");
|
||||
acpi_bus_unregister_driver(&asus_hotk_driver);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
@ -1513,7 +1500,7 @@ static int __init asus_acpi_init(void)
|
|||
&asus_backlight_data,
|
||||
&props);
|
||||
if (IS_ERR(asus_backlight_device)) {
|
||||
printk(KERN_ERR "Could not register asus backlight device\n");
|
||||
pr_err("Could not register asus backlight device\n");
|
||||
asus_backlight_device = NULL;
|
||||
asus_acpi_exit();
|
||||
return -ENODEV;
|
||||
|
|
|
@ -68,6 +68,8 @@
|
|||
* only enabled on a JHL90 board until it is verified that they work on the
|
||||
* other boards too. See the extra_features variable. */
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
|
@ -760,16 +762,14 @@ static struct rfkill *bt_rfkill;
|
|||
|
||||
static int dmi_check_cb(const struct dmi_system_id *id)
|
||||
{
|
||||
printk(KERN_INFO DRIVER_NAME": Identified laptop model '%s'\n",
|
||||
id->ident);
|
||||
pr_info("Identified laptop model '%s'\n", id->ident);
|
||||
extra_features = false;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int dmi_check_cb_extra(const struct dmi_system_id *id)
|
||||
{
|
||||
printk(KERN_INFO DRIVER_NAME": Identified laptop model '%s', "
|
||||
"enabling extra features\n",
|
||||
pr_info("Identified laptop model '%s', enabling extra features\n",
|
||||
id->ident);
|
||||
extra_features = true;
|
||||
return 1;
|
||||
|
@ -956,14 +956,12 @@ static int __init compal_init(void)
|
|||
int ret;
|
||||
|
||||
if (acpi_disabled) {
|
||||
printk(KERN_ERR DRIVER_NAME": ACPI needs to be enabled for "
|
||||
"this driver to work!\n");
|
||||
pr_err("ACPI needs to be enabled for this driver to work!\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (!force && !dmi_check_system(compal_dmi_table)) {
|
||||
printk(KERN_ERR DRIVER_NAME": Motherboard not recognized (You "
|
||||
"could try the module's force-parameter)");
|
||||
pr_err("Motherboard not recognized (You could try the module's force-parameter)\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
@ -998,8 +996,7 @@ static int __init compal_init(void)
|
|||
if (ret)
|
||||
goto err_rfkill;
|
||||
|
||||
printk(KERN_INFO DRIVER_NAME": Driver "DRIVER_VERSION
|
||||
" successfully loaded\n");
|
||||
pr_info("Driver " DRIVER_VERSION " successfully loaded\n");
|
||||
return 0;
|
||||
|
||||
err_rfkill:
|
||||
|
@ -1064,7 +1061,7 @@ static void __exit compal_cleanup(void)
|
|||
rfkill_destroy(wifi_rfkill);
|
||||
rfkill_destroy(bt_rfkill);
|
||||
|
||||
printk(KERN_INFO DRIVER_NAME": Driver unloaded\n");
|
||||
pr_info("Driver unloaded\n");
|
||||
}
|
||||
|
||||
static int __devexit compal_remove(struct platform_device *pdev)
|
||||
|
@ -1074,8 +1071,7 @@ static int __devexit compal_remove(struct platform_device *pdev)
|
|||
if (!extra_features)
|
||||
return 0;
|
||||
|
||||
printk(KERN_INFO DRIVER_NAME": Unloading: resetting fan control "
|
||||
"to motherboard\n");
|
||||
pr_info("Unloading: resetting fan control to motherboard\n");
|
||||
pwm_disable_control();
|
||||
|
||||
data = platform_get_drvdata(pdev);
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
|
@ -434,8 +436,7 @@ static int __init dell_setup_rfkill(void)
|
|||
int ret;
|
||||
|
||||
if (dmi_check_system(dell_blacklist)) {
|
||||
printk(KERN_INFO "dell-laptop: Blacklisted hardware detected - "
|
||||
"not enabling rfkill\n");
|
||||
pr_info("Blacklisted hardware detected - not enabling rfkill\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -606,7 +607,7 @@ static int __init dell_init(void)
|
|||
dmi_walk(find_tokens, NULL);
|
||||
|
||||
if (!da_tokens) {
|
||||
printk(KERN_INFO "dell-laptop: Unable to find dmi tokens\n");
|
||||
pr_info("Unable to find dmi tokens\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
@ -636,14 +637,13 @@ static int __init dell_init(void)
|
|||
ret = dell_setup_rfkill();
|
||||
|
||||
if (ret) {
|
||||
printk(KERN_WARNING "dell-laptop: Unable to setup rfkill\n");
|
||||
pr_warn("Unable to setup rfkill\n");
|
||||
goto fail_rfkill;
|
||||
}
|
||||
|
||||
ret = i8042_install_filter(dell_laptop_i8042_filter);
|
||||
if (ret) {
|
||||
printk(KERN_WARNING
|
||||
"dell-laptop: Unable to install key filter\n");
|
||||
pr_warn("Unable to install key filter\n");
|
||||
goto fail_filter;
|
||||
}
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
|
@ -138,7 +139,7 @@ static int __init dell_wmi_aio_init(void)
|
|||
|
||||
guid = dell_wmi_aio_find();
|
||||
if (!guid) {
|
||||
pr_warning("No known WMI GUID found\n");
|
||||
pr_warn("No known WMI GUID found\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
|
|
|
@ -23,6 +23,8 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
|
@ -141,7 +143,7 @@ static void dell_wmi_notify(u32 value, void *context)
|
|||
|
||||
status = wmi_get_event_data(value, &response);
|
||||
if (status != AE_OK) {
|
||||
printk(KERN_INFO "dell-wmi: bad event status 0x%x\n", status);
|
||||
pr_info("bad event status 0x%x\n", status);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -153,8 +155,8 @@ static void dell_wmi_notify(u32 value, void *context)
|
|||
u16 *buffer_entry = (u16 *)obj->buffer.pointer;
|
||||
|
||||
if (dell_new_hk_type && (buffer_entry[1] != 0x10)) {
|
||||
printk(KERN_INFO "dell-wmi: Received unknown WMI event"
|
||||
" (0x%x)\n", buffer_entry[1]);
|
||||
pr_info("Received unknown WMI event (0x%x)\n",
|
||||
buffer_entry[1]);
|
||||
kfree(obj);
|
||||
return;
|
||||
}
|
||||
|
@ -167,8 +169,7 @@ static void dell_wmi_notify(u32 value, void *context)
|
|||
key = sparse_keymap_entry_from_scancode(dell_wmi_input_dev,
|
||||
reported_key);
|
||||
if (!key) {
|
||||
printk(KERN_INFO "dell-wmi: Unknown key %x pressed\n",
|
||||
reported_key);
|
||||
pr_info("Unknown key %x pressed\n", reported_key);
|
||||
} else if ((key->keycode == KEY_BRIGHTNESSUP ||
|
||||
key->keycode == KEY_BRIGHTNESSDOWN) && acpi_video) {
|
||||
/* Don't report brightness notifications that will also
|
||||
|
@ -275,7 +276,7 @@ static int __init dell_wmi_init(void)
|
|||
acpi_status status;
|
||||
|
||||
if (!wmi_has_guid(DELL_EVENT_GUID)) {
|
||||
printk(KERN_WARNING "dell-wmi: No known WMI GUID found\n");
|
||||
pr_warn("No known WMI GUID found\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
@ -290,9 +291,7 @@ static int __init dell_wmi_init(void)
|
|||
dell_wmi_notify, NULL);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
dell_wmi_input_destroy();
|
||||
printk(KERN_ERR
|
||||
"dell-wmi: Unable to register notify handler - %d\n",
|
||||
status);
|
||||
pr_err("Unable to register notify handler - %d\n", status);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
|
|
@ -228,7 +228,7 @@ static int set_acpi(struct eeepc_laptop *eeepc, int cm, int value)
|
|||
return -ENODEV;
|
||||
|
||||
if (write_acpi_int(eeepc->handle, method, value))
|
||||
pr_warning("Error writing %s\n", method);
|
||||
pr_warn("Error writing %s\n", method);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -243,7 +243,7 @@ static int get_acpi(struct eeepc_laptop *eeepc, int cm)
|
|||
return -ENODEV;
|
||||
|
||||
if (read_acpi_int(eeepc->handle, method, &value))
|
||||
pr_warning("Error reading %s\n", method);
|
||||
pr_warn("Error reading %s\n", method);
|
||||
return value;
|
||||
}
|
||||
|
||||
|
@ -261,7 +261,7 @@ static int acpi_setter_handle(struct eeepc_laptop *eeepc, int cm,
|
|||
status = acpi_get_handle(eeepc->handle, (char *)method,
|
||||
handle);
|
||||
if (status != AE_OK) {
|
||||
pr_warning("Error finding %s\n", method);
|
||||
pr_warn("Error finding %s\n", method);
|
||||
return -ENODEV;
|
||||
}
|
||||
return 0;
|
||||
|
@ -417,7 +417,7 @@ static ssize_t store_cpufv_disabled(struct device *dev,
|
|||
switch (value) {
|
||||
case 0:
|
||||
if (eeepc->cpufv_disabled)
|
||||
pr_warning("cpufv enabled (not officially supported "
|
||||
pr_warn("cpufv enabled (not officially supported "
|
||||
"on this model)\n");
|
||||
eeepc->cpufv_disabled = false;
|
||||
return rv;
|
||||
|
@ -609,7 +609,7 @@ static void eeepc_rfkill_hotplug(struct eeepc_laptop *eeepc, acpi_handle handle)
|
|||
bus = port->subordinate;
|
||||
|
||||
if (!bus) {
|
||||
pr_warning("Unable to find PCI bus?\n");
|
||||
pr_warn("Unable to find PCI bus 1?\n");
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
|
@ -621,12 +621,12 @@ static void eeepc_rfkill_hotplug(struct eeepc_laptop *eeepc, acpi_handle handle)
|
|||
absent = (l == 0xffffffff);
|
||||
|
||||
if (blocked != absent) {
|
||||
pr_warning("BIOS says wireless lan is %s, "
|
||||
"but the pci device is %s\n",
|
||||
pr_warn("BIOS says wireless lan is %s, "
|
||||
"but the pci device is %s\n",
|
||||
blocked ? "blocked" : "unblocked",
|
||||
absent ? "absent" : "present");
|
||||
pr_warning("skipped wireless hotplug as probably "
|
||||
"inappropriate for this model\n");
|
||||
pr_warn("skipped wireless hotplug as probably "
|
||||
"inappropriate for this model\n");
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
|
@ -691,7 +691,8 @@ static int eeepc_register_rfkill_notifier(struct eeepc_laptop *eeepc,
|
|||
eeepc_rfkill_notify,
|
||||
eeepc);
|
||||
if (ACPI_FAILURE(status))
|
||||
pr_warning("Failed to register notify on %s\n", node);
|
||||
pr_warn("Failed to register notify on %s\n", node);
|
||||
|
||||
/*
|
||||
* Refresh pci hotplug in case the rfkill state was
|
||||
* changed during setup.
|
||||
|
|
|
@ -84,7 +84,7 @@ static const struct key_entry eeepc_wmi_keymap[] = {
|
|||
static acpi_status eeepc_wmi_parse_device(acpi_handle handle, u32 level,
|
||||
void *context, void **retval)
|
||||
{
|
||||
pr_warning("Found legacy ATKD device (%s)", EEEPC_ACPI_HID);
|
||||
pr_warn("Found legacy ATKD device (%s)\n", EEEPC_ACPI_HID);
|
||||
*(bool *)context = true;
|
||||
return AE_CTRL_TERMINATE;
|
||||
}
|
||||
|
@ -105,12 +105,12 @@ static int eeepc_wmi_check_atkd(void)
|
|||
static int eeepc_wmi_probe(struct platform_device *pdev)
|
||||
{
|
||||
if (eeepc_wmi_check_atkd()) {
|
||||
pr_warning("WMI device present, but legacy ATKD device is also "
|
||||
"present and enabled.");
|
||||
pr_warning("You probably booted with acpi_osi=\"Linux\" or "
|
||||
"acpi_osi=\"!Windows 2009\"");
|
||||
pr_warning("Can't load eeepc-wmi, use default acpi_osi "
|
||||
"(preferred) or eeepc-laptop");
|
||||
pr_warn("WMI device present, but legacy ATKD device is also "
|
||||
"present and enabled\n");
|
||||
pr_warn("You probably booted with acpi_osi=\"Linux\" or "
|
||||
"acpi_osi=\"!Windows 2009\"\n");
|
||||
pr_warn("Can't load eeepc-wmi, use default acpi_osi "
|
||||
"(preferred) or eeepc-laptop\n");
|
||||
return -EBUSY;
|
||||
}
|
||||
return 0;
|
||||
|
|
|
@ -56,6 +56,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
|
@ -585,8 +587,7 @@ static struct platform_driver fujitsupf_driver = {
|
|||
static void dmi_check_cb_common(const struct dmi_system_id *id)
|
||||
{
|
||||
acpi_handle handle;
|
||||
printk(KERN_INFO "fujitsu-laptop: Identified laptop model '%s'.\n",
|
||||
id->ident);
|
||||
pr_info("Identified laptop model '%s'\n", id->ident);
|
||||
if (use_alt_lcd_levels == -1) {
|
||||
if (ACPI_SUCCESS(acpi_get_handle(NULL,
|
||||
"\\_SB.PCI0.LPCB.FJEX.SBL2", &handle)))
|
||||
|
@ -691,11 +692,11 @@ static int acpi_fujitsu_add(struct acpi_device *device)
|
|||
|
||||
result = acpi_bus_update_power(fujitsu->acpi_handle, &state);
|
||||
if (result) {
|
||||
printk(KERN_ERR "Error reading power state\n");
|
||||
pr_err("Error reading power state\n");
|
||||
goto err_unregister_input_dev;
|
||||
}
|
||||
|
||||
printk(KERN_INFO "ACPI: %s [%s] (%s)\n",
|
||||
pr_info("ACPI: %s [%s] (%s)\n",
|
||||
acpi_device_name(device), acpi_device_bid(device),
|
||||
!device->power.state ? "on" : "off");
|
||||
|
||||
|
@ -707,7 +708,7 @@ static int acpi_fujitsu_add(struct acpi_device *device)
|
|||
if (ACPI_FAILURE
|
||||
(acpi_evaluate_object
|
||||
(device->handle, METHOD_NAME__INI, NULL, NULL)))
|
||||
printk(KERN_ERR "_INI Method failed\n");
|
||||
pr_err("_INI Method failed\n");
|
||||
}
|
||||
|
||||
/* do config (detect defaults) */
|
||||
|
@ -827,7 +828,7 @@ static int acpi_fujitsu_hotkey_add(struct acpi_device *device)
|
|||
error = kfifo_alloc(&fujitsu_hotkey->fifo, RINGBUFFERSIZE * sizeof(int),
|
||||
GFP_KERNEL);
|
||||
if (error) {
|
||||
printk(KERN_ERR "kfifo_alloc failed\n");
|
||||
pr_err("kfifo_alloc failed\n");
|
||||
goto err_stop;
|
||||
}
|
||||
|
||||
|
@ -859,13 +860,13 @@ static int acpi_fujitsu_hotkey_add(struct acpi_device *device)
|
|||
|
||||
result = acpi_bus_update_power(fujitsu_hotkey->acpi_handle, &state);
|
||||
if (result) {
|
||||
printk(KERN_ERR "Error reading power state\n");
|
||||
pr_err("Error reading power state\n");
|
||||
goto err_unregister_input_dev;
|
||||
}
|
||||
|
||||
printk(KERN_INFO "ACPI: %s [%s] (%s)\n",
|
||||
acpi_device_name(device), acpi_device_bid(device),
|
||||
!device->power.state ? "on" : "off");
|
||||
pr_info("ACPI: %s [%s] (%s)\n",
|
||||
acpi_device_name(device), acpi_device_bid(device),
|
||||
!device->power.state ? "on" : "off");
|
||||
|
||||
fujitsu_hotkey->dev = device;
|
||||
|
||||
|
@ -875,7 +876,7 @@ static int acpi_fujitsu_hotkey_add(struct acpi_device *device)
|
|||
if (ACPI_FAILURE
|
||||
(acpi_evaluate_object
|
||||
(device->handle, METHOD_NAME__INI, NULL, NULL)))
|
||||
printk(KERN_ERR "_INI Method failed\n");
|
||||
pr_err("_INI Method failed\n");
|
||||
}
|
||||
|
||||
i = 0;
|
||||
|
@ -897,8 +898,7 @@ static int acpi_fujitsu_hotkey_add(struct acpi_device *device)
|
|||
call_fext_func(FUNC_RFKILL, 0x4, 0x0, 0x0);
|
||||
|
||||
/* Suspect this is a keymap of the application panel, print it */
|
||||
printk(KERN_INFO "fujitsu-laptop: BTNI: [0x%x]\n",
|
||||
call_fext_func(FUNC_BUTTONS, 0x0, 0x0, 0x0));
|
||||
pr_info("BTNI: [0x%x]\n", call_fext_func(FUNC_BUTTONS, 0x0, 0x0, 0x0));
|
||||
|
||||
#if defined(CONFIG_LEDS_CLASS) || defined(CONFIG_LEDS_CLASS_MODULE)
|
||||
if (call_fext_func(FUNC_LEDS, 0x0, 0x0, 0x0) & LOGOLAMP_POWERON) {
|
||||
|
@ -907,8 +907,8 @@ static int acpi_fujitsu_hotkey_add(struct acpi_device *device)
|
|||
if (result == 0) {
|
||||
fujitsu_hotkey->logolamp_registered = 1;
|
||||
} else {
|
||||
printk(KERN_ERR "fujitsu-laptop: Could not register "
|
||||
"LED handler for logo lamp, error %i\n", result);
|
||||
pr_err("Could not register LED handler for logo lamp, error %i\n",
|
||||
result);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -919,8 +919,8 @@ static int acpi_fujitsu_hotkey_add(struct acpi_device *device)
|
|||
if (result == 0) {
|
||||
fujitsu_hotkey->kblamps_registered = 1;
|
||||
} else {
|
||||
printk(KERN_ERR "fujitsu-laptop: Could not register "
|
||||
"LED handler for keyboard lamps, error %i\n", result);
|
||||
pr_err("Could not register LED handler for keyboard lamps, error %i\n",
|
||||
result);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -1169,8 +1169,7 @@ static int __init fujitsu_init(void)
|
|||
fujitsu->bl_device->props.power = 0;
|
||||
}
|
||||
|
||||
printk(KERN_INFO "fujitsu-laptop: driver " FUJITSU_DRIVER_VERSION
|
||||
" successfully loaded.\n");
|
||||
pr_info("driver " FUJITSU_DRIVER_VERSION " successfully loaded\n");
|
||||
|
||||
return 0;
|
||||
|
||||
|
@ -1216,7 +1215,7 @@ static void __exit fujitsu_cleanup(void)
|
|||
|
||||
kfree(fujitsu);
|
||||
|
||||
printk(KERN_INFO "fujitsu-laptop: driver unloaded.\n");
|
||||
pr_info("driver unloaded\n");
|
||||
}
|
||||
|
||||
module_init(fujitsu_init);
|
||||
|
|
|
@ -26,6 +26,8 @@
|
|||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/delay.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/input-polldev.h>
|
||||
|
@ -238,7 +240,7 @@ static int hdaps_device_init(void)
|
|||
__check_latch(0x1611, 0x01))
|
||||
goto out;
|
||||
|
||||
printk(KERN_DEBUG "hdaps: initial latch check good (0x%02x).\n",
|
||||
printk(KERN_DEBUG "hdaps: initial latch check good (0x%02x)\n",
|
||||
__get_latch(0x1611));
|
||||
|
||||
outb(0x17, 0x1610);
|
||||
|
@ -299,7 +301,7 @@ static int hdaps_probe(struct platform_device *dev)
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
printk(KERN_INFO "hdaps: device successfully initialized.\n");
|
||||
pr_info("device successfully initialized\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -480,7 +482,7 @@ static struct attribute_group hdaps_attribute_group = {
|
|||
/* hdaps_dmi_match - found a match. return one, short-circuiting the hunt. */
|
||||
static int __init hdaps_dmi_match(const struct dmi_system_id *id)
|
||||
{
|
||||
printk(KERN_INFO "hdaps: %s detected.\n", id->ident);
|
||||
pr_info("%s detected\n", id->ident);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -488,8 +490,7 @@ static int __init hdaps_dmi_match(const struct dmi_system_id *id)
|
|||
static int __init hdaps_dmi_match_invert(const struct dmi_system_id *id)
|
||||
{
|
||||
hdaps_invert = (unsigned long)id->driver_data;
|
||||
printk(KERN_INFO "hdaps: inverting axis (%u) readings.\n",
|
||||
hdaps_invert);
|
||||
pr_info("inverting axis (%u) readings\n", hdaps_invert);
|
||||
return hdaps_dmi_match(id);
|
||||
}
|
||||
|
||||
|
@ -543,7 +544,7 @@ static int __init hdaps_init(void)
|
|||
int ret;
|
||||
|
||||
if (!dmi_check_system(hdaps_whitelist)) {
|
||||
printk(KERN_WARNING "hdaps: supported laptop not found!\n");
|
||||
pr_warn("supported laptop not found!\n");
|
||||
ret = -ENODEV;
|
||||
goto out;
|
||||
}
|
||||
|
@ -595,7 +596,7 @@ static int __init hdaps_init(void)
|
|||
if (ret)
|
||||
goto out_idev;
|
||||
|
||||
printk(KERN_INFO "hdaps: driver successfully loaded.\n");
|
||||
pr_info("driver successfully loaded\n");
|
||||
return 0;
|
||||
|
||||
out_idev:
|
||||
|
@ -609,7 +610,7 @@ static int __init hdaps_init(void)
|
|||
out_region:
|
||||
release_region(HDAPS_LOW_PORT, HDAPS_NR_PORTS);
|
||||
out:
|
||||
printk(KERN_WARNING "hdaps: driver init failed (ret=%d)!\n", ret);
|
||||
pr_warn("driver init failed (ret=%d)!\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -622,7 +623,7 @@ static void __exit hdaps_exit(void)
|
|||
platform_driver_unregister(&hdaps_driver);
|
||||
release_region(HDAPS_LOW_PORT, HDAPS_NR_PORTS);
|
||||
|
||||
printk(KERN_INFO "hdaps: driver unloaded.\n");
|
||||
pr_info("driver unloaded\n");
|
||||
}
|
||||
|
||||
module_init(hdaps_init);
|
||||
|
|
|
@ -24,6 +24,8 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
|
@ -54,9 +56,6 @@ MODULE_ALIAS("wmi:5FB7F034-2C63-45e9-BE91-3D44E2C707E4");
|
|||
#define HPWMI_HOTKEY_QUERY 0xc
|
||||
#define HPWMI_WIRELESS2_QUERY 0x1b
|
||||
|
||||
#define PREFIX "HP WMI: "
|
||||
#define UNIMP "Unimplemented "
|
||||
|
||||
enum hp_wmi_radio {
|
||||
HPWMI_WIFI = 0,
|
||||
HPWMI_BLUETOOTH = 1,
|
||||
|
@ -228,9 +227,8 @@ static int hp_wmi_perform_query(int query, int write, void *buffer,
|
|||
|
||||
if (bios_return->return_code) {
|
||||
if (bios_return->return_code != HPWMI_RET_UNKNOWN_CMDTYPE)
|
||||
printk(KERN_WARNING PREFIX "query 0x%x returned "
|
||||
"error 0x%x\n",
|
||||
query, bios_return->return_code);
|
||||
pr_warn("query 0x%x returned error 0x%x\n",
|
||||
query, bios_return->return_code);
|
||||
kfree(obj);
|
||||
return bios_return->return_code;
|
||||
}
|
||||
|
@ -384,8 +382,7 @@ static int hp_wmi_rfkill2_refresh(void)
|
|||
|
||||
if (num >= state.count ||
|
||||
devstate->rfkill_id != rfkill2[i].id) {
|
||||
printk(KERN_WARNING PREFIX "power configuration of "
|
||||
"the wireless devices unexpectedly changed\n");
|
||||
pr_warn("power configuration of the wireless devices unexpectedly changed\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -471,7 +468,7 @@ static void hp_wmi_notify(u32 value, void *context)
|
|||
|
||||
status = wmi_get_event_data(value, &response);
|
||||
if (status != AE_OK) {
|
||||
printk(KERN_INFO PREFIX "bad event status 0x%x\n", status);
|
||||
pr_info("bad event status 0x%x\n", status);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -480,8 +477,7 @@ static void hp_wmi_notify(u32 value, void *context)
|
|||
if (!obj)
|
||||
return;
|
||||
if (obj->type != ACPI_TYPE_BUFFER) {
|
||||
printk(KERN_INFO "hp-wmi: Unknown response received %d\n",
|
||||
obj->type);
|
||||
pr_info("Unknown response received %d\n", obj->type);
|
||||
kfree(obj);
|
||||
return;
|
||||
}
|
||||
|
@ -498,8 +494,7 @@ static void hp_wmi_notify(u32 value, void *context)
|
|||
event_id = *location;
|
||||
event_data = *(location + 2);
|
||||
} else {
|
||||
printk(KERN_INFO "hp-wmi: Unknown buffer length %d\n",
|
||||
obj->buffer.length);
|
||||
pr_info("Unknown buffer length %d\n", obj->buffer.length);
|
||||
kfree(obj);
|
||||
return;
|
||||
}
|
||||
|
@ -527,8 +522,7 @@ static void hp_wmi_notify(u32 value, void *context)
|
|||
|
||||
if (!sparse_keymap_report_event(hp_wmi_input_dev,
|
||||
key_code, 1, true))
|
||||
printk(KERN_INFO PREFIX "Unknown key code - 0x%x\n",
|
||||
key_code);
|
||||
pr_info("Unknown key code - 0x%x\n", key_code);
|
||||
break;
|
||||
case HPWMI_WIRELESS:
|
||||
if (rfkill2_count) {
|
||||
|
@ -550,14 +544,12 @@ static void hp_wmi_notify(u32 value, void *context)
|
|||
hp_wmi_get_hw_state(HPWMI_WWAN));
|
||||
break;
|
||||
case HPWMI_CPU_BATTERY_THROTTLE:
|
||||
printk(KERN_INFO PREFIX UNIMP "CPU throttle because of 3 Cell"
|
||||
" battery event detected\n");
|
||||
pr_info("Unimplemented CPU throttle because of 3 Cell battery event detected\n");
|
||||
break;
|
||||
case HPWMI_LOCK_SWITCH:
|
||||
break;
|
||||
default:
|
||||
printk(KERN_INFO PREFIX "Unknown event_id - %d - 0x%x\n",
|
||||
event_id, event_data);
|
||||
pr_info("Unknown event_id - %d - 0x%x\n", event_id, event_data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -705,7 +697,7 @@ static int __devinit hp_wmi_rfkill2_setup(struct platform_device *device)
|
|||
return err;
|
||||
|
||||
if (state.count > HPWMI_MAX_RFKILL2_DEVICES) {
|
||||
printk(KERN_WARNING PREFIX "unable to parse 0x1b query output\n");
|
||||
pr_warn("unable to parse 0x1b query output\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -727,14 +719,14 @@ static int __devinit hp_wmi_rfkill2_setup(struct platform_device *device)
|
|||
name = "hp-wwan";
|
||||
break;
|
||||
default:
|
||||
printk(KERN_WARNING PREFIX "unknown device type 0x%x\n",
|
||||
state.device[i].radio_type);
|
||||
pr_warn("unknown device type 0x%x\n",
|
||||
state.device[i].radio_type);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!state.device[i].vendor_id) {
|
||||
printk(KERN_WARNING PREFIX "zero device %d while %d "
|
||||
"reported\n", i, state.count);
|
||||
pr_warn("zero device %d while %d reported\n",
|
||||
i, state.count);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -755,8 +747,7 @@ static int __devinit hp_wmi_rfkill2_setup(struct platform_device *device)
|
|||
IS_HWBLOCKED(state.device[i].power));
|
||||
|
||||
if (!(state.device[i].power & HPWMI_POWER_BIOS))
|
||||
printk(KERN_INFO PREFIX "device %s blocked by BIOS\n",
|
||||
name);
|
||||
pr_info("device %s blocked by BIOS\n", name);
|
||||
|
||||
err = rfkill_register(rfkill);
|
||||
if (err) {
|
||||
|
|
|
@ -22,6 +22,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/module.h>
|
||||
|
@ -69,9 +71,10 @@ struct ibm_rtl_table {
|
|||
#define RTL_SIGNATURE 0x0000005f4c54525fULL
|
||||
#define RTL_MASK 0x000000ffffffffffULL
|
||||
|
||||
#define RTL_DEBUG(A, ...) do { \
|
||||
if (debug) \
|
||||
pr_info("ibm-rtl: " A, ##__VA_ARGS__ ); \
|
||||
#define RTL_DEBUG(fmt, ...) \
|
||||
do { \
|
||||
if (debug) \
|
||||
pr_info(fmt, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
static DEFINE_MUTEX(rtl_lock);
|
||||
|
@ -114,7 +117,7 @@ static int ibm_rtl_write(u8 value)
|
|||
int ret = 0, count = 0;
|
||||
static u32 cmd_port_val;
|
||||
|
||||
RTL_DEBUG("%s(%d)\n", __FUNCTION__, value);
|
||||
RTL_DEBUG("%s(%d)\n", __func__, value);
|
||||
|
||||
value = value == 1 ? RTL_CMD_ENTER_PRTM : RTL_CMD_EXIT_PRTM;
|
||||
|
||||
|
@ -144,8 +147,8 @@ static int ibm_rtl_write(u8 value)
|
|||
while (ioread8(&rtl_table->command)) {
|
||||
msleep(10);
|
||||
if (count++ > 500) {
|
||||
pr_err("ibm-rtl: Hardware not responding to "
|
||||
"mode switch request\n");
|
||||
pr_err("Hardware not responding to "
|
||||
"mode switch request\n");
|
||||
ret = -EIO;
|
||||
break;
|
||||
}
|
||||
|
@ -250,7 +253,7 @@ static int __init ibm_rtl_init(void) {
|
|||
int ret = -ENODEV, i;
|
||||
|
||||
if (force)
|
||||
pr_warning("ibm-rtl: module loaded by force\n");
|
||||
pr_warn("module loaded by force\n");
|
||||
/* first ensure that we are running on IBM HW */
|
||||
else if (efi_enabled || !dmi_check_system(ibm_rtl_dmi_table))
|
||||
return -ENODEV;
|
||||
|
@ -288,19 +291,19 @@ static int __init ibm_rtl_init(void) {
|
|||
if ((readq(&tmp->signature) & RTL_MASK) == RTL_SIGNATURE) {
|
||||
phys_addr_t addr;
|
||||
unsigned int plen;
|
||||
RTL_DEBUG("found RTL_SIGNATURE at %#llx\n", (u64)tmp);
|
||||
RTL_DEBUG("found RTL_SIGNATURE at %p\n", tmp);
|
||||
rtl_table = tmp;
|
||||
/* The address, value, width and offset are platform
|
||||
* dependent and found in the ibm_rtl_table */
|
||||
rtl_cmd_width = ioread8(&rtl_table->cmd_granularity);
|
||||
rtl_cmd_type = ioread8(&rtl_table->cmd_address_type);
|
||||
RTL_DEBUG("rtl_cmd_width = %u, rtl_cmd_type = %u\n",
|
||||
rtl_cmd_width, rtl_cmd_type);
|
||||
rtl_cmd_width, rtl_cmd_type);
|
||||
addr = ioread32(&rtl_table->cmd_port_address);
|
||||
RTL_DEBUG("addr = %#llx\n", (unsigned long long)addr);
|
||||
plen = rtl_cmd_width/sizeof(char);
|
||||
rtl_cmd_addr = rtl_port_map(addr, plen);
|
||||
RTL_DEBUG("rtl_cmd_addr = %#llx\n", (u64)rtl_cmd_addr);
|
||||
RTL_DEBUG("rtl_cmd_addr = %p\n", rtl_cmd_addr);
|
||||
if (!rtl_cmd_addr) {
|
||||
ret = -ENOMEM;
|
||||
break;
|
||||
|
|
|
@ -20,6 +20,8 @@
|
|||
* 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
|
|
|
@ -27,6 +27,8 @@
|
|||
* to get/set bandwidth.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
|
@ -135,8 +137,7 @@ static int memory_set_cur_bandwidth(struct thermal_cooling_device *cdev,
|
|||
acpi_evaluate_integer(handle, MEMORY_SET_BANDWIDTH, &arg_list,
|
||||
&temp);
|
||||
|
||||
printk(KERN_INFO
|
||||
"Bandwidth value was %ld: status is %d\n", state, status);
|
||||
pr_info("Bandwidth value was %ld: status is %d\n", state, status);
|
||||
if (ACPI_FAILURE(status))
|
||||
return -EFAULT;
|
||||
|
||||
|
|
|
@ -23,58 +23,48 @@
|
|||
#include <linux/slab.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/input.h>
|
||||
|
||||
#include <asm/intel_scu_ipc.h>
|
||||
|
||||
#define DRIVER_NAME "msic_power_btn"
|
||||
|
||||
#define MSIC_IRQ_STAT 0x02
|
||||
#define MSIC_IRQ_PB (1 << 0)
|
||||
#define MSIC_PB_CONFIG 0x3e
|
||||
#define MSIC_PB_STATUS 0x3f
|
||||
#define MSIC_PB_LEVEL (1 << 3) /* 1 - release, 0 - press */
|
||||
|
||||
struct mfld_pb_priv {
|
||||
struct input_dev *input;
|
||||
unsigned int irq;
|
||||
};
|
||||
#define MSIC_PB_LEVEL (1 << 3) /* 1 - release, 0 - press */
|
||||
|
||||
static irqreturn_t mfld_pb_isr(int irq, void *dev_id)
|
||||
{
|
||||
struct mfld_pb_priv *priv = dev_id;
|
||||
struct input_dev *input = dev_id;
|
||||
int ret;
|
||||
u8 pbstat;
|
||||
|
||||
ret = intel_scu_ipc_ioread8(MSIC_PB_STATUS, &pbstat);
|
||||
if (ret < 0)
|
||||
return IRQ_HANDLED;
|
||||
|
||||
input_event(priv->input, EV_KEY, KEY_POWER, !(pbstat & MSIC_PB_LEVEL));
|
||||
input_sync(priv->input);
|
||||
if (ret < 0) {
|
||||
dev_err(input->dev.parent, "Read error %d while reading"
|
||||
" MSIC_PB_STATUS\n", ret);
|
||||
} else {
|
||||
input_event(input, EV_KEY, KEY_POWER,
|
||||
!(pbstat & MSIC_PB_LEVEL));
|
||||
input_sync(input);
|
||||
}
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static int __devinit mfld_pb_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct mfld_pb_priv *priv;
|
||||
struct input_dev *input;
|
||||
int irq;
|
||||
int irq = platform_get_irq(pdev, 0);
|
||||
int error;
|
||||
|
||||
irq = platform_get_irq(pdev, 0);
|
||||
if (irq < 0)
|
||||
return -EINVAL;
|
||||
|
||||
priv = kzalloc(sizeof(struct mfld_pb_priv), GFP_KERNEL);
|
||||
input = input_allocate_device();
|
||||
if (!priv || !input) {
|
||||
error = -ENOMEM;
|
||||
goto err_free_mem;
|
||||
if (!input) {
|
||||
dev_err(&pdev->dev, "Input device allocation error\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
priv->input = input;
|
||||
priv->irq = irq;
|
||||
|
||||
input->name = pdev->name;
|
||||
input->phys = "power-button/input0";
|
||||
input->id.bustype = BUS_HOST;
|
||||
|
@ -82,42 +72,40 @@ static int __devinit mfld_pb_probe(struct platform_device *pdev)
|
|||
|
||||
input_set_capability(input, EV_KEY, KEY_POWER);
|
||||
|
||||
error = request_threaded_irq(priv->irq, NULL, mfld_pb_isr,
|
||||
0, DRIVER_NAME, priv);
|
||||
error = request_threaded_irq(irq, NULL, mfld_pb_isr, 0,
|
||||
DRIVER_NAME, input);
|
||||
if (error) {
|
||||
dev_err(&pdev->dev,
|
||||
"unable to request irq %d for mfld power button\n",
|
||||
irq);
|
||||
goto err_free_mem;
|
||||
dev_err(&pdev->dev, "Unable to request irq %d for mfld power"
|
||||
"button\n", irq);
|
||||
goto err_free_input;
|
||||
}
|
||||
|
||||
error = input_register_device(input);
|
||||
if (error) {
|
||||
dev_err(&pdev->dev,
|
||||
"unable to register input dev, error %d\n", error);
|
||||
dev_err(&pdev->dev, "Unable to register input dev, error "
|
||||
"%d\n", error);
|
||||
goto err_free_irq;
|
||||
}
|
||||
|
||||
platform_set_drvdata(pdev, priv);
|
||||
platform_set_drvdata(pdev, input);
|
||||
return 0;
|
||||
|
||||
err_free_irq:
|
||||
free_irq(priv->irq, priv);
|
||||
err_free_mem:
|
||||
free_irq(irq, input);
|
||||
err_free_input:
|
||||
input_free_device(input);
|
||||
kfree(priv);
|
||||
return error;
|
||||
}
|
||||
|
||||
static int __devexit mfld_pb_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct mfld_pb_priv *priv = platform_get_drvdata(pdev);
|
||||
|
||||
free_irq(priv->irq, priv);
|
||||
input_unregister_device(priv->input);
|
||||
kfree(priv);
|
||||
struct input_dev *input = platform_get_drvdata(pdev);
|
||||
int irq = platform_get_irq(pdev, 0);
|
||||
|
||||
free_irq(irq, input);
|
||||
input_unregister_device(input);
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -37,49 +37,50 @@
|
|||
#include <asm/intel_scu_ipc.h>
|
||||
|
||||
/* Number of thermal sensors */
|
||||
#define MSIC_THERMAL_SENSORS 4
|
||||
#define MSIC_THERMAL_SENSORS 4
|
||||
|
||||
/* ADC1 - thermal registers */
|
||||
#define MSIC_THERM_ADC1CNTL1 0x1C0
|
||||
#define MSIC_ADC_ENBL 0x10
|
||||
#define MSIC_ADC_START 0x08
|
||||
#define MSIC_THERM_ADC1CNTL1 0x1C0
|
||||
#define MSIC_ADC_ENBL 0x10
|
||||
#define MSIC_ADC_START 0x08
|
||||
|
||||
#define MSIC_THERM_ADC1CNTL3 0x1C2
|
||||
#define MSIC_ADCTHERM_ENBL 0x04
|
||||
#define MSIC_ADCRRDATA_ENBL 0x05
|
||||
#define MSIC_CHANL_MASK_VAL 0x0F
|
||||
#define MSIC_THERM_ADC1CNTL3 0x1C2
|
||||
#define MSIC_ADCTHERM_ENBL 0x04
|
||||
#define MSIC_ADCRRDATA_ENBL 0x05
|
||||
#define MSIC_CHANL_MASK_VAL 0x0F
|
||||
|
||||
#define MSIC_STOPBIT_MASK 16
|
||||
#define MSIC_ADCTHERM_MASK 4
|
||||
#define ADC_CHANLS_MAX 15 /* Number of ADC channels */
|
||||
#define ADC_LOOP_MAX (ADC_CHANLS_MAX - MSIC_THERMAL_SENSORS)
|
||||
#define MSIC_STOPBIT_MASK 16
|
||||
#define MSIC_ADCTHERM_MASK 4
|
||||
/* Number of ADC channels */
|
||||
#define ADC_CHANLS_MAX 15
|
||||
#define ADC_LOOP_MAX (ADC_CHANLS_MAX - MSIC_THERMAL_SENSORS)
|
||||
|
||||
/* ADC channel code values */
|
||||
#define SKIN_SENSOR0_CODE 0x08
|
||||
#define SKIN_SENSOR1_CODE 0x09
|
||||
#define SYS_SENSOR_CODE 0x0A
|
||||
#define MSIC_DIE_SENSOR_CODE 0x03
|
||||
#define SKIN_SENSOR0_CODE 0x08
|
||||
#define SKIN_SENSOR1_CODE 0x09
|
||||
#define SYS_SENSOR_CODE 0x0A
|
||||
#define MSIC_DIE_SENSOR_CODE 0x03
|
||||
|
||||
#define SKIN_THERM_SENSOR0 0
|
||||
#define SKIN_THERM_SENSOR1 1
|
||||
#define SYS_THERM_SENSOR2 2
|
||||
#define MSIC_DIE_THERM_SENSOR3 3
|
||||
#define SKIN_THERM_SENSOR0 0
|
||||
#define SKIN_THERM_SENSOR1 1
|
||||
#define SYS_THERM_SENSOR2 2
|
||||
#define MSIC_DIE_THERM_SENSOR3 3
|
||||
|
||||
/* ADC code range */
|
||||
#define ADC_MAX 977
|
||||
#define ADC_MIN 162
|
||||
#define ADC_VAL0C 887
|
||||
#define ADC_VAL20C 720
|
||||
#define ADC_VAL40C 508
|
||||
#define ADC_VAL60C 315
|
||||
#define ADC_MAX 977
|
||||
#define ADC_MIN 162
|
||||
#define ADC_VAL0C 887
|
||||
#define ADC_VAL20C 720
|
||||
#define ADC_VAL40C 508
|
||||
#define ADC_VAL60C 315
|
||||
|
||||
/* ADC base addresses */
|
||||
#define ADC_CHNL_START_ADDR 0x1C5 /* increments by 1 */
|
||||
#define ADC_DATA_START_ADDR 0x1D4 /* increments by 2 */
|
||||
#define ADC_CHNL_START_ADDR 0x1C5 /* increments by 1 */
|
||||
#define ADC_DATA_START_ADDR 0x1D4 /* increments by 2 */
|
||||
|
||||
/* MSIC die attributes */
|
||||
#define MSIC_DIE_ADC_MIN 488
|
||||
#define MSIC_DIE_ADC_MAX 1004
|
||||
#define MSIC_DIE_ADC_MIN 488
|
||||
#define MSIC_DIE_ADC_MAX 1004
|
||||
|
||||
/* This holds the address of the first free ADC channel,
|
||||
* among the 15 channels
|
||||
|
@ -87,15 +88,15 @@
|
|||
static int channel_index;
|
||||
|
||||
struct platform_info {
|
||||
struct platform_device *pdev;
|
||||
struct thermal_zone_device *tzd[MSIC_THERMAL_SENSORS];
|
||||
struct platform_device *pdev;
|
||||
struct thermal_zone_device *tzd[MSIC_THERMAL_SENSORS];
|
||||
};
|
||||
|
||||
struct thermal_device_info {
|
||||
unsigned int chnl_addr;
|
||||
int direct;
|
||||
/* This holds the current temperature in millidegree celsius */
|
||||
long curr_temp;
|
||||
unsigned int chnl_addr;
|
||||
int direct;
|
||||
/* This holds the current temperature in millidegree celsius */
|
||||
long curr_temp;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -106,7 +107,7 @@ struct thermal_device_info {
|
|||
*/
|
||||
static int to_msic_die_temp(uint16_t adc_val)
|
||||
{
|
||||
return (368 * (adc_val) / 1000) - 220;
|
||||
return (368 * (adc_val) / 1000) - 220;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -118,7 +119,7 @@ static int to_msic_die_temp(uint16_t adc_val)
|
|||
*/
|
||||
static int is_valid_adc(uint16_t adc_val, uint16_t min, uint16_t max)
|
||||
{
|
||||
return (adc_val >= min) && (adc_val <= max);
|
||||
return (adc_val >= min) && (adc_val <= max);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -136,35 +137,35 @@ static int is_valid_adc(uint16_t adc_val, uint16_t min, uint16_t max)
|
|||
*/
|
||||
static int adc_to_temp(int direct, uint16_t adc_val, unsigned long *tp)
|
||||
{
|
||||
int temp;
|
||||
int temp;
|
||||
|
||||
/* Direct conversion for die temperature */
|
||||
if (direct) {
|
||||
if (is_valid_adc(adc_val, MSIC_DIE_ADC_MIN, MSIC_DIE_ADC_MAX)) {
|
||||
*tp = to_msic_die_temp(adc_val) * 1000;
|
||||
return 0;
|
||||
}
|
||||
return -ERANGE;
|
||||
}
|
||||
/* Direct conversion for die temperature */
|
||||
if (direct) {
|
||||
if (is_valid_adc(adc_val, MSIC_DIE_ADC_MIN, MSIC_DIE_ADC_MAX)) {
|
||||
*tp = to_msic_die_temp(adc_val) * 1000;
|
||||
return 0;
|
||||
}
|
||||
return -ERANGE;
|
||||
}
|
||||
|
||||
if (!is_valid_adc(adc_val, ADC_MIN, ADC_MAX))
|
||||
return -ERANGE;
|
||||
if (!is_valid_adc(adc_val, ADC_MIN, ADC_MAX))
|
||||
return -ERANGE;
|
||||
|
||||
/* Linear approximation for skin temperature */
|
||||
if (adc_val > ADC_VAL0C)
|
||||
temp = 177 - (adc_val/5);
|
||||
else if ((adc_val <= ADC_VAL0C) && (adc_val > ADC_VAL20C))
|
||||
temp = 111 - (adc_val/8);
|
||||
else if ((adc_val <= ADC_VAL20C) && (adc_val > ADC_VAL40C))
|
||||
temp = 92 - (adc_val/10);
|
||||
else if ((adc_val <= ADC_VAL40C) && (adc_val > ADC_VAL60C))
|
||||
temp = 91 - (adc_val/10);
|
||||
else
|
||||
temp = 112 - (adc_val/6);
|
||||
/* Linear approximation for skin temperature */
|
||||
if (adc_val > ADC_VAL0C)
|
||||
temp = 177 - (adc_val/5);
|
||||
else if ((adc_val <= ADC_VAL0C) && (adc_val > ADC_VAL20C))
|
||||
temp = 111 - (adc_val/8);
|
||||
else if ((adc_val <= ADC_VAL20C) && (adc_val > ADC_VAL40C))
|
||||
temp = 92 - (adc_val/10);
|
||||
else if ((adc_val <= ADC_VAL40C) && (adc_val > ADC_VAL60C))
|
||||
temp = 91 - (adc_val/10);
|
||||
else
|
||||
temp = 112 - (adc_val/6);
|
||||
|
||||
/* Convert temperature in celsius to milli degree celsius */
|
||||
*tp = temp * 1000;
|
||||
return 0;
|
||||
/* Convert temperature in celsius to milli degree celsius */
|
||||
*tp = temp * 1000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -178,47 +179,47 @@ static int adc_to_temp(int direct, uint16_t adc_val, unsigned long *tp)
|
|||
*/
|
||||
static int mid_read_temp(struct thermal_zone_device *tzd, unsigned long *temp)
|
||||
{
|
||||
struct thermal_device_info *td_info = tzd->devdata;
|
||||
uint16_t adc_val, addr;
|
||||
uint8_t data = 0;
|
||||
int ret;
|
||||
unsigned long curr_temp;
|
||||
struct thermal_device_info *td_info = tzd->devdata;
|
||||
uint16_t adc_val, addr;
|
||||
uint8_t data = 0;
|
||||
int ret;
|
||||
unsigned long curr_temp;
|
||||
|
||||
|
||||
addr = td_info->chnl_addr;
|
||||
addr = td_info->chnl_addr;
|
||||
|
||||
/* Enable the msic for conversion before reading */
|
||||
ret = intel_scu_ipc_iowrite8(MSIC_THERM_ADC1CNTL3, MSIC_ADCRRDATA_ENBL);
|
||||
if (ret)
|
||||
return ret;
|
||||
/* Enable the msic for conversion before reading */
|
||||
ret = intel_scu_ipc_iowrite8(MSIC_THERM_ADC1CNTL3, MSIC_ADCRRDATA_ENBL);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Re-toggle the RRDATARD bit (temporary workaround) */
|
||||
ret = intel_scu_ipc_iowrite8(MSIC_THERM_ADC1CNTL3, MSIC_ADCTHERM_ENBL);
|
||||
if (ret)
|
||||
return ret;
|
||||
/* Re-toggle the RRDATARD bit (temporary workaround) */
|
||||
ret = intel_scu_ipc_iowrite8(MSIC_THERM_ADC1CNTL3, MSIC_ADCTHERM_ENBL);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Read the higher bits of data */
|
||||
ret = intel_scu_ipc_ioread8(addr, &data);
|
||||
if (ret)
|
||||
return ret;
|
||||
/* Read the higher bits of data */
|
||||
ret = intel_scu_ipc_ioread8(addr, &data);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Shift bits to accommodate the lower two data bits */
|
||||
adc_val = (data << 2);
|
||||
addr++;
|
||||
/* Shift bits to accommodate the lower two data bits */
|
||||
adc_val = (data << 2);
|
||||
addr++;
|
||||
|
||||
ret = intel_scu_ipc_ioread8(addr, &data);/* Read lower bits */
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = intel_scu_ipc_ioread8(addr, &data);/* Read lower bits */
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Adding lower two bits to the higher bits */
|
||||
data &= 03;
|
||||
adc_val += data;
|
||||
/* Adding lower two bits to the higher bits */
|
||||
data &= 03;
|
||||
adc_val += data;
|
||||
|
||||
/* Convert ADC value to temperature */
|
||||
ret = adc_to_temp(td_info->direct, adc_val, &curr_temp);
|
||||
if (ret == 0)
|
||||
*temp = td_info->curr_temp = curr_temp;
|
||||
return ret;
|
||||
/* Convert ADC value to temperature */
|
||||
ret = adc_to_temp(td_info->direct, adc_val, &curr_temp);
|
||||
if (ret == 0)
|
||||
*temp = td_info->curr_temp = curr_temp;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -231,22 +232,21 @@ static int mid_read_temp(struct thermal_zone_device *tzd, unsigned long *temp)
|
|||
*/
|
||||
static int configure_adc(int val)
|
||||
{
|
||||
int ret;
|
||||
uint8_t data;
|
||||
int ret;
|
||||
uint8_t data;
|
||||
|
||||
ret = intel_scu_ipc_ioread8(MSIC_THERM_ADC1CNTL1, &data);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = intel_scu_ipc_ioread8(MSIC_THERM_ADC1CNTL1, &data);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (val) {
|
||||
/* Enable and start the ADC */
|
||||
data |= (MSIC_ADC_ENBL | MSIC_ADC_START);
|
||||
} else {
|
||||
/* Just stop the ADC */
|
||||
data &= (~MSIC_ADC_START);
|
||||
}
|
||||
|
||||
return intel_scu_ipc_iowrite8(MSIC_THERM_ADC1CNTL1, data);
|
||||
if (val) {
|
||||
/* Enable and start the ADC */
|
||||
data |= (MSIC_ADC_ENBL | MSIC_ADC_START);
|
||||
} else {
|
||||
/* Just stop the ADC */
|
||||
data &= (~MSIC_ADC_START);
|
||||
}
|
||||
return intel_scu_ipc_iowrite8(MSIC_THERM_ADC1CNTL1, data);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -259,30 +259,30 @@ static int configure_adc(int val)
|
|||
*/
|
||||
static int set_up_therm_channel(u16 base_addr)
|
||||
{
|
||||
int ret;
|
||||
int ret;
|
||||
|
||||
/* Enable all the sensor channels */
|
||||
ret = intel_scu_ipc_iowrite8(base_addr, SKIN_SENSOR0_CODE);
|
||||
if (ret)
|
||||
return ret;
|
||||
/* Enable all the sensor channels */
|
||||
ret = intel_scu_ipc_iowrite8(base_addr, SKIN_SENSOR0_CODE);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = intel_scu_ipc_iowrite8(base_addr + 1, SKIN_SENSOR1_CODE);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = intel_scu_ipc_iowrite8(base_addr + 1, SKIN_SENSOR1_CODE);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = intel_scu_ipc_iowrite8(base_addr + 2, SYS_SENSOR_CODE);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = intel_scu_ipc_iowrite8(base_addr + 2, SYS_SENSOR_CODE);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Since this is the last channel, set the stop bit
|
||||
to 1 by ORing the DIE_SENSOR_CODE with 0x10 */
|
||||
ret = intel_scu_ipc_iowrite8(base_addr + 3,
|
||||
(MSIC_DIE_SENSOR_CODE | 0x10));
|
||||
if (ret)
|
||||
return ret;
|
||||
/* Since this is the last channel, set the stop bit
|
||||
* to 1 by ORing the DIE_SENSOR_CODE with 0x10 */
|
||||
ret = intel_scu_ipc_iowrite8(base_addr + 3,
|
||||
(MSIC_DIE_SENSOR_CODE | 0x10));
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Enable ADC and start it */
|
||||
return configure_adc(1);
|
||||
/* Enable ADC and start it */
|
||||
return configure_adc(1);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -293,13 +293,13 @@ static int set_up_therm_channel(u16 base_addr)
|
|||
*/
|
||||
static int reset_stopbit(uint16_t addr)
|
||||
{
|
||||
int ret;
|
||||
uint8_t data;
|
||||
ret = intel_scu_ipc_ioread8(addr, &data);
|
||||
if (ret)
|
||||
return ret;
|
||||
/* Set the stop bit to zero */
|
||||
return intel_scu_ipc_iowrite8(addr, (data & 0xEF));
|
||||
int ret;
|
||||
uint8_t data;
|
||||
ret = intel_scu_ipc_ioread8(addr, &data);
|
||||
if (ret)
|
||||
return ret;
|
||||
/* Set the stop bit to zero */
|
||||
return intel_scu_ipc_iowrite8(addr, (data & 0xEF));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -317,30 +317,30 @@ static int reset_stopbit(uint16_t addr)
|
|||
*/
|
||||
static int find_free_channel(void)
|
||||
{
|
||||
int ret;
|
||||
int i;
|
||||
uint8_t data;
|
||||
int ret;
|
||||
int i;
|
||||
uint8_t data;
|
||||
|
||||
/* check whether ADC is enabled */
|
||||
ret = intel_scu_ipc_ioread8(MSIC_THERM_ADC1CNTL1, &data);
|
||||
if (ret)
|
||||
return ret;
|
||||
/* check whether ADC is enabled */
|
||||
ret = intel_scu_ipc_ioread8(MSIC_THERM_ADC1CNTL1, &data);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if ((data & MSIC_ADC_ENBL) == 0)
|
||||
return 0;
|
||||
if ((data & MSIC_ADC_ENBL) == 0)
|
||||
return 0;
|
||||
|
||||
/* ADC is already enabled; Looking for an empty channel */
|
||||
for (i = 0; i < ADC_CHANLS_MAX; i++) {
|
||||
ret = intel_scu_ipc_ioread8(ADC_CHNL_START_ADDR + i, &data);
|
||||
if (ret)
|
||||
return ret;
|
||||
/* ADC is already enabled; Looking for an empty channel */
|
||||
for (i = 0; i < ADC_CHANLS_MAX; i++) {
|
||||
ret = intel_scu_ipc_ioread8(ADC_CHNL_START_ADDR + i, &data);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (data & MSIC_STOPBIT_MASK) {
|
||||
ret = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return (ret > ADC_LOOP_MAX) ? (-EINVAL) : ret;
|
||||
if (data & MSIC_STOPBIT_MASK) {
|
||||
ret = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return (ret > ADC_LOOP_MAX) ? (-EINVAL) : ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -351,48 +351,48 @@ static int find_free_channel(void)
|
|||
*/
|
||||
static int mid_initialize_adc(struct device *dev)
|
||||
{
|
||||
u8 data;
|
||||
u16 base_addr;
|
||||
int ret;
|
||||
u8 data;
|
||||
u16 base_addr;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* Ensure that adctherm is disabled before we
|
||||
* initialize the ADC
|
||||
*/
|
||||
ret = intel_scu_ipc_ioread8(MSIC_THERM_ADC1CNTL3, &data);
|
||||
if (ret)
|
||||
return ret;
|
||||
/*
|
||||
* Ensure that adctherm is disabled before we
|
||||
* initialize the ADC
|
||||
*/
|
||||
ret = intel_scu_ipc_ioread8(MSIC_THERM_ADC1CNTL3, &data);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (data & MSIC_ADCTHERM_MASK)
|
||||
dev_warn(dev, "ADCTHERM already set");
|
||||
if (data & MSIC_ADCTHERM_MASK)
|
||||
dev_warn(dev, "ADCTHERM already set");
|
||||
|
||||
/* Index of the first channel in which the stop bit is set */
|
||||
channel_index = find_free_channel();
|
||||
if (channel_index < 0) {
|
||||
dev_err(dev, "No free ADC channels");
|
||||
return channel_index;
|
||||
}
|
||||
/* Index of the first channel in which the stop bit is set */
|
||||
channel_index = find_free_channel();
|
||||
if (channel_index < 0) {
|
||||
dev_err(dev, "No free ADC channels");
|
||||
return channel_index;
|
||||
}
|
||||
|
||||
base_addr = ADC_CHNL_START_ADDR + channel_index;
|
||||
base_addr = ADC_CHNL_START_ADDR + channel_index;
|
||||
|
||||
if (!(channel_index == 0 || channel_index == ADC_LOOP_MAX)) {
|
||||
/* Reset stop bit for channels other than 0 and 12 */
|
||||
ret = reset_stopbit(base_addr);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (!(channel_index == 0 || channel_index == ADC_LOOP_MAX)) {
|
||||
/* Reset stop bit for channels other than 0 and 12 */
|
||||
ret = reset_stopbit(base_addr);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Index of the first free channel */
|
||||
base_addr++;
|
||||
channel_index++;
|
||||
}
|
||||
/* Index of the first free channel */
|
||||
base_addr++;
|
||||
channel_index++;
|
||||
}
|
||||
|
||||
ret = set_up_therm_channel(base_addr);
|
||||
if (ret) {
|
||||
dev_err(dev, "unable to enable ADC");
|
||||
return ret;
|
||||
}
|
||||
dev_dbg(dev, "ADC initialization successful");
|
||||
return ret;
|
||||
ret = set_up_therm_channel(base_addr);
|
||||
if (ret) {
|
||||
dev_err(dev, "unable to enable ADC");
|
||||
return ret;
|
||||
}
|
||||
dev_dbg(dev, "ADC initialization successful");
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -403,18 +403,18 @@ static int mid_initialize_adc(struct device *dev)
|
|||
*/
|
||||
static struct thermal_device_info *initialize_sensor(int index)
|
||||
{
|
||||
struct thermal_device_info *td_info =
|
||||
kzalloc(sizeof(struct thermal_device_info), GFP_KERNEL);
|
||||
struct thermal_device_info *td_info =
|
||||
kzalloc(sizeof(struct thermal_device_info), GFP_KERNEL);
|
||||
|
||||
if (!td_info)
|
||||
return NULL;
|
||||
if (!td_info)
|
||||
return NULL;
|
||||
|
||||
/* Set the base addr of the channel for this sensor */
|
||||
td_info->chnl_addr = ADC_DATA_START_ADDR + 2 * (channel_index + index);
|
||||
/* Sensor 3 is direct conversion */
|
||||
if (index == 3)
|
||||
td_info->direct = 1;
|
||||
return td_info;
|
||||
/* Set the base addr of the channel for this sensor */
|
||||
td_info->chnl_addr = ADC_DATA_START_ADDR + 2 * (channel_index + index);
|
||||
/* Sensor 3 is direct conversion */
|
||||
if (index == 3)
|
||||
td_info->direct = 1;
|
||||
return td_info;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -425,7 +425,7 @@ static struct thermal_device_info *initialize_sensor(int index)
|
|||
*/
|
||||
static int mid_thermal_resume(struct platform_device *pdev)
|
||||
{
|
||||
return mid_initialize_adc(&pdev->dev);
|
||||
return mid_initialize_adc(&pdev->dev);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -437,12 +437,12 @@ static int mid_thermal_resume(struct platform_device *pdev)
|
|||
*/
|
||||
static int mid_thermal_suspend(struct platform_device *pdev, pm_message_t mesg)
|
||||
{
|
||||
/*
|
||||
* This just stops the ADC and does not disable it.
|
||||
* temporary workaround until we have a generic ADC driver.
|
||||
* If 0 is passed, it disables the ADC.
|
||||
*/
|
||||
return configure_adc(0);
|
||||
/*
|
||||
* This just stops the ADC and does not disable it.
|
||||
* temporary workaround until we have a generic ADC driver.
|
||||
* If 0 is passed, it disables the ADC.
|
||||
*/
|
||||
return configure_adc(0);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -453,16 +453,15 @@ static int mid_thermal_suspend(struct platform_device *pdev, pm_message_t mesg)
|
|||
*/
|
||||
static int read_curr_temp(struct thermal_zone_device *tzd, unsigned long *temp)
|
||||
{
|
||||
WARN_ON(tzd == NULL);
|
||||
return mid_read_temp(tzd, temp);
|
||||
WARN_ON(tzd == NULL);
|
||||
return mid_read_temp(tzd, temp);
|
||||
}
|
||||
|
||||
/* Can't be const */
|
||||
static struct thermal_zone_device_ops tzd_ops = {
|
||||
.get_temp = read_curr_temp,
|
||||
.get_temp = read_curr_temp,
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* mid_thermal_probe - mfld thermal initialize
|
||||
* @pdev: platform device structure
|
||||
|
@ -472,46 +471,45 @@ static struct thermal_zone_device_ops tzd_ops = {
|
|||
*/
|
||||
static int mid_thermal_probe(struct platform_device *pdev)
|
||||
{
|
||||
static char *name[MSIC_THERMAL_SENSORS] = {
|
||||
"skin0", "skin1", "sys", "msicdie"
|
||||
};
|
||||
static char *name[MSIC_THERMAL_SENSORS] = {
|
||||
"skin0", "skin1", "sys", "msicdie"
|
||||
};
|
||||
|
||||
int ret;
|
||||
int i;
|
||||
struct platform_info *pinfo;
|
||||
int ret;
|
||||
int i;
|
||||
struct platform_info *pinfo;
|
||||
|
||||
pinfo = kzalloc(sizeof(struct platform_info), GFP_KERNEL);
|
||||
if (!pinfo)
|
||||
return -ENOMEM;
|
||||
pinfo = kzalloc(sizeof(struct platform_info), GFP_KERNEL);
|
||||
if (!pinfo)
|
||||
return -ENOMEM;
|
||||
|
||||
/* Initializing the hardware */
|
||||
ret = mid_initialize_adc(&pdev->dev);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "ADC init failed");
|
||||
kfree(pinfo);
|
||||
return ret;
|
||||
}
|
||||
/* Initializing the hardware */
|
||||
ret = mid_initialize_adc(&pdev->dev);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "ADC init failed");
|
||||
kfree(pinfo);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Register each sensor with the generic thermal framework*/
|
||||
for (i = 0; i < MSIC_THERMAL_SENSORS; i++) {
|
||||
pinfo->tzd[i] = thermal_zone_device_register(name[i],
|
||||
0, initialize_sensor(i),
|
||||
&tzd_ops, 0, 0, 0, 0);
|
||||
if (IS_ERR(pinfo->tzd[i]))
|
||||
goto reg_fail;
|
||||
}
|
||||
/* Register each sensor with the generic thermal framework*/
|
||||
for (i = 0; i < MSIC_THERMAL_SENSORS; i++) {
|
||||
pinfo->tzd[i] = thermal_zone_device_register(name[i],
|
||||
0, initialize_sensor(i), &tzd_ops, 0, 0, 0, 0);
|
||||
if (IS_ERR(pinfo->tzd[i]))
|
||||
goto reg_fail;
|
||||
}
|
||||
|
||||
pinfo->pdev = pdev;
|
||||
platform_set_drvdata(pdev, pinfo);
|
||||
return 0;
|
||||
pinfo->pdev = pdev;
|
||||
platform_set_drvdata(pdev, pinfo);
|
||||
return 0;
|
||||
|
||||
reg_fail:
|
||||
ret = PTR_ERR(pinfo->tzd[i]);
|
||||
while (--i >= 0)
|
||||
thermal_zone_device_unregister(pinfo->tzd[i]);
|
||||
configure_adc(0);
|
||||
kfree(pinfo);
|
||||
return ret;
|
||||
ret = PTR_ERR(pinfo->tzd[i]);
|
||||
while (--i >= 0)
|
||||
thermal_zone_device_unregister(pinfo->tzd[i]);
|
||||
configure_adc(0);
|
||||
kfree(pinfo);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -523,49 +521,46 @@ static int mid_thermal_probe(struct platform_device *pdev)
|
|||
*/
|
||||
static int mid_thermal_remove(struct platform_device *pdev)
|
||||
{
|
||||
int i;
|
||||
struct platform_info *pinfo = platform_get_drvdata(pdev);
|
||||
int i;
|
||||
struct platform_info *pinfo = platform_get_drvdata(pdev);
|
||||
|
||||
for (i = 0; i < MSIC_THERMAL_SENSORS; i++)
|
||||
thermal_zone_device_unregister(pinfo->tzd[i]);
|
||||
for (i = 0; i < MSIC_THERMAL_SENSORS; i++)
|
||||
thermal_zone_device_unregister(pinfo->tzd[i]);
|
||||
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
kfree(pinfo);
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
|
||||
/* Stop the ADC */
|
||||
return configure_adc(0);
|
||||
/* Stop the ADC */
|
||||
return configure_adc(0);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* Driver initialisation and finalization
|
||||
*********************************************************************/
|
||||
|
||||
#define DRIVER_NAME "msic_sensor"
|
||||
|
||||
static const struct platform_device_id therm_id_table[] = {
|
||||
{ DRIVER_NAME, 1 },
|
||||
{ }
|
||||
{ DRIVER_NAME, 1 },
|
||||
{ }
|
||||
};
|
||||
|
||||
static struct platform_driver mid_thermal_driver = {
|
||||
.driver = {
|
||||
.name = DRIVER_NAME,
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = mid_thermal_probe,
|
||||
.suspend = mid_thermal_suspend,
|
||||
.resume = mid_thermal_resume,
|
||||
.remove = __devexit_p(mid_thermal_remove),
|
||||
.id_table = therm_id_table,
|
||||
.driver = {
|
||||
.name = DRIVER_NAME,
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = mid_thermal_probe,
|
||||
.suspend = mid_thermal_suspend,
|
||||
.resume = mid_thermal_resume,
|
||||
.remove = __devexit_p(mid_thermal_remove),
|
||||
.id_table = therm_id_table,
|
||||
};
|
||||
|
||||
static int __init mid_thermal_module_init(void)
|
||||
{
|
||||
return platform_driver_register(&mid_thermal_driver);
|
||||
return platform_driver_register(&mid_thermal_driver);
|
||||
}
|
||||
|
||||
static void __exit mid_thermal_module_exit(void)
|
||||
{
|
||||
platform_driver_unregister(&mid_thermal_driver);
|
||||
platform_driver_unregister(&mid_thermal_driver);
|
||||
}
|
||||
|
||||
module_init(mid_thermal_module_init);
|
||||
|
|
396
drivers/platform/x86/intel_oaktrail.c
Normal file
396
drivers/platform/x86/intel_oaktrail.c
Normal file
|
@ -0,0 +1,396 @@
|
|||
/*
|
||||
* intel_oaktrail.c - Intel OakTrail Platform support.
|
||||
*
|
||||
* Copyright (C) 2010-2011 Intel Corporation
|
||||
* Author: Yin Kangkai (kangkai.yin@intel.com)
|
||||
*
|
||||
* based on Compal driver, Copyright (C) 2008 Cezary Jackiewicz
|
||||
* <cezary.jackiewicz (at) gmail.com>, based on MSI driver
|
||||
* Copyright (C) 2006 Lennart Poettering <mzxreary (at) 0pointer (dot) de>
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* This driver does below things:
|
||||
* 1. registers itself in the Linux backlight control in
|
||||
* /sys/class/backlight/intel_oaktrail/
|
||||
*
|
||||
* 2. registers in the rfkill subsystem here: /sys/class/rfkill/rfkillX/
|
||||
* for these components: wifi, bluetooth, wwan (3g), gps
|
||||
*
|
||||
* This driver might work on other products based on Oaktrail. If you
|
||||
* want to try it you can pass force=1 as argument to the module which
|
||||
* will force it to load even when the DMI data doesn't identify the
|
||||
* product as compatible.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/fb.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/backlight.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/rfkill.h>
|
||||
#include <acpi/acpi_bus.h>
|
||||
#include <acpi/acpi_drivers.h>
|
||||
|
||||
|
||||
#define DRIVER_NAME "intel_oaktrail"
|
||||
#define DRIVER_VERSION "0.4ac1"
|
||||
|
||||
/*
|
||||
* This is the devices status address in EC space, and the control bits
|
||||
* definition:
|
||||
*
|
||||
* (1 << 0): Camera enable/disable, RW.
|
||||
* (1 << 1): Bluetooth enable/disable, RW.
|
||||
* (1 << 2): GPS enable/disable, RW.
|
||||
* (1 << 3): WiFi enable/disable, RW.
|
||||
* (1 << 4): WWAN (3G) enable/disalbe, RW.
|
||||
* (1 << 5): Touchscreen enable/disable, Read Only.
|
||||
*/
|
||||
#define OT_EC_DEVICE_STATE_ADDRESS 0xD6
|
||||
|
||||
#define OT_EC_CAMERA_MASK (1 << 0)
|
||||
#define OT_EC_BT_MASK (1 << 1)
|
||||
#define OT_EC_GPS_MASK (1 << 2)
|
||||
#define OT_EC_WIFI_MASK (1 << 3)
|
||||
#define OT_EC_WWAN_MASK (1 << 4)
|
||||
#define OT_EC_TS_MASK (1 << 5)
|
||||
|
||||
/*
|
||||
* This is the address in EC space and commands used to control LCD backlight:
|
||||
*
|
||||
* Two steps needed to change the LCD backlight:
|
||||
* 1. write the backlight percentage into OT_EC_BL_BRIGHTNESS_ADDRESS;
|
||||
* 2. write OT_EC_BL_CONTROL_ON_DATA into OT_EC_BL_CONTROL_ADDRESS.
|
||||
*
|
||||
* To read the LCD back light, just read out the value from
|
||||
* OT_EC_BL_BRIGHTNESS_ADDRESS.
|
||||
*
|
||||
* LCD backlight brightness range: 0 - 100 (OT_EC_BL_BRIGHTNESS_MAX)
|
||||
*/
|
||||
#define OT_EC_BL_BRIGHTNESS_ADDRESS 0x44
|
||||
#define OT_EC_BL_BRIGHTNESS_MAX 100
|
||||
#define OT_EC_BL_CONTROL_ADDRESS 0x3A
|
||||
#define OT_EC_BL_CONTROL_ON_DATA 0x1A
|
||||
|
||||
|
||||
static int force;
|
||||
module_param(force, bool, 0);
|
||||
MODULE_PARM_DESC(force, "Force driver load, ignore DMI data");
|
||||
|
||||
static struct platform_device *oaktrail_device;
|
||||
static struct backlight_device *oaktrail_bl_device;
|
||||
static struct rfkill *bt_rfkill;
|
||||
static struct rfkill *gps_rfkill;
|
||||
static struct rfkill *wifi_rfkill;
|
||||
static struct rfkill *wwan_rfkill;
|
||||
|
||||
|
||||
/* rfkill */
|
||||
static int oaktrail_rfkill_set(void *data, bool blocked)
|
||||
{
|
||||
u8 value;
|
||||
u8 result;
|
||||
unsigned long radio = (unsigned long) data;
|
||||
|
||||
ec_read(OT_EC_DEVICE_STATE_ADDRESS, &result);
|
||||
|
||||
if (!blocked)
|
||||
value = (u8) (result | radio);
|
||||
else
|
||||
value = (u8) (result & ~radio);
|
||||
|
||||
ec_write(OT_EC_DEVICE_STATE_ADDRESS, value);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct rfkill_ops oaktrail_rfkill_ops = {
|
||||
.set_block = oaktrail_rfkill_set,
|
||||
};
|
||||
|
||||
static struct rfkill *oaktrail_rfkill_new(char *name, enum rfkill_type type,
|
||||
unsigned long mask)
|
||||
{
|
||||
struct rfkill *rfkill_dev;
|
||||
u8 value;
|
||||
int err;
|
||||
|
||||
rfkill_dev = rfkill_alloc(name, &oaktrail_device->dev, type,
|
||||
&oaktrail_rfkill_ops, (void *)mask);
|
||||
if (!rfkill_dev)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
ec_read(OT_EC_DEVICE_STATE_ADDRESS, &value);
|
||||
rfkill_init_sw_state(rfkill_dev, (value & mask) != 1);
|
||||
|
||||
err = rfkill_register(rfkill_dev);
|
||||
if (err) {
|
||||
rfkill_destroy(rfkill_dev);
|
||||
return ERR_PTR(err);
|
||||
}
|
||||
|
||||
return rfkill_dev;
|
||||
}
|
||||
|
||||
static inline void __oaktrail_rfkill_cleanup(struct rfkill *rf)
|
||||
{
|
||||
if (rf) {
|
||||
rfkill_unregister(rf);
|
||||
rfkill_destroy(rf);
|
||||
}
|
||||
}
|
||||
|
||||
static void oaktrail_rfkill_cleanup(void)
|
||||
{
|
||||
__oaktrail_rfkill_cleanup(wifi_rfkill);
|
||||
__oaktrail_rfkill_cleanup(bt_rfkill);
|
||||
__oaktrail_rfkill_cleanup(gps_rfkill);
|
||||
__oaktrail_rfkill_cleanup(wwan_rfkill);
|
||||
}
|
||||
|
||||
static int oaktrail_rfkill_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
wifi_rfkill = oaktrail_rfkill_new("oaktrail-wifi",
|
||||
RFKILL_TYPE_WLAN,
|
||||
OT_EC_WIFI_MASK);
|
||||
if (IS_ERR(wifi_rfkill)) {
|
||||
ret = PTR_ERR(wifi_rfkill);
|
||||
wifi_rfkill = NULL;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
bt_rfkill = oaktrail_rfkill_new("oaktrail-bluetooth",
|
||||
RFKILL_TYPE_BLUETOOTH,
|
||||
OT_EC_BT_MASK);
|
||||
if (IS_ERR(bt_rfkill)) {
|
||||
ret = PTR_ERR(bt_rfkill);
|
||||
bt_rfkill = NULL;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
gps_rfkill = oaktrail_rfkill_new("oaktrail-gps",
|
||||
RFKILL_TYPE_GPS,
|
||||
OT_EC_GPS_MASK);
|
||||
if (IS_ERR(gps_rfkill)) {
|
||||
ret = PTR_ERR(gps_rfkill);
|
||||
gps_rfkill = NULL;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
wwan_rfkill = oaktrail_rfkill_new("oaktrail-wwan",
|
||||
RFKILL_TYPE_WWAN,
|
||||
OT_EC_WWAN_MASK);
|
||||
if (IS_ERR(wwan_rfkill)) {
|
||||
ret = PTR_ERR(wwan_rfkill);
|
||||
wwan_rfkill = NULL;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
cleanup:
|
||||
oaktrail_rfkill_cleanup();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/* backlight */
|
||||
static int get_backlight_brightness(struct backlight_device *b)
|
||||
{
|
||||
u8 value;
|
||||
ec_read(OT_EC_BL_BRIGHTNESS_ADDRESS, &value);
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
static int set_backlight_brightness(struct backlight_device *b)
|
||||
{
|
||||
u8 percent = (u8) b->props.brightness;
|
||||
if (percent < 0 || percent > OT_EC_BL_BRIGHTNESS_MAX)
|
||||
return -EINVAL;
|
||||
|
||||
ec_write(OT_EC_BL_BRIGHTNESS_ADDRESS, percent);
|
||||
ec_write(OT_EC_BL_CONTROL_ADDRESS, OT_EC_BL_CONTROL_ON_DATA);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct backlight_ops oaktrail_bl_ops = {
|
||||
.get_brightness = get_backlight_brightness,
|
||||
.update_status = set_backlight_brightness,
|
||||
};
|
||||
|
||||
static int oaktrail_backlight_init(void)
|
||||
{
|
||||
struct backlight_device *bd;
|
||||
struct backlight_properties props;
|
||||
|
||||
memset(&props, 0, sizeof(struct backlight_properties));
|
||||
props.max_brightness = OT_EC_BL_BRIGHTNESS_MAX;
|
||||
bd = backlight_device_register(DRIVER_NAME,
|
||||
&oaktrail_device->dev, NULL,
|
||||
&oaktrail_bl_ops,
|
||||
&props);
|
||||
|
||||
if (IS_ERR(bd)) {
|
||||
oaktrail_bl_device = NULL;
|
||||
pr_warning("Unable to register backlight device\n");
|
||||
return PTR_ERR(bd);
|
||||
}
|
||||
|
||||
oaktrail_bl_device = bd;
|
||||
|
||||
bd->props.brightness = get_backlight_brightness(bd);
|
||||
bd->props.power = FB_BLANK_UNBLANK;
|
||||
backlight_update_status(bd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void oaktrail_backlight_exit(void)
|
||||
{
|
||||
if (oaktrail_bl_device)
|
||||
backlight_device_unregister(oaktrail_bl_device);
|
||||
}
|
||||
|
||||
static int __devinit oaktrail_probe(struct platform_device *pdev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __devexit oaktrail_remove(struct platform_device *pdev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct platform_driver oaktrail_driver = {
|
||||
.driver = {
|
||||
.name = DRIVER_NAME,
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = oaktrail_probe,
|
||||
.remove = __devexit_p(oaktrail_remove)
|
||||
};
|
||||
|
||||
static int dmi_check_cb(const struct dmi_system_id *id)
|
||||
{
|
||||
pr_info("Identified model '%s'\n", id->ident);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct dmi_system_id __initdata oaktrail_dmi_table[] = {
|
||||
{
|
||||
.ident = "OakTrail platform",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "OakTrail platform"),
|
||||
},
|
||||
.callback = dmi_check_cb
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
static int __init oaktrail_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (acpi_disabled) {
|
||||
pr_err("ACPI needs to be enabled for this driver to work!\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (!force && !dmi_check_system(oaktrail_dmi_table)) {
|
||||
pr_err("Platform not recognized (You could try the module's force-parameter)");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
ret = platform_driver_register(&oaktrail_driver);
|
||||
if (ret) {
|
||||
pr_warning("Unable to register platform driver\n");
|
||||
goto err_driver_reg;
|
||||
}
|
||||
|
||||
oaktrail_device = platform_device_alloc(DRIVER_NAME, -1);
|
||||
if (!oaktrail_device) {
|
||||
pr_warning("Unable to allocate platform device\n");
|
||||
ret = -ENOMEM;
|
||||
goto err_device_alloc;
|
||||
}
|
||||
|
||||
ret = platform_device_add(oaktrail_device);
|
||||
if (ret) {
|
||||
pr_warning("Unable to add platform device\n");
|
||||
goto err_device_add;
|
||||
}
|
||||
|
||||
if (!acpi_video_backlight_support()) {
|
||||
ret = oaktrail_backlight_init();
|
||||
if (ret)
|
||||
goto err_backlight;
|
||||
|
||||
} else
|
||||
pr_info("Backlight controlled by ACPI video driver\n");
|
||||
|
||||
ret = oaktrail_rfkill_init();
|
||||
if (ret) {
|
||||
pr_warning("Setup rfkill failed\n");
|
||||
goto err_rfkill;
|
||||
}
|
||||
|
||||
pr_info("Driver "DRIVER_VERSION" successfully loaded\n");
|
||||
return 0;
|
||||
|
||||
err_rfkill:
|
||||
oaktrail_backlight_exit();
|
||||
err_backlight:
|
||||
platform_device_del(oaktrail_device);
|
||||
err_device_add:
|
||||
platform_device_put(oaktrail_device);
|
||||
err_device_alloc:
|
||||
platform_driver_unregister(&oaktrail_driver);
|
||||
err_driver_reg:
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void __exit oaktrail_cleanup(void)
|
||||
{
|
||||
oaktrail_backlight_exit();
|
||||
oaktrail_rfkill_cleanup();
|
||||
platform_device_unregister(oaktrail_device);
|
||||
platform_driver_unregister(&oaktrail_driver);
|
||||
|
||||
pr_info("Driver unloaded\n");
|
||||
}
|
||||
|
||||
module_init(oaktrail_init);
|
||||
module_exit(oaktrail_cleanup);
|
||||
|
||||
MODULE_AUTHOR("Yin Kangkai (kangkai.yin@intel.com)");
|
||||
MODULE_DESCRIPTION("Intel Oaktrail Platform ACPI Extras");
|
||||
MODULE_VERSION(DRIVER_VERSION);
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("dmi:*:svnIntelCorporation:pnOakTrailplatform:*");
|
|
@ -19,6 +19,8 @@
|
|||
* Moorestown platform PMIC chip
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "%s: " fmt, __func__
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/interrupt.h>
|
||||
|
@ -90,8 +92,7 @@ static void pmic_program_irqtype(int gpio, int type)
|
|||
static int pmic_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
|
||||
{
|
||||
if (offset > 8) {
|
||||
printk(KERN_ERR
|
||||
"%s: only pin 0-7 support input\n", __func__);
|
||||
pr_err("only pin 0-7 support input\n");
|
||||
return -1;/* we only have 8 GPIO can use as input */
|
||||
}
|
||||
return intel_scu_ipc_update_register(GPIO0 + offset,
|
||||
|
@ -116,8 +117,7 @@ static int pmic_gpio_direction_output(struct gpio_chip *chip,
|
|||
value ? 1 << (offset - 16) : 0,
|
||||
1 << (offset - 16));
|
||||
else {
|
||||
printk(KERN_ERR
|
||||
"%s: invalid PMIC GPIO pin %d!\n", __func__, offset);
|
||||
pr_err("invalid PMIC GPIO pin %d!\n", offset);
|
||||
WARN_ON(1);
|
||||
}
|
||||
|
||||
|
@ -260,7 +260,7 @@ static int __devinit platform_pmic_gpio_probe(struct platform_device *pdev)
|
|||
/* setting up SRAM mapping for GPIOINT register */
|
||||
pg->gpiointr = ioremap_nocache(pdata->gpiointr, 8);
|
||||
if (!pg->gpiointr) {
|
||||
printk(KERN_ERR "%s: Can not map GPIOINT.\n", __func__);
|
||||
pr_err("Can not map GPIOINT\n");
|
||||
retval = -EINVAL;
|
||||
goto err2;
|
||||
}
|
||||
|
@ -281,13 +281,13 @@ static int __devinit platform_pmic_gpio_probe(struct platform_device *pdev)
|
|||
pg->chip.dev = dev;
|
||||
retval = gpiochip_add(&pg->chip);
|
||||
if (retval) {
|
||||
printk(KERN_ERR "%s: Can not add pmic gpio chip.\n", __func__);
|
||||
pr_err("Can not add pmic gpio chip\n");
|
||||
goto err;
|
||||
}
|
||||
|
||||
retval = request_irq(pg->irq, pmic_irq_handler, 0, "pmic", pg);
|
||||
if (retval) {
|
||||
printk(KERN_WARNING "pmic: Interrupt request failed\n");
|
||||
pr_warn("Interrupt request failed\n");
|
||||
goto err;
|
||||
}
|
||||
|
||||
|
|
|
@ -447,7 +447,7 @@ static struct platform_device *msipf_device;
|
|||
|
||||
static int dmi_check_cb(const struct dmi_system_id *id)
|
||||
{
|
||||
pr_info("Identified laptop model '%s'.\n", id->ident);
|
||||
pr_info("Identified laptop model '%s'\n", id->ident);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -800,7 +800,7 @@ static void msi_laptop_input_destroy(void)
|
|||
input_unregister_device(msi_laptop_input_dev);
|
||||
}
|
||||
|
||||
static int load_scm_model_init(struct platform_device *sdev)
|
||||
static int __init load_scm_model_init(struct platform_device *sdev)
|
||||
{
|
||||
u8 data;
|
||||
int result;
|
||||
|
@ -875,8 +875,7 @@ static int __init msi_init(void)
|
|||
/* Register backlight stuff */
|
||||
|
||||
if (acpi_video_backlight_support()) {
|
||||
pr_info("Brightness ignored, must be controlled "
|
||||
"by ACPI video driver\n");
|
||||
pr_info("Brightness ignored, must be controlled by ACPI video driver\n");
|
||||
} else {
|
||||
struct backlight_properties props;
|
||||
memset(&props, 0, sizeof(struct backlight_properties));
|
||||
|
@ -930,7 +929,7 @@ static int __init msi_init(void)
|
|||
if (auto_brightness != 2)
|
||||
set_auto_brightness(auto_brightness);
|
||||
|
||||
pr_info("driver "MSI_DRIVER_VERSION" successfully loaded.\n");
|
||||
pr_info("driver " MSI_DRIVER_VERSION " successfully loaded\n");
|
||||
|
||||
return 0;
|
||||
|
||||
|
@ -978,7 +977,7 @@ static void __exit msi_cleanup(void)
|
|||
if (auto_brightness != 2)
|
||||
set_auto_brightness(1);
|
||||
|
||||
pr_info("driver unloaded.\n");
|
||||
pr_info("driver unloaded\n");
|
||||
}
|
||||
|
||||
module_init(msi_init);
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/input.h>
|
||||
|
@ -36,13 +37,10 @@ MODULE_ALIAS("wmi:551A1F84-FBDD-4125-91DB-3EA8F44F1D45");
|
|||
MODULE_ALIAS("wmi:B6F3EEF2-3D2F-49DC-9DE3-85BCE18C62F2");
|
||||
|
||||
#define DRV_NAME "msi-wmi"
|
||||
#define DRV_PFX DRV_NAME ": "
|
||||
|
||||
#define MSIWMI_BIOS_GUID "551A1F84-FBDD-4125-91DB-3EA8F44F1D45"
|
||||
#define MSIWMI_EVENT_GUID "B6F3EEF2-3D2F-49DC-9DE3-85BCE18C62F2"
|
||||
|
||||
#define dprintk(msg...) pr_debug(DRV_PFX msg)
|
||||
|
||||
#define SCANCODE_BASE 0xD0
|
||||
#define MSI_WMI_BRIGHTNESSUP SCANCODE_BASE
|
||||
#define MSI_WMI_BRIGHTNESSDOWN (SCANCODE_BASE + 1)
|
||||
|
@ -78,7 +76,7 @@ static int msi_wmi_query_block(int instance, int *ret)
|
|||
|
||||
if (!obj || obj->type != ACPI_TYPE_INTEGER) {
|
||||
if (obj) {
|
||||
printk(KERN_ERR DRV_PFX "query block returned object "
|
||||
pr_err("query block returned object "
|
||||
"type: %d - buffer length:%d\n", obj->type,
|
||||
obj->type == ACPI_TYPE_BUFFER ?
|
||||
obj->buffer.length : 0);
|
||||
|
@ -97,8 +95,8 @@ static int msi_wmi_set_block(int instance, int value)
|
|||
|
||||
struct acpi_buffer input = { sizeof(int), &value };
|
||||
|
||||
dprintk("Going to set block of instance: %d - value: %d\n",
|
||||
instance, value);
|
||||
pr_debug("Going to set block of instance: %d - value: %d\n",
|
||||
instance, value);
|
||||
|
||||
status = wmi_set_block(MSIWMI_BIOS_GUID, instance, &input);
|
||||
|
||||
|
@ -112,20 +110,19 @@ static int bl_get(struct backlight_device *bd)
|
|||
/* Instance 1 is "get backlight", cmp with DSDT */
|
||||
err = msi_wmi_query_block(1, &ret);
|
||||
if (err) {
|
||||
printk(KERN_ERR DRV_PFX "Could not query backlight: %d\n", err);
|
||||
pr_err("Could not query backlight: %d\n", err);
|
||||
return -EINVAL;
|
||||
}
|
||||
dprintk("Get: Query block returned: %d\n", ret);
|
||||
pr_debug("Get: Query block returned: %d\n", ret);
|
||||
for (level = 0; level < ARRAY_SIZE(backlight_map); level++) {
|
||||
if (backlight_map[level] == ret) {
|
||||
dprintk("Current backlight level: 0x%X - index: %d\n",
|
||||
backlight_map[level], level);
|
||||
pr_debug("Current backlight level: 0x%X - index: %d\n",
|
||||
backlight_map[level], level);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (level == ARRAY_SIZE(backlight_map)) {
|
||||
printk(KERN_ERR DRV_PFX "get: Invalid brightness value: 0x%X\n",
|
||||
ret);
|
||||
pr_err("get: Invalid brightness value: 0x%X\n", ret);
|
||||
return -EINVAL;
|
||||
}
|
||||
return level;
|
||||
|
@ -156,7 +153,7 @@ static void msi_wmi_notify(u32 value, void *context)
|
|||
|
||||
status = wmi_get_event_data(value, &response);
|
||||
if (status != AE_OK) {
|
||||
printk(KERN_INFO DRV_PFX "bad event status 0x%x\n", status);
|
||||
pr_info("bad event status 0x%x\n", status);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -164,7 +161,7 @@ static void msi_wmi_notify(u32 value, void *context)
|
|||
|
||||
if (obj && obj->type == ACPI_TYPE_INTEGER) {
|
||||
int eventcode = obj->integer.value;
|
||||
dprintk("Eventcode: 0x%x\n", eventcode);
|
||||
pr_debug("Eventcode: 0x%x\n", eventcode);
|
||||
key = sparse_keymap_entry_from_scancode(msi_wmi_input_dev,
|
||||
eventcode);
|
||||
if (key) {
|
||||
|
@ -175,8 +172,8 @@ static void msi_wmi_notify(u32 value, void *context)
|
|||
/* Ignore event if the same event happened in a 50 ms
|
||||
timeframe -> Key press may result in 10-20 GPEs */
|
||||
if (ktime_to_us(diff) < 1000 * 50) {
|
||||
dprintk("Suppressed key event 0x%X - "
|
||||
"Last press was %lld us ago\n",
|
||||
pr_debug("Suppressed key event 0x%X - "
|
||||
"Last press was %lld us ago\n",
|
||||
key->code, ktime_to_us(diff));
|
||||
return;
|
||||
}
|
||||
|
@ -187,17 +184,16 @@ static void msi_wmi_notify(u32 value, void *context)
|
|||
(!acpi_video_backlight_support() ||
|
||||
(key->code != MSI_WMI_BRIGHTNESSUP &&
|
||||
key->code != MSI_WMI_BRIGHTNESSDOWN))) {
|
||||
dprintk("Send key: 0x%X - "
|
||||
"Input layer keycode: %d\n", key->code,
|
||||
key->keycode);
|
||||
pr_debug("Send key: 0x%X - "
|
||||
"Input layer keycode: %d\n",
|
||||
key->code, key->keycode);
|
||||
sparse_keymap_report_entry(msi_wmi_input_dev,
|
||||
key, 1, true);
|
||||
}
|
||||
} else
|
||||
printk(KERN_INFO "Unknown key pressed - %x\n",
|
||||
eventcode);
|
||||
pr_info("Unknown key pressed - %x\n", eventcode);
|
||||
} else
|
||||
printk(KERN_INFO DRV_PFX "Unknown event received\n");
|
||||
pr_info("Unknown event received\n");
|
||||
kfree(response.pointer);
|
||||
}
|
||||
|
||||
|
@ -238,8 +234,7 @@ static int __init msi_wmi_init(void)
|
|||
int err;
|
||||
|
||||
if (!wmi_has_guid(MSIWMI_EVENT_GUID)) {
|
||||
printk(KERN_ERR
|
||||
"This machine doesn't have MSI-hotkeys through WMI\n");
|
||||
pr_err("This machine doesn't have MSI-hotkeys through WMI\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
err = wmi_install_notify_handler(MSIWMI_EVENT_GUID,
|
||||
|
@ -270,7 +265,7 @@ static int __init msi_wmi_init(void)
|
|||
|
||||
backlight->props.brightness = err;
|
||||
}
|
||||
dprintk("Event handler installed\n");
|
||||
pr_debug("Event handler installed\n");
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
|
@ -42,6 +42,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/moduleparam.h>
|
||||
|
@ -70,10 +72,10 @@
|
|||
#include <linux/miscdevice.h>
|
||||
#endif
|
||||
|
||||
#define DRV_PFX "sony-laptop: "
|
||||
#define dprintk(msg...) do { \
|
||||
if (debug) \
|
||||
pr_warn(DRV_PFX msg); \
|
||||
#define dprintk(fmt, ...) \
|
||||
do { \
|
||||
if (debug) \
|
||||
pr_warn(fmt, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#define SONY_LAPTOP_DRIVER_VERSION "0.6"
|
||||
|
@ -418,7 +420,7 @@ static int sony_laptop_setup_input(struct acpi_device *acpi_device)
|
|||
error = kfifo_alloc(&sony_laptop_input.fifo,
|
||||
SONY_LAPTOP_BUF_SIZE, GFP_KERNEL);
|
||||
if (error) {
|
||||
pr_err(DRV_PFX "kfifo_alloc failed\n");
|
||||
pr_err("kfifo_alloc failed\n");
|
||||
goto err_dec_users;
|
||||
}
|
||||
|
||||
|
@ -702,7 +704,7 @@ static int acpi_callgetfunc(acpi_handle handle, char *name, int *result)
|
|||
return 0;
|
||||
}
|
||||
|
||||
pr_warn(DRV_PFX "acpi_callreadfunc failed\n");
|
||||
pr_warn("acpi_callreadfunc failed\n");
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
@ -728,8 +730,7 @@ static int acpi_callsetfunc(acpi_handle handle, char *name, int value,
|
|||
if (status == AE_OK) {
|
||||
if (result != NULL) {
|
||||
if (out_obj.type != ACPI_TYPE_INTEGER) {
|
||||
pr_warn(DRV_PFX "acpi_evaluate_object bad "
|
||||
"return type\n");
|
||||
pr_warn("acpi_evaluate_object bad return type\n");
|
||||
return -1;
|
||||
}
|
||||
*result = out_obj.integer.value;
|
||||
|
@ -737,7 +738,7 @@ static int acpi_callsetfunc(acpi_handle handle, char *name, int value,
|
|||
return 0;
|
||||
}
|
||||
|
||||
pr_warn(DRV_PFX "acpi_evaluate_object failed\n");
|
||||
pr_warn("acpi_evaluate_object failed\n");
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
@ -961,7 +962,6 @@ static int sony_backlight_get_brightness(struct backlight_device *bd)
|
|||
static int sony_nc_get_brightness_ng(struct backlight_device *bd)
|
||||
{
|
||||
int result;
|
||||
int *handle = (int *)bl_get_data(bd);
|
||||
struct sony_backlight_props *sdev =
|
||||
(struct sony_backlight_props *)bl_get_data(bd);
|
||||
|
||||
|
@ -973,7 +973,6 @@ static int sony_nc_get_brightness_ng(struct backlight_device *bd)
|
|||
static int sony_nc_update_status_ng(struct backlight_device *bd)
|
||||
{
|
||||
int value, result;
|
||||
int *handle = (int *)bl_get_data(bd);
|
||||
struct sony_backlight_props *sdev =
|
||||
(struct sony_backlight_props *)bl_get_data(bd);
|
||||
|
||||
|
@ -1104,10 +1103,8 @@ static void sony_nc_notify(struct acpi_device *device, u32 event)
|
|||
}
|
||||
|
||||
if (!key_event->data)
|
||||
pr_info(DRV_PFX
|
||||
"Unknown event: 0x%x 0x%x\n",
|
||||
key_handle,
|
||||
ev);
|
||||
pr_info("Unknown event: 0x%x 0x%x\n",
|
||||
key_handle, ev);
|
||||
else
|
||||
sony_laptop_report_input_event(ev);
|
||||
}
|
||||
|
@ -1128,7 +1125,7 @@ static acpi_status sony_walk_callback(acpi_handle handle, u32 level,
|
|||
struct acpi_device_info *info;
|
||||
|
||||
if (ACPI_SUCCESS(acpi_get_object_info(handle, &info))) {
|
||||
pr_warn(DRV_PFX "method: name: %4.4s, args %X\n",
|
||||
pr_warn("method: name: %4.4s, args %X\n",
|
||||
(char *)&info->name, info->param_count);
|
||||
|
||||
kfree(info);
|
||||
|
@ -1169,7 +1166,7 @@ static int sony_nc_resume(struct acpi_device *device)
|
|||
ret = acpi_callsetfunc(sony_nc_acpi_handle, *item->acpiset,
|
||||
item->value, NULL);
|
||||
if (ret < 0) {
|
||||
pr_err(DRV_PFX "%s: %d\n", __func__, ret);
|
||||
pr_err("%s: %d\n", __func__, ret);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1336,12 +1333,12 @@ static void sony_nc_rfkill_setup(struct acpi_device *device)
|
|||
|
||||
device_enum = (union acpi_object *) buffer.pointer;
|
||||
if (!device_enum) {
|
||||
pr_err(DRV_PFX "No SN06 return object.");
|
||||
pr_err("No SN06 return object\n");
|
||||
goto out_no_enum;
|
||||
}
|
||||
if (device_enum->type != ACPI_TYPE_BUFFER) {
|
||||
pr_err(DRV_PFX "Invalid SN06 return object 0x%.2x\n",
|
||||
device_enum->type);
|
||||
pr_err("Invalid SN06 return object 0x%.2x\n",
|
||||
device_enum->type);
|
||||
goto out_no_enum;
|
||||
}
|
||||
|
||||
|
@ -1662,7 +1659,7 @@ static void sony_nc_backlight_setup(void)
|
|||
ops, &props);
|
||||
|
||||
if (IS_ERR(sony_bl_props.dev)) {
|
||||
pr_warn(DRV_PFX "unable to register backlight device\n");
|
||||
pr_warn("unable to register backlight device\n");
|
||||
sony_bl_props.dev = NULL;
|
||||
} else
|
||||
sony_bl_props.dev->props.brightness =
|
||||
|
@ -1682,8 +1679,7 @@ static int sony_nc_add(struct acpi_device *device)
|
|||
acpi_handle handle;
|
||||
struct sony_nc_value *item;
|
||||
|
||||
pr_info(DRV_PFX "%s v%s.\n", SONY_NC_DRIVER_NAME,
|
||||
SONY_LAPTOP_DRIVER_VERSION);
|
||||
pr_info("%s v%s\n", SONY_NC_DRIVER_NAME, SONY_LAPTOP_DRIVER_VERSION);
|
||||
|
||||
sony_nc_acpi_device = device;
|
||||
strcpy(acpi_device_class(device), "sony/hotkey");
|
||||
|
@ -1708,7 +1704,7 @@ static int sony_nc_add(struct acpi_device *device)
|
|||
sony_nc_acpi_handle, 1, sony_walk_callback,
|
||||
NULL, NULL, NULL);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
pr_warn(DRV_PFX "unable to walk acpi resources\n");
|
||||
pr_warn("unable to walk acpi resources\n");
|
||||
result = -ENODEV;
|
||||
goto outpresent;
|
||||
}
|
||||
|
@ -1736,13 +1732,12 @@ static int sony_nc_add(struct acpi_device *device)
|
|||
/* setup input devices and helper fifo */
|
||||
result = sony_laptop_setup_input(device);
|
||||
if (result) {
|
||||
pr_err(DRV_PFX "Unable to create input devices.\n");
|
||||
pr_err("Unable to create input devices\n");
|
||||
goto outkbdbacklight;
|
||||
}
|
||||
|
||||
if (acpi_video_backlight_support()) {
|
||||
pr_info(DRV_PFX "brightness ignored, must be "
|
||||
"controlled by ACPI video driver\n");
|
||||
pr_info("brightness ignored, must be controlled by ACPI video driver\n");
|
||||
} else {
|
||||
sony_nc_backlight_setup();
|
||||
}
|
||||
|
@ -2265,9 +2260,9 @@ static void sony_pic_detect_device_type(struct sony_pic_dev *dev)
|
|||
if (pcidev)
|
||||
pci_dev_put(pcidev);
|
||||
|
||||
pr_info(DRV_PFX "detected Type%d model\n",
|
||||
dev->model == SONYPI_DEVICE_TYPE1 ? 1 :
|
||||
dev->model == SONYPI_DEVICE_TYPE2 ? 2 : 3);
|
||||
pr_info("detected Type%d model\n",
|
||||
dev->model == SONYPI_DEVICE_TYPE1 ? 1 :
|
||||
dev->model == SONYPI_DEVICE_TYPE2 ? 2 : 3);
|
||||
}
|
||||
|
||||
/* camera tests and poweron/poweroff */
|
||||
|
@ -2313,7 +2308,7 @@ static int __sony_pic_camera_ready(void)
|
|||
static int __sony_pic_camera_off(void)
|
||||
{
|
||||
if (!camera) {
|
||||
pr_warn(DRV_PFX "camera control not enabled\n");
|
||||
pr_warn("camera control not enabled\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
@ -2333,7 +2328,7 @@ static int __sony_pic_camera_on(void)
|
|||
int i, j, x;
|
||||
|
||||
if (!camera) {
|
||||
pr_warn(DRV_PFX "camera control not enabled\n");
|
||||
pr_warn("camera control not enabled\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
@ -2356,7 +2351,7 @@ static int __sony_pic_camera_on(void)
|
|||
}
|
||||
|
||||
if (j == 0) {
|
||||
pr_warn(DRV_PFX "failed to power on camera\n");
|
||||
pr_warn("failed to power on camera\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
@ -2412,8 +2407,7 @@ int sony_pic_camera_command(int command, u8 value)
|
|||
ITERATIONS_SHORT);
|
||||
break;
|
||||
default:
|
||||
pr_err(DRV_PFX "sony_pic_camera_command invalid: %d\n",
|
||||
command);
|
||||
pr_err("sony_pic_camera_command invalid: %d\n", command);
|
||||
break;
|
||||
}
|
||||
mutex_unlock(&spic_dev.lock);
|
||||
|
@ -2819,7 +2813,7 @@ static int sonypi_compat_init(void)
|
|||
error =
|
||||
kfifo_alloc(&sonypi_compat.fifo, SONY_LAPTOP_BUF_SIZE, GFP_KERNEL);
|
||||
if (error) {
|
||||
pr_err(DRV_PFX "kfifo_alloc failed\n");
|
||||
pr_err("kfifo_alloc failed\n");
|
||||
return error;
|
||||
}
|
||||
|
||||
|
@ -2829,12 +2823,12 @@ static int sonypi_compat_init(void)
|
|||
sonypi_misc_device.minor = minor;
|
||||
error = misc_register(&sonypi_misc_device);
|
||||
if (error) {
|
||||
pr_err(DRV_PFX "misc_register failed\n");
|
||||
pr_err("misc_register failed\n");
|
||||
goto err_free_kfifo;
|
||||
}
|
||||
if (minor == -1)
|
||||
pr_info(DRV_PFX "device allocated minor is %d\n",
|
||||
sonypi_misc_device.minor);
|
||||
pr_info("device allocated minor is %d\n",
|
||||
sonypi_misc_device.minor);
|
||||
|
||||
return 0;
|
||||
|
||||
|
@ -2893,8 +2887,8 @@ sony_pic_read_possible_resource(struct acpi_resource *resource, void *context)
|
|||
}
|
||||
for (i = 0; i < p->interrupt_count; i++) {
|
||||
if (!p->interrupts[i]) {
|
||||
pr_warn(DRV_PFX "Invalid IRQ %d\n",
|
||||
p->interrupts[i]);
|
||||
pr_warn("Invalid IRQ %d\n",
|
||||
p->interrupts[i]);
|
||||
continue;
|
||||
}
|
||||
interrupt = kzalloc(sizeof(*interrupt),
|
||||
|
@ -2932,14 +2926,14 @@ sony_pic_read_possible_resource(struct acpi_resource *resource, void *context)
|
|||
ioport->io2.address_length);
|
||||
}
|
||||
else {
|
||||
pr_err(DRV_PFX "Unknown SPIC Type, more than 2 IO Ports\n");
|
||||
pr_err("Unknown SPIC Type, more than 2 IO Ports\n");
|
||||
return AE_ERROR;
|
||||
}
|
||||
return AE_OK;
|
||||
}
|
||||
default:
|
||||
dprintk("Resource %d isn't an IRQ nor an IO port\n",
|
||||
resource->type);
|
||||
resource->type);
|
||||
|
||||
case ACPI_RESOURCE_TYPE_END_TAG:
|
||||
return AE_OK;
|
||||
|
@ -2960,7 +2954,7 @@ static int sony_pic_possible_resources(struct acpi_device *device)
|
|||
dprintk("Evaluating _STA\n");
|
||||
result = acpi_bus_get_status(device);
|
||||
if (result) {
|
||||
pr_warn(DRV_PFX "Unable to read status\n");
|
||||
pr_warn("Unable to read status\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
|
@ -2976,8 +2970,7 @@ static int sony_pic_possible_resources(struct acpi_device *device)
|
|||
status = acpi_walk_resources(device->handle, METHOD_NAME__PRS,
|
||||
sony_pic_read_possible_resource, &spic_dev);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
pr_warn(DRV_PFX "Failure evaluating %s\n",
|
||||
METHOD_NAME__PRS);
|
||||
pr_warn("Failure evaluating %s\n", METHOD_NAME__PRS);
|
||||
result = -ENODEV;
|
||||
}
|
||||
end:
|
||||
|
@ -3090,7 +3083,7 @@ static int sony_pic_enable(struct acpi_device *device,
|
|||
|
||||
/* check for total failure */
|
||||
if (ACPI_FAILURE(status)) {
|
||||
pr_err(DRV_PFX "Error evaluating _SRS\n");
|
||||
pr_err("Error evaluating _SRS\n");
|
||||
result = -ENODEV;
|
||||
goto end;
|
||||
}
|
||||
|
@ -3182,7 +3175,7 @@ static int sony_pic_remove(struct acpi_device *device, int type)
|
|||
struct sony_pic_irq *irq, *tmp_irq;
|
||||
|
||||
if (sony_pic_disable(device)) {
|
||||
pr_err(DRV_PFX "Couldn't disable device.\n");
|
||||
pr_err("Couldn't disable device\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
|
@ -3222,8 +3215,7 @@ static int sony_pic_add(struct acpi_device *device)
|
|||
struct sony_pic_ioport *io, *tmp_io;
|
||||
struct sony_pic_irq *irq, *tmp_irq;
|
||||
|
||||
pr_info(DRV_PFX "%s v%s.\n", SONY_PIC_DRIVER_NAME,
|
||||
SONY_LAPTOP_DRIVER_VERSION);
|
||||
pr_info("%s v%s\n", SONY_PIC_DRIVER_NAME, SONY_LAPTOP_DRIVER_VERSION);
|
||||
|
||||
spic_dev.acpi_dev = device;
|
||||
strcpy(acpi_device_class(device), "sony/hotkey");
|
||||
|
@ -3233,14 +3225,14 @@ static int sony_pic_add(struct acpi_device *device)
|
|||
/* read _PRS resources */
|
||||
result = sony_pic_possible_resources(device);
|
||||
if (result) {
|
||||
pr_err(DRV_PFX "Unable to read possible resources.\n");
|
||||
pr_err("Unable to read possible resources\n");
|
||||
goto err_free_resources;
|
||||
}
|
||||
|
||||
/* setup input devices and helper fifo */
|
||||
result = sony_laptop_setup_input(device);
|
||||
if (result) {
|
||||
pr_err(DRV_PFX "Unable to create input devices.\n");
|
||||
pr_err("Unable to create input devices\n");
|
||||
goto err_free_resources;
|
||||
}
|
||||
|
||||
|
@ -3281,7 +3273,7 @@ static int sony_pic_add(struct acpi_device *device)
|
|||
}
|
||||
}
|
||||
if (!spic_dev.cur_ioport) {
|
||||
pr_err(DRV_PFX "Failed to request_region.\n");
|
||||
pr_err("Failed to request_region\n");
|
||||
result = -ENODEV;
|
||||
goto err_remove_compat;
|
||||
}
|
||||
|
@ -3301,7 +3293,7 @@ static int sony_pic_add(struct acpi_device *device)
|
|||
}
|
||||
}
|
||||
if (!spic_dev.cur_irq) {
|
||||
pr_err(DRV_PFX "Failed to request_irq.\n");
|
||||
pr_err("Failed to request_irq\n");
|
||||
result = -ENODEV;
|
||||
goto err_release_region;
|
||||
}
|
||||
|
@ -3309,7 +3301,7 @@ static int sony_pic_add(struct acpi_device *device)
|
|||
/* set resource status _SRS */
|
||||
result = sony_pic_enable(device, spic_dev.cur_ioport, spic_dev.cur_irq);
|
||||
if (result) {
|
||||
pr_err(DRV_PFX "Couldn't enable device.\n");
|
||||
pr_err("Couldn't enable device\n");
|
||||
goto err_free_irq;
|
||||
}
|
||||
|
||||
|
@ -3418,7 +3410,7 @@ static int __init sony_laptop_init(void)
|
|||
if (!no_spic && dmi_check_system(sonypi_dmi_table)) {
|
||||
result = acpi_bus_register_driver(&sony_pic_driver);
|
||||
if (result) {
|
||||
pr_err(DRV_PFX "Unable to register SPIC driver.");
|
||||
pr_err("Unable to register SPIC driver\n");
|
||||
goto out;
|
||||
}
|
||||
spic_drv_registered = 1;
|
||||
|
@ -3426,7 +3418,7 @@ static int __init sony_laptop_init(void)
|
|||
|
||||
result = acpi_bus_register_driver(&sony_nc_driver);
|
||||
if (result) {
|
||||
pr_err(DRV_PFX "Unable to register SNC driver.");
|
||||
pr_err("Unable to register SNC driver\n");
|
||||
goto out_unregister_pic;
|
||||
}
|
||||
|
||||
|
|
|
@ -25,6 +25,8 @@
|
|||
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/slab.h>
|
||||
|
@ -40,9 +42,6 @@
|
|||
#define TC1100_INSTANCE_WIRELESS 1
|
||||
#define TC1100_INSTANCE_JOGDIAL 2
|
||||
|
||||
#define TC1100_LOGPREFIX "tc1100-wmi: "
|
||||
#define TC1100_INFO KERN_INFO TC1100_LOGPREFIX
|
||||
|
||||
MODULE_AUTHOR("Jamey Hicks, Carlos Corbacho");
|
||||
MODULE_DESCRIPTION("HP Compaq TC1100 Tablet WMI Extras");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
@ -264,7 +263,7 @@ static int __init tc1100_init(void)
|
|||
if (error)
|
||||
goto err_device_del;
|
||||
|
||||
printk(TC1100_INFO "HP Compaq TC1100 Tablet WMI Extras loaded\n");
|
||||
pr_info("HP Compaq TC1100 Tablet WMI Extras loaded\n");
|
||||
return 0;
|
||||
|
||||
err_device_del:
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -194,7 +194,7 @@ static int __init topstar_laptop_init(void)
|
|||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
printk(KERN_INFO "Topstar Laptop ACPI extras driver loaded\n");
|
||||
pr_info("ACPI extras driver loaded\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -35,6 +35,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#define TOSHIBA_ACPI_VERSION "0.19"
|
||||
#define PROC_INTERFACE_VERSION 1
|
||||
|
||||
|
@ -60,11 +62,6 @@ MODULE_AUTHOR("John Belmonte");
|
|||
MODULE_DESCRIPTION("Toshiba Laptop ACPI Extras Driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
#define MY_LOGPREFIX "toshiba_acpi: "
|
||||
#define MY_ERR KERN_ERR MY_LOGPREFIX
|
||||
#define MY_NOTICE KERN_NOTICE MY_LOGPREFIX
|
||||
#define MY_INFO KERN_INFO MY_LOGPREFIX
|
||||
|
||||
/* Toshiba ACPI method paths */
|
||||
#define METHOD_LCD_BRIGHTNESS "\\_SB_.PCI0.VGA_.LCD_._BCM"
|
||||
#define TOSH_INTERFACE_1 "\\_SB_.VALD"
|
||||
|
@ -301,7 +298,7 @@ static int toshiba_illumination_available(void)
|
|||
in[0] = 0xf100;
|
||||
status = hci_raw(in, out);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
printk(MY_INFO "Illumination device not available\n");
|
||||
pr_info("Illumination device not available\n");
|
||||
return 0;
|
||||
}
|
||||
in[0] = 0xf400;
|
||||
|
@ -320,7 +317,7 @@ static void toshiba_illumination_set(struct led_classdev *cdev,
|
|||
in[0] = 0xf100;
|
||||
status = hci_raw(in, out);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
printk(MY_INFO "Illumination device not available\n");
|
||||
pr_info("Illumination device not available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -331,7 +328,7 @@ static void toshiba_illumination_set(struct led_classdev *cdev,
|
|||
in[2] = 1;
|
||||
status = hci_raw(in, out);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
printk(MY_INFO "ACPI call for illumination failed.\n");
|
||||
pr_info("ACPI call for illumination failed\n");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
|
@ -341,7 +338,7 @@ static void toshiba_illumination_set(struct led_classdev *cdev,
|
|||
in[2] = 0;
|
||||
status = hci_raw(in, out);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
printk(MY_INFO "ACPI call for illumination failed.\n");
|
||||
pr_info("ACPI call for illumination failed.\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -364,7 +361,7 @@ static enum led_brightness toshiba_illumination_get(struct led_classdev *cdev)
|
|||
in[0] = 0xf100;
|
||||
status = hci_raw(in, out);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
printk(MY_INFO "Illumination device not available\n");
|
||||
pr_info("Illumination device not available\n");
|
||||
return LED_OFF;
|
||||
}
|
||||
|
||||
|
@ -373,7 +370,7 @@ static enum led_brightness toshiba_illumination_get(struct led_classdev *cdev)
|
|||
in[1] = 0x14e;
|
||||
status = hci_raw(in, out);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
printk(MY_INFO "ACPI call for illumination failed.\n");
|
||||
pr_info("ACPI call for illumination failed.\n");
|
||||
return LED_OFF;
|
||||
}
|
||||
|
||||
|
@ -517,7 +514,7 @@ static int lcd_proc_show(struct seq_file *m, void *v)
|
|||
seq_printf(m, "brightness_levels: %d\n",
|
||||
HCI_LCD_BRIGHTNESS_LEVELS);
|
||||
} else {
|
||||
printk(MY_ERR "Error reading LCD brightness\n");
|
||||
pr_err("Error reading LCD brightness\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -592,7 +589,7 @@ static int video_proc_show(struct seq_file *m, void *v)
|
|||
seq_printf(m, "crt_out: %d\n", is_crt);
|
||||
seq_printf(m, "tv_out: %d\n", is_tv);
|
||||
} else {
|
||||
printk(MY_ERR "Error reading video out status\n");
|
||||
pr_err("Error reading video out status\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -686,7 +683,7 @@ static int fan_proc_show(struct seq_file *m, void *v)
|
|||
seq_printf(m, "running: %d\n", (value > 0));
|
||||
seq_printf(m, "force_on: %d\n", force_fan);
|
||||
} else {
|
||||
printk(MY_ERR "Error reading fan status\n");
|
||||
pr_err("Error reading fan status\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -750,9 +747,9 @@ static int keys_proc_show(struct seq_file *m, void *v)
|
|||
* some machines where system events sporadically
|
||||
* become disabled. */
|
||||
hci_write1(HCI_SYSTEM_EVENT, 1, &hci_result);
|
||||
printk(MY_NOTICE "Re-enabled hotkeys\n");
|
||||
pr_notice("Re-enabled hotkeys\n");
|
||||
} else {
|
||||
printk(MY_ERR "Error reading hotkey status\n");
|
||||
pr_err("Error reading hotkey status\n");
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
@ -863,7 +860,7 @@ static void toshiba_acpi_notify(acpi_handle handle, u32 event, void *context)
|
|||
|
||||
if (!sparse_keymap_report_event(toshiba_acpi.hotkey_dev,
|
||||
value, 1, true)) {
|
||||
printk(MY_INFO "Unknown key %x\n",
|
||||
pr_info("Unknown key %x\n",
|
||||
value);
|
||||
}
|
||||
} else if (hci_result == HCI_NOT_SUPPORTED) {
|
||||
|
@ -871,7 +868,7 @@ static void toshiba_acpi_notify(acpi_handle handle, u32 event, void *context)
|
|||
* some machines where system events sporadically
|
||||
* become disabled. */
|
||||
hci_write1(HCI_SYSTEM_EVENT, 1, &hci_result);
|
||||
printk(MY_NOTICE "Re-enabled hotkeys\n");
|
||||
pr_notice("Re-enabled hotkeys\n");
|
||||
}
|
||||
} while (hci_result != HCI_EMPTY);
|
||||
}
|
||||
|
@ -883,13 +880,13 @@ static int __init toshiba_acpi_setup_keyboard(char *device)
|
|||
|
||||
status = acpi_get_handle(NULL, device, &toshiba_acpi.handle);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
printk(MY_INFO "Unable to get notification device\n");
|
||||
pr_info("Unable to get notification device\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
toshiba_acpi.hotkey_dev = input_allocate_device();
|
||||
if (!toshiba_acpi.hotkey_dev) {
|
||||
printk(MY_INFO "Unable to register input device\n");
|
||||
pr_info("Unable to register input device\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
@ -905,21 +902,21 @@ static int __init toshiba_acpi_setup_keyboard(char *device)
|
|||
status = acpi_install_notify_handler(toshiba_acpi.handle,
|
||||
ACPI_DEVICE_NOTIFY, toshiba_acpi_notify, NULL);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
printk(MY_INFO "Unable to install hotkey notification\n");
|
||||
pr_info("Unable to install hotkey notification\n");
|
||||
error = -ENODEV;
|
||||
goto err_free_keymap;
|
||||
}
|
||||
|
||||
status = acpi_evaluate_object(toshiba_acpi.handle, "ENAB", NULL, NULL);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
printk(MY_INFO "Unable to enable hotkeys\n");
|
||||
pr_info("Unable to enable hotkeys\n");
|
||||
error = -ENODEV;
|
||||
goto err_remove_notify;
|
||||
}
|
||||
|
||||
error = input_register_device(toshiba_acpi.hotkey_dev);
|
||||
if (error) {
|
||||
printk(MY_INFO "Unable to register input device\n");
|
||||
pr_info("Unable to register input device\n");
|
||||
goto err_remove_notify;
|
||||
}
|
||||
|
||||
|
@ -980,17 +977,17 @@ static int __init toshiba_acpi_init(void)
|
|||
if (is_valid_acpi_path(TOSH_INTERFACE_1 GHCI_METHOD)) {
|
||||
method_hci = TOSH_INTERFACE_1 GHCI_METHOD;
|
||||
if (toshiba_acpi_setup_keyboard(TOSH_INTERFACE_1))
|
||||
printk(MY_INFO "Unable to activate hotkeys\n");
|
||||
pr_info("Unable to activate hotkeys\n");
|
||||
} else if (is_valid_acpi_path(TOSH_INTERFACE_2 GHCI_METHOD)) {
|
||||
method_hci = TOSH_INTERFACE_2 GHCI_METHOD;
|
||||
if (toshiba_acpi_setup_keyboard(TOSH_INTERFACE_2))
|
||||
printk(MY_INFO "Unable to activate hotkeys\n");
|
||||
pr_info("Unable to activate hotkeys\n");
|
||||
} else
|
||||
return -ENODEV;
|
||||
|
||||
printk(MY_INFO "Toshiba Laptop ACPI Extras version %s\n",
|
||||
pr_info("Toshiba Laptop ACPI Extras version %s\n",
|
||||
TOSHIBA_ACPI_VERSION);
|
||||
printk(MY_INFO " HCI method: %s\n", method_hci);
|
||||
pr_info(" HCI method: %s\n", method_hci);
|
||||
|
||||
mutex_init(&toshiba_acpi.mutex);
|
||||
|
||||
|
@ -998,7 +995,7 @@ static int __init toshiba_acpi_init(void)
|
|||
-1, NULL, 0);
|
||||
if (IS_ERR(toshiba_acpi.p_dev)) {
|
||||
ret = PTR_ERR(toshiba_acpi.p_dev);
|
||||
printk(MY_ERR "unable to register platform device\n");
|
||||
pr_err("unable to register platform device\n");
|
||||
toshiba_acpi.p_dev = NULL;
|
||||
toshiba_acpi_exit();
|
||||
return ret;
|
||||
|
@ -1028,7 +1025,7 @@ static int __init toshiba_acpi_init(void)
|
|||
if (IS_ERR(toshiba_backlight_device)) {
|
||||
ret = PTR_ERR(toshiba_backlight_device);
|
||||
|
||||
printk(KERN_ERR "Could not register toshiba backlight device\n");
|
||||
pr_err("Could not register toshiba backlight device\n");
|
||||
toshiba_backlight_device = NULL;
|
||||
toshiba_acpi_exit();
|
||||
return ret;
|
||||
|
@ -1042,14 +1039,14 @@ static int __init toshiba_acpi_init(void)
|
|||
&toshiba_rfk_ops,
|
||||
&toshiba_acpi);
|
||||
if (!toshiba_acpi.bt_rfk) {
|
||||
printk(MY_ERR "unable to allocate rfkill device\n");
|
||||
pr_err("unable to allocate rfkill device\n");
|
||||
toshiba_acpi_exit();
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
ret = rfkill_register(toshiba_acpi.bt_rfk);
|
||||
if (ret) {
|
||||
printk(MY_ERR "unable to register rfkill device\n");
|
||||
pr_err("unable to register rfkill device\n");
|
||||
rfkill_destroy(toshiba_acpi.bt_rfk);
|
||||
toshiba_acpi_exit();
|
||||
return ret;
|
||||
|
|
|
@ -17,6 +17,8 @@
|
|||
* delivered.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
|
@ -70,14 +72,13 @@ static int toshiba_bluetooth_enable(acpi_handle handle)
|
|||
if (!(result & 0x01))
|
||||
return 0;
|
||||
|
||||
printk(KERN_INFO "toshiba_bluetooth: Re-enabling Toshiba Bluetooth\n");
|
||||
pr_info("Re-enabling Toshiba Bluetooth\n");
|
||||
res1 = acpi_evaluate_object(handle, "AUSB", NULL, NULL);
|
||||
res2 = acpi_evaluate_object(handle, "BTPO", NULL, NULL);
|
||||
if (!ACPI_FAILURE(res1) || !ACPI_FAILURE(res2))
|
||||
return 0;
|
||||
|
||||
printk(KERN_WARNING "toshiba_bluetooth: Failed to re-enable "
|
||||
"Toshiba Bluetooth\n");
|
||||
pr_warn("Failed to re-enable Toshiba Bluetooth\n");
|
||||
|
||||
return -ENODEV;
|
||||
}
|
||||
|
@ -107,8 +108,8 @@ static int toshiba_bt_rfkill_add(struct acpi_device *device)
|
|||
&bt_present);
|
||||
|
||||
if (!ACPI_FAILURE(status) && bt_present) {
|
||||
printk(KERN_INFO "Detected Toshiba ACPI Bluetooth device - "
|
||||
"installing RFKill handler\n");
|
||||
pr_info("Detected Toshiba ACPI Bluetooth device - "
|
||||
"installing RFKill handler\n");
|
||||
result = toshiba_bluetooth_enable(device->handle);
|
||||
}
|
||||
|
||||
|
|
|
@ -486,16 +486,16 @@ static void wmi_dump_wdg(const struct guid_block *g)
|
|||
pr_info("\tnotify_id: %02X\n", g->notify_id);
|
||||
pr_info("\treserved: %02X\n", g->reserved);
|
||||
pr_info("\tinstance_count: %d\n", g->instance_count);
|
||||
pr_info("\tflags: %#x ", g->flags);
|
||||
pr_info("\tflags: %#x", g->flags);
|
||||
if (g->flags) {
|
||||
if (g->flags & ACPI_WMI_EXPENSIVE)
|
||||
pr_cont("ACPI_WMI_EXPENSIVE ");
|
||||
pr_cont(" ACPI_WMI_EXPENSIVE");
|
||||
if (g->flags & ACPI_WMI_METHOD)
|
||||
pr_cont("ACPI_WMI_METHOD ");
|
||||
pr_cont(" ACPI_WMI_METHOD");
|
||||
if (g->flags & ACPI_WMI_STRING)
|
||||
pr_cont("ACPI_WMI_STRING ");
|
||||
pr_cont(" ACPI_WMI_STRING");
|
||||
if (g->flags & ACPI_WMI_EVENT)
|
||||
pr_cont("ACPI_WMI_EVENT ");
|
||||
pr_cont(" ACPI_WMI_EVENT");
|
||||
}
|
||||
pr_cont("\n");
|
||||
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
* your option) any later version.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
|
@ -20,7 +22,6 @@
|
|||
#include <acpi/acpi_drivers.h>
|
||||
|
||||
#define MODULE_NAME "xo15-ebook"
|
||||
#define PREFIX MODULE_NAME ": "
|
||||
|
||||
#define XO15_EBOOK_CLASS MODULE_NAME
|
||||
#define XO15_EBOOK_TYPE_UNKNOWN 0x00
|
||||
|
@ -105,7 +106,7 @@ static int ebook_switch_add(struct acpi_device *device)
|
|||
class = acpi_device_class(device);
|
||||
|
||||
if (strcmp(hid, XO15_EBOOK_HID)) {
|
||||
printk(KERN_ERR PREFIX "Unsupported hid [%s]\n", hid);
|
||||
pr_err("Unsupported hid [%s]\n", hid);
|
||||
error = -ENODEV;
|
||||
goto err_free_input;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue