mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
Merge branches 'release', 'bugzilla-6217', 'bugzilla-6629', 'bugzilla-6933', 'bugzilla-7186', 'bugzilla-8269', 'bugzilla-8570', 'bugzilla-9139', 'bugzilla-9277', 'bugzilla-9341', 'bugzilla-9444', 'bugzilla-9614', 'bugzilla-9643' and 'bugzilla-9644' into release
This commit is contained in:
parent
8f859016ea
a7f9b1f249
b4d2730a0d
37748ebf88
ed9cbcd400
856608ee5e
cfaf3747ff
223630fe3d
38531e6fe5
b3b233c7d9
239665a3bb
0119509c4f
975c30257e
0879802950
commit
c64768a7d6
19 changed files with 209 additions and 125 deletions
|
|
@ -70,8 +70,6 @@ static struct acpi_blacklist_item acpi_blacklist[] __initdata = {
|
|||
/* IBM 600E - _ADR should return 7, but it returns 1 */
|
||||
{"IBM ", "TP600E ", 0x00000105, ACPI_SIG_DSDT, less_than_or_equal,
|
||||
"Incorrect _ADR", 1},
|
||||
{"ASUS\0\0", "P2B-S ", 0, ACPI_SIG_DSDT, all_versions,
|
||||
"Bogus PCI routing", 1},
|
||||
|
||||
{""}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -130,6 +130,63 @@ static int param_get_debug_level(char *buffer, struct kernel_param *kp) {
|
|||
module_param_call(debug_layer, param_set_uint, param_get_debug_layer, &acpi_dbg_layer, 0644);
|
||||
module_param_call(debug_level, param_set_uint, param_get_debug_level, &acpi_dbg_level, 0644);
|
||||
|
||||
static char trace_method_name[6];
|
||||
module_param_string(trace_method_name, trace_method_name, 6, 0644);
|
||||
static unsigned int trace_debug_layer;
|
||||
module_param(trace_debug_layer, uint, 0644);
|
||||
static unsigned int trace_debug_level;
|
||||
module_param(trace_debug_level, uint, 0644);
|
||||
|
||||
static int param_set_trace_state(const char *val, struct kernel_param *kp)
|
||||
{
|
||||
int result = 0;
|
||||
|
||||
if (!strncmp(val, "enable", strlen("enable") - 1)) {
|
||||
result = acpi_debug_trace(trace_method_name, trace_debug_level,
|
||||
trace_debug_layer, 0);
|
||||
if (result)
|
||||
result = -EBUSY;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!strncmp(val, "disable", strlen("disable") - 1)) {
|
||||
int name = 0;
|
||||
result = acpi_debug_trace((char *)&name, trace_debug_level,
|
||||
trace_debug_layer, 0);
|
||||
if (result)
|
||||
result = -EBUSY;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!strncmp(val, "1", 1)) {
|
||||
result = acpi_debug_trace(trace_method_name, trace_debug_level,
|
||||
trace_debug_layer, 1);
|
||||
if (result)
|
||||
result = -EBUSY;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
result = -EINVAL;
|
||||
exit:
|
||||
return result;
|
||||
}
|
||||
|
||||
static int param_get_trace_state(char *buffer, struct kernel_param *kp)
|
||||
{
|
||||
if (!acpi_gbl_trace_method_name)
|
||||
return sprintf(buffer, "disable");
|
||||
else {
|
||||
if (acpi_gbl_trace_flags & 1)
|
||||
return sprintf(buffer, "1");
|
||||
else
|
||||
return sprintf(buffer, "enable");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
module_param_call(trace_state, param_set_trace_state, param_get_trace_state,
|
||||
NULL, 0644);
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
FS Interface (/proc)
|
||||
-------------------------------------------------------------------------- */
|
||||
|
|
|
|||
|
|
@ -573,7 +573,7 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,
|
|||
void *handler_context, void *region_context)
|
||||
{
|
||||
struct acpi_ec *ec = handler_context;
|
||||
int result = 0, i = 0;
|
||||
int result = 0, i;
|
||||
u8 temp = 0;
|
||||
|
||||
if ((address > 0xFF) || !value || !handler_context)
|
||||
|
|
@ -585,7 +585,18 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,
|
|||
if (bits != 8 && acpi_strict)
|
||||
return AE_BAD_PARAMETER;
|
||||
|
||||
while (bits - i > 0) {
|
||||
acpi_ec_burst_enable(ec);
|
||||
|
||||
if (function == ACPI_READ) {
|
||||
result = acpi_ec_read(ec, address, &temp);
|
||||
*value = temp;
|
||||
} else {
|
||||
temp = 0xff & (*value);
|
||||
result = acpi_ec_write(ec, address, temp);
|
||||
}
|
||||
|
||||
for (i = 8; unlikely(bits - i > 0); i += 8) {
|
||||
++address;
|
||||
if (function == ACPI_READ) {
|
||||
result = acpi_ec_read(ec, address, &temp);
|
||||
(*value) |= ((acpi_integer)temp) << i;
|
||||
|
|
@ -593,10 +604,10 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,
|
|||
temp = 0xff & ((*value) >> i);
|
||||
result = acpi_ec_write(ec, address, temp);
|
||||
}
|
||||
i += 8;
|
||||
++address;
|
||||
}
|
||||
|
||||
acpi_ec_burst_disable(ec);
|
||||
|
||||
switch (result) {
|
||||
case -EINVAL:
|
||||
return AE_BAD_PARAMETER;
|
||||
|
|
|
|||
|
|
@ -270,18 +270,18 @@ acpi_status acpi_ev_disable_gpe(struct acpi_gpe_event_info *gpe_event_info)
|
|||
case ACPI_GPE_TYPE_WAKE_RUN:
|
||||
ACPI_CLEAR_BIT(gpe_event_info->flags, ACPI_GPE_WAKE_ENABLED);
|
||||
|
||||
/*lint -fallthrough */
|
||||
/* fallthrough */
|
||||
|
||||
case ACPI_GPE_TYPE_RUNTIME:
|
||||
|
||||
/* Disable the requested runtime GPE */
|
||||
|
||||
ACPI_CLEAR_BIT(gpe_event_info->flags, ACPI_GPE_RUN_ENABLED);
|
||||
status = acpi_hw_write_gpe_enable_reg(gpe_event_info);
|
||||
break;
|
||||
|
||||
/* fallthrough */
|
||||
|
||||
default:
|
||||
return_ACPI_STATUS(AE_BAD_PARAMETER);
|
||||
acpi_hw_write_gpe_enable_reg(gpe_event_info);
|
||||
}
|
||||
|
||||
return_ACPI_STATUS(AE_OK);
|
||||
|
|
|
|||
|
|
@ -250,8 +250,12 @@ acpi_physical_address __init acpi_os_get_root_pointer(void)
|
|||
"System description tables not found\n");
|
||||
return 0;
|
||||
}
|
||||
} else
|
||||
return acpi_find_rsdp();
|
||||
} else {
|
||||
acpi_physical_address pa = 0;
|
||||
|
||||
acpi_find_root_pointer(&pa);
|
||||
return pa;
|
||||
}
|
||||
}
|
||||
|
||||
void __iomem *acpi_os_map_memory(acpi_physical_address phys, acpi_size size)
|
||||
|
|
|
|||
|
|
@ -812,11 +812,18 @@ static int is_processor_present(acpi_handle handle)
|
|||
|
||||
|
||||
status = acpi_evaluate_integer(handle, "_STA", NULL, &sta);
|
||||
if (ACPI_FAILURE(status) || !(sta & ACPI_STA_DEVICE_PRESENT)) {
|
||||
ACPI_EXCEPTION((AE_INFO, status, "Processor Device is not present"));
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
/*
|
||||
* if a processor object does not have an _STA object,
|
||||
* OSPM assumes that the processor is present.
|
||||
*/
|
||||
if (status == AE_NOT_FOUND)
|
||||
return 1;
|
||||
|
||||
if (ACPI_SUCCESS(status) && (sta & ACPI_STA_DEVICE_PRESENT))
|
||||
return 1;
|
||||
|
||||
ACPI_EXCEPTION((AE_INFO, status, "Processor Device is not present"));
|
||||
return 0;
|
||||
}
|
||||
|
||||
static
|
||||
|
|
|
|||
|
|
@ -178,6 +178,9 @@ static int get_date_field(char **p, u32 * value)
|
|||
* Try to find delimeter, only to insert null. The end of the
|
||||
* string won't have one, but is still valid.
|
||||
*/
|
||||
if (*p == NULL)
|
||||
return result;
|
||||
|
||||
next = strpbrk(*p, "- :");
|
||||
if (next)
|
||||
*next++ = '\0';
|
||||
|
|
@ -190,6 +193,8 @@ static int get_date_field(char **p, u32 * value)
|
|||
|
||||
if (next)
|
||||
*p = next;
|
||||
else
|
||||
*p = NULL;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
@ -251,27 +256,6 @@ acpi_system_write_alarm(struct file *file,
|
|||
if ((result = get_date_field(&p, &sec)))
|
||||
goto end;
|
||||
|
||||
if (sec > 59) {
|
||||
min += 1;
|
||||
sec -= 60;
|
||||
}
|
||||
if (min > 59) {
|
||||
hr += 1;
|
||||
min -= 60;
|
||||
}
|
||||
if (hr > 23) {
|
||||
day += 1;
|
||||
hr -= 24;
|
||||
}
|
||||
if (day > 31) {
|
||||
mo += 1;
|
||||
day -= 31;
|
||||
}
|
||||
if (mo > 12) {
|
||||
yr += 1;
|
||||
mo -= 12;
|
||||
}
|
||||
|
||||
spin_lock_irq(&rtc_lock);
|
||||
|
||||
rtc_control = CMOS_READ(RTC_CONTROL);
|
||||
|
|
@ -288,24 +272,24 @@ acpi_system_write_alarm(struct file *file,
|
|||
spin_unlock_irq(&rtc_lock);
|
||||
|
||||
if (sec > 59) {
|
||||
min++;
|
||||
sec -= 60;
|
||||
min += sec/60;
|
||||
sec = sec%60;
|
||||
}
|
||||
if (min > 59) {
|
||||
hr++;
|
||||
min -= 60;
|
||||
hr += min/60;
|
||||
min = min%60;
|
||||
}
|
||||
if (hr > 23) {
|
||||
day++;
|
||||
hr -= 24;
|
||||
day += hr/24;
|
||||
hr = hr%24;
|
||||
}
|
||||
if (day > 31) {
|
||||
mo++;
|
||||
day -= 31;
|
||||
mo += day/32;
|
||||
day = day%32;
|
||||
}
|
||||
if (mo > 12) {
|
||||
yr++;
|
||||
mo -= 12;
|
||||
yr += mo/13;
|
||||
mo = mo%13;
|
||||
}
|
||||
|
||||
spin_lock_irq(&rtc_lock);
|
||||
|
|
|
|||
|
|
@ -2,6 +2,6 @@
|
|||
# Makefile for all Linux ACPI interpreter subdirectories
|
||||
#
|
||||
|
||||
obj-y := tbxface.o tbinstal.o tbutils.o tbfind.o tbfadt.o
|
||||
obj-y := tbxface.o tbinstal.o tbutils.o tbfind.o tbfadt.o tbxfroot.o
|
||||
|
||||
EXTRA_CFLAGS += $(ACPI_CFLAGS)
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@ static acpi_status acpi_tb_validate_rsdp(struct acpi_table_rsdp *rsdp)
|
|||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_tb_find_rsdp
|
||||
* FUNCTION: acpi_find_root_pointer
|
||||
*
|
||||
* PARAMETERS: table_address - Where the table pointer is returned
|
||||
*
|
||||
|
|
@ -219,8 +219,6 @@ acpi_status acpi_find_root_pointer(acpi_native_uint * table_address)
|
|||
return_ACPI_STATUS(AE_NOT_FOUND);
|
||||
}
|
||||
|
||||
ACPI_EXPORT_SYMBOL(acpi_find_root_pointer)
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_tb_scan_memory_for_rsdp
|
||||
|
|
|
|||
|
|
@ -492,7 +492,7 @@ static int acpi_thermal_get_devices(struct acpi_thermal *tz)
|
|||
|
||||
static int acpi_thermal_critical(struct acpi_thermal *tz)
|
||||
{
|
||||
if (!tz || !tz->trips.critical.flags.valid || nocrt)
|
||||
if (!tz || !tz->trips.critical.flags.valid)
|
||||
return -EINVAL;
|
||||
|
||||
if (tz->temperature >= tz->trips.critical.temperature) {
|
||||
|
|
@ -501,9 +501,6 @@ static int acpi_thermal_critical(struct acpi_thermal *tz)
|
|||
} else if (tz->trips.critical.flags.enabled)
|
||||
tz->trips.critical.flags.enabled = 0;
|
||||
|
||||
printk(KERN_EMERG
|
||||
"Critical temperature reached (%ld C), shutting down.\n",
|
||||
KELVIN_TO_CELSIUS(tz->temperature));
|
||||
acpi_bus_generate_proc_event(tz->device, ACPI_THERMAL_NOTIFY_CRITICAL,
|
||||
tz->trips.critical.flags.enabled);
|
||||
acpi_bus_generate_netlink_event(tz->device->pnp.device_class,
|
||||
|
|
@ -511,14 +508,20 @@ static int acpi_thermal_critical(struct acpi_thermal *tz)
|
|||
ACPI_THERMAL_NOTIFY_CRITICAL,
|
||||
tz->trips.critical.flags.enabled);
|
||||
|
||||
orderly_poweroff(true);
|
||||
/* take no action if nocrt is set */
|
||||
if(!nocrt) {
|
||||
printk(KERN_EMERG
|
||||
"Critical temperature reached (%ld C), shutting down.\n",
|
||||
KELVIN_TO_CELSIUS(tz->temperature));
|
||||
orderly_poweroff(true);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int acpi_thermal_hot(struct acpi_thermal *tz)
|
||||
{
|
||||
if (!tz || !tz->trips.hot.flags.valid || nocrt)
|
||||
if (!tz || !tz->trips.hot.flags.valid)
|
||||
return -EINVAL;
|
||||
|
||||
if (tz->temperature >= tz->trips.hot.temperature) {
|
||||
|
|
@ -534,7 +537,7 @@ static int acpi_thermal_hot(struct acpi_thermal *tz)
|
|||
ACPI_THERMAL_NOTIFY_HOT,
|
||||
tz->trips.hot.flags.enabled);
|
||||
|
||||
/* TBD: Call user-mode "sleep(S4)" function */
|
||||
/* TBD: Call user-mode "sleep(S4)" function if nocrt is cleared */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -292,18 +292,26 @@ static int acpi_video_device_set_state(struct acpi_video_device *device, int sta
|
|||
static int acpi_video_get_brightness(struct backlight_device *bd)
|
||||
{
|
||||
unsigned long cur_level;
|
||||
int i;
|
||||
struct acpi_video_device *vd =
|
||||
(struct acpi_video_device *)bl_get_data(bd);
|
||||
acpi_video_device_lcd_get_level_current(vd, &cur_level);
|
||||
return (int) cur_level;
|
||||
for (i = 2; i < vd->brightness->count; i++) {
|
||||
if (vd->brightness->levels[i] == cur_level)
|
||||
/* The first two entries are special - see page 575
|
||||
of the ACPI spec 3.0 */
|
||||
return i-2;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int acpi_video_set_brightness(struct backlight_device *bd)
|
||||
{
|
||||
int request_level = bd->props.brightness;
|
||||
int request_level = bd->props.brightness+2;
|
||||
struct acpi_video_device *vd =
|
||||
(struct acpi_video_device *)bl_get_data(bd);
|
||||
acpi_video_device_lcd_set_level(vd, request_level);
|
||||
acpi_video_device_lcd_set_level(vd,
|
||||
vd->brightness->levels[request_level]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -652,7 +660,6 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
|
|||
kfree(obj);
|
||||
|
||||
if (device->cap._BCL && device->cap._BCM && device->cap._BQC && max_level > 0){
|
||||
unsigned long tmp;
|
||||
static int count = 0;
|
||||
char *name;
|
||||
name = kzalloc(MAX_NAME_LEN, GFP_KERNEL);
|
||||
|
|
@ -660,11 +667,10 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
|
|||
return;
|
||||
|
||||
sprintf(name, "acpi_video%d", count++);
|
||||
acpi_video_device_lcd_get_level_current(device, &tmp);
|
||||
device->backlight = backlight_device_register(name,
|
||||
NULL, device, &acpi_backlight_ops);
|
||||
device->backlight->props.max_brightness = max_level;
|
||||
device->backlight->props.brightness = (int)tmp;
|
||||
device->backlight->props.max_brightness = device->brightness->count-3;
|
||||
device->backlight->props.brightness = acpi_video_get_brightness(device->backlight);
|
||||
backlight_update_status(device->backlight);
|
||||
|
||||
kfree(name);
|
||||
|
|
@ -1256,8 +1262,37 @@ acpi_video_bus_write_DOS(struct file *file,
|
|||
|
||||
static int acpi_video_bus_add_fs(struct acpi_device *device)
|
||||
{
|
||||
long device_id;
|
||||
int status;
|
||||
struct proc_dir_entry *entry = NULL;
|
||||
struct acpi_video_bus *video;
|
||||
struct device *dev;
|
||||
|
||||
status =
|
||||
acpi_evaluate_integer(device->handle, "_ADR", NULL, &device_id);
|
||||
|
||||
if (!ACPI_SUCCESS(status))
|
||||
return -ENODEV;
|
||||
|
||||
/* We need to attempt to determine whether the _ADR refers to a
|
||||
PCI device or not. There's no terribly good way to do this,
|
||||
so the best we can hope for is to assume that there'll never
|
||||
be a video device in the host bridge */
|
||||
if (device_id >= 0x10000) {
|
||||
/* It looks like a PCI device. Does it exist? */
|
||||
dev = acpi_get_physical_device(device->handle);
|
||||
} else {
|
||||
/* It doesn't look like a PCI device. Does its parent
|
||||
exist? */
|
||||
acpi_handle phandle;
|
||||
if (acpi_get_parent(device->handle, &phandle))
|
||||
return -ENODEV;
|
||||
dev = acpi_get_physical_device(phandle);
|
||||
}
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
put_device(dev);
|
||||
|
||||
|
||||
|
||||
video = acpi_driver_data(device);
|
||||
|
|
|
|||
Loading…
Reference in a new issue