mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-13 14:14:37 +00:00
drm/nouveau: Rename acpi_work to hpd_work
We need to call drm_helper_hpd_irq_event() on resume to properly detect monitor connection / disconnection on some laptops. For runtime-resume (which gets called on resume from normal suspend too) we must call drm_helper_hpd_irq_event() from a workqueue to avoid a deadlock. Rename acpi_work to hpd_work, and move it out of the #ifdef CONFIG_ACPI blocks to make it suitable for generic work. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
bd9f6605a8
commit
81280d0e24
2 changed files with 17 additions and 17 deletions
|
@ -349,6 +349,19 @@ static struct nouveau_drm_prop_enum_list dither_depth[] = {
|
||||||
} \
|
} \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
|
static void
|
||||||
|
nouveau_display_hpd_work(struct work_struct *work)
|
||||||
|
{
|
||||||
|
struct nouveau_drm *drm = container_of(work, typeof(*drm), hpd_work);
|
||||||
|
|
||||||
|
pm_runtime_get_sync(drm->dev->dev);
|
||||||
|
|
||||||
|
drm_helper_hpd_irq_event(drm->dev);
|
||||||
|
|
||||||
|
pm_runtime_mark_last_busy(drm->dev->dev);
|
||||||
|
pm_runtime_put_sync(drm->dev->dev);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_ACPI
|
#ifdef CONFIG_ACPI
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -360,19 +373,6 @@ static struct nouveau_drm_prop_enum_list dither_depth[] = {
|
||||||
#define ACPI_VIDEO_NOTIFY_PROBE 0x81
|
#define ACPI_VIDEO_NOTIFY_PROBE 0x81
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void
|
|
||||||
nouveau_display_acpi_work(struct work_struct *work)
|
|
||||||
{
|
|
||||||
struct nouveau_drm *drm = container_of(work, typeof(*drm), acpi_work);
|
|
||||||
|
|
||||||
pm_runtime_get_sync(drm->dev->dev);
|
|
||||||
|
|
||||||
drm_helper_hpd_irq_event(drm->dev);
|
|
||||||
|
|
||||||
pm_runtime_mark_last_busy(drm->dev->dev);
|
|
||||||
pm_runtime_put_sync(drm->dev->dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
nouveau_display_acpi_ntfy(struct notifier_block *nb, unsigned long val,
|
nouveau_display_acpi_ntfy(struct notifier_block *nb, unsigned long val,
|
||||||
void *data)
|
void *data)
|
||||||
|
@ -385,9 +385,9 @@ nouveau_display_acpi_ntfy(struct notifier_block *nb, unsigned long val,
|
||||||
/*
|
/*
|
||||||
* This may be the only indication we receive of a
|
* This may be the only indication we receive of a
|
||||||
* connector hotplug on a runtime suspended GPU,
|
* connector hotplug on a runtime suspended GPU,
|
||||||
* schedule acpi_work to check.
|
* schedule hpd_work to check.
|
||||||
*/
|
*/
|
||||||
schedule_work(&drm->acpi_work);
|
schedule_work(&drm->hpd_work);
|
||||||
|
|
||||||
/* acpi-video should not generate keypresses for this */
|
/* acpi-video should not generate keypresses for this */
|
||||||
return NOTIFY_BAD;
|
return NOTIFY_BAD;
|
||||||
|
@ -582,8 +582,8 @@ nouveau_display_create(struct drm_device *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
nouveau_backlight_init(dev);
|
nouveau_backlight_init(dev);
|
||||||
|
INIT_WORK(&drm->hpd_work, nouveau_display_hpd_work);
|
||||||
#ifdef CONFIG_ACPI
|
#ifdef CONFIG_ACPI
|
||||||
INIT_WORK(&drm->acpi_work, nouveau_display_acpi_work);
|
|
||||||
drm->acpi_nb.notifier_call = nouveau_display_acpi_ntfy;
|
drm->acpi_nb.notifier_call = nouveau_display_acpi_ntfy;
|
||||||
register_acpi_notifier(&drm->acpi_nb);
|
register_acpi_notifier(&drm->acpi_nb);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -163,9 +163,9 @@ struct nouveau_drm {
|
||||||
struct nvbios vbios;
|
struct nvbios vbios;
|
||||||
struct nouveau_display *display;
|
struct nouveau_display *display;
|
||||||
struct backlight_device *backlight;
|
struct backlight_device *backlight;
|
||||||
|
struct work_struct hpd_work;
|
||||||
#ifdef CONFIG_ACPI
|
#ifdef CONFIG_ACPI
|
||||||
struct notifier_block acpi_nb;
|
struct notifier_block acpi_nb;
|
||||||
struct work_struct acpi_work;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* power management */
|
/* power management */
|
||||||
|
|
Loading…
Reference in a new issue