Merge branches 'acpi-video' and 'acpi-cppc'
* acpi-video: ACPI / video: only register backlight for LCD device ACPI / video: Add a quirk to force acpi-video backlight on Dell XPS L421X * acpi-cppc: cpufreq: CPPC: Delete an unnecessary check before the function call kfree()
This commit is contained in:
commit
3930f660b4
|
@ -77,6 +77,12 @@ module_param(allow_duplicates, bool, 0644);
|
||||||
static int disable_backlight_sysfs_if = -1;
|
static int disable_backlight_sysfs_if = -1;
|
||||||
module_param(disable_backlight_sysfs_if, int, 0444);
|
module_param(disable_backlight_sysfs_if, int, 0444);
|
||||||
|
|
||||||
|
static bool device_id_scheme = false;
|
||||||
|
module_param(device_id_scheme, bool, 0444);
|
||||||
|
|
||||||
|
static bool only_lcd = false;
|
||||||
|
module_param(only_lcd, bool, 0444);
|
||||||
|
|
||||||
static int register_count;
|
static int register_count;
|
||||||
static DEFINE_MUTEX(register_count_mutex);
|
static DEFINE_MUTEX(register_count_mutex);
|
||||||
static struct mutex video_list_lock;
|
static struct mutex video_list_lock;
|
||||||
|
@ -394,6 +400,18 @@ static int video_disable_backlight_sysfs_if(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int video_set_device_id_scheme(const struct dmi_system_id *d)
|
||||||
|
{
|
||||||
|
device_id_scheme = true;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int video_enable_only_lcd(const struct dmi_system_id *d)
|
||||||
|
{
|
||||||
|
only_lcd = true;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static struct dmi_system_id video_dmi_table[] = {
|
static struct dmi_system_id video_dmi_table[] = {
|
||||||
/*
|
/*
|
||||||
* Broken _BQC workaround http://bugzilla.kernel.org/show_bug.cgi?id=13121
|
* Broken _BQC workaround http://bugzilla.kernel.org/show_bug.cgi?id=13121
|
||||||
|
@ -455,6 +473,33 @@ static struct dmi_system_id video_dmi_table[] = {
|
||||||
DMI_MATCH(DMI_PRODUCT_NAME, "PORTEGE R830"),
|
DMI_MATCH(DMI_PRODUCT_NAME, "PORTEGE R830"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
/*
|
||||||
|
* Some machine's _DOD IDs don't have bit 31(Device ID Scheme) set
|
||||||
|
* but the IDs actually follow the Device ID Scheme.
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
/* https://bugzilla.kernel.org/show_bug.cgi?id=104121 */
|
||||||
|
.callback = video_set_device_id_scheme,
|
||||||
|
.ident = "ESPRIMO Mobile M9410",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "ESPRIMO Mobile M9410"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
/*
|
||||||
|
* Some machines have multiple video output devices, but only the one
|
||||||
|
* that is the type of LCD can do the backlight control so we should not
|
||||||
|
* register backlight interface for other video output devices.
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
/* https://bugzilla.kernel.org/show_bug.cgi?id=104121 */
|
||||||
|
.callback = video_enable_only_lcd,
|
||||||
|
.ident = "ESPRIMO Mobile M9410",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "ESPRIMO Mobile M9410"),
|
||||||
|
},
|
||||||
|
},
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1003,7 +1048,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 && attribute->device_id_scheme) {
|
if (attribute && (attribute->device_id_scheme || 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;
|
||||||
|
@ -1568,15 +1613,6 @@ static void acpi_video_dev_register_backlight(struct acpi_video_device *device)
|
||||||
static int count;
|
static int count;
|
||||||
char *name;
|
char *name;
|
||||||
|
|
||||||
/*
|
|
||||||
* Do not create backlight device for video output
|
|
||||||
* device that is not in the enumerated list.
|
|
||||||
*/
|
|
||||||
if (!acpi_video_device_in_dod(device)) {
|
|
||||||
dev_dbg(&device->dev->dev, "not in _DOD list, ignore\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
result = acpi_video_init_brightness(device);
|
result = acpi_video_init_brightness(device);
|
||||||
if (result)
|
if (result)
|
||||||
return;
|
return;
|
||||||
|
@ -1657,6 +1693,22 @@ static void acpi_video_run_bcl_for_osi(struct acpi_video_bus *video)
|
||||||
mutex_unlock(&video->device_list_lock);
|
mutex_unlock(&video->device_list_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool acpi_video_should_register_backlight(struct acpi_video_device *dev)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Do not create backlight device for video output
|
||||||
|
* device that is not in the enumerated list.
|
||||||
|
*/
|
||||||
|
if (!acpi_video_device_in_dod(dev)) {
|
||||||
|
dev_dbg(&dev->dev->dev, "not in _DOD list, ignore\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (only_lcd)
|
||||||
|
return dev->flags.lcd;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static int acpi_video_bus_register_backlight(struct acpi_video_bus *video)
|
static int acpi_video_bus_register_backlight(struct acpi_video_bus *video)
|
||||||
{
|
{
|
||||||
struct acpi_video_device *dev;
|
struct acpi_video_device *dev;
|
||||||
|
@ -1670,8 +1722,10 @@ static int acpi_video_bus_register_backlight(struct acpi_video_bus *video)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
mutex_lock(&video->device_list_lock);
|
mutex_lock(&video->device_list_lock);
|
||||||
list_for_each_entry(dev, &video->video_device_list, entry)
|
list_for_each_entry(dev, &video->video_device_list, entry) {
|
||||||
acpi_video_dev_register_backlight(dev);
|
if (acpi_video_should_register_backlight(dev))
|
||||||
|
acpi_video_dev_register_backlight(dev);
|
||||||
|
}
|
||||||
mutex_unlock(&video->device_list_lock);
|
mutex_unlock(&video->device_list_lock);
|
||||||
|
|
||||||
video->backlight_registered = true;
|
video->backlight_registered = true;
|
||||||
|
|
|
@ -232,6 +232,15 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
|
||||||
"900X3C/900X3D/900X3E/900X4C/900X4D"),
|
"900X3C/900X3D/900X3E/900X4C/900X4D"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
/* https://bugzilla.redhat.com/show_bug.cgi?id=1272633 */
|
||||||
|
.callback = video_detect_force_video,
|
||||||
|
.ident = "Dell XPS14 L421X",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "XPS L421X"),
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
/* https://bugzilla.redhat.com/show_bug.cgi?id=1163574 */
|
/* https://bugzilla.redhat.com/show_bug.cgi?id=1163574 */
|
||||||
.callback = video_detect_force_video,
|
.callback = video_detect_force_video,
|
||||||
|
|
|
@ -166,8 +166,7 @@ static int __init cppc_cpufreq_init(void)
|
||||||
|
|
||||||
out:
|
out:
|
||||||
for_each_possible_cpu(i)
|
for_each_possible_cpu(i)
|
||||||
if (all_cpu_data[i])
|
kfree(all_cpu_data[i]);
|
||||||
kfree(all_cpu_data[i]);
|
|
||||||
|
|
||||||
kfree(all_cpu_data);
|
kfree(all_cpu_data);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
Loading…
Reference in New Issue