mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-04-16 19:34:03 +00:00
ACPI / video: Move backlight notifier to video_detect.c
Move the unregistering of the acpi backlight interface on registering of a native backlight from video.c to video_detect.c where it belongs. Note this removes support for re-registering the acpi backlight interface when the native interface goes away. In practice this never happens and it needlessly complicates the code. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Acked-by: Darren Hart <dvhart@linux.intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
3bd6bce369
commit
93a291dfaf
2 changed files with 29 additions and 57 deletions
|
@ -87,6 +87,7 @@ static struct list_head video_bus_head;
|
||||||
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);
|
||||||
|
void acpi_video_detect_exit(void);
|
||||||
|
|
||||||
static const struct acpi_device_id video_device_ids[] = {
|
static const struct acpi_device_id video_device_ids[] = {
|
||||||
{ACPI_VIDEO_HID, 0},
|
{ACPI_VIDEO_HID, 0},
|
||||||
|
@ -146,7 +147,6 @@ struct acpi_video_enumerated_device {
|
||||||
struct acpi_video_bus {
|
struct acpi_video_bus {
|
||||||
struct acpi_device *device;
|
struct acpi_device *device;
|
||||||
bool backlight_registered;
|
bool backlight_registered;
|
||||||
bool backlight_notifier_registered;
|
|
||||||
u8 dos_setting;
|
u8 dos_setting;
|
||||||
struct acpi_video_enumerated_device *attached_array;
|
struct acpi_video_enumerated_device *attached_array;
|
||||||
u8 attached_count;
|
u8 attached_count;
|
||||||
|
@ -159,7 +159,6 @@ struct acpi_video_bus {
|
||||||
struct input_dev *input;
|
struct input_dev *input;
|
||||||
char phys[32]; /* for input device */
|
char phys[32]; /* for input device */
|
||||||
struct notifier_block pm_nb;
|
struct notifier_block pm_nb;
|
||||||
struct notifier_block backlight_nb;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct acpi_video_device_flags {
|
struct acpi_video_device_flags {
|
||||||
|
@ -1814,59 +1813,6 @@ static void acpi_video_bus_remove_notify_handler(struct acpi_video_bus *video)
|
||||||
video->input = NULL;
|
video->input = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int acpi_video_backlight_notify(struct notifier_block *nb,
|
|
||||||
unsigned long val, void *bd)
|
|
||||||
{
|
|
||||||
struct backlight_device *backlight = bd;
|
|
||||||
struct acpi_video_bus *video;
|
|
||||||
enum acpi_backlight_type type;
|
|
||||||
|
|
||||||
/* A raw bl (un)registering may change native <-> video */
|
|
||||||
if (backlight->props.type != BACKLIGHT_RAW)
|
|
||||||
return NOTIFY_DONE;
|
|
||||||
|
|
||||||
video = container_of(nb, struct acpi_video_bus, backlight_nb);
|
|
||||||
type = acpi_video_get_backlight_type();
|
|
||||||
|
|
||||||
switch (val) {
|
|
||||||
case BACKLIGHT_REGISTERED:
|
|
||||||
if (type != acpi_backlight_video)
|
|
||||||
acpi_video_bus_unregister_backlight(video);
|
|
||||||
break;
|
|
||||||
case BACKLIGHT_UNREGISTERED:
|
|
||||||
if (type == acpi_backlight_video)
|
|
||||||
acpi_video_bus_register_backlight(video);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NOTIFY_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int acpi_video_bus_add_backlight_notify_handler(
|
|
||||||
struct acpi_video_bus *video)
|
|
||||||
{
|
|
||||||
int error;
|
|
||||||
|
|
||||||
video->backlight_nb.notifier_call = acpi_video_backlight_notify;
|
|
||||||
video->backlight_nb.priority = 0;
|
|
||||||
error = backlight_register_notifier(&video->backlight_nb);
|
|
||||||
if (error == 0)
|
|
||||||
video->backlight_notifier_registered = true;
|
|
||||||
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int acpi_video_bus_remove_backlight_notify_handler(
|
|
||||||
struct acpi_video_bus *video)
|
|
||||||
{
|
|
||||||
if (!video->backlight_notifier_registered)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
video->backlight_notifier_registered = false;
|
|
||||||
|
|
||||||
return backlight_unregister_notifier(&video->backlight_nb);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int acpi_video_bus_put_devices(struct acpi_video_bus *video)
|
static int acpi_video_bus_put_devices(struct acpi_video_bus *video)
|
||||||
{
|
{
|
||||||
struct acpi_video_device *dev, *next;
|
struct acpi_video_device *dev, *next;
|
||||||
|
@ -1948,7 +1894,6 @@ static int acpi_video_bus_add(struct acpi_device *device)
|
||||||
|
|
||||||
acpi_video_bus_register_backlight(video);
|
acpi_video_bus_register_backlight(video);
|
||||||
acpi_video_bus_add_notify_handler(video);
|
acpi_video_bus_add_notify_handler(video);
|
||||||
acpi_video_bus_add_backlight_notify_handler(video);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -1972,7 +1917,6 @@ static int acpi_video_bus_remove(struct acpi_device *device)
|
||||||
|
|
||||||
video = acpi_driver_data(device);
|
video = acpi_driver_data(device);
|
||||||
|
|
||||||
acpi_video_bus_remove_backlight_notify_handler(video);
|
|
||||||
acpi_video_bus_remove_notify_handler(video);
|
acpi_video_bus_remove_notify_handler(video);
|
||||||
acpi_video_bus_unregister_backlight(video);
|
acpi_video_bus_unregister_backlight(video);
|
||||||
acpi_video_bus_put_devices(video);
|
acpi_video_bus_put_devices(video);
|
||||||
|
@ -2108,6 +2052,7 @@ static int __init acpi_video_init(void)
|
||||||
|
|
||||||
static void __exit acpi_video_exit(void)
|
static void __exit acpi_video_exit(void)
|
||||||
{
|
{
|
||||||
|
acpi_video_detect_exit();
|
||||||
acpi_video_unregister();
|
acpi_video_unregister();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -37,6 +37,9 @@
|
||||||
ACPI_MODULE_NAME("video");
|
ACPI_MODULE_NAME("video");
|
||||||
#define _COMPONENT ACPI_VIDEO_COMPONENT
|
#define _COMPONENT ACPI_VIDEO_COMPONENT
|
||||||
|
|
||||||
|
static bool backlight_notifier_registered;
|
||||||
|
static struct notifier_block backlight_nb;
|
||||||
|
|
||||||
static enum acpi_backlight_type acpi_backlight_cmdline = acpi_backlight_undef;
|
static enum acpi_backlight_type acpi_backlight_cmdline = acpi_backlight_undef;
|
||||||
static enum acpi_backlight_type acpi_backlight_dmi = acpi_backlight_undef;
|
static enum acpi_backlight_type acpi_backlight_dmi = acpi_backlight_undef;
|
||||||
|
|
||||||
|
@ -257,6 +260,20 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
|
||||||
{ },
|
{ },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int acpi_video_backlight_notify(struct notifier_block *nb,
|
||||||
|
unsigned long val, void *bd)
|
||||||
|
{
|
||||||
|
struct backlight_device *backlight = bd;
|
||||||
|
|
||||||
|
/* A raw bl registering may change video -> native */
|
||||||
|
if (backlight->props.type == BACKLIGHT_RAW &&
|
||||||
|
val == BACKLIGHT_REGISTERED &&
|
||||||
|
acpi_video_get_backlight_type() != acpi_backlight_video)
|
||||||
|
acpi_video_unregister_backlight();
|
||||||
|
|
||||||
|
return NOTIFY_OK;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Determine which type of backlight interface to use on this system,
|
* Determine which type of backlight interface to use on this system,
|
||||||
* First check cmdline, then dmi quirks, then do autodetect.
|
* First check cmdline, then dmi quirks, then do autodetect.
|
||||||
|
@ -285,6 +302,10 @@ enum acpi_backlight_type acpi_video_get_backlight_type(void)
|
||||||
acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
|
acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
|
||||||
ACPI_UINT32_MAX, find_video, NULL,
|
ACPI_UINT32_MAX, find_video, NULL,
|
||||||
&video_caps, NULL);
|
&video_caps, NULL);
|
||||||
|
backlight_nb.notifier_call = acpi_video_backlight_notify;
|
||||||
|
backlight_nb.priority = 0;
|
||||||
|
if (backlight_register_notifier(&backlight_nb) == 0)
|
||||||
|
backlight_notifier_registered = true;
|
||||||
init_done = true;
|
init_done = true;
|
||||||
}
|
}
|
||||||
mutex_unlock(&init_mutex);
|
mutex_unlock(&init_mutex);
|
||||||
|
@ -349,3 +370,9 @@ int acpi_video_backlight_support(void)
|
||||||
return acpi_video_get_backlight_type() != acpi_backlight_vendor;
|
return acpi_video_get_backlight_type() != acpi_backlight_vendor;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(acpi_video_backlight_support);
|
EXPORT_SYMBOL(acpi_video_backlight_support);
|
||||||
|
|
||||||
|
void __exit acpi_video_detect_exit(void)
|
||||||
|
{
|
||||||
|
if (backlight_notifier_registered)
|
||||||
|
backlight_unregister_notifier(&backlight_nb);
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue