diff options
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_irq.c | 160 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_ddi.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 20 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_drv.h | 4 |
5 files changed, 183 insertions, 9 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 38362863b1dc..b560efc6eb35 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h | |||
@@ -1559,6 +1559,11 @@ struct drm_i915_private { | |||
1559 | 1559 | ||
1560 | struct i915_runtime_pm pm; | 1560 | struct i915_runtime_pm pm; |
1561 | 1561 | ||
1562 | struct intel_digital_port *hpd_irq_port[I915_MAX_PORTS]; | ||
1563 | u32 long_hpd_port_mask; | ||
1564 | u32 short_hpd_port_mask; | ||
1565 | struct work_struct dig_port_work; | ||
1566 | |||
1562 | /* Old dri1 support infrastructure, beware the dragons ya fools entering | 1567 | /* Old dri1 support infrastructure, beware the dragons ya fools entering |
1563 | * here! */ | 1568 | * here! */ |
1564 | struct i915_dri1_state dri1; | 1569 | struct i915_dri1_state dri1; |
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index 1c1ec22bc7ef..c50e3b41d6fe 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c | |||
@@ -1090,6 +1090,53 @@ static bool intel_hpd_irq_event(struct drm_device *dev, | |||
1090 | return true; | 1090 | return true; |
1091 | } | 1091 | } |
1092 | 1092 | ||
1093 | static void i915_digport_work_func(struct work_struct *work) | ||
1094 | { | ||
1095 | struct drm_i915_private *dev_priv = | ||
1096 | container_of(work, struct drm_i915_private, dig_port_work); | ||
1097 | unsigned long irqflags; | ||
1098 | u32 long_port_mask, short_port_mask; | ||
1099 | struct intel_digital_port *intel_dig_port; | ||
1100 | int i, ret; | ||
1101 | u32 old_bits = 0; | ||
1102 | |||
1103 | spin_lock_irqsave(&dev_priv->irq_lock, irqflags); | ||
1104 | long_port_mask = dev_priv->long_hpd_port_mask; | ||
1105 | dev_priv->long_hpd_port_mask = 0; | ||
1106 | short_port_mask = dev_priv->short_hpd_port_mask; | ||
1107 | dev_priv->short_hpd_port_mask = 0; | ||
1108 | spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags); | ||
1109 | |||
1110 | for (i = 0; i < I915_MAX_PORTS; i++) { | ||
1111 | bool valid = false; | ||
1112 | bool long_hpd = false; | ||
1113 | intel_dig_port = dev_priv->hpd_irq_port[i]; | ||
1114 | if (!intel_dig_port || !intel_dig_port->hpd_pulse) | ||
1115 | continue; | ||
1116 | |||
1117 | if (long_port_mask & (1 << i)) { | ||
1118 | valid = true; | ||
1119 | long_hpd = true; | ||
1120 | } else if (short_port_mask & (1 << i)) | ||
1121 | valid = true; | ||
1122 | |||
1123 | if (valid) { | ||
1124 | ret = intel_dig_port->hpd_pulse(intel_dig_port, long_hpd); | ||
1125 | if (ret == true) { | ||
1126 | /* if we get true fallback to old school hpd */ | ||
1127 | old_bits |= (1 << intel_dig_port->base.hpd_pin); | ||
1128 | } | ||
1129 | } | ||
1130 | } | ||
1131 | |||
1132 | if (old_bits) { | ||
1133 | spin_lock_irqsave(&dev_priv->irq_lock, irqflags); | ||
1134 | dev_priv->hpd_event_bits |= old_bits; | ||
1135 | spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags); | ||
1136 | schedule_work(&dev_priv->hotplug_work); | ||
1137 | } | ||
1138 | } | ||
1139 | |||
1093 | /* | 1140 | /* |
1094 | * Handle hotplug events outside the interrupt handler proper. | 1141 | * Handle hotplug events outside the interrupt handler proper. |
1095 | */ | 1142 | */ |
@@ -1521,23 +1568,104 @@ static irqreturn_t gen8_gt_irq_handler(struct drm_device *dev, | |||
1521 | #define HPD_STORM_DETECT_PERIOD 1000 | 1568 | #define HPD_STORM_DETECT_PERIOD 1000 |
1522 | #define HPD_STORM_THRESHOLD 5 | 1569 | #define HPD_STORM_THRESHOLD 5 |
1523 | 1570 | ||
1571 | static int ilk_port_to_hotplug_shift(enum port port) | ||
1572 | { | ||
1573 | switch (port) { | ||
1574 | case PORT_A: | ||
1575 | case PORT_E: | ||
1576 | default: | ||
1577 | return -1; | ||
1578 | case PORT_B: | ||
1579 | return 0; | ||
1580 | case PORT_C: | ||
1581 | return 8; | ||
1582 | case PORT_D: | ||
1583 | return 16; | ||
1584 | } | ||
1585 | } | ||
1586 | |||
1587 | static int g4x_port_to_hotplug_shift(enum port port) | ||
1588 | { | ||
1589 | switch (port) { | ||
1590 | case PORT_A: | ||
1591 | case PORT_E: | ||
1592 | default: | ||
1593 | return -1; | ||
1594 | case PORT_B: | ||
1595 | return 17; | ||
1596 | case PORT_C: | ||
1597 | return 19; | ||
1598 | case PORT_D: | ||
1599 | return 21; | ||
1600 | } | ||
1601 | } | ||
1602 | |||
1603 | static inline enum port get_port_from_pin(enum hpd_pin pin) | ||
1604 | { | ||
1605 | switch (pin) { | ||
1606 | case HPD_PORT_B: | ||
1607 | return PORT_B; | ||
1608 | case HPD_PORT_C: | ||
1609 | return PORT_C; | ||
1610 | case HPD_PORT_D: | ||
1611 | return PORT_D; | ||
1612 | default: | ||
1613 | return PORT_A; /* no hpd */ | ||
1614 | } | ||
1615 | } | ||
1616 | |||
1524 | static inline void intel_hpd_irq_handler(struct drm_device *dev, | 1617 | static inline void intel_hpd_irq_handler(struct drm_device *dev, |
1525 | u32 hotplug_trigger, | 1618 | u32 hotplug_trigger, |
1619 | u32 dig_hotplug_reg, | ||
1526 | const u32 *hpd) | 1620 | const u32 *hpd) |
1527 | { | 1621 | { |
1528 | struct drm_i915_private *dev_priv = dev->dev_private; | 1622 | struct drm_i915_private *dev_priv = dev->dev_private; |
1529 | int i; | 1623 | int i; |
1624 | enum port port; | ||
1530 | bool storm_detected = false; | 1625 | bool storm_detected = false; |
1626 | bool queue_dig = false, queue_hp = false; | ||
1627 | u32 dig_shift; | ||
1628 | u32 dig_port_mask = 0; | ||
1531 | 1629 | ||
1532 | if (!hotplug_trigger) | 1630 | if (!hotplug_trigger) |
1533 | return; | 1631 | return; |
1534 | 1632 | ||
1535 | DRM_DEBUG_DRIVER("hotplug event received, stat 0x%08x\n", | 1633 | DRM_DEBUG_DRIVER("hotplug event received, stat 0x%08x, dig 0x%08x\n", |
1536 | hotplug_trigger); | 1634 | hotplug_trigger, dig_hotplug_reg); |
1537 | 1635 | ||
1538 | spin_lock(&dev_priv->irq_lock); | 1636 | spin_lock(&dev_priv->irq_lock); |
1539 | for (i = 1; i < HPD_NUM_PINS; i++) { | 1637 | for (i = 1; i < HPD_NUM_PINS; i++) { |
1638 | if (!(hpd[i] & hotplug_trigger)) | ||
1639 | continue; | ||
1640 | |||
1641 | port = get_port_from_pin(i); | ||
1642 | if (port && dev_priv->hpd_irq_port[port]) { | ||
1643 | bool long_hpd; | ||
1644 | |||
1645 | if (IS_G4X(dev)) { | ||
1646 | dig_shift = g4x_port_to_hotplug_shift(port); | ||
1647 | long_hpd = (hotplug_trigger >> dig_shift) & PORTB_HOTPLUG_LONG_DETECT; | ||
1648 | } else { | ||
1649 | dig_shift = ilk_port_to_hotplug_shift(port); | ||
1650 | long_hpd = (dig_hotplug_reg >> dig_shift) & PORTB_HOTPLUG_LONG_DETECT; | ||
1651 | } | ||
1652 | |||
1653 | DRM_DEBUG_DRIVER("digital hpd port %d %d\n", port, long_hpd); | ||
1654 | /* for long HPD pulses we want to have the digital queue happen, | ||
1655 | but we still want HPD storm detection to function. */ | ||
1656 | if (long_hpd) { | ||
1657 | dev_priv->long_hpd_port_mask |= (1 << port); | ||
1658 | dig_port_mask |= hpd[i]; | ||
1659 | } else { | ||
1660 | /* for short HPD just trigger the digital queue */ | ||
1661 | dev_priv->short_hpd_port_mask |= (1 << port); | ||
1662 | hotplug_trigger &= ~hpd[i]; | ||
1663 | } | ||
1664 | queue_dig = true; | ||
1665 | } | ||
1666 | } | ||
1540 | 1667 | ||
1668 | for (i = 1; i < HPD_NUM_PINS; i++) { | ||
1541 | if (hpd[i] & hotplug_trigger && | 1669 | if (hpd[i] & hotplug_trigger && |
1542 | dev_priv->hpd_stats[i].hpd_mark == HPD_DISABLED) { | 1670 | dev_priv->hpd_stats[i].hpd_mark == HPD_DISABLED) { |
1543 | /* | 1671 | /* |
@@ -1557,7 +1685,11 @@ static inline void intel_hpd_irq_handler(struct drm_device *dev, | |||
1557 | dev_priv->hpd_stats[i].hpd_mark != HPD_ENABLED) | 1685 | dev_priv->hpd_stats[i].hpd_mark != HPD_ENABLED) |
1558 | continue; | 1686 | continue; |
1559 | 1687 | ||
1560 | dev_priv->hpd_event_bits |= (1 << i); | 1688 | if (!(dig_port_mask & hpd[i])) { |
1689 | dev_priv->hpd_event_bits |= (1 << i); | ||
1690 | queue_hp = true; | ||
1691 | } | ||
1692 | |||
1561 | if (!time_in_range(jiffies, dev_priv->hpd_stats[i].hpd_last_jiffies, | 1693 | if (!time_in_range(jiffies, dev_priv->hpd_stats[i].hpd_last_jiffies, |
1562 | dev_priv->hpd_stats[i].hpd_last_jiffies | 1694 | dev_priv->hpd_stats[i].hpd_last_jiffies |
1563 | + msecs_to_jiffies(HPD_STORM_DETECT_PERIOD))) { | 1695 | + msecs_to_jiffies(HPD_STORM_DETECT_PERIOD))) { |
@@ -1586,7 +1718,10 @@ static inline void intel_hpd_irq_handler(struct drm_device *dev, | |||
1586 | * queue for otherwise the flush_work in the pageflip code will | 1718 | * queue for otherwise the flush_work in the pageflip code will |
1587 | * deadlock. | 1719 | * deadlock. |
1588 | */ | 1720 | */ |
1589 | schedule_work(&dev_priv->hotplug_work); | 1721 | if (queue_dig) |
1722 | schedule_work(&dev_priv->dig_port_work); | ||
1723 | if (queue_hp) | ||
1724 | schedule_work(&dev_priv->hotplug_work); | ||
1590 | } | 1725 | } |
1591 | 1726 | ||
1592 | static void gmbus_irq_handler(struct drm_device *dev) | 1727 | static void gmbus_irq_handler(struct drm_device *dev) |
@@ -1827,11 +1962,11 @@ static void i9xx_hpd_irq_handler(struct drm_device *dev) | |||
1827 | if (IS_G4X(dev)) { | 1962 | if (IS_G4X(dev)) { |
1828 | u32 hotplug_trigger = hotplug_status & HOTPLUG_INT_STATUS_G4X; | 1963 | u32 hotplug_trigger = hotplug_status & HOTPLUG_INT_STATUS_G4X; |
1829 | 1964 | ||
1830 | intel_hpd_irq_handler(dev, hotplug_trigger, hpd_status_g4x); | 1965 | intel_hpd_irq_handler(dev, hotplug_trigger, 0, hpd_status_g4x); |
1831 | } else { | 1966 | } else { |
1832 | u32 hotplug_trigger = hotplug_status & HOTPLUG_INT_STATUS_I915; | 1967 | u32 hotplug_trigger = hotplug_status & HOTPLUG_INT_STATUS_I915; |
1833 | 1968 | ||
1834 | intel_hpd_irq_handler(dev, hotplug_trigger, hpd_status_i915); | 1969 | intel_hpd_irq_handler(dev, hotplug_trigger, 0, hpd_status_i915); |
1835 | } | 1970 | } |
1836 | 1971 | ||
1837 | if ((IS_G4X(dev) || IS_VALLEYVIEW(dev)) && | 1972 | if ((IS_G4X(dev) || IS_VALLEYVIEW(dev)) && |
@@ -1929,8 +2064,12 @@ static void ibx_irq_handler(struct drm_device *dev, u32 pch_iir) | |||
1929 | struct drm_i915_private *dev_priv = dev->dev_private; | 2064 | struct drm_i915_private *dev_priv = dev->dev_private; |
1930 | int pipe; | 2065 | int pipe; |
1931 | u32 hotplug_trigger = pch_iir & SDE_HOTPLUG_MASK; | 2066 | u32 hotplug_trigger = pch_iir & SDE_HOTPLUG_MASK; |
2067 | u32 dig_hotplug_reg; | ||
2068 | |||
2069 | dig_hotplug_reg = I915_READ(PCH_PORT_HOTPLUG); | ||
2070 | I915_WRITE(PCH_PORT_HOTPLUG, dig_hotplug_reg); | ||
1932 | 2071 | ||
1933 | intel_hpd_irq_handler(dev, hotplug_trigger, hpd_ibx); | 2072 | intel_hpd_irq_handler(dev, hotplug_trigger, dig_hotplug_reg, hpd_ibx); |
1934 | 2073 | ||
1935 | if (pch_iir & SDE_AUDIO_POWER_MASK) { | 2074 | if (pch_iir & SDE_AUDIO_POWER_MASK) { |
1936 | int port = ffs((pch_iir & SDE_AUDIO_POWER_MASK) >> | 2075 | int port = ffs((pch_iir & SDE_AUDIO_POWER_MASK) >> |
@@ -2036,8 +2175,12 @@ static void cpt_irq_handler(struct drm_device *dev, u32 pch_iir) | |||
2036 | struct drm_i915_private *dev_priv = dev->dev_private; | 2175 | struct drm_i915_private *dev_priv = dev->dev_private; |
2037 | int pipe; | 2176 | int pipe; |
2038 | u32 hotplug_trigger = pch_iir & SDE_HOTPLUG_MASK_CPT; | 2177 | u32 hotplug_trigger = pch_iir & SDE_HOTPLUG_MASK_CPT; |
2178 | u32 dig_hotplug_reg; | ||
2179 | |||
2180 | dig_hotplug_reg = I915_READ(PCH_PORT_HOTPLUG); | ||
2181 | I915_WRITE(PCH_PORT_HOTPLUG, dig_hotplug_reg); | ||
2039 | 2182 | ||
2040 | intel_hpd_irq_handler(dev, hotplug_trigger, hpd_cpt); | 2183 | intel_hpd_irq_handler(dev, hotplug_trigger, dig_hotplug_reg, hpd_cpt); |
2041 | 2184 | ||
2042 | if (pch_iir & SDE_AUDIO_POWER_MASK_CPT) { | 2185 | if (pch_iir & SDE_AUDIO_POWER_MASK_CPT) { |
2043 | int port = ffs((pch_iir & SDE_AUDIO_POWER_MASK_CPT) >> | 2186 | int port = ffs((pch_iir & SDE_AUDIO_POWER_MASK_CPT) >> |
@@ -4358,6 +4501,7 @@ void intel_irq_init(struct drm_device *dev) | |||
4358 | struct drm_i915_private *dev_priv = dev->dev_private; | 4501 | struct drm_i915_private *dev_priv = dev->dev_private; |
4359 | 4502 | ||
4360 | INIT_WORK(&dev_priv->hotplug_work, i915_hotplug_work_func); | 4503 | INIT_WORK(&dev_priv->hotplug_work, i915_hotplug_work_func); |
4504 | INIT_WORK(&dev_priv->dig_port_work, i915_digport_work_func); | ||
4361 | INIT_WORK(&dev_priv->gpu_error.work, i915_error_work_func); | 4505 | INIT_WORK(&dev_priv->gpu_error.work, i915_error_work_func); |
4362 | INIT_WORK(&dev_priv->rps.work, gen6_pm_rps_work); | 4506 | INIT_WORK(&dev_priv->rps.work, gen6_pm_rps_work); |
4363 | INIT_WORK(&dev_priv->l3_parity.error_work, ivybridge_parity_work); | 4507 | INIT_WORK(&dev_priv->l3_parity.error_work, ivybridge_parity_work); |
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c index ded60139820e..efaf44b5ff25 100644 --- a/drivers/gpu/drm/i915/intel_ddi.c +++ b/drivers/gpu/drm/i915/intel_ddi.c | |||
@@ -1705,6 +1705,9 @@ void intel_ddi_init(struct drm_device *dev, enum port port) | |||
1705 | intel_encoder->cloneable = 0; | 1705 | intel_encoder->cloneable = 0; |
1706 | intel_encoder->hot_plug = intel_ddi_hot_plug; | 1706 | intel_encoder->hot_plug = intel_ddi_hot_plug; |
1707 | 1707 | ||
1708 | intel_dig_port->hpd_pulse = intel_dp_hpd_pulse; | ||
1709 | dev_priv->hpd_irq_port[port] = intel_dig_port; | ||
1710 | |||
1708 | if (init_dp) | 1711 | if (init_dp) |
1709 | dp_connector = intel_ddi_init_dp_connector(intel_dig_port); | 1712 | dp_connector = intel_ddi_init_dp_connector(intel_dig_port); |
1710 | 1713 | ||
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 23b62b0d9e3b..2da413cba987 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
@@ -3815,6 +3815,22 @@ intel_dp_hot_plug(struct intel_encoder *intel_encoder) | |||
3815 | intel_dp_check_link_status(intel_dp); | 3815 | intel_dp_check_link_status(intel_dp); |
3816 | } | 3816 | } |
3817 | 3817 | ||
3818 | bool | ||
3819 | intel_dp_hpd_pulse(struct intel_digital_port *intel_dig_port, bool long_hpd) | ||
3820 | { | ||
3821 | struct intel_dp *intel_dp = &intel_dig_port->dp; | ||
3822 | |||
3823 | if (long_hpd) | ||
3824 | return true; | ||
3825 | |||
3826 | /* | ||
3827 | * we'll check the link status via the normal hot plug path later - | ||
3828 | * but for short hpds we should check it now | ||
3829 | */ | ||
3830 | intel_dp_check_link_status(intel_dp); | ||
3831 | return false; | ||
3832 | } | ||
3833 | |||
3818 | /* Return which DP Port should be selected for Transcoder DP control */ | 3834 | /* Return which DP Port should be selected for Transcoder DP control */ |
3819 | int | 3835 | int |
3820 | intel_trans_dp_port_sel(struct drm_crtc *crtc) | 3836 | intel_trans_dp_port_sel(struct drm_crtc *crtc) |
@@ -4387,6 +4403,7 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port, | |||
4387 | void | 4403 | void |
4388 | intel_dp_init(struct drm_device *dev, int output_reg, enum port port) | 4404 | intel_dp_init(struct drm_device *dev, int output_reg, enum port port) |
4389 | { | 4405 | { |
4406 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
4390 | struct intel_digital_port *intel_dig_port; | 4407 | struct intel_digital_port *intel_dig_port; |
4391 | struct intel_encoder *intel_encoder; | 4408 | struct intel_encoder *intel_encoder; |
4392 | struct drm_encoder *encoder; | 4409 | struct drm_encoder *encoder; |
@@ -4443,6 +4460,9 @@ intel_dp_init(struct drm_device *dev, int output_reg, enum port port) | |||
4443 | intel_encoder->cloneable = 0; | 4460 | intel_encoder->cloneable = 0; |
4444 | intel_encoder->hot_plug = intel_dp_hot_plug; | 4461 | intel_encoder->hot_plug = intel_dp_hot_plug; |
4445 | 4462 | ||
4463 | intel_dig_port->hpd_pulse = intel_dp_hpd_pulse; | ||
4464 | dev_priv->hpd_irq_port[port] = intel_dig_port; | ||
4465 | |||
4446 | if (!intel_dp_init_connector(intel_dig_port, intel_connector)) { | 4466 | if (!intel_dp_init_connector(intel_dig_port, intel_connector)) { |
4447 | drm_encoder_cleanup(encoder); | 4467 | drm_encoder_cleanup(encoder); |
4448 | kfree(intel_dig_port); | 4468 | kfree(intel_dig_port); |
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index 0ef04ea68719..45afd25f9362 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h | |||
@@ -567,6 +567,7 @@ struct intel_digital_port { | |||
567 | u32 saved_port_bits; | 567 | u32 saved_port_bits; |
568 | struct intel_dp dp; | 568 | struct intel_dp dp; |
569 | struct intel_hdmi hdmi; | 569 | struct intel_hdmi hdmi; |
570 | bool (*hpd_pulse)(struct intel_digital_port *, bool); | ||
570 | }; | 571 | }; |
571 | 572 | ||
572 | static inline int | 573 | static inline int |
@@ -850,6 +851,8 @@ int intel_dp_sink_crc(struct intel_dp *intel_dp, u8 *crc); | |||
850 | bool intel_dp_compute_config(struct intel_encoder *encoder, | 851 | bool intel_dp_compute_config(struct intel_encoder *encoder, |
851 | struct intel_crtc_config *pipe_config); | 852 | struct intel_crtc_config *pipe_config); |
852 | bool intel_dp_is_edp(struct drm_device *dev, enum port port); | 853 | bool intel_dp_is_edp(struct drm_device *dev, enum port port); |
854 | bool intel_dp_hpd_pulse(struct intel_digital_port *intel_dig_port, | ||
855 | bool long_hpd); | ||
853 | void intel_edp_backlight_on(struct intel_dp *intel_dp); | 856 | void intel_edp_backlight_on(struct intel_dp *intel_dp); |
854 | void intel_edp_backlight_off(struct intel_dp *intel_dp); | 857 | void intel_edp_backlight_off(struct intel_dp *intel_dp); |
855 | void intel_edp_panel_vdd_on(struct intel_dp *intel_dp); | 858 | void intel_edp_panel_vdd_on(struct intel_dp *intel_dp); |
@@ -861,7 +864,6 @@ void intel_dp_set_drrs_state(struct drm_device *dev, int refresh_rate); | |||
861 | void intel_edp_psr_exit(struct drm_device *dev); | 864 | void intel_edp_psr_exit(struct drm_device *dev); |
862 | void intel_edp_psr_init(struct drm_device *dev); | 865 | void intel_edp_psr_init(struct drm_device *dev); |
863 | 866 | ||
864 | |||
865 | /* intel_dsi.c */ | 867 | /* intel_dsi.c */ |
866 | void intel_dsi_init(struct drm_device *dev); | 868 | void intel_dsi_init(struct drm_device *dev); |
867 | 869 | ||