diff options
author | Jani Nikula <jani.nikula@intel.com> | 2012-10-19 07:51:49 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-10-22 12:31:20 -0400 |
commit | 1d508706ea848e32ff20bb311f4325896c6eb7b9 (patch) | |
tree | cfd2760c7a693fceaa28e06001e31ca0f00c51fe | |
parent | f8779fda5776dfb9369ec09fc21745c9d8057e81 (diff) |
drm/i915: Create generic intel_panel for LVDS and eDP
Create a generic struct intel_panel for sharing a data structure and code
between eDP and LVDS panels. Add the new struct to intel_connector so that
later on we can have generic EDID and mode reading functions with EDID
caching that transparently fallback to fixed mode when EDID is not
available.
Add intel_panel as a dummy first, and move data (such as the mentioned
fixed mode) to it in later patches.
Based on earlier work by Chris Wilson <chris@chris-wilson.co.uk>
CC: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
[danvet: Fixup tiny conflict in intel_dp_destroy.]
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 9 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_drv.h | 9 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_lvds.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_panel.c | 9 |
4 files changed, 27 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index be47efff90f0..83a0bc0b7e93 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
@@ -2497,9 +2497,12 @@ intel_dp_destroy(struct drm_connector *connector) | |||
2497 | { | 2497 | { |
2498 | struct drm_device *dev = connector->dev; | 2498 | struct drm_device *dev = connector->dev; |
2499 | struct intel_dp *intel_dp = intel_attached_dp(connector); | 2499 | struct intel_dp *intel_dp = intel_attached_dp(connector); |
2500 | struct intel_connector *intel_connector = to_intel_connector(connector); | ||
2500 | 2501 | ||
2501 | if (is_edp(intel_dp)) | 2502 | if (is_edp(intel_dp)) { |
2502 | intel_panel_destroy_backlight(dev); | 2503 | intel_panel_destroy_backlight(dev); |
2504 | intel_panel_fini(&intel_connector->panel); | ||
2505 | } | ||
2503 | 2506 | ||
2504 | drm_sysfs_connector_remove(connector); | 2507 | drm_sysfs_connector_remove(connector); |
2505 | drm_connector_cleanup(connector); | 2508 | drm_connector_cleanup(connector); |
@@ -2828,8 +2831,10 @@ intel_dp_init(struct drm_device *dev, int output_reg, enum port port) | |||
2828 | 2831 | ||
2829 | intel_encoder->hot_plug = intel_dp_hot_plug; | 2832 | intel_encoder->hot_plug = intel_dp_hot_plug; |
2830 | 2833 | ||
2831 | if (is_edp(intel_dp)) | 2834 | if (is_edp(intel_dp)) { |
2835 | intel_panel_init(&intel_connector->panel); | ||
2832 | intel_panel_setup_backlight(connector); | 2836 | intel_panel_setup_backlight(connector); |
2837 | } | ||
2833 | 2838 | ||
2834 | intel_dp_add_properties(intel_dp, connector); | 2839 | intel_dp_add_properties(intel_dp, connector); |
2835 | 2840 | ||
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index fa388fdbfe08..b37bf28d830a 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h | |||
@@ -163,6 +163,9 @@ struct intel_encoder { | |||
163 | int crtc_mask; | 163 | int crtc_mask; |
164 | }; | 164 | }; |
165 | 165 | ||
166 | struct intel_panel { | ||
167 | }; | ||
168 | |||
166 | struct intel_connector { | 169 | struct intel_connector { |
167 | struct drm_connector base; | 170 | struct drm_connector base; |
168 | /* | 171 | /* |
@@ -179,6 +182,9 @@ struct intel_connector { | |||
179 | /* Reads out the current hw, returning true if the connector is enabled | 182 | /* Reads out the current hw, returning true if the connector is enabled |
180 | * and active (i.e. dpms ON state). */ | 183 | * and active (i.e. dpms ON state). */ |
181 | bool (*get_hw_state)(struct intel_connector *); | 184 | bool (*get_hw_state)(struct intel_connector *); |
185 | |||
186 | /* Panel info for eDP and LVDS */ | ||
187 | struct intel_panel panel; | ||
182 | }; | 188 | }; |
183 | 189 | ||
184 | struct intel_crtc { | 190 | struct intel_crtc { |
@@ -436,6 +442,9 @@ extern void intel_flush_display_plane(struct drm_i915_private *dev_priv, | |||
436 | enum plane plane); | 442 | enum plane plane); |
437 | 443 | ||
438 | /* intel_panel.c */ | 444 | /* intel_panel.c */ |
445 | extern int intel_panel_init(struct intel_panel *panel); | ||
446 | extern void intel_panel_fini(struct intel_panel *panel); | ||
447 | |||
439 | extern void intel_fixed_panel_mode(struct drm_display_mode *fixed_mode, | 448 | extern void intel_fixed_panel_mode(struct drm_display_mode *fixed_mode, |
440 | struct drm_display_mode *adjusted_mode); | 449 | struct drm_display_mode *adjusted_mode); |
441 | extern void intel_pch_panel_fitting(struct drm_device *dev, | 450 | extern void intel_pch_panel_fitting(struct drm_device *dev, |
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c index 6435bf3ae56c..6b31e2556de0 100644 --- a/drivers/gpu/drm/i915/intel_lvds.c +++ b/drivers/gpu/drm/i915/intel_lvds.c | |||
@@ -554,6 +554,7 @@ static void intel_lvds_destroy(struct drm_connector *connector) | |||
554 | acpi_lid_notifier_unregister(&lvds_connector->lid_notifier); | 554 | acpi_lid_notifier_unregister(&lvds_connector->lid_notifier); |
555 | 555 | ||
556 | intel_panel_destroy_backlight(connector->dev); | 556 | intel_panel_destroy_backlight(connector->dev); |
557 | intel_panel_fini(&lvds_connector->base.panel); | ||
557 | 558 | ||
558 | drm_sysfs_connector_remove(connector); | 559 | drm_sysfs_connector_remove(connector); |
559 | drm_connector_cleanup(connector); | 560 | drm_connector_cleanup(connector); |
@@ -1106,6 +1107,7 @@ out: | |||
1106 | } | 1107 | } |
1107 | drm_sysfs_connector_add(connector); | 1108 | drm_sysfs_connector_add(connector); |
1108 | 1109 | ||
1110 | intel_panel_init(&intel_connector->panel); | ||
1109 | intel_panel_setup_backlight(connector); | 1111 | intel_panel_setup_backlight(connector); |
1110 | 1112 | ||
1111 | return true; | 1113 | return true; |
diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c index d9752a3bf1f8..4c64ebc3f743 100644 --- a/drivers/gpu/drm/i915/intel_panel.c +++ b/drivers/gpu/drm/i915/intel_panel.c | |||
@@ -464,3 +464,12 @@ void intel_panel_destroy_backlight(struct drm_device *dev) | |||
464 | return; | 464 | return; |
465 | } | 465 | } |
466 | #endif | 466 | #endif |
467 | |||
468 | int intel_panel_init(struct intel_panel *panel) | ||
469 | { | ||
470 | return 0; | ||
471 | } | ||
472 | |||
473 | void intel_panel_fini(struct intel_panel *panel) | ||
474 | { | ||
475 | } | ||