mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 07:03:03 +02:00
drm/i915: split irq hotplug function from display vtable
This provide a service from irq to display, so make it separate Reviewed-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Dave Airlie <airlied@redhat.com> Signed-off-by: Jani Nikula <jani.nikula@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/05f533064709764dff8bcfef6a58f9a8482dc5bb.1632869550.git.jani.nikula@intel.com
This commit is contained in:
parent
89ac34c14d
commit
de1677c5e3
|
|
@ -215,8 +215,8 @@ intel_hpd_irq_storm_switch_to_polling(struct drm_i915_private *dev_priv)
|
|||
|
||||
static void intel_hpd_irq_setup(struct drm_i915_private *i915)
|
||||
{
|
||||
if (i915->display_irqs_enabled && i915->display.hpd_irq_setup)
|
||||
i915->display.hpd_irq_setup(i915);
|
||||
if (i915->display_irqs_enabled && i915->hotplug_funcs.hpd_irq_setup)
|
||||
i915->hotplug_funcs.hpd_irq_setup(i915);
|
||||
}
|
||||
|
||||
static void intel_hpd_irq_storm_reenable_work(struct work_struct *work)
|
||||
|
|
|
|||
|
|
@ -384,6 +384,10 @@ struct intel_cdclk_funcs {
|
|||
u8 (*calc_voltage_level)(int cdclk);
|
||||
};
|
||||
|
||||
struct intel_hotplug_funcs {
|
||||
void (*hpd_irq_setup)(struct drm_i915_private *dev_priv);
|
||||
};
|
||||
|
||||
struct drm_i915_display_funcs {
|
||||
/* Returns the active state of the crtc, and if the crtc is active,
|
||||
* fills out the pipe-config with the hw state. */
|
||||
|
|
@ -401,7 +405,7 @@ struct drm_i915_display_funcs {
|
|||
|
||||
void (*fdi_link_train)(struct intel_crtc *crtc,
|
||||
const struct intel_crtc_state *crtc_state);
|
||||
void (*hpd_irq_setup)(struct drm_i915_private *dev_priv);
|
||||
|
||||
/* clock updates for mode set */
|
||||
/* cursor updates */
|
||||
/* render clock increase/decrease */
|
||||
|
|
@ -978,6 +982,9 @@ struct drm_i915_private {
|
|||
/* pm display functions */
|
||||
struct drm_i915_wm_disp_funcs wm_disp;
|
||||
|
||||
/* irq display functions */
|
||||
struct intel_hotplug_funcs hotplug_funcs;
|
||||
|
||||
/* Display functions */
|
||||
struct drm_i915_display_funcs display;
|
||||
|
||||
|
|
|
|||
|
|
@ -4395,20 +4395,20 @@ void intel_irq_init(struct drm_i915_private *dev_priv)
|
|||
|
||||
if (HAS_GMCH(dev_priv)) {
|
||||
if (I915_HAS_HOTPLUG(dev_priv))
|
||||
dev_priv->display.hpd_irq_setup = i915_hpd_irq_setup;
|
||||
dev_priv->hotplug_funcs.hpd_irq_setup = i915_hpd_irq_setup;
|
||||
} else {
|
||||
if (HAS_PCH_DG1(dev_priv))
|
||||
dev_priv->display.hpd_irq_setup = dg1_hpd_irq_setup;
|
||||
dev_priv->hotplug_funcs.hpd_irq_setup = dg1_hpd_irq_setup;
|
||||
else if (DISPLAY_VER(dev_priv) >= 11)
|
||||
dev_priv->display.hpd_irq_setup = gen11_hpd_irq_setup;
|
||||
dev_priv->hotplug_funcs.hpd_irq_setup = gen11_hpd_irq_setup;
|
||||
else if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv))
|
||||
dev_priv->display.hpd_irq_setup = bxt_hpd_irq_setup;
|
||||
dev_priv->hotplug_funcs.hpd_irq_setup = bxt_hpd_irq_setup;
|
||||
else if (INTEL_PCH_TYPE(dev_priv) >= PCH_ICP)
|
||||
dev_priv->display.hpd_irq_setup = icp_hpd_irq_setup;
|
||||
dev_priv->hotplug_funcs.hpd_irq_setup = icp_hpd_irq_setup;
|
||||
else if (INTEL_PCH_TYPE(dev_priv) >= PCH_SPT)
|
||||
dev_priv->display.hpd_irq_setup = spt_hpd_irq_setup;
|
||||
dev_priv->hotplug_funcs.hpd_irq_setup = spt_hpd_irq_setup;
|
||||
else
|
||||
dev_priv->display.hpd_irq_setup = ilk_hpd_irq_setup;
|
||||
dev_priv->hotplug_funcs.hpd_irq_setup = ilk_hpd_irq_setup;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user