mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-19 12:24:34 +08:00
Merge branch 'acpi-video' into release
This commit is contained in:
commit
9e0c20bceb
@ -199,11 +199,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
unusable. The "log_buf_len" parameter may be useful
|
||||
if you need to capture more output.
|
||||
|
||||
acpi_display_output= [HW,ACPI]
|
||||
acpi_display_output=vendor
|
||||
acpi_display_output=video
|
||||
See above.
|
||||
|
||||
acpi_irq_balance [HW,ACPI]
|
||||
ACPI will balance active IRQs
|
||||
default in APIC mode
|
||||
|
@ -33,7 +33,6 @@
|
||||
#include <linux/input.h>
|
||||
#include <linux/backlight.h>
|
||||
#include <linux/thermal.h>
|
||||
#include <linux/video_output.h>
|
||||
#include <linux/sort.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/pci_ids.h>
|
||||
@ -172,9 +171,6 @@ struct acpi_video_device_cap {
|
||||
u8 _BQC:1; /* Get current brightness level */
|
||||
u8 _BCQ:1; /* Some buggy BIOS uses _BCQ instead of _BQC */
|
||||
u8 _DDC:1; /*Return the EDID for this device */
|
||||
u8 _DCS:1; /*Return status of output device */
|
||||
u8 _DGS:1; /*Query graphics state */
|
||||
u8 _DSS:1; /*Device state set */
|
||||
};
|
||||
|
||||
struct acpi_video_brightness_flags {
|
||||
@ -202,7 +198,6 @@ struct acpi_video_device {
|
||||
struct acpi_video_device_brightness *brightness;
|
||||
struct backlight_device *backlight;
|
||||
struct thermal_cooling_device *cooling_dev;
|
||||
struct output_device *output_dev;
|
||||
};
|
||||
|
||||
static const char device_decode[][30] = {
|
||||
@ -226,10 +221,6 @@ static int acpi_video_get_next_level(struct acpi_video_device *device,
|
||||
u32 level_current, u32 event);
|
||||
static int acpi_video_switch_brightness(struct acpi_video_device *device,
|
||||
int event);
|
||||
static int acpi_video_device_get_state(struct acpi_video_device *device,
|
||||
unsigned long long *state);
|
||||
static int acpi_video_output_get(struct output_device *od);
|
||||
static int acpi_video_device_set_state(struct acpi_video_device *device, int state);
|
||||
|
||||
/*backlight device sysfs support*/
|
||||
static int acpi_video_get_brightness(struct backlight_device *bd)
|
||||
@ -265,30 +256,6 @@ static struct backlight_ops acpi_backlight_ops = {
|
||||
.update_status = acpi_video_set_brightness,
|
||||
};
|
||||
|
||||
/*video output device sysfs support*/
|
||||
static int acpi_video_output_get(struct output_device *od)
|
||||
{
|
||||
unsigned long long state;
|
||||
struct acpi_video_device *vd =
|
||||
(struct acpi_video_device *)dev_get_drvdata(&od->dev);
|
||||
acpi_video_device_get_state(vd, &state);
|
||||
return (int)state;
|
||||
}
|
||||
|
||||
static int acpi_video_output_set(struct output_device *od)
|
||||
{
|
||||
unsigned long state = od->request_state;
|
||||
struct acpi_video_device *vd=
|
||||
(struct acpi_video_device *)dev_get_drvdata(&od->dev);
|
||||
return acpi_video_device_set_state(vd, state);
|
||||
}
|
||||
|
||||
static struct output_properties acpi_output_properties = {
|
||||
.set_state = acpi_video_output_set,
|
||||
.get_status = acpi_video_output_get,
|
||||
};
|
||||
|
||||
|
||||
/* thermal cooling device callbacks */
|
||||
static int video_get_max_state(struct thermal_cooling_device *cooling_dev, unsigned
|
||||
long *state)
|
||||
@ -344,34 +311,6 @@ static struct thermal_cooling_device_ops video_cooling_ops = {
|
||||
Video Management
|
||||
-------------------------------------------------------------------------- */
|
||||
|
||||
/* device */
|
||||
|
||||
static int
|
||||
acpi_video_device_get_state(struct acpi_video_device *device,
|
||||
unsigned long long *state)
|
||||
{
|
||||
int status;
|
||||
|
||||
status = acpi_evaluate_integer(device->dev->handle, "_DCS", NULL, state);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
static int
|
||||
acpi_video_device_set_state(struct acpi_video_device *device, int state)
|
||||
{
|
||||
int status;
|
||||
union acpi_object arg0 = { ACPI_TYPE_INTEGER };
|
||||
struct acpi_object_list args = { 1, &arg0 };
|
||||
unsigned long long ret;
|
||||
|
||||
|
||||
arg0.integer.value = state;
|
||||
status = acpi_evaluate_integer(device->dev->handle, "_DSS", &args, &ret);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
static int
|
||||
acpi_video_device_lcd_query_levels(struct acpi_video_device *device,
|
||||
union acpi_object **levels)
|
||||
@ -831,15 +770,6 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
|
||||
if (ACPI_SUCCESS(acpi_get_handle(device->dev->handle, "_DDC", &h_dummy1))) {
|
||||
device->cap._DDC = 1;
|
||||
}
|
||||
if (ACPI_SUCCESS(acpi_get_handle(device->dev->handle, "_DCS", &h_dummy1))) {
|
||||
device->cap._DCS = 1;
|
||||
}
|
||||
if (ACPI_SUCCESS(acpi_get_handle(device->dev->handle, "_DGS", &h_dummy1))) {
|
||||
device->cap._DGS = 1;
|
||||
}
|
||||
if (ACPI_SUCCESS(acpi_get_handle(device->dev->handle, "_DSS", &h_dummy1))) {
|
||||
device->cap._DSS = 1;
|
||||
}
|
||||
|
||||
if (acpi_video_backlight_support()) {
|
||||
struct backlight_properties props;
|
||||
@ -904,21 +834,6 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
|
||||
printk(KERN_ERR PREFIX "Create sysfs link\n");
|
||||
|
||||
}
|
||||
|
||||
if (acpi_video_display_switch_support()) {
|
||||
|
||||
if (device->cap._DCS && device->cap._DSS) {
|
||||
static int count;
|
||||
char *name;
|
||||
name = kasprintf(GFP_KERNEL, "acpi_video%d", count);
|
||||
if (!name)
|
||||
return;
|
||||
count++;
|
||||
device->output_dev = video_output_register(name,
|
||||
NULL, device, &acpi_output_properties);
|
||||
kfree(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1360,6 +1275,9 @@ int acpi_video_get_edid(struct acpi_device *device, int type, int device_id,
|
||||
if (!video_device)
|
||||
continue;
|
||||
|
||||
if (!video_device->cap._DDC)
|
||||
continue;
|
||||
|
||||
if (type) {
|
||||
switch (type) {
|
||||
case ACPI_VIDEO_DISPLAY_CRT:
|
||||
@ -1452,7 +1370,6 @@ static int acpi_video_bus_put_one_device(struct acpi_video_device *device)
|
||||
thermal_cooling_device_unregister(device->cooling_dev);
|
||||
device->cooling_dev = NULL;
|
||||
}
|
||||
video_output_unregister(device->output_dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -17,15 +17,14 @@
|
||||
* capabilities the graphics cards plugged in support. The check for general
|
||||
* video capabilities will be triggered by the first caller of
|
||||
* acpi_video_get_capabilities(NULL); which will happen when the first
|
||||
* backlight (or display output) switching supporting driver calls:
|
||||
* backlight switching supporting driver calls:
|
||||
* acpi_video_backlight_support();
|
||||
*
|
||||
* Depending on whether ACPI graphics extensions (cmp. ACPI spec Appendix B)
|
||||
* are available, video.ko should be used to handle the device.
|
||||
*
|
||||
* Otherwise vendor specific drivers like thinkpad_acpi, asus_acpi,
|
||||
* sony_acpi,... can take care about backlight brightness and display output
|
||||
* switching.
|
||||
* sony_acpi,... can take care about backlight brightness.
|
||||
*
|
||||
* If CONFIG_ACPI_VIDEO is neither set as "compiled in" (y) nor as a module (m)
|
||||
* this file will not be compiled, acpi_video_get_capabilities() and
|
||||
@ -83,11 +82,6 @@ long acpi_is_video_device(struct acpi_device *device)
|
||||
if (!device)
|
||||
return 0;
|
||||
|
||||
/* Is this device able to support video switching ? */
|
||||
if (ACPI_SUCCESS(acpi_get_handle(device->handle, "_DOD", &h_dummy)) ||
|
||||
ACPI_SUCCESS(acpi_get_handle(device->handle, "_DOS", &h_dummy)))
|
||||
video_caps |= ACPI_VIDEO_OUTPUT_SWITCHING;
|
||||
|
||||
/* Is this device able to retrieve a video ROM ? */
|
||||
if (ACPI_SUCCESS(acpi_get_handle(device->handle, "_ROM", &h_dummy)))
|
||||
video_caps |= ACPI_VIDEO_ROM_AVAILABLE;
|
||||
@ -161,8 +155,6 @@ long acpi_video_get_capabilities(acpi_handle graphics_handle)
|
||||
*
|
||||
* if (dmi_name_in_vendors("XY")) {
|
||||
* acpi_video_support |=
|
||||
* ACPI_VIDEO_OUTPUT_SWITCHING_DMI_VENDOR;
|
||||
* acpi_video_support |=
|
||||
* ACPI_VIDEO_BACKLIGHT_DMI_VENDOR;
|
||||
*}
|
||||
*/
|
||||
@ -212,33 +204,8 @@ int acpi_video_backlight_support(void)
|
||||
EXPORT_SYMBOL(acpi_video_backlight_support);
|
||||
|
||||
/*
|
||||
* Returns true if video.ko can do display output switching.
|
||||
* This does not work well/at all with binary graphics drivers
|
||||
* which disable system io ranges and do it on their own.
|
||||
*/
|
||||
int acpi_video_display_switch_support(void)
|
||||
{
|
||||
if (!acpi_video_caps_checked)
|
||||
acpi_video_get_capabilities(NULL);
|
||||
|
||||
if (acpi_video_support & ACPI_VIDEO_OUTPUT_SWITCHING_FORCE_VENDOR)
|
||||
return 0;
|
||||
else if (acpi_video_support & ACPI_VIDEO_OUTPUT_SWITCHING_FORCE_VIDEO)
|
||||
return 1;
|
||||
|
||||
if (acpi_video_support & ACPI_VIDEO_OUTPUT_SWITCHING_DMI_VENDOR)
|
||||
return 0;
|
||||
else if (acpi_video_support & ACPI_VIDEO_OUTPUT_SWITCHING_DMI_VIDEO)
|
||||
return 1;
|
||||
|
||||
return acpi_video_support & ACPI_VIDEO_OUTPUT_SWITCHING;
|
||||
}
|
||||
EXPORT_SYMBOL(acpi_video_display_switch_support);
|
||||
|
||||
/*
|
||||
* Use acpi_display_output=vendor/video or acpi_backlight=vendor/video
|
||||
* To force that backlight or display output switching is processed by vendor
|
||||
* specific acpi drivers or video.ko driver.
|
||||
* Use acpi_backlight=vendor/video to force that backlight switching
|
||||
* is processed by vendor specific acpi drivers or video.ko driver.
|
||||
*/
|
||||
static int __init acpi_backlight(char *str)
|
||||
{
|
||||
@ -255,19 +222,3 @@ static int __init acpi_backlight(char *str)
|
||||
return 1;
|
||||
}
|
||||
__setup("acpi_backlight=", acpi_backlight);
|
||||
|
||||
static int __init acpi_display_output(char *str)
|
||||
{
|
||||
if (str == NULL || *str == '\0')
|
||||
return 1;
|
||||
else {
|
||||
if (!strcmp("vendor", str))
|
||||
acpi_video_support |=
|
||||
ACPI_VIDEO_OUTPUT_SWITCHING_FORCE_VENDOR;
|
||||
if (!strcmp("video", str))
|
||||
acpi_video_support |=
|
||||
ACPI_VIDEO_OUTPUT_SWITCHING_FORCE_VIDEO;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
__setup("acpi_display_output=", acpi_display_output);
|
||||
|
@ -107,7 +107,6 @@ config DRM_I915
|
||||
select FB_CFB_IMAGEBLIT
|
||||
# i915 depends on ACPI_VIDEO when ACPI is enabled
|
||||
# but for select to work, need to select ACPI_VIDEO's dependencies, ick
|
||||
select VIDEO_OUTPUT_CONTROL if ACPI
|
||||
select BACKLIGHT_CLASS_DEVICE if ACPI
|
||||
select INPUT if ACPI
|
||||
select ACPI_VIDEO if ACPI
|
||||
|
@ -3,7 +3,6 @@ config STUB_POULSBO
|
||||
depends on PCI
|
||||
# Poulsbo stub depends on ACPI_VIDEO when ACPI is enabled
|
||||
# but for select to work, need to select ACPI_VIDEO's dependencies, ick
|
||||
select VIDEO_OUTPUT_CONTROL if ACPI
|
||||
select BACKLIGHT_CLASS_DEVICE if ACPI
|
||||
select INPUT if ACPI
|
||||
select ACPI_VIDEO if ACPI
|
||||
|
Loading…
Reference in New Issue
Block a user