hpd_pin
conn = val & BIT(tc->hpd_pin);
if (tc->hpd_pin >= 0)
if (tc->hpd_pin >= 0) {
if (tc->hpd_pin >= 0 && tc->bridge.dev && tc->aux.drm_dev) {
bool h = val & INT_GPIO_H(tc->hpd_pin);
bool lc = val & INT_GPIO_LC(tc->hpd_pin);
dev_dbg(tc->dev, "GPIO%d: %s %s\n", tc->hpd_pin,
if (tc->hpd_pin >= 0)
&tc->hpd_pin);
tc->hpd_pin = -ENODEV;
if (tc->hpd_pin < 0 || tc->hpd_pin > 1) {
if (tc->hpd_pin >= 0) {
u32 lcnt_reg = tc->hpd_pin == 0 ? INT_GP0_LCNT : INT_GP1_LCNT;
u32 h_lc = INT_GPIO_H(tc->hpd_pin) | INT_GPIO_LC(tc->hpd_pin);
regmap_write(tc->regmap, GPIOM, BIT(tc->hpd_pin));
int hpd_pin;
u32 bit = display->hotplug.pch_hpd[encoder->hpd_pin];
switch (encoder->hpd_pin) {
MISSING_CASE(encoder->hpd_pin);
u32 bit = display->hotplug.hpd[encoder->hpd_pin];
intel_encoder->hpd_pin = intel_hpd_pin_default(port);
intel_encoder->hpd_pin = intel_hpd_pin_default(port);
crt->base.hpd_pin = HPD_CRT;
u32 bit = display->hotplug.pch_hpd[encoder->hpd_pin];
u32 bit = display->hotplug.hpd[encoder->hpd_pin];
u32 bit = display->hotplug.hpd[encoder->hpd_pin];
static enum hpd_pin xelpd_hpd_pin(struct intel_display *display, enum port port)
static enum hpd_pin dg1_hpd_pin(struct intel_display *display, enum port port)
static enum hpd_pin tgl_hpd_pin(struct intel_display *display, enum port port)
static enum hpd_pin rkl_hpd_pin(struct intel_display *display, enum port port)
static enum hpd_pin icl_hpd_pin(struct intel_display *display, enum port port)
static enum hpd_pin ehl_hpd_pin(struct intel_display *display, enum port port)
static enum hpd_pin skl_hpd_pin(struct intel_display *display, enum port port)
encoder->hpd_pin = xelpd_hpd_pin(display, port);
encoder->hpd_pin = dg1_hpd_pin(display, port);
encoder->hpd_pin = rkl_hpd_pin(display, port);
encoder->hpd_pin = tgl_hpd_pin(display, port);
encoder->hpd_pin = ehl_hpd_pin(display, port);
encoder->hpd_pin = icl_hpd_pin(display, port);
encoder->hpd_pin = skl_hpd_pin(display, port);
encoder->hpd_pin = intel_hpd_pin_default(port);
#define _HPD_PIN_DDI(hpd_pin) ((hpd_pin) - HPD_PORT_A)
#define _HPD_PIN_TC(hpd_pin) ((hpd_pin) - HPD_PORT_TC1)
#define GEN8_DE_PORT_HOTPLUG(hpd_pin) REG_BIT(3 + _HPD_PIN_DDI(hpd_pin))
#define GEN11_TC_HOTPLUG(hpd_pin) REG_BIT(16 + _HPD_PIN_TC(hpd_pin))
#define GEN11_TBT_HOTPLUG(hpd_pin) REG_BIT(_HPD_PIN_TC(hpd_pin))
#define GEN11_HOTPLUG_CTL_ENABLE(hpd_pin) (8 << (_HPD_PIN_TC(hpd_pin) * 4))
#define GEN11_HOTPLUG_CTL_LONG_DETECT(hpd_pin) (2 << (_HPD_PIN_TC(hpd_pin) * 4))
#define GEN11_HOTPLUG_CTL_SHORT_DETECT(hpd_pin) (1 << (_HPD_PIN_TC(hpd_pin) * 4))
#define GEN11_HOTPLUG_CTL_NO_DETECT(hpd_pin) (0 << (_HPD_PIN_TC(hpd_pin) * 4))
#define XELPDP_DP_ALT_HOTPLUG(hpd_pin) REG_BIT(16 + _HPD_PIN_TC(hpd_pin))
#define XELPDP_AUX_TC(hpd_pin) REG_BIT(8 + _HPD_PIN_TC(hpd_pin))
#define XE2LPD_AUX_DDI(hpd_pin) REG_BIT(6 + _HPD_PIN_DDI(hpd_pin))
#define XELPDP_TBT_HOTPLUG(hpd_pin) REG_BIT(_HPD_PIN_TC(hpd_pin))
#define XELPDP_PORT_HOTPLUG_CTL(hpd_pin) _MMIO(0x16F270 + (_HPD_PIN_TC(hpd_pin) * 0x200))
#define SDE_TC_HOTPLUG_ICP(hpd_pin) REG_BIT(24 + _HPD_PIN_TC(hpd_pin))
#define SDE_TC_HOTPLUG_DG2(hpd_pin) REG_BIT(25 + _HPD_PIN_TC(hpd_pin)) /* sigh */
#define SDE_DDI_HOTPLUG_ICP(hpd_pin) REG_BIT(16 + _HPD_PIN_DDI(hpd_pin))
#define SHOTPLUG_CTL_DDI_HPD_ENABLE(hpd_pin) (0x8 << (_HPD_PIN_DDI(hpd_pin) * 4))
#define SHOTPLUG_CTL_DDI_HPD_OUTPUT_DATA(hpd_pin) (0x4 << (_HPD_PIN_DDI(hpd_pin) * 4))
#define SHOTPLUG_CTL_DDI_HPD_STATUS_MASK(hpd_pin) (0x3 << (_HPD_PIN_DDI(hpd_pin) * 4))
#define SHOTPLUG_CTL_DDI_HPD_NO_DETECT(hpd_pin) (0x0 << (_HPD_PIN_DDI(hpd_pin) * 4))
#define SHOTPLUG_CTL_DDI_HPD_SHORT_DETECT(hpd_pin) (0x1 << (_HPD_PIN_DDI(hpd_pin) * 4))
#define SHOTPLUG_CTL_DDI_HPD_LONG_DETECT(hpd_pin) (0x2 << (_HPD_PIN_DDI(hpd_pin) * 4))
#define SHOTPLUG_CTL_DDI_HPD_SHORT_LONG_DETECT(hpd_pin) (0x3 << (_HPD_PIN_DDI(hpd_pin) * 4))
#define ICP_TC_HPD_ENABLE(hpd_pin) (8 << (_HPD_PIN_TC(hpd_pin) * 4))
#define ICP_TC_HPD_LONG_DETECT(hpd_pin) (2 << (_HPD_PIN_TC(hpd_pin) * 4))
#define ICP_TC_HPD_SHORT_DETECT(hpd_pin) (1 << (_HPD_PIN_TC(hpd_pin) * 4))
enum hpd_pin hpd_pin;
unsigned int hpd_pin = encoder->hpd_pin;
if (hpd_high != test_bit(hpd_pin, &display->hotplug.oob_hotplug_last_state)) {
display->hotplug.event_bits |= BIT(hpd_pin);
__assign_bit(hpd_pin,
static bool block_hpd_pin(struct intel_display *display, enum hpd_pin pin)
static bool unblock_hpd_pin(struct intel_display *display, enum hpd_pin pin)
if (encoder->hpd_pin == HPD_NONE)
if (block_hpd_pin(display, encoder->hpd_pin))
static enum hpd_pin
if (do_flush && hpd_pin_has_pulse(display, encoder->hpd_pin))
if (encoder->hpd_pin == HPD_NONE)
if (unblock_hpd_pin(display, encoder->hpd_pin))
enum hpd_pin pin = encoder->hpd_pin;
return encoder ? encoder->hpd_pin : HPD_NONE;
enum hpd_pin pin, bool long_hpd)
enum hpd_pin pin;
enum hpd_pin pin;
static bool hpd_pin_has_pulse(struct intel_display *display, enum hpd_pin pin)
if (encoder->hpd_pin != pin)
static bool hpd_pin_is_blocked(struct intel_display *display, enum hpd_pin pin)
enum hpd_pin pin;
enum hpd_pin pin = encoder->hpd_pin;
hotplug->short_hpd_pin_mask |= BIT(encoder->hpd_pin);
if (!hpd_pin_is_blocked(display, encoder->hpd_pin))
enum hpd_pin pin;
enum hpd_pin pin;
pin = encoder->hpd_pin;
enum hpd_pin pin;
enum hpd_pin intel_hpd_pin_default(enum port port)
enum hpd_pin pin;
enum hpd_pin intel_hpd_pin_default(enum port port);
mtp_ddi_hotplug_mask(encoder->hpd_pin),
mtp_tc_hotplug_mask(encoder->hpd_pin),
static bool is_xelpdp_pica_hpd_pin(enum hpd_pin hpd_pin)
return hpd_pin >= HPD_PORT_TC1 && hpd_pin <= HPD_PORT_TC4;
enum hpd_pin hpd_pin, bool enable)
if (!is_xelpdp_pica_hpd_pin(hpd_pin))
intel_de_rmw(display, XELPDP_PORT_HOTPLUG_CTL(hpd_pin),
_xelpdp_pica_hpd_detection_setup(display, encoder->hpd_pin, true);
enum hpd_pin pin;
available_pins |= BIT(encoder->hpd_pin);
static u32 spt_hotplug_mask(enum hpd_pin hpd_pin)
switch (hpd_pin) {
return spt_hotplug_mask(encoder->hpd_pin);
static u32 spt_hotplug2_mask(enum hpd_pin hpd_pin)
switch (hpd_pin) {
return spt_hotplug2_mask(encoder->hpd_pin);
spt_hotplug_mask(encoder->hpd_pin),
spt_hotplug2_mask(encoder->hpd_pin),
static u32 ilk_hotplug_mask(enum hpd_pin hpd_pin)
switch (hpd_pin) {
switch (encoder->hpd_pin) {
ilk_hotplug_mask(encoder->hpd_pin),
static u32 bxt_hotplug_mask(enum hpd_pin hpd_pin)
switch (hpd_pin) {
switch (encoder->hpd_pin) {
bxt_hotplug_mask(encoder->hpd_pin),
u32 hotplug_en = hpd_mask_i915[encoder->hpd_pin];
typedef bool (*long_pulse_detect_func)(enum hpd_pin pin, u32 val);
typedef u32 (*hotplug_mask_func)(enum hpd_pin pin);
static bool gen11_port_hotplug_long_detect(enum hpd_pin pin, u32 val)
static bool bxt_port_hotplug_long_detect(enum hpd_pin pin, u32 val)
static bool icp_ddi_port_hotplug_long_detect(enum hpd_pin pin, u32 val)
static bool icp_tc_port_hotplug_long_detect(enum hpd_pin pin, u32 val)
static bool spt_port_hotplug2_long_detect(enum hpd_pin pin, u32 val)
static bool spt_port_hotplug_long_detect(enum hpd_pin pin, u32 val)
static bool ilk_port_hotplug_long_detect(enum hpd_pin pin, u32 val)
static bool pch_port_hotplug_long_detect(enum hpd_pin pin, u32 val)
static bool i9xx_port_hotplug_long_detect(enum hpd_pin pin, u32 val)
bool long_pulse_detect(enum hpd_pin pin, u32 val))
enum hpd_pin pin;
if (display->hotplug.stats[encoder->hpd_pin].state == HPD_ENABLED)
enabled_irqs |= hpd[encoder->hpd_pin];
hotplug_irqs |= hpd[encoder->hpd_pin];
enum hpd_pin pin;
enum hpd_pin pin;
static u32 ibx_hotplug_mask(enum hpd_pin hpd_pin)
switch (hpd_pin) {
switch (encoder->hpd_pin) {
ibx_hotplug_mask(encoder->hpd_pin),
static u32 icp_ddi_hotplug_mask(enum hpd_pin hpd_pin)
switch (hpd_pin) {
return SHOTPLUG_CTL_DDI_HPD_ENABLE(hpd_pin);
return icp_ddi_hotplug_mask(encoder->hpd_pin);
static u32 icp_tc_hotplug_mask(enum hpd_pin hpd_pin)
switch (hpd_pin) {
return ICP_TC_HPD_ENABLE(hpd_pin);
return icp_tc_hotplug_mask(encoder->hpd_pin);
icp_ddi_hotplug_mask(encoder->hpd_pin),
icp_tc_hotplug_mask(encoder->hpd_pin),
static u32 gen11_hotplug_mask(enum hpd_pin hpd_pin)
switch (hpd_pin) {
return GEN11_HOTPLUG_CTL_ENABLE(hpd_pin);
return gen11_hotplug_mask(encoder->hpd_pin);
gen11_hotplug_mask(encoder->hpd_pin),
gen11_hotplug_mask(encoder->hpd_pin),
static u32 mtp_ddi_hotplug_mask(enum hpd_pin hpd_pin)
switch (hpd_pin) {
return SHOTPLUG_CTL_DDI_HPD_ENABLE(hpd_pin);
return mtp_ddi_hotplug_mask(encoder->hpd_pin);
static u32 mtp_tc_hotplug_mask(enum hpd_pin hpd_pin)
switch (hpd_pin) {
return ICP_TC_HPD_ENABLE(hpd_pin);
return mtp_tc_hotplug_mask(encoder->hpd_pin);
intel_encoder->hpd_pin = HPD_SDVO_B;
intel_encoder->hpd_pin = HPD_SDVO_C;
enum hpd_pin hpd_pin = dig_port->base.hpd_pin;
u32 pica_isr_bits = display->hotplug.hpd[hpd_pin];
u32 pch_isr_bit = display->hotplug.pch_hpd[hpd_pin];
u32 isr_bit = display->hotplug.pch_hpd[dig_port->base.hpd_pin];
enum hpd_pin hpd_pin = dig_port->base.hpd_pin;
u32 cpu_isr_bits = display->hotplug.hpd[hpd_pin];
u32 pch_isr_bit = display->hotplug.pch_hpd[hpd_pin];