/** * msic_vreg_handler */ static irqreturn_t msic_vreg_handler(int irq, void *dev_id) { struct drm_device *dev = hdmi_priv ? hdmi_priv->dev : NULL; struct drm_psb_private *dev_priv = psb_priv(dev); u8 data = 0; /* Need to add lock later.*/ /* Read VREG interrupt status register */ if (sram_vreg_addr) data = readb(sram_vreg_addr); else DRM_ERROR("%s: sram_vreg_addr = %p\n", __FUNCTION__, sram_vreg_addr); if (dev) PSB_DEBUG_ENTRY("data = 0x%x.\n", data); /* handle HDMI HPD interrupts. */ if (data & HDMI_HPD_STATUS) { DRM_INFO("%s: HPD interrupt. data = 0x%x. \n", __FUNCTION__, data); if (dev_priv->xserver_start) hpd_notify_um(); } /* handle other msic vreq interrupts when necessary. */ return IRQ_HANDLED; }
/** * ti_tpd_hpd_handler */ irqreturn_t hdmi_hpd_handler(int irq, void *dev_id) { struct mid_intel_hdmi_priv *hdmi_priv = dev_id; struct drm_device *dev = hdmi_priv ? hdmi_priv->dev : NULL; struct drm_psb_private *dev_priv = NULL; PSB_DEBUG_ENTRY("\n"); if (dev) { dev_priv = psb_priv(dev); if (dev_priv && dev_priv->um_start) hpd_notify_um(dev); else return IRQ_NONE; } else return IRQ_NONE; return IRQ_HANDLED; }