Merge branch 'acpi-video'
* acpi-video: ACPI: blacklist win8 OSI for buggy laptops ACPI: blacklist win8 OSI for ASUS Zenbook Prime UX31A ACPI / video: drop unused fields from struct acpi_video_brightness_flags ACPI / video: remove unnecessary type casting ACPI / video: trivial style cleanups ACPI / video: trivial costmetic cleanups Conflicts: drivers/acpi/video.c
This commit is contained in:
commit
8a3a53ea89
|
@ -192,6 +192,12 @@ static int __init dmi_disable_osi_win7(const struct dmi_system_id *d)
|
||||||
acpi_osi_setup("!Windows 2009");
|
acpi_osi_setup("!Windows 2009");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
static int __init dmi_disable_osi_win8(const struct dmi_system_id *d)
|
||||||
|
{
|
||||||
|
printk(KERN_NOTICE PREFIX "DMI detected: %s\n", d->ident);
|
||||||
|
acpi_osi_setup("!Windows 2012");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static struct dmi_system_id acpi_osi_dmi_table[] __initdata = {
|
static struct dmi_system_id acpi_osi_dmi_table[] __initdata = {
|
||||||
{
|
{
|
||||||
|
@ -267,6 +273,30 @@ static struct dmi_system_id acpi_osi_dmi_table[] __initdata = {
|
||||||
DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P305D"),
|
DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P305D"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.callback = dmi_disable_osi_win8,
|
||||||
|
.ident = "ASUS Zenbook Prime UX31A",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "UX31A"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = dmi_disable_osi_win8,
|
||||||
|
.ident = "Dell Inspiron 15R SE",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 7520"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = dmi_disable_osi_win8,
|
||||||
|
.ident = "Lenovo ThinkPad Edge E530",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_VERSION, "3259A2G"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* BIOS invocation of _OSI(Linux) is almost always a BIOS bug.
|
* BIOS invocation of _OSI(Linux) is almost always a BIOS bug.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* video.c - ACPI Video Driver ($Revision:$)
|
* video.c - ACPI Video Driver
|
||||||
*
|
*
|
||||||
* Copyright (C) 2004 Luming Yu <luming.yu@intel.com>
|
* Copyright (C) 2004 Luming Yu <luming.yu@intel.com>
|
||||||
* Copyright (C) 2004 Bruno Ducrot <ducrot@poupinou.org>
|
* Copyright (C) 2004 Bruno Ducrot <ducrot@poupinou.org>
|
||||||
|
@ -88,7 +88,7 @@ module_param(allow_duplicates, bool, 0644);
|
||||||
static bool use_bios_initial_backlight = 1;
|
static bool use_bios_initial_backlight = 1;
|
||||||
module_param(use_bios_initial_backlight, bool, 0644);
|
module_param(use_bios_initial_backlight, bool, 0644);
|
||||||
|
|
||||||
static int register_count = 0;
|
static int register_count;
|
||||||
static int acpi_video_bus_add(struct acpi_device *device);
|
static int acpi_video_bus_add(struct acpi_device *device);
|
||||||
static int acpi_video_bus_remove(struct acpi_device *device);
|
static int acpi_video_bus_remove(struct acpi_device *device);
|
||||||
static void acpi_video_bus_notify(struct acpi_device *device, u32 event);
|
static void acpi_video_bus_notify(struct acpi_device *device, u32 event);
|
||||||
|
@ -185,8 +185,6 @@ struct acpi_video_device_cap {
|
||||||
struct acpi_video_brightness_flags {
|
struct acpi_video_brightness_flags {
|
||||||
u8 _BCL_no_ac_battery_levels:1; /* no AC/Battery levels in _BCL */
|
u8 _BCL_no_ac_battery_levels:1; /* no AC/Battery levels in _BCL */
|
||||||
u8 _BCL_reversed:1; /* _BCL package is in a reversed order */
|
u8 _BCL_reversed:1; /* _BCL package is in a reversed order */
|
||||||
u8 _BCL_use_index:1; /* levels in _BCL are index values */
|
|
||||||
u8 _BCM_use_index:1; /* input of _BCM is an index value */
|
|
||||||
u8 _BQC_use_index:1; /* _BQC returns an index value */
|
u8 _BQC_use_index:1; /* _BQC returns an index value */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -236,15 +234,16 @@ static int acpi_video_get_brightness(struct backlight_device *bd)
|
||||||
{
|
{
|
||||||
unsigned long long cur_level;
|
unsigned long long cur_level;
|
||||||
int i;
|
int i;
|
||||||
struct acpi_video_device *vd =
|
struct acpi_video_device *vd = bl_get_data(bd);
|
||||||
(struct acpi_video_device *)bl_get_data(bd);
|
|
||||||
|
|
||||||
if (acpi_video_device_lcd_get_level_current(vd, &cur_level, false))
|
if (acpi_video_device_lcd_get_level_current(vd, &cur_level, false))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
for (i = 2; i < vd->brightness->count; i++) {
|
for (i = 2; i < vd->brightness->count; i++) {
|
||||||
if (vd->brightness->levels[i] == cur_level)
|
if (vd->brightness->levels[i] == cur_level)
|
||||||
/* The first two entries are special - see page 575
|
/*
|
||||||
of the ACPI spec 3.0 */
|
* The first two entries are special - see page 575
|
||||||
|
* of the ACPI spec 3.0
|
||||||
|
*/
|
||||||
return i - 2;
|
return i - 2;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -253,8 +252,7 @@ static int acpi_video_get_brightness(struct backlight_device *bd)
|
||||||
static int acpi_video_set_brightness(struct backlight_device *bd)
|
static int acpi_video_set_brightness(struct backlight_device *bd)
|
||||||
{
|
{
|
||||||
int request_level = bd->props.brightness + 2;
|
int request_level = bd->props.brightness + 2;
|
||||||
struct acpi_video_device *vd =
|
struct acpi_video_device *vd = bl_get_data(bd);
|
||||||
(struct acpi_video_device *)bl_get_data(bd);
|
|
||||||
|
|
||||||
return acpi_video_device_lcd_set_level(vd,
|
return acpi_video_device_lcd_set_level(vd,
|
||||||
vd->brightness->levels[request_level]);
|
vd->brightness->levels[request_level]);
|
||||||
|
@ -316,9 +314,11 @@ static const struct thermal_cooling_device_ops video_cooling_ops = {
|
||||||
.set_cur_state = video_set_cur_state,
|
.set_cur_state = video_set_cur_state,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------
|
/*
|
||||||
Video Management
|
* --------------------------------------------------------------------------
|
||||||
-------------------------------------------------------------------------- */
|
* Video Management
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
static int
|
static int
|
||||||
acpi_video_device_lcd_query_levels(struct acpi_video_device *device,
|
acpi_video_device_lcd_query_levels(struct acpi_video_device *device,
|
||||||
|
@ -552,7 +552,8 @@ acpi_video_device_lcd_get_level_current(struct acpi_video_device *device,
|
||||||
buf));
|
buf));
|
||||||
device->cap._BQC = device->cap._BCQ = 0;
|
device->cap._BQC = device->cap._BCQ = 0;
|
||||||
} else {
|
} else {
|
||||||
/* Fixme:
|
/*
|
||||||
|
* Fixme:
|
||||||
* should we return an error or ignore this failure?
|
* should we return an error or ignore this failure?
|
||||||
* dev->brightness->curr is a cached value which stores
|
* dev->brightness->curr is a cached value which stores
|
||||||
* the correct current backlight level in most cases.
|
* the correct current backlight level in most cases.
|
||||||
|
@ -799,16 +800,6 @@ acpi_video_init_brightness(struct acpi_video_device *device)
|
||||||
br->count = count;
|
br->count = count;
|
||||||
device->brightness = br;
|
device->brightness = br;
|
||||||
|
|
||||||
/* Check the input/output of _BQC/_BCL/_BCM */
|
|
||||||
if ((max_level < 100) && (max_level <= (count - 2)))
|
|
||||||
br->flags._BCL_use_index = 1;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* _BCM is always consistent with _BCL,
|
|
||||||
* at least for all the laptops we have ever seen.
|
|
||||||
*/
|
|
||||||
br->flags._BCM_use_index = br->flags._BCL_use_index;
|
|
||||||
|
|
||||||
/* _BQC uses INDEX while _BCL uses VALUE in some laptops */
|
/* _BQC uses INDEX while _BCL uses VALUE in some laptops */
|
||||||
br->curr = level = max_level;
|
br->curr = level = max_level;
|
||||||
|
|
||||||
|
@ -900,7 +891,7 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
|
||||||
acpi_handle acpi_parent;
|
acpi_handle acpi_parent;
|
||||||
struct device *parent = NULL;
|
struct device *parent = NULL;
|
||||||
int result;
|
int result;
|
||||||
static int count = 0;
|
static int count;
|
||||||
char *name;
|
char *name;
|
||||||
|
|
||||||
result = acpi_video_init_brightness(device);
|
result = acpi_video_init_brightness(device);
|
||||||
|
@ -1012,7 +1003,8 @@ static int acpi_video_bus_check(struct acpi_video_bus *video)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
pci_dev_put(dev);
|
pci_dev_put(dev);
|
||||||
|
|
||||||
/* Since there is no HID, CID and so on for VGA driver, we have
|
/*
|
||||||
|
* Since there is no HID, CID and so on for VGA driver, we have
|
||||||
* to check well known required nodes.
|
* to check well known required nodes.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -1042,9 +1034,11 @@ static int acpi_video_bus_check(struct acpi_video_bus *video)
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------
|
/*
|
||||||
Driver Interface
|
* --------------------------------------------------------------------------
|
||||||
-------------------------------------------------------------------------- */
|
* Driver Interface
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
/* device interface */
|
/* device interface */
|
||||||
static struct acpi_video_device_attrib *
|
static struct acpi_video_device_attrib *
|
||||||
|
@ -1107,7 +1101,7 @@ acpi_video_bus_get_one_device(struct acpi_device *device,
|
||||||
|
|
||||||
attribute = acpi_video_get_device_attr(video, device_id);
|
attribute = acpi_video_get_device_attr(video, device_id);
|
||||||
|
|
||||||
if((attribute != NULL) && attribute->device_id_scheme) {
|
if (attribute && attribute->device_id_scheme) {
|
||||||
switch (attribute->display_type) {
|
switch (attribute->display_type) {
|
||||||
case ACPI_VIDEO_DISPLAY_CRT:
|
case ACPI_VIDEO_DISPLAY_CRT:
|
||||||
data->flags.crt = 1;
|
data->flags.crt = 1;
|
||||||
|
|
Loading…
Reference in New Issue