/* SPDX-License-Identifier: MIT */
/*
 * Copyright © 2023 Intel Corporation
 */

#ifndef __INTEL_HOTPLUG_IRQ_H__
#define __INTEL_HOTPLUG_IRQ_H__

#include <linux/types.h>

struct drm_i915_private;
struct intel_encoder;

u32 i9xx_hpd_irq_ack(struct drm_i915_private *i915);

void i9xx_hpd_irq_handler(struct drm_i915_private *i915, u32 hotplug_status);
void ibx_hpd_irq_handler(struct drm_i915_private *i915, u32 hotplug_trigger);
void ilk_hpd_irq_handler(struct drm_i915_private *i915, u32 hotplug_trigger);
void gen11_hpd_irq_handler(struct drm_i915_private *i915, u32 iir);
void bxt_hpd_irq_handler(struct drm_i915_private *i915, u32 hotplug_trigger);
void xelpdp_pica_irq_handler(struct drm_i915_private *i915, u32 iir);
void icp_irq_handler(struct drm_i915_private *i915, u32 pch_iir);
void spt_irq_handler(struct drm_i915_private *i915, u32 pch_iir);

void i915_hotplug_interrupt_update_locked(struct drm_i915_private *i915,
					  u32 mask, u32 bits);
void i915_hotplug_interrupt_update(struct drm_i915_private *i915,
				   u32 mask, u32 bits);

void intel_hpd_enable_detection(struct intel_encoder *encoder);
void intel_hpd_irq_setup(struct drm_i915_private *i915);

void intel_hotplug_irq_init(struct drm_i915_private *i915);

#endif /* __INTEL_HOTPLUG_IRQ_H__ */