mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-04 10:12:16 +09:00
drm/i915: Fix up sdvo hpd pins for i965g/gm
commit 4f7fd7095d upstream.
Bspec seems to be full of lies, at least it disagress with reality:
Two systems corrobated that SDVO hpd bits are the same as on gen3.
v2: Update comment a bit.
Tested-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Arthur Ranyan <arthur.j.runyan@intel.com>
Reported-and-tested-by: Alex Fiestas <afiestas@kde.org>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=58405
Acked-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
a5ed6be766
commit
f8ee0e2e9d
@@ -70,15 +70,6 @@ static const u32 hpd_status_gen4[] = {
|
||||
[HPD_PORT_D] = PORTD_HOTPLUG_INT_STATUS
|
||||
};
|
||||
|
||||
static const u32 hpd_status_i965[] = {
|
||||
[HPD_CRT] = CRT_HOTPLUG_INT_STATUS,
|
||||
[HPD_SDVO_B] = SDVOB_HOTPLUG_INT_STATUS_I965,
|
||||
[HPD_SDVO_C] = SDVOC_HOTPLUG_INT_STATUS_I965,
|
||||
[HPD_PORT_B] = PORTB_HOTPLUG_INT_STATUS,
|
||||
[HPD_PORT_C] = PORTC_HOTPLUG_INT_STATUS,
|
||||
[HPD_PORT_D] = PORTD_HOTPLUG_INT_STATUS
|
||||
};
|
||||
|
||||
static const u32 hpd_status_i915[] = { /* i915 and valleyview are the same */
|
||||
[HPD_CRT] = CRT_HOTPLUG_INT_STATUS,
|
||||
[HPD_SDVO_B] = SDVOB_HOTPLUG_INT_STATUS_I915,
|
||||
@@ -2952,13 +2943,13 @@ static irqreturn_t i965_irq_handler(int irq, void *arg)
|
||||
u32 hotplug_status = I915_READ(PORT_HOTPLUG_STAT);
|
||||
u32 hotplug_trigger = hotplug_status & (IS_G4X(dev) ?
|
||||
HOTPLUG_INT_STATUS_G4X :
|
||||
HOTPLUG_INT_STATUS_I965);
|
||||
HOTPLUG_INT_STATUS_I915);
|
||||
|
||||
DRM_DEBUG_DRIVER("hotplug event received, stat 0x%08x\n",
|
||||
hotplug_status);
|
||||
if (hotplug_trigger) {
|
||||
if (hotplug_irq_storm_detect(dev, hotplug_trigger,
|
||||
IS_G4X(dev) ? hpd_status_gen4 : hpd_status_i965))
|
||||
IS_G4X(dev) ? hpd_status_gen4 : hpd_status_i915))
|
||||
i915_hpd_irq_setup(dev);
|
||||
queue_work(dev_priv->wq,
|
||||
&dev_priv->hotplug_work);
|
||||
|
||||
@@ -1691,6 +1691,12 @@
|
||||
/* SDVO is different across gen3/4 */
|
||||
#define SDVOC_HOTPLUG_INT_STATUS_G4X (1 << 3)
|
||||
#define SDVOB_HOTPLUG_INT_STATUS_G4X (1 << 2)
|
||||
/*
|
||||
* Bspec seems to be seriously misleaded about the SDVO hpd bits on i965g/gm,
|
||||
* since reality corrobates that they're the same as on gen3. But keep these
|
||||
* bits here (and the comment!) to help any other lost wanderers back onto the
|
||||
* right tracks.
|
||||
*/
|
||||
#define SDVOC_HOTPLUG_INT_STATUS_I965 (3 << 4)
|
||||
#define SDVOB_HOTPLUG_INT_STATUS_I965 (3 << 2)
|
||||
#define SDVOC_HOTPLUG_INT_STATUS_I915 (1 << 7)
|
||||
@@ -1702,13 +1708,6 @@
|
||||
PORTC_HOTPLUG_INT_STATUS | \
|
||||
PORTD_HOTPLUG_INT_STATUS)
|
||||
|
||||
#define HOTPLUG_INT_STATUS_I965 (CRT_HOTPLUG_INT_STATUS | \
|
||||
SDVOB_HOTPLUG_INT_STATUS_I965 | \
|
||||
SDVOC_HOTPLUG_INT_STATUS_I965 | \
|
||||
PORTB_HOTPLUG_INT_STATUS | \
|
||||
PORTC_HOTPLUG_INT_STATUS | \
|
||||
PORTD_HOTPLUG_INT_STATUS)
|
||||
|
||||
#define HOTPLUG_INT_STATUS_I915 (CRT_HOTPLUG_INT_STATUS | \
|
||||
SDVOB_HOTPLUG_INT_STATUS_I915 | \
|
||||
SDVOC_HOTPLUG_INT_STATUS_I915 | \
|
||||
|
||||
Reference in New Issue
Block a user