Subversion Repositories Kolibri OS

Rev

Rev 6660 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6660 Rev 6937
Line 42... Line 42...
42
 
42
 
43
/* Private structure for the integrated LVDS support */
43
/* Private structure for the integrated LVDS support */
44
struct intel_lvds_connector {
44
struct intel_lvds_connector {
Line 45... Line 45...
45
	struct intel_connector base;
45
	struct intel_connector base;
46
 
46
 
Line 47... Line 47...
47
//	struct notifier_block lid_notifier;
47
	struct notifier_block lid_notifier;
48
};
48
};
Line 49... Line 49...
49
 
49
 
50
struct intel_lvds_encoder {
50
struct intel_lvds_encoder {
51
	struct intel_encoder base;
51
	struct intel_encoder base;
Line 52... Line 52...
52
 
52
 
53
	bool is_dual_link;
53
	bool is_dual_link;
Line 73... Line 73...
73
	struct drm_device *dev = encoder->base.dev;
73
	struct drm_device *dev = encoder->base.dev;
74
	struct drm_i915_private *dev_priv = dev->dev_private;
74
	struct drm_i915_private *dev_priv = dev->dev_private;
75
	struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base);
75
	struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base);
76
	enum intel_display_power_domain power_domain;
76
	enum intel_display_power_domain power_domain;
77
	u32 tmp;
77
	u32 tmp;
-
 
78
	bool ret;
Line 78... Line 79...
78
 
79
 
79
	power_domain = intel_display_port_power_domain(encoder);
80
	power_domain = intel_display_port_power_domain(encoder);
80
	if (!intel_display_power_is_enabled(dev_priv, power_domain))
81
	if (!intel_display_power_get_if_enabled(dev_priv, power_domain))
Line -... Line 82...
-
 
82
		return false;
-
 
83
 
81
		return false;
84
	ret = false;
Line 82... Line 85...
82
 
85
 
83
	tmp = I915_READ(lvds_encoder->reg);
86
	tmp = I915_READ(lvds_encoder->reg);
Line 84... Line 87...
84
 
87
 
85
	if (!(tmp & LVDS_PORT_EN))
88
	if (!(tmp & LVDS_PORT_EN))
86
		return false;
89
		goto out;
87
 
90
 
Line 88... Line 91...
88
	if (HAS_PCH_CPT(dev))
91
	if (HAS_PCH_CPT(dev))
-
 
92
		*pipe = PORT_TO_PIPE_CPT(tmp);
-
 
93
	else
-
 
94
		*pipe = PORT_TO_PIPE(tmp);
-
 
95
 
-
 
96
	ret = true;
89
		*pipe = PORT_TO_PIPE_CPT(tmp);
97
 
Line 90... Line 98...
90
	else
98
out:
91
		*pipe = PORT_TO_PIPE(tmp);
99
	intel_display_power_put(dev_priv, power_domain);
92
 
100
 
Line 208... Line 216...
208
	struct drm_device *dev = encoder->base.dev;
216
	struct drm_device *dev = encoder->base.dev;
209
	struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base);
217
	struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base);
210
	struct intel_connector *intel_connector =
218
	struct intel_connector *intel_connector =
211
		&lvds_encoder->attached_connector->base;
219
		&lvds_encoder->attached_connector->base;
212
	struct drm_i915_private *dev_priv = dev->dev_private;
220
	struct drm_i915_private *dev_priv = dev->dev_private;
213
	u32 ctl_reg, stat_reg;
221
	i915_reg_t ctl_reg, stat_reg;
Line 214... Line 222...
214
 
222
 
215
	if (HAS_PCH_SPLIT(dev)) {
223
	if (HAS_PCH_SPLIT(dev)) {
216
		ctl_reg = PCH_PP_CONTROL;
224
		ctl_reg = PCH_PP_CONTROL;
217
		stat_reg = PCH_PP_STATUS;
225
		stat_reg = PCH_PP_STATUS;
Line 233... Line 241...
233
static void intel_disable_lvds(struct intel_encoder *encoder)
241
static void intel_disable_lvds(struct intel_encoder *encoder)
234
{
242
{
235
	struct drm_device *dev = encoder->base.dev;
243
	struct drm_device *dev = encoder->base.dev;
236
	struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base);
244
	struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base);
237
	struct drm_i915_private *dev_priv = dev->dev_private;
245
	struct drm_i915_private *dev_priv = dev->dev_private;
238
	u32 ctl_reg, stat_reg;
246
	i915_reg_t ctl_reg, stat_reg;
Line 239... Line 247...
239
 
247
 
240
	if (HAS_PCH_SPLIT(dev)) {
248
	if (HAS_PCH_SPLIT(dev)) {
241
		ctl_reg = PCH_PP_CONTROL;
249
		ctl_reg = PCH_PP_CONTROL;
242
		stat_reg = PCH_PP_STATUS;
250
		stat_reg = PCH_PP_STATUS;
Line 937... Line 945...
937
	struct drm_display_mode *scan; /* *modes, *bios_mode; */
945
	struct drm_display_mode *scan; /* *modes, *bios_mode; */
938
	struct drm_display_mode *fixed_mode = NULL;
946
	struct drm_display_mode *fixed_mode = NULL;
939
	struct drm_display_mode *downclock_mode = NULL;
947
	struct drm_display_mode *downclock_mode = NULL;
940
	struct edid *edid;
948
	struct edid *edid;
941
	struct drm_crtc *crtc;
949
	struct drm_crtc *crtc;
942
	u32 lvds_reg;
950
	i915_reg_t lvds_reg;
943
	u32 lvds;
951
	u32 lvds;
944
	int pipe;
952
	int pipe;
945
	u8 pin;
953
	u8 pin;
Line 946... Line 954...
946
 
954
 
Line 1023... Line 1031...
1023
	connector = &intel_connector->base;
1031
	connector = &intel_connector->base;
1024
	drm_connector_init(dev, &intel_connector->base, &intel_lvds_connector_funcs,
1032
	drm_connector_init(dev, &intel_connector->base, &intel_lvds_connector_funcs,
1025
			   DRM_MODE_CONNECTOR_LVDS);
1033
			   DRM_MODE_CONNECTOR_LVDS);
Line 1026... Line 1034...
1026
 
1034
 
1027
	drm_encoder_init(dev, &intel_encoder->base, &intel_lvds_enc_funcs,
1035
	drm_encoder_init(dev, &intel_encoder->base, &intel_lvds_enc_funcs,
Line 1028... Line 1036...
1028
			 DRM_MODE_ENCODER_LVDS);
1036
			 DRM_MODE_ENCODER_LVDS, NULL);
1029
 
1037
 
1030
	intel_encoder->enable = intel_enable_lvds;
1038
	intel_encoder->enable = intel_enable_lvds;
1031
	intel_encoder->pre_enable = intel_pre_enable_lvds;
1039
	intel_encoder->pre_enable = intel_pre_enable_lvds;
Line 1162... Line 1170...
1162
 
1170
 
1163
	lvds_encoder->is_dual_link = compute_is_dual_link_lvds(lvds_encoder);
1171
	lvds_encoder->is_dual_link = compute_is_dual_link_lvds(lvds_encoder);
1164
	DRM_DEBUG_KMS("detected %s-link lvds configuration\n",
1172
	DRM_DEBUG_KMS("detected %s-link lvds configuration\n",
Line 1165... Line 1173...
1165
		      lvds_encoder->is_dual_link ? "dual" : "single");
1173
		      lvds_encoder->is_dual_link ? "dual" : "single");
1166
 
-
 
Line 1167... Line 1174...
1167
	lvds_encoder->a3_power = I915_READ(lvds_encoder->reg) &
1174
 
Line 1168... Line 1175...
1168
				 LVDS_A3_POWER_MASK;
1175
	lvds_encoder->a3_power = lvds & LVDS_A3_POWER_MASK;