/** \brief uninstall notify handler for acpi device * \param device acpi device * \param handler_type type of handler * \param handler pointer of notify handler * \return status */ unsigned int ATI_API_CALL KCL_ACPI_RemoveHandler(KCL_ACPI_DevHandle device, unsigned int handler_type, KCL_ACPI_CallbackHandle handler) { #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29) return acpi_remove_notify_handler(device, handler_type, (acpi_notify_handler)handler); #else KCL_ACPI_DevHandle dummy_handle; //unregister notifier chain for video switching events if ((KCL_ACPI_GetDevHandle(device, "_DOD", &dummy_handle) == KCL_ACPI_OK) || (KCL_ACPI_GetDevHandle(device, "_DOS", &dummy_handle) == KCL_ACPI_OK)) { return unregister_acpi_notifier(&firegl_acpi_video_notifier); } //unregister notifier chain for ac adapter events if (KCL_ACPI_GetDevHandle(device, "_PSR", &dummy_handle) == KCL_ACPI_OK) { return unregister_acpi_notifier(&firegl_acpi_ac_notifier); } return 0; #endif }
/** \brief uninstall notify handler for acpi device * \param device acpi device * \param handler_type type of handler * \param handler pointer of notify handler * \return status */ unsigned int ATI_API_CALL KCL_ACPI_RemoveHandler(KCL_ACPI_DevHandle device, unsigned int handler_type, KCL_ACPI_CallbackHandle handler, KCL_NOTIFIER_BLOCKER *nb) { #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29) return acpi_remove_notify_handler(device, handler_type, (acpi_notify_handler)handler); #else KCL_ACPI_DevHandle dummy_handle; int ret = 0; //unregister notifier chain for video switching events if ((KCL_ACPI_GetDevHandle(device, "_DOD", &dummy_handle) == KCL_ACPI_OK) || (KCL_ACPI_GetDevHandle(device, "_DOS", &dummy_handle) == KCL_ACPI_OK)) { ret = unregister_acpi_notifier((struct notifier_block*)(*nb)); kfree(*nb); *nb = NULL; } //unregister notifier chain for ac adapter events if (KCL_ACPI_GetDevHandle(device, "_PSR", &dummy_handle) == KCL_ACPI_OK) { ret = unregister_acpi_notifier((struct notifier_block*)(*nb)); kfree(*nb); *nb = NULL; } return ret; #endif }
void psb_intel_opregion_fini(struct drm_device *dev) { struct drm_psb_private *dev_priv = dev->dev_private; struct psb_intel_opregion *opregion = &dev_priv->opregion; if (!opregion->header) return; if (opregion->acpi) { opregion->acpi->drdy = 0; system_opregion = NULL; unregister_acpi_notifier(&psb_intel_opregion_notifier); } cancel_work_sync(&opregion->asle_work); /* just clear all opregion memory pointers now */ iounmap(opregion->header); opregion->header = NULL; opregion->acpi = NULL; opregion->swsci = NULL; opregion->asle = NULL; opregion->vbt = NULL; }
void nouveau_pm_fini(struct drm_device *dev) { struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_pm_engine *pm = &dev_priv->engine.pm; if (pm->cur != &pm->boot) nouveau_pm_perflvl_set(dev, &pm->boot); nouveau_temp_fini(dev); nouveau_perf_fini(dev); nouveau_volt_fini(dev); nouveau_mem_timing_fini(dev); #if defined(CONFIG_ACPI) && defined(CONFIG_POWER_SUPPLY) unregister_acpi_notifier(&pm->acpi_nb); #endif nouveau_hwmon_fini(dev); nouveau_sysfs_fini(dev); }