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:
Родитель
8f859016ea
a7f9b1f249
b4d2730a0d
37748ebf88
ed9cbcd400
856608ee5e
cfaf3747ff
223630fe3d
38531e6fe5
b3b233c7d9
239665a3bb
0119509c4f
975c30257e
0879802950
Коммит
c64768a7d6
|
@ -14,6 +14,7 @@ Following translations are available on the WWW:
|
|||
- this file.
|
||||
ABI/
|
||||
- info on kernel <-> userspace ABI and relative interface stability.
|
||||
|
||||
BUG-HUNTING
|
||||
- brute force method of doing binary search of patches to find bug.
|
||||
Changes
|
||||
|
@ -66,6 +67,8 @@ VGA-softcursor.txt
|
|||
- how to change your VGA cursor from a blinking underscore.
|
||||
accounting/
|
||||
- documentation on accounting and taskstats.
|
||||
acpi/
|
||||
- info on ACPI-specific hooks in the kernel.
|
||||
aoe/
|
||||
- description of AoE (ATA over Ethernet) along with config examples.
|
||||
applying-patches.txt
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
/sys/module/acpi/parameters/:
|
||||
|
||||
trace_method_name
|
||||
The AML method name that the user wants to trace
|
||||
|
||||
trace_debug_layer
|
||||
The temporary debug_layer used when tracing the method.
|
||||
Using 0xffffffff by default if it is 0.
|
||||
|
||||
trace_debug_level
|
||||
The temporary debug_level used when tracing the method.
|
||||
Using 0x00ffffff by default if it is 0.
|
||||
|
||||
trace_state
|
||||
The status of the tracing feature.
|
||||
|
||||
"enabled" means this feature is enabled
|
||||
and the AML method is traced every time it's executed.
|
||||
|
||||
"1" means this feature is enabled and the AML method
|
||||
will only be traced during the next execution.
|
||||
|
||||
"disabled" means this feature is disabled.
|
||||
Users can enable/disable this debug tracing feature by
|
||||
"echo string > /sys/module/acpi/parameters/trace_state".
|
||||
"string" should be one of "enable", "disable" and "1".
|
|
@ -69,6 +69,20 @@ unsigned int acpi_cpei_phys_cpuid;
|
|||
|
||||
unsigned long acpi_wakeup_address = 0;
|
||||
|
||||
#ifdef CONFIG_IA64_GENERIC
|
||||
static unsigned long __init acpi_find_rsdp(void)
|
||||
{
|
||||
unsigned long rsdp_phys = 0;
|
||||
|
||||
if (efi.acpi20 != EFI_INVALID_TABLE_ADDR)
|
||||
rsdp_phys = efi.acpi20;
|
||||
else if (efi.acpi != EFI_INVALID_TABLE_ADDR)
|
||||
printk(KERN_WARNING PREFIX
|
||||
"v1.0/r0.71 tables no longer supported\n");
|
||||
return rsdp_phys;
|
||||
}
|
||||
#endif
|
||||
|
||||
const char __init *
|
||||
acpi_get_sysname(void)
|
||||
{
|
||||
|
@ -631,18 +645,6 @@ static int __init acpi_parse_fadt(struct acpi_table_header *table)
|
|||
return 0;
|
||||
}
|
||||
|
||||
unsigned long __init acpi_find_rsdp(void)
|
||||
{
|
||||
unsigned long rsdp_phys = 0;
|
||||
|
||||
if (efi.acpi20 != EFI_INVALID_TABLE_ADDR)
|
||||
rsdp_phys = efi.acpi20;
|
||||
else if (efi.acpi != EFI_INVALID_TABLE_ADDR)
|
||||
printk(KERN_WARNING PREFIX
|
||||
"v1.0/r0.71 tables no longer supported\n");
|
||||
return rsdp_phys;
|
||||
}
|
||||
|
||||
int __init acpi_boot_init(void)
|
||||
{
|
||||
|
||||
|
|
|
@ -587,25 +587,6 @@ int acpi_unregister_ioapic(acpi_handle handle, u32 gsi_base)
|
|||
|
||||
EXPORT_SYMBOL(acpi_unregister_ioapic);
|
||||
|
||||
static unsigned long __init
|
||||
acpi_scan_rsdp(unsigned long start, unsigned long length)
|
||||
{
|
||||
unsigned long offset = 0;
|
||||
unsigned long sig_len = sizeof("RSD PTR ") - 1;
|
||||
|
||||
/*
|
||||
* Scan all 16-byte boundaries of the physical memory region for the
|
||||
* RSDP signature.
|
||||
*/
|
||||
for (offset = 0; offset < length; offset += 16) {
|
||||
if (strncmp((char *)(phys_to_virt(start) + offset), "RSD PTR ", sig_len))
|
||||
continue;
|
||||
return (start + offset);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __init acpi_parse_sbf(struct acpi_table_header *table)
|
||||
{
|
||||
struct acpi_table_boot *sb;
|
||||
|
@ -748,27 +729,6 @@ static int __init acpi_parse_fadt(struct acpi_table_header *table)
|
|||
return 0;
|
||||
}
|
||||
|
||||
unsigned long __init acpi_find_rsdp(void)
|
||||
{
|
||||
unsigned long rsdp_phys = 0;
|
||||
|
||||
if (efi_enabled) {
|
||||
if (efi.acpi20 != EFI_INVALID_TABLE_ADDR)
|
||||
return efi.acpi20;
|
||||
else if (efi.acpi != EFI_INVALID_TABLE_ADDR)
|
||||
return efi.acpi;
|
||||
}
|
||||
/*
|
||||
* Scan memory looking for the RSDP signature. First search EBDA (low
|
||||
* memory) paragraphs and then search upper memory (E0000-FFFFF).
|
||||
*/
|
||||
rsdp_phys = acpi_scan_rsdp(0, 0x400);
|
||||
if (!rsdp_phys)
|
||||
rsdp_phys = acpi_scan_rsdp(0xE0000, 0x20000);
|
||||
|
||||
return rsdp_phys;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_X86_LOCAL_APIC
|
||||
/*
|
||||
* Parse LAPIC entries in MADT
|
||||
|
|
|
@ -189,10 +189,7 @@ static unsigned int pentium4_get_frequency(void)
|
|||
printk(KERN_DEBUG "speedstep-lib: couldn't detect FSB speed. Please send an e-mail to <linux@brodo.de>\n");
|
||||
|
||||
/* Multiplier. */
|
||||
if (c->x86_model < 2)
|
||||
mult = msr_lo >> 27;
|
||||
else
|
||||
mult = msr_lo >> 24;
|
||||
mult = msr_lo >> 24;
|
||||
|
||||
dprintk("P4 - FSB %u kHz; Multiplier %u; Speed %u kHz\n", fsb, mult, (fsb * mult));
|
||||
|
||||
|
|
|
@ -274,7 +274,7 @@ int __init get_memcfg_from_srat(void)
|
|||
int tables = 0;
|
||||
int i = 0;
|
||||
|
||||
rsdp_address = acpi_find_rsdp();
|
||||
rsdp_address = acpi_os_get_root_pointer();
|
||||
if (!rsdp_address) {
|
||||
printk("%s: System description tables not found\n",
|
||||
__FUNCTION__);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -183,7 +183,7 @@ static int __init pnpacpi_add_device(struct acpi_device *device)
|
|||
if (ACPI_SUCCESS(status))
|
||||
dev->capabilities |= PNP_CONFIGURABLE;
|
||||
dev->capabilities |= PNP_READ;
|
||||
if (device->flags.dynamic_status)
|
||||
if (device->flags.dynamic_status && (dev->capabilities & PNP_CONFIGURABLE))
|
||||
dev->capabilities |= PNP_WRITE;
|
||||
if (device->flags.removable)
|
||||
dev->capabilities |= PNP_REMOVABLE;
|
||||
|
|
|
@ -80,7 +80,6 @@ typedef int (*acpi_table_handler) (struct acpi_table_header *table);
|
|||
typedef int (*acpi_table_entry_handler) (struct acpi_subtable_header *header, const unsigned long end);
|
||||
|
||||
char * __acpi_map_table (unsigned long phys_addr, unsigned long size);
|
||||
unsigned long acpi_find_rsdp (void);
|
||||
int acpi_boot_init (void);
|
||||
int acpi_boot_table_init (void);
|
||||
int acpi_numa_init (void);
|
||||
|
|
Загрузка…
Ссылка в новой задаче