Commit 6032649d authored by Ben Skeggs's avatar Ben Skeggs

drm/nouveau: hook up acpi power supply change tracking

Not used at all yet, but lets hook it up now anyway.
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 18a16a76
...@@ -439,6 +439,7 @@ struct nouveau_pm_engine { ...@@ -439,6 +439,7 @@ struct nouveau_pm_engine {
struct nouveau_pm_level *cur; struct nouveau_pm_level *cur;
struct device *hwmon; struct device *hwmon;
struct notifier_block acpi_nb;
int (*clock_get)(struct drm_device *, u32 id); int (*clock_get)(struct drm_device *, u32 id);
void *(*clock_pre)(struct drm_device *, struct nouveau_pm_level *, void *(*clock_pre)(struct drm_device *, struct nouveau_pm_level *,
......
...@@ -27,6 +27,10 @@ ...@@ -27,6 +27,10 @@
#include "nouveau_drv.h" #include "nouveau_drv.h"
#include "nouveau_pm.h" #include "nouveau_pm.h"
#ifdef CONFIG_ACPI
#include <linux/acpi.h>
#endif
#include <linux/power_supply.h>
#include <linux/hwmon.h> #include <linux/hwmon.h>
#include <linux/hwmon-sysfs.h> #include <linux/hwmon-sysfs.h>
...@@ -446,6 +450,25 @@ nouveau_hwmon_fini(struct drm_device *dev) ...@@ -446,6 +450,25 @@ nouveau_hwmon_fini(struct drm_device *dev)
#endif #endif
} }
#ifdef CONFIG_ACPI
static int
nouveau_pm_acpi_event(struct notifier_block *nb, unsigned long val, void *data)
{
struct drm_nouveau_private *dev_priv =
container_of(nb, struct drm_nouveau_private, engine.pm.acpi_nb);
struct drm_device *dev = dev_priv->dev;
struct acpi_bus_event *entry = (struct acpi_bus_event *)data;
if (strcmp(entry->device_class, "ac_adapter") == 0) {
bool ac = power_supply_is_system_supplied();
NV_DEBUG(dev, "power supply changed: %s\n", ac ? "AC" : "DC");
}
return NOTIFY_OK;
}
#endif
int int
nouveau_pm_init(struct drm_device *dev) nouveau_pm_init(struct drm_device *dev)
{ {
...@@ -485,6 +508,10 @@ nouveau_pm_init(struct drm_device *dev) ...@@ -485,6 +508,10 @@ nouveau_pm_init(struct drm_device *dev)
nouveau_sysfs_init(dev); nouveau_sysfs_init(dev);
nouveau_hwmon_init(dev); nouveau_hwmon_init(dev);
#ifdef CONFIG_ACPI
pm->acpi_nb.notifier_call = nouveau_pm_acpi_event;
register_acpi_notifier(&pm->acpi_nb);
#endif
return 0; return 0;
} }
...@@ -503,6 +530,9 @@ nouveau_pm_fini(struct drm_device *dev) ...@@ -503,6 +530,9 @@ nouveau_pm_fini(struct drm_device *dev)
nouveau_perf_fini(dev); nouveau_perf_fini(dev);
nouveau_volt_fini(dev); nouveau_volt_fini(dev);
#ifdef CONFIG_ACPI
unregister_acpi_notifier(&pm->acpi_nb);
#endif
nouveau_hwmon_fini(dev); nouveau_hwmon_fini(dev);
nouveau_sysfs_fini(dev); nouveau_sysfs_fini(dev);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment