|
@@ -45,6 +45,9 @@
|
|
|
|
|
|
struct intel_crt {
|
|
|
struct intel_encoder base;
|
|
|
+ /* DPMS state is stored in the connector, which we need in the
|
|
|
+ * encoder's enable/disable callbacks */
|
|
|
+ struct intel_connector *connector;
|
|
|
bool force_hotplug_required;
|
|
|
u32 adpa_reg;
|
|
|
};
|
|
@@ -81,29 +84,6 @@ static bool intel_crt_get_hw_state(struct intel_encoder *encoder,
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
-static void intel_disable_crt(struct intel_encoder *encoder)
|
|
|
-{
|
|
|
- struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
|
|
|
- struct intel_crt *crt = intel_encoder_to_crt(encoder);
|
|
|
- u32 temp;
|
|
|
-
|
|
|
- temp = I915_READ(crt->adpa_reg);
|
|
|
- temp |= ADPA_HSYNC_CNTL_DISABLE | ADPA_VSYNC_CNTL_DISABLE;
|
|
|
- temp &= ~ADPA_DAC_ENABLE;
|
|
|
- I915_WRITE(crt->adpa_reg, temp);
|
|
|
-}
|
|
|
-
|
|
|
-static void intel_enable_crt(struct intel_encoder *encoder)
|
|
|
-{
|
|
|
- struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
|
|
|
- struct intel_crt *crt = intel_encoder_to_crt(encoder);
|
|
|
- u32 temp;
|
|
|
-
|
|
|
- temp = I915_READ(crt->adpa_reg);
|
|
|
- temp |= ADPA_DAC_ENABLE;
|
|
|
- I915_WRITE(crt->adpa_reg, temp);
|
|
|
-}
|
|
|
-
|
|
|
/* Note: The caller is required to filter out dpms modes not supported by the
|
|
|
* platform. */
|
|
|
static void intel_crt_set_dpms(struct intel_encoder *encoder, int mode)
|
|
@@ -135,6 +115,19 @@ static void intel_crt_set_dpms(struct intel_encoder *encoder, int mode)
|
|
|
I915_WRITE(crt->adpa_reg, temp);
|
|
|
}
|
|
|
|
|
|
+static void intel_disable_crt(struct intel_encoder *encoder)
|
|
|
+{
|
|
|
+ intel_crt_set_dpms(encoder, DRM_MODE_DPMS_OFF);
|
|
|
+}
|
|
|
+
|
|
|
+static void intel_enable_crt(struct intel_encoder *encoder)
|
|
|
+{
|
|
|
+ struct intel_crt *crt = intel_encoder_to_crt(encoder);
|
|
|
+
|
|
|
+ intel_crt_set_dpms(encoder, crt->connector->base.dpms);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
static void intel_crt_dpms(struct drm_connector *connector, int mode)
|
|
|
{
|
|
|
struct drm_device *dev = connector->dev;
|
|
@@ -746,6 +739,7 @@ void intel_crt_init(struct drm_device *dev)
|
|
|
}
|
|
|
|
|
|
connector = &intel_connector->base;
|
|
|
+ crt->connector = intel_connector;
|
|
|
drm_connector_init(dev, &intel_connector->base,
|
|
|
&intel_crt_connector_funcs, DRM_MODE_CONNECTOR_VGA);
|
|
|
|