|
@@ -203,7 +203,13 @@ intel_gpio_setup(struct intel_gmbus *bus, u32 pin)
|
|
|
algo->data = bus;
|
|
|
}
|
|
|
|
|
|
-#define HAS_GMBUS_IRQ(dev) (INTEL_INFO(dev)->gen >= 4)
|
|
|
+/*
|
|
|
+ * gmbus on gen4 seems to be able to generate legacy interrupts even when in MSI
|
|
|
+ * mode. This results in spurious interrupt warnings if the legacy irq no. is
|
|
|
+ * shared with another device. The kernel then disables that interrupt source
|
|
|
+ * and so prevents the other device from working properly.
|
|
|
+ */
|
|
|
+#define HAS_GMBUS_IRQ(dev) (INTEL_INFO(dev)->gen >= 5)
|
|
|
static int
|
|
|
gmbus_wait_hw_status(struct drm_i915_private *dev_priv,
|
|
|
u32 gmbus2_status,
|
|
@@ -214,6 +220,9 @@ gmbus_wait_hw_status(struct drm_i915_private *dev_priv,
|
|
|
u32 gmbus2 = 0;
|
|
|
DEFINE_WAIT(wait);
|
|
|
|
|
|
+ if (!HAS_GMBUS_IRQ(dev_priv->dev))
|
|
|
+ gmbus4_irq_en = 0;
|
|
|
+
|
|
|
/* Important: The hw handles only the first bit, so set only one! Since
|
|
|
* we also need to check for NAKs besides the hw ready/idle signal, we
|
|
|
* need to wake up periodically and check that ourselves. */
|