Subversion Repositories Kolibri OS

Rev

Rev 5354 | Rev 6937 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5354 Rev 6084
1
/*
1
/*
2
 * Copyright © 2013 Intel Corporation
2
 * Copyright © 2013 Intel Corporation
3
 *
3
 *
4
 * Permission is hereby granted, free of charge, to any person obtaining a
4
 * Permission is hereby granted, free of charge, to any person obtaining a
5
 * copy of this software and associated documentation files (the "Software"),
5
 * copy of this software and associated documentation files (the "Software"),
6
 * to deal in the Software without restriction, including without limitation
6
 * to deal in the Software without restriction, including without limitation
7
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
7
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
 * and/or sell copies of the Software, and to permit persons to whom the
8
 * and/or sell copies of the Software, and to permit persons to whom the
9
 * Software is furnished to do so, subject to the following conditions:
9
 * Software is furnished to do so, subject to the following conditions:
10
 *
10
 *
11
 * The above copyright notice and this permission notice (including the next
11
 * The above copyright notice and this permission notice (including the next
12
 * paragraph) shall be included in all copies or substantial portions of the
12
 * paragraph) shall be included in all copies or substantial portions of the
13
 * Software.
13
 * Software.
14
 *
14
 *
15
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
 * DEALINGS IN THE SOFTWARE.
21
 * DEALINGS IN THE SOFTWARE.
22
 *
22
 *
23
 * Author: Jani Nikula 
23
 * Author: Jani Nikula 
24
 */
24
 */
25
 
25
 
26
#include 
26
#include 
-
 
27
#include 
27
#include 
28
#include 
28
#include 
29
#include 
29
#include 
30
#include 
-
 
31
#include 
-
 
32
#include 
30
#include 
33
#include 
-
 
34
#include 
31
#include "i915_drv.h"
35
#include "i915_drv.h"
32
#include "intel_drv.h"
36
#include "intel_drv.h"
33
#include "intel_dsi.h"
37
#include "intel_dsi.h"
34
#include "intel_dsi_cmd.h"
-
 
35
 
38
 
-
 
39
static const struct {
36
/* the sub-encoders aka panel drivers */
40
	u16 panel_id;
-
 
41
	struct drm_panel * (*init)(struct intel_dsi *intel_dsi, u16 panel_id);
37
static const struct intel_dsi_device intel_dsi_devices[] = {
42
} intel_dsi_drivers[] = {
38
	{
43
	{
39
		.panel_id = MIPI_DSI_GENERIC_PANEL_ID,
-
 
40
		.name = "vbt-generic-dsi-vid-mode-display",
44
		.panel_id = MIPI_DSI_GENERIC_PANEL_ID,
41
		.dev_ops = &vbt_generic_dsi_display_ops,
45
		.init = vbt_panel_init,
42
	},
46
	},
43
};
47
};
-
 
48
 
-
 
49
static void wait_for_dsi_fifo_empty(struct intel_dsi *intel_dsi, enum port port)
-
 
50
{
-
 
51
	struct drm_encoder *encoder = &intel_dsi->base.base;
-
 
52
	struct drm_device *dev = encoder->dev;
-
 
53
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
54
	u32 mask;
-
 
55
 
-
 
56
	mask = LP_CTRL_FIFO_EMPTY | HS_CTRL_FIFO_EMPTY |
-
 
57
		LP_DATA_FIFO_EMPTY | HS_DATA_FIFO_EMPTY;
-
 
58
 
-
 
59
	if (wait_for((I915_READ(MIPI_GEN_FIFO_STAT(port)) & mask) == mask, 100))
-
 
60
		DRM_ERROR("DPI FIFOs are not empty\n");
-
 
61
}
-
 
62
 
-
 
63
static void write_data(struct drm_i915_private *dev_priv, u32 reg,
-
 
64
		       const u8 *data, u32 len)
-
 
65
{
-
 
66
	u32 i, j;
-
 
67
 
-
 
68
	for (i = 0; i < len; i += 4) {
-
 
69
		u32 val = 0;
-
 
70
 
-
 
71
		for (j = 0; j < min_t(u32, len - i, 4); j++)
-
 
72
			val |= *data++ << 8 * j;
-
 
73
 
-
 
74
		I915_WRITE(reg, val);
-
 
75
	}
-
 
76
}
-
 
77
 
-
 
78
static void read_data(struct drm_i915_private *dev_priv, u32 reg,
-
 
79
		      u8 *data, u32 len)
-
 
80
{
-
 
81
	u32 i, j;
-
 
82
 
-
 
83
	for (i = 0; i < len; i += 4) {
-
 
84
		u32 val = I915_READ(reg);
-
 
85
 
-
 
86
		for (j = 0; j < min_t(u32, len - i, 4); j++)
-
 
87
			*data++ = val >> 8 * j;
-
 
88
	}
-
 
89
}
-
 
90
 
-
 
91
static ssize_t intel_dsi_host_transfer(struct mipi_dsi_host *host,
-
 
92
				       const struct mipi_dsi_msg *msg)
-
 
93
{
-
 
94
	struct intel_dsi_host *intel_dsi_host = to_intel_dsi_host(host);
-
 
95
	struct drm_device *dev = intel_dsi_host->intel_dsi->base.base.dev;
-
 
96
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
97
	enum port port = intel_dsi_host->port;
-
 
98
	struct mipi_dsi_packet packet;
-
 
99
	ssize_t ret;
-
 
100
	const u8 *header, *data;
-
 
101
	u32 data_reg, data_mask, ctrl_reg, ctrl_mask;
-
 
102
 
-
 
103
	ret = mipi_dsi_create_packet(&packet, msg);
-
 
104
	if (ret < 0)
-
 
105
		return ret;
-
 
106
 
-
 
107
	header = packet.header;
-
 
108
	data = packet.payload;
-
 
109
 
-
 
110
	if (msg->flags & MIPI_DSI_MSG_USE_LPM) {
-
 
111
		data_reg = MIPI_LP_GEN_DATA(port);
-
 
112
		data_mask = LP_DATA_FIFO_FULL;
-
 
113
		ctrl_reg = MIPI_LP_GEN_CTRL(port);
-
 
114
		ctrl_mask = LP_CTRL_FIFO_FULL;
-
 
115
	} else {
-
 
116
		data_reg = MIPI_HS_GEN_DATA(port);
-
 
117
		data_mask = HS_DATA_FIFO_FULL;
-
 
118
		ctrl_reg = MIPI_HS_GEN_CTRL(port);
-
 
119
		ctrl_mask = HS_CTRL_FIFO_FULL;
-
 
120
	}
-
 
121
 
-
 
122
	/* note: this is never true for reads */
-
 
123
	if (packet.payload_length) {
-
 
124
 
-
 
125
		if (wait_for((I915_READ(MIPI_GEN_FIFO_STAT(port)) & data_mask) == 0, 50))
-
 
126
			DRM_ERROR("Timeout waiting for HS/LP DATA FIFO !full\n");
-
 
127
 
-
 
128
		write_data(dev_priv, data_reg, packet.payload,
-
 
129
			   packet.payload_length);
-
 
130
	}
-
 
131
 
-
 
132
	if (msg->rx_len) {
-
 
133
		I915_WRITE(MIPI_INTR_STAT(port), GEN_READ_DATA_AVAIL);
-
 
134
	}
-
 
135
 
-
 
136
	if (wait_for((I915_READ(MIPI_GEN_FIFO_STAT(port)) & ctrl_mask) == 0, 50)) {
-
 
137
		DRM_ERROR("Timeout waiting for HS/LP CTRL FIFO !full\n");
-
 
138
	}
-
 
139
 
-
 
140
	I915_WRITE(ctrl_reg, header[2] << 16 | header[1] << 8 | header[0]);
-
 
141
 
-
 
142
	/* ->rx_len is set only for reads */
-
 
143
	if (msg->rx_len) {
-
 
144
		data_mask = GEN_READ_DATA_AVAIL;
-
 
145
		if (wait_for((I915_READ(MIPI_INTR_STAT(port)) & data_mask) == data_mask, 50))
-
 
146
			DRM_ERROR("Timeout waiting for read data.\n");
-
 
147
 
-
 
148
		read_data(dev_priv, data_reg, msg->rx_buf, msg->rx_len);
-
 
149
	}
-
 
150
 
-
 
151
	/* XXX: fix for reads and writes */
-
 
152
	return 4 + packet.payload_length;
-
 
153
}
-
 
154
 
-
 
155
static int intel_dsi_host_attach(struct mipi_dsi_host *host,
-
 
156
				 struct mipi_dsi_device *dsi)
-
 
157
{
-
 
158
	return 0;
-
 
159
}
-
 
160
 
-
 
161
static int intel_dsi_host_detach(struct mipi_dsi_host *host,
-
 
162
				 struct mipi_dsi_device *dsi)
-
 
163
{
-
 
164
	return 0;
-
 
165
}
-
 
166
 
-
 
167
static const struct mipi_dsi_host_ops intel_dsi_host_ops = {
-
 
168
	.attach = intel_dsi_host_attach,
-
 
169
	.detach = intel_dsi_host_detach,
-
 
170
	.transfer = intel_dsi_host_transfer,
-
 
171
};
-
 
172
 
-
 
173
static struct intel_dsi_host *intel_dsi_host_init(struct intel_dsi *intel_dsi,
-
 
174
						  enum port port)
-
 
175
{
-
 
176
	struct intel_dsi_host *host;
-
 
177
	struct mipi_dsi_device *device;
-
 
178
 
-
 
179
	host = kzalloc(sizeof(*host), GFP_KERNEL);
-
 
180
	if (!host)
-
 
181
		return NULL;
-
 
182
 
-
 
183
	host->base.ops = &intel_dsi_host_ops;
-
 
184
	host->intel_dsi = intel_dsi;
-
 
185
	host->port = port;
-
 
186
 
-
 
187
	/*
-
 
188
	 * We should call mipi_dsi_host_register(&host->base) here, but we don't
-
 
189
	 * have a host->dev, and we don't have OF stuff either. So just use the
-
 
190
	 * dsi framework as a library and hope for the best. Create the dsi
-
 
191
	 * devices by ourselves here too. Need to be careful though, because we
-
 
192
	 * don't initialize any of the driver model devices here.
-
 
193
	 */
-
 
194
	device = kzalloc(sizeof(*device), GFP_KERNEL);
-
 
195
	if (!device) {
-
 
196
		kfree(host);
-
 
197
		return NULL;
-
 
198
	}
-
 
199
 
-
 
200
	device->host = &host->base;
-
 
201
	host->device = device;
-
 
202
 
-
 
203
	return host;
-
 
204
}
-
 
205
 
-
 
206
/*
-
 
207
 * send a video mode command
-
 
208
 *
-
 
209
 * XXX: commands with data in MIPI_DPI_DATA?
-
 
210
 */
-
 
211
static int dpi_send_cmd(struct intel_dsi *intel_dsi, u32 cmd, bool hs,
-
 
212
			enum port port)
-
 
213
{
-
 
214
	struct drm_encoder *encoder = &intel_dsi->base.base;
-
 
215
	struct drm_device *dev = encoder->dev;
-
 
216
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
217
	u32 mask;
-
 
218
 
-
 
219
	/* XXX: pipe, hs */
-
 
220
	if (hs)
-
 
221
		cmd &= ~DPI_LP_MODE;
-
 
222
	else
-
 
223
		cmd |= DPI_LP_MODE;
-
 
224
 
-
 
225
	/* clear bit */
-
 
226
	I915_WRITE(MIPI_INTR_STAT(port), SPL_PKT_SENT_INTERRUPT);
-
 
227
 
-
 
228
	/* XXX: old code skips write if control unchanged */
-
 
229
	if (cmd == I915_READ(MIPI_DPI_CONTROL(port)))
-
 
230
		DRM_ERROR("Same special packet %02x twice in a row.\n", cmd);
-
 
231
 
-
 
232
	I915_WRITE(MIPI_DPI_CONTROL(port), cmd);
-
 
233
 
-
 
234
	mask = SPL_PKT_SENT_INTERRUPT;
-
 
235
	if (wait_for((I915_READ(MIPI_INTR_STAT(port)) & mask) == mask, 100))
-
 
236
		DRM_ERROR("Video mode command 0x%08x send failed.\n", cmd);
-
 
237
 
-
 
238
	return 0;
-
 
239
}
44
 
240
 
45
static void band_gap_reset(struct drm_i915_private *dev_priv)
241
static void band_gap_reset(struct drm_i915_private *dev_priv)
46
{
242
{
47
	mutex_lock(&dev_priv->dpio_lock);
243
	mutex_lock(&dev_priv->sb_lock);
48
 
244
 
49
	vlv_flisdsi_write(dev_priv, 0x08, 0x0001);
245
	vlv_flisdsi_write(dev_priv, 0x08, 0x0001);
50
	vlv_flisdsi_write(dev_priv, 0x0F, 0x0005);
246
	vlv_flisdsi_write(dev_priv, 0x0F, 0x0005);
51
	vlv_flisdsi_write(dev_priv, 0x0F, 0x0025);
247
	vlv_flisdsi_write(dev_priv, 0x0F, 0x0025);
52
	udelay(150);
248
	udelay(150);
53
	vlv_flisdsi_write(dev_priv, 0x0F, 0x0000);
249
	vlv_flisdsi_write(dev_priv, 0x0F, 0x0000);
54
	vlv_flisdsi_write(dev_priv, 0x08, 0x0000);
250
	vlv_flisdsi_write(dev_priv, 0x08, 0x0000);
55
 
251
 
56
	mutex_unlock(&dev_priv->dpio_lock);
-
 
57
}
-
 
58
 
-
 
59
static struct intel_dsi *intel_attached_dsi(struct drm_connector *connector)
-
 
60
{
-
 
61
	return container_of(intel_attached_encoder(connector),
-
 
62
			    struct intel_dsi, base);
252
	mutex_unlock(&dev_priv->sb_lock);
63
}
253
}
64
 
254
 
65
static inline bool is_vid_mode(struct intel_dsi *intel_dsi)
255
static inline bool is_vid_mode(struct intel_dsi *intel_dsi)
66
{
256
{
67
	return intel_dsi->operation_mode == INTEL_DSI_VIDEO_MODE;
257
	return intel_dsi->operation_mode == INTEL_DSI_VIDEO_MODE;
68
}
258
}
69
 
259
 
70
static inline bool is_cmd_mode(struct intel_dsi *intel_dsi)
260
static inline bool is_cmd_mode(struct intel_dsi *intel_dsi)
71
{
261
{
72
	return intel_dsi->operation_mode == INTEL_DSI_COMMAND_MODE;
262
	return intel_dsi->operation_mode == INTEL_DSI_COMMAND_MODE;
73
}
263
}
74
 
-
 
75
static void intel_dsi_hot_plug(struct intel_encoder *encoder)
-
 
76
{
-
 
77
	DRM_DEBUG_KMS("\n");
-
 
78
}
-
 
79
 
264
 
80
static bool intel_dsi_compute_config(struct intel_encoder *encoder,
265
static bool intel_dsi_compute_config(struct intel_encoder *encoder,
81
				     struct intel_crtc_config *config)
266
				     struct intel_crtc_state *config)
82
{
267
{
83
	struct intel_dsi *intel_dsi = container_of(encoder, struct intel_dsi,
268
	struct intel_dsi *intel_dsi = container_of(encoder, struct intel_dsi,
84
						   base);
269
						   base);
85
	struct intel_connector *intel_connector = intel_dsi->attached_connector;
270
	struct intel_connector *intel_connector = intel_dsi->attached_connector;
86
	struct drm_display_mode *fixed_mode = intel_connector->panel.fixed_mode;
271
	struct drm_display_mode *fixed_mode = intel_connector->panel.fixed_mode;
87
	struct drm_display_mode *adjusted_mode = &config->adjusted_mode;
272
	struct drm_display_mode *adjusted_mode = &config->base.adjusted_mode;
88
	struct drm_display_mode *mode = &config->requested_mode;
-
 
89
 
273
 
90
	DRM_DEBUG_KMS("\n");
274
	DRM_DEBUG_KMS("\n");
91
 
275
 
92
	if (fixed_mode)
276
	if (fixed_mode)
93
		intel_fixed_panel_mode(fixed_mode, adjusted_mode);
277
		intel_fixed_panel_mode(fixed_mode, adjusted_mode);
94
 
278
 
95
	/* DSI uses short packets for sync events, so clear mode flags for DSI */
279
	/* DSI uses short packets for sync events, so clear mode flags for DSI */
96
	adjusted_mode->flags = 0;
280
	adjusted_mode->flags = 0;
97
 
-
 
98
	if (intel_dsi->dev.dev_ops->mode_fixup)
-
 
99
		return intel_dsi->dev.dev_ops->mode_fixup(&intel_dsi->dev,
-
 
100
							  mode, adjusted_mode);
-
 
101
 
281
 
102
	return true;
282
	return true;
103
}
283
}
104
 
284
 
105
static void intel_dsi_device_ready(struct intel_encoder *encoder)
285
static void bxt_dsi_device_ready(struct intel_encoder *encoder)
106
{
286
{
107
	struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
287
	struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
108
	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
288
	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
109
	int pipe = intel_crtc->pipe;
289
	enum port port;
110
	u32 val;
290
	u32 val;
111
 
291
 
112
	DRM_DEBUG_KMS("\n");
292
	DRM_DEBUG_KMS("\n");
-
 
293
 
-
 
294
	/* Exit Low power state in 4 steps*/
-
 
295
	for_each_dsi_port(port, intel_dsi->ports) {
-
 
296
 
-
 
297
		/* 1. Enable MIPI PHY transparent latch */
-
 
298
		val = I915_READ(BXT_MIPI_PORT_CTRL(port));
-
 
299
		I915_WRITE(BXT_MIPI_PORT_CTRL(port), val | LP_OUTPUT_HOLD);
-
 
300
		usleep_range(2000, 2500);
-
 
301
 
-
 
302
		/* 2. Enter ULPS */
-
 
303
		val = I915_READ(MIPI_DEVICE_READY(port));
-
 
304
		val &= ~ULPS_STATE_MASK;
-
 
305
		val |= (ULPS_STATE_ENTER | DEVICE_READY);
-
 
306
		I915_WRITE(MIPI_DEVICE_READY(port), val);
-
 
307
		usleep_range(2, 3);
-
 
308
 
-
 
309
		/* 3. Exit ULPS */
-
 
310
		val = I915_READ(MIPI_DEVICE_READY(port));
-
 
311
		val &= ~ULPS_STATE_MASK;
-
 
312
		val |= (ULPS_STATE_EXIT | DEVICE_READY);
-
 
313
		I915_WRITE(MIPI_DEVICE_READY(port), val);
-
 
314
		usleep_range(1000, 1500);
-
 
315
 
-
 
316
		/* Clear ULPS and set device ready */
-
 
317
		val = I915_READ(MIPI_DEVICE_READY(port));
-
 
318
		val &= ~ULPS_STATE_MASK;
-
 
319
		val |= DEVICE_READY;
-
 
320
		I915_WRITE(MIPI_DEVICE_READY(port), val);
-
 
321
	}
-
 
322
}
-
 
323
 
-
 
324
static void vlv_dsi_device_ready(struct intel_encoder *encoder)
-
 
325
{
-
 
326
	struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
-
 
327
	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
-
 
328
	enum port port;
-
 
329
	u32 val;
-
 
330
 
-
 
331
	DRM_DEBUG_KMS("\n");
113
 
332
 
114
	mutex_lock(&dev_priv->dpio_lock);
333
	mutex_lock(&dev_priv->sb_lock);
115
	/* program rcomp for compliance, reduce from 50 ohms to 45 ohms
334
	/* program rcomp for compliance, reduce from 50 ohms to 45 ohms
116
	 * needed everytime after power gate */
335
	 * needed everytime after power gate */
117
	vlv_flisdsi_write(dev_priv, 0x04, 0x0004);
336
	vlv_flisdsi_write(dev_priv, 0x04, 0x0004);
118
	mutex_unlock(&dev_priv->dpio_lock);
337
	mutex_unlock(&dev_priv->sb_lock);
119
 
338
 
120
	/* bandgap reset is needed after everytime we do power gate */
339
	/* bandgap reset is needed after everytime we do power gate */
121
	band_gap_reset(dev_priv);
340
	band_gap_reset(dev_priv);
-
 
341
 
-
 
342
	for_each_dsi_port(port, intel_dsi->ports) {
122
 
343
 
123
	I915_WRITE(MIPI_DEVICE_READY(pipe), ULPS_STATE_ENTER);
344
		I915_WRITE(MIPI_DEVICE_READY(port), ULPS_STATE_ENTER);
-
 
345
		usleep_range(2500, 3000);
-
 
346
 
-
 
347
		/* Enable MIPI PHY transparent latch
-
 
348
		 * Common bit for both MIPI Port A & MIPI Port C
124
	usleep_range(2500, 3000);
349
		 * No similar bit in MIPI Port C reg
125
 
350
		 */
126
	val = I915_READ(MIPI_PORT_CTRL(pipe));
351
		val = I915_READ(MIPI_PORT_CTRL(PORT_A));
127
	I915_WRITE(MIPI_PORT_CTRL(pipe), val | LP_OUTPUT_HOLD);
352
		I915_WRITE(MIPI_PORT_CTRL(PORT_A), val | LP_OUTPUT_HOLD);
128
	usleep_range(1000, 1500);
353
		usleep_range(1000, 1500);
129
 
354
 
130
	I915_WRITE(MIPI_DEVICE_READY(pipe), ULPS_STATE_EXIT);
355
		I915_WRITE(MIPI_DEVICE_READY(port), ULPS_STATE_EXIT);
131
	usleep_range(2500, 3000);
356
		usleep_range(2500, 3000);
-
 
357
 
-
 
358
		I915_WRITE(MIPI_DEVICE_READY(port), DEVICE_READY);
-
 
359
		usleep_range(2500, 3000);
-
 
360
	}
-
 
361
}
-
 
362
 
-
 
363
static void intel_dsi_device_ready(struct intel_encoder *encoder)
-
 
364
{
-
 
365
	struct drm_device *dev = encoder->base.dev;
-
 
366
 
-
 
367
	if (IS_VALLEYVIEW(dev))
132
 
368
		vlv_dsi_device_ready(encoder);
133
	I915_WRITE(MIPI_DEVICE_READY(pipe), DEVICE_READY);
369
	else if (IS_BROXTON(dev))
134
	usleep_range(2500, 3000);
370
		bxt_dsi_device_ready(encoder);
135
}
371
}
136
 
372
 
137
static void intel_dsi_enable(struct intel_encoder *encoder)
373
static void intel_dsi_port_enable(struct intel_encoder *encoder)
138
{
374
{
139
	struct drm_device *dev = encoder->base.dev;
375
	struct drm_device *dev = encoder->base.dev;
140
	struct drm_i915_private *dev_priv = dev->dev_private;
376
	struct drm_i915_private *dev_priv = dev->dev_private;
141
	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
377
	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
142
	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
378
	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
-
 
379
	enum port port;
-
 
380
	u32 temp;
-
 
381
	u32 port_ctrl;
-
 
382
 
-
 
383
	if (intel_dsi->dual_link == DSI_DUAL_LINK_FRONT_BACK) {
-
 
384
		temp = I915_READ(VLV_CHICKEN_3);
-
 
385
		temp &= ~PIXEL_OVERLAP_CNT_MASK |
-
 
386
					intel_dsi->pixel_overlap <<
-
 
387
					PIXEL_OVERLAP_CNT_SHIFT;
-
 
388
		I915_WRITE(VLV_CHICKEN_3, temp);
-
 
389
	}
-
 
390
 
-
 
391
	for_each_dsi_port(port, intel_dsi->ports) {
-
 
392
		port_ctrl = IS_BROXTON(dev) ? BXT_MIPI_PORT_CTRL(port) :
-
 
393
						MIPI_PORT_CTRL(port);
-
 
394
 
-
 
395
		temp = I915_READ(port_ctrl);
-
 
396
 
-
 
397
		temp &= ~LANE_CONFIGURATION_MASK;
-
 
398
		temp &= ~DUAL_LINK_MODE_MASK;
-
 
399
 
-
 
400
		if (intel_dsi->ports == ((1 << PORT_A) | (1 << PORT_C))) {
-
 
401
			temp |= (intel_dsi->dual_link - 1)
-
 
402
						<< DUAL_LINK_MODE_SHIFT;
143
	int pipe = intel_crtc->pipe;
403
			temp |= intel_crtc->pipe ?
-
 
404
					LANE_CONFIGURATION_DUAL_LINK_B :
-
 
405
					LANE_CONFIGURATION_DUAL_LINK_A;
-
 
406
		}
-
 
407
		/* assert ip_tg_enable signal */
-
 
408
		I915_WRITE(port_ctrl, temp | DPI_ENABLE);
-
 
409
		POSTING_READ(port_ctrl);
-
 
410
	}
-
 
411
}
-
 
412
 
-
 
413
static void intel_dsi_port_disable(struct intel_encoder *encoder)
-
 
414
{
-
 
415
	struct drm_device *dev = encoder->base.dev;
-
 
416
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
417
	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
-
 
418
	enum port port;
144
	u32 temp;
419
	u32 temp;
-
 
420
	u32 port_ctrl;
-
 
421
 
-
 
422
	for_each_dsi_port(port, intel_dsi->ports) {
-
 
423
		/* de-assert ip_tg_enable signal */
-
 
424
		port_ctrl = IS_BROXTON(dev) ? BXT_MIPI_PORT_CTRL(port) :
-
 
425
						MIPI_PORT_CTRL(port);
-
 
426
		temp = I915_READ(port_ctrl);
-
 
427
		I915_WRITE(port_ctrl, temp & ~DPI_ENABLE);
-
 
428
		POSTING_READ(port_ctrl);
-
 
429
	}
-
 
430
}
-
 
431
 
-
 
432
static void intel_dsi_enable(struct intel_encoder *encoder)
-
 
433
{
-
 
434
	struct drm_device *dev = encoder->base.dev;
-
 
435
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
436
	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
-
 
437
	enum port port;
145
 
438
 
146
	DRM_DEBUG_KMS("\n");
439
	DRM_DEBUG_KMS("\n");
147
 
440
 
-
 
441
	if (is_cmd_mode(intel_dsi)) {
148
	if (is_cmd_mode(intel_dsi))
442
		for_each_dsi_port(port, intel_dsi->ports)
149
		I915_WRITE(MIPI_MAX_RETURN_PKT_SIZE(pipe), 8 * 4);
443
			I915_WRITE(MIPI_MAX_RETURN_PKT_SIZE(port), 8 * 4);
150
	else {
444
	} else {
-
 
445
		msleep(20); /* XXX */
151
		msleep(20); /* XXX */
446
		for_each_dsi_port(port, intel_dsi->ports)
152
		dpi_send_cmd(intel_dsi, TURN_ON, DPI_LP_MODE_EN);
447
			dpi_send_cmd(intel_dsi, TURN_ON, false, port);
153
		msleep(100);
-
 
154
 
448
		msleep(100);
-
 
449
 
155
		if (intel_dsi->dev.dev_ops->enable)
450
		drm_panel_enable(intel_dsi->panel);
156
			intel_dsi->dev.dev_ops->enable(&intel_dsi->dev);
451
 
157
 
-
 
158
		wait_for_dsi_fifo_empty(intel_dsi);
-
 
159
 
-
 
160
		/* assert ip_tg_enable signal */
-
 
161
		temp = I915_READ(MIPI_PORT_CTRL(pipe)) & ~LANE_CONFIGURATION_MASK;
452
		for_each_dsi_port(port, intel_dsi->ports)
-
 
453
			wait_for_dsi_fifo_empty(intel_dsi, port);
-
 
454
 
162
		temp = temp | intel_dsi->port_bits;
455
		intel_dsi_port_enable(encoder);
163
		I915_WRITE(MIPI_PORT_CTRL(pipe), temp | DPI_ENABLE);
456
	}
164
		POSTING_READ(MIPI_PORT_CTRL(pipe));
457
 
165
	}
458
	intel_panel_enable_backlight(intel_dsi->attached_connector);
166
}
459
}
167
 
460
 
168
static void intel_dsi_pre_enable(struct intel_encoder *encoder)
461
static void intel_dsi_pre_enable(struct intel_encoder *encoder)
169
{
462
{
170
	struct drm_device *dev = encoder->base.dev;
463
	struct drm_device *dev = encoder->base.dev;
171
	struct drm_i915_private *dev_priv = dev->dev_private;
464
	struct drm_i915_private *dev_priv = dev->dev_private;
172
	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
465
	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
173
	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
466
	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
174
	enum pipe pipe = intel_crtc->pipe;
467
	enum pipe pipe = intel_crtc->pipe;
-
 
468
	enum port port;
175
	u32 tmp;
469
	u32 tmp;
176
 
470
 
177
	DRM_DEBUG_KMS("\n");
471
	DRM_DEBUG_KMS("\n");
-
 
472
 
-
 
473
	/* Panel Enable over CRC PMIC */
-
 
474
	if (intel_dsi->gpio_panel)
-
 
475
		gpiod_set_value_cansleep(intel_dsi->gpio_panel, 1);
-
 
476
 
-
 
477
	msleep(intel_dsi->panel_on_delay);
-
 
478
 
-
 
479
	if (IS_VALLEYVIEW(dev)) {
178
 
480
		/*
179
	/* Disable DPOunit clock gating, can stall pipe
481
		 * Disable DPOunit clock gating, can stall pipe
-
 
482
		 * and we need DPLL REFA always enabled
180
	 * and we need DPLL REFA always enabled */
483
		 */
181
	tmp = I915_READ(DPLL(pipe));
484
		tmp = I915_READ(DPLL(pipe));
182
	tmp |= DPLL_REFA_CLK_ENABLE_VLV;
485
		tmp |= DPLL_REF_CLK_ENABLE_VLV;
183
	I915_WRITE(DPLL(pipe), tmp);
486
		I915_WRITE(DPLL(pipe), tmp);
184
 
487
 
185
	/* update the hw state for DPLL */
488
		/* update the hw state for DPLL */
186
	intel_crtc->config.dpll_hw_state.dpll = DPLL_INTEGRATED_CLOCK_VLV |
489
		intel_crtc->config->dpll_hw_state.dpll =
-
 
490
				DPLL_INTEGRATED_REF_CLK_VLV |
187
						DPLL_REFA_CLK_ENABLE_VLV;
491
					DPLL_REF_CLK_ENABLE_VLV | DPLL_VGA_MODE_DIS;
188
 
492
 
189
	tmp = I915_READ(DSPCLK_GATE_D);
493
		tmp = I915_READ(DSPCLK_GATE_D);
190
	tmp |= DPOUNIT_CLOCK_GATE_DISABLE;
494
		tmp |= DPOUNIT_CLOCK_GATE_DISABLE;
191
	I915_WRITE(DSPCLK_GATE_D, tmp);
495
		I915_WRITE(DSPCLK_GATE_D, tmp);
-
 
496
	}
192
 
497
 
193
	/* put device in ready state */
498
	/* put device in ready state */
194
	intel_dsi_device_ready(encoder);
499
	intel_dsi_device_ready(encoder);
195
 
500
 
196
	msleep(intel_dsi->panel_on_delay);
-
 
197
 
501
	drm_panel_prepare(intel_dsi->panel);
198
	if (intel_dsi->dev.dev_ops->panel_reset)
-
 
199
		intel_dsi->dev.dev_ops->panel_reset(&intel_dsi->dev);
-
 
200
 
-
 
201
	if (intel_dsi->dev.dev_ops->send_otp_cmds)
-
 
202
		intel_dsi->dev.dev_ops->send_otp_cmds(&intel_dsi->dev);
502
 
203
 
503
	for_each_dsi_port(port, intel_dsi->ports)
204
	wait_for_dsi_fifo_empty(intel_dsi);
504
		wait_for_dsi_fifo_empty(intel_dsi, port);
205
 
505
 
206
	/* Enable port in pre-enable phase itself because as per hw team
506
	/* Enable port in pre-enable phase itself because as per hw team
207
	 * recommendation, port should be enabled befor plane & pipe */
507
	 * recommendation, port should be enabled befor plane & pipe */
208
	intel_dsi_enable(encoder);
508
	intel_dsi_enable(encoder);
209
}
509
}
210
 
510
 
211
static void intel_dsi_enable_nop(struct intel_encoder *encoder)
511
static void intel_dsi_enable_nop(struct intel_encoder *encoder)
212
{
512
{
213
	DRM_DEBUG_KMS("\n");
513
	DRM_DEBUG_KMS("\n");
214
 
514
 
215
	/* for DSI port enable has to be done before pipe
515
	/* for DSI port enable has to be done before pipe
216
	 * and plane enable, so port enable is done in
516
	 * and plane enable, so port enable is done in
217
	 * pre_enable phase itself unlike other encoders
517
	 * pre_enable phase itself unlike other encoders
218
	 */
518
	 */
219
}
519
}
220
 
520
 
221
static void intel_dsi_pre_disable(struct intel_encoder *encoder)
521
static void intel_dsi_pre_disable(struct intel_encoder *encoder)
222
{
522
{
223
	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
523
	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
-
 
524
	enum port port;
224
 
525
 
225
	DRM_DEBUG_KMS("\n");
526
	DRM_DEBUG_KMS("\n");
-
 
527
 
-
 
528
	intel_panel_disable_backlight(intel_dsi->attached_connector);
226
 
529
 
227
	if (is_vid_mode(intel_dsi)) {
530
	if (is_vid_mode(intel_dsi)) {
-
 
531
		/* Send Shutdown command to the panel in LP mode */
228
		/* Send Shutdown command to the panel in LP mode */
532
		for_each_dsi_port(port, intel_dsi->ports)
229
		dpi_send_cmd(intel_dsi, SHUTDOWN, DPI_LP_MODE_EN);
533
			dpi_send_cmd(intel_dsi, SHUTDOWN, false, port);
230
		msleep(10);
534
		msleep(10);
231
	}
535
	}
232
}
536
}
233
 
537
 
234
static void intel_dsi_disable(struct intel_encoder *encoder)
538
static void intel_dsi_disable(struct intel_encoder *encoder)
235
{
539
{
236
	struct drm_device *dev = encoder->base.dev;
540
	struct drm_device *dev = encoder->base.dev;
237
	struct drm_i915_private *dev_priv = dev->dev_private;
541
	struct drm_i915_private *dev_priv = dev->dev_private;
238
	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
-
 
239
	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
542
	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
240
	int pipe = intel_crtc->pipe;
543
	enum port port;
241
	u32 temp;
544
	u32 temp;
242
 
545
 
243
	DRM_DEBUG_KMS("\n");
546
	DRM_DEBUG_KMS("\n");
244
 
547
 
245
	if (is_vid_mode(intel_dsi)) {
548
	if (is_vid_mode(intel_dsi)) {
246
		wait_for_dsi_fifo_empty(intel_dsi);
549
		for_each_dsi_port(port, intel_dsi->ports)
247
 
-
 
248
		/* de-assert ip_tg_enable signal */
550
			wait_for_dsi_fifo_empty(intel_dsi, port);
249
		temp = I915_READ(MIPI_PORT_CTRL(pipe));
-
 
250
		I915_WRITE(MIPI_PORT_CTRL(pipe), temp & ~DPI_ENABLE);
-
 
251
		POSTING_READ(MIPI_PORT_CTRL(pipe));
-
 
-
 
551
 
252
 
552
		intel_dsi_port_disable(encoder);
253
		msleep(2);
553
		msleep(2);
254
	}
554
	}
-
 
555
 
255
 
556
	for_each_dsi_port(port, intel_dsi->ports) {
256
	/* Panel commands can be sent when clock is in LP11 */
557
		/* Panel commands can be sent when clock is in LP11 */
257
	I915_WRITE(MIPI_DEVICE_READY(pipe), 0x0);
-
 
258
 
-
 
259
	temp = I915_READ(MIPI_CTRL(pipe));
-
 
260
	temp &= ~ESCAPE_CLOCK_DIVIDER_MASK;
-
 
261
	I915_WRITE(MIPI_CTRL(pipe), temp |
-
 
262
			intel_dsi->escape_clk_div <<
-
 
-
 
558
		I915_WRITE(MIPI_DEVICE_READY(port), 0x0);
263
			ESCAPE_CLOCK_DIVIDER_SHIFT);
559
 
264
 
560
		intel_dsi_reset_clocks(encoder, port);
265
	I915_WRITE(MIPI_EOT_DISABLE(pipe), CLOCKSTOP);
561
		I915_WRITE(MIPI_EOT_DISABLE(port), CLOCKSTOP);
266
 
562
 
267
	temp = I915_READ(MIPI_DSI_FUNC_PRG(pipe));
-
 
268
	temp &= ~VID_MODE_FORMAT_MASK;
-
 
-
 
563
		temp = I915_READ(MIPI_DSI_FUNC_PRG(port));
-
 
564
		temp &= ~VID_MODE_FORMAT_MASK;
269
	I915_WRITE(MIPI_DSI_FUNC_PRG(pipe), temp);
565
		I915_WRITE(MIPI_DSI_FUNC_PRG(port), temp);
270
 
566
 
271
	I915_WRITE(MIPI_DEVICE_READY(pipe), 0x1);
-
 
272
 
567
		I915_WRITE(MIPI_DEVICE_READY(port), 0x1);
-
 
568
	}
273
	/* if disable packets are sent before sending shutdown packet then in
569
	/* if disable packets are sent before sending shutdown packet then in
274
	 * some next enable sequence send turn on packet error is observed */
570
	 * some next enable sequence send turn on packet error is observed */
275
	if (intel_dsi->dev.dev_ops->disable)
571
	drm_panel_disable(intel_dsi->panel);
276
		intel_dsi->dev.dev_ops->disable(&intel_dsi->dev);
572
 
277
 
573
	for_each_dsi_port(port, intel_dsi->ports)
278
	wait_for_dsi_fifo_empty(intel_dsi);
574
		wait_for_dsi_fifo_empty(intel_dsi, port);
279
}
575
}
280
 
576
 
281
static void intel_dsi_clear_device_ready(struct intel_encoder *encoder)
577
static void intel_dsi_clear_device_ready(struct intel_encoder *encoder)
282
{
578
{
-
 
579
	struct drm_device *dev = encoder->base.dev;
283
	struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
580
	struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
284
	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
581
	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
285
	int pipe = intel_crtc->pipe;
582
	enum port port;
286
	u32 val;
583
	u32 val;
-
 
584
	u32 port_ctrl = 0;
287
 
585
 
-
 
586
	DRM_DEBUG_KMS("\n");
288
	DRM_DEBUG_KMS("\n");
587
	for_each_dsi_port(port, intel_dsi->ports) {
-
 
588
 
289
 
589
		I915_WRITE(MIPI_DEVICE_READY(port), DEVICE_READY |
290
	I915_WRITE(MIPI_DEVICE_READY(pipe), DEVICE_READY | ULPS_STATE_ENTER);
590
							ULPS_STATE_ENTER);
-
 
591
		usleep_range(2000, 2500);
291
	usleep_range(2000, 2500);
592
 
292
 
593
		I915_WRITE(MIPI_DEVICE_READY(port), DEVICE_READY |
-
 
594
							ULPS_STATE_EXIT);
293
	I915_WRITE(MIPI_DEVICE_READY(pipe), DEVICE_READY | ULPS_STATE_EXIT);
595
		usleep_range(2000, 2500);
-
 
596
 
-
 
597
		I915_WRITE(MIPI_DEVICE_READY(port), DEVICE_READY |
-
 
598
							ULPS_STATE_ENTER);
-
 
599
		usleep_range(2000, 2500);
-
 
600
 
-
 
601
		if (IS_BROXTON(dev))
-
 
602
			port_ctrl = BXT_MIPI_PORT_CTRL(port);
-
 
603
		else if (IS_VALLEYVIEW(dev))
-
 
604
			/* Common bit for both MIPI Port A & MIPI Port C */
294
	usleep_range(2000, 2500);
605
			port_ctrl = MIPI_PORT_CTRL(PORT_A);
295
 
606
 
296
	I915_WRITE(MIPI_DEVICE_READY(pipe), DEVICE_READY | ULPS_STATE_ENTER);
607
		/* Wait till Clock lanes are in LP-00 state for MIPI Port A
297
	usleep_range(2000, 2500);
608
		 * only. MIPI Port C has no similar bit for checking
298
 
609
		 */
299
	if (wait_for(((I915_READ(MIPI_PORT_CTRL(pipe)) & AFE_LATCHOUT)
610
		if (wait_for(((I915_READ(port_ctrl) & AFE_LATCHOUT)
300
					== 0x00000), 30))
611
						== 0x00000), 30))
301
		DRM_ERROR("DSI LP not going Low\n");
612
			DRM_ERROR("DSI LP not going Low\n");
-
 
613
 
302
 
614
		/* Disable MIPI PHY transparent latch */
303
	val = I915_READ(MIPI_PORT_CTRL(pipe));
615
		val = I915_READ(port_ctrl);
304
	I915_WRITE(MIPI_PORT_CTRL(pipe), val & ~LP_OUTPUT_HOLD);
616
		I915_WRITE(port_ctrl, val & ~LP_OUTPUT_HOLD);
305
	usleep_range(1000, 1500);
617
		usleep_range(1000, 1500);
306
 
618
 
-
 
619
		I915_WRITE(MIPI_DEVICE_READY(port), 0x00);
307
	I915_WRITE(MIPI_DEVICE_READY(pipe), 0x00);
620
		usleep_range(2000, 2500);
308
	usleep_range(2000, 2500);
621
	}
309
 
622
 
310
	vlv_disable_dsi_pll(encoder);
623
	intel_disable_dsi_pll(encoder);
311
}
624
}
312
 
625
 
313
static void intel_dsi_post_disable(struct intel_encoder *encoder)
626
static void intel_dsi_post_disable(struct intel_encoder *encoder)
314
{
627
{
315
	struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
628
	struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
316
	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
629
	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
317
	u32 val;
630
	u32 val;
318
 
631
 
319
	DRM_DEBUG_KMS("\n");
632
	DRM_DEBUG_KMS("\n");
320
 
633
 
321
	intel_dsi_disable(encoder);
634
	intel_dsi_disable(encoder);
322
 
635
 
323
	intel_dsi_clear_device_ready(encoder);
636
	intel_dsi_clear_device_ready(encoder);
324
 
637
 
325
	val = I915_READ(DSPCLK_GATE_D);
638
	val = I915_READ(DSPCLK_GATE_D);
326
	val &= ~DPOUNIT_CLOCK_GATE_DISABLE;
639
	val &= ~DPOUNIT_CLOCK_GATE_DISABLE;
327
	I915_WRITE(DSPCLK_GATE_D, val);
640
	I915_WRITE(DSPCLK_GATE_D, val);
328
 
-
 
329
	if (intel_dsi->dev.dev_ops->disable_panel_power)
641
 
330
		intel_dsi->dev.dev_ops->disable_panel_power(&intel_dsi->dev);
642
	drm_panel_unprepare(intel_dsi->panel);
331
 
643
 
332
	msleep(intel_dsi->panel_off_delay);
644
	msleep(intel_dsi->panel_off_delay);
333
	msleep(intel_dsi->panel_pwr_cycle_delay);
645
	msleep(intel_dsi->panel_pwr_cycle_delay);
-
 
646
 
-
 
647
	/* Panel Disable over CRC PMIC */
-
 
648
	if (intel_dsi->gpio_panel)
-
 
649
		gpiod_set_value_cansleep(intel_dsi->gpio_panel, 0);
334
}
650
}
335
 
651
 
336
static bool intel_dsi_get_hw_state(struct intel_encoder *encoder,
652
static bool intel_dsi_get_hw_state(struct intel_encoder *encoder,
337
				   enum pipe *pipe)
653
				   enum pipe *pipe)
338
{
654
{
339
	struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
655
	struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
-
 
656
	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
-
 
657
	struct drm_device *dev = encoder->base.dev;
340
	enum intel_display_power_domain power_domain;
658
	enum intel_display_power_domain power_domain;
341
	u32 port, func;
659
	u32 dpi_enabled, func, ctrl_reg;
342
	enum pipe p;
660
	enum port port;
343
 
661
 
344
	DRM_DEBUG_KMS("\n");
662
	DRM_DEBUG_KMS("\n");
345
 
663
 
346
	power_domain = intel_display_port_power_domain(encoder);
664
	power_domain = intel_display_port_power_domain(encoder);
347
	if (!intel_display_power_is_enabled(dev_priv, power_domain))
665
	if (!intel_display_power_is_enabled(dev_priv, power_domain))
348
		return false;
666
		return false;
349
 
667
 
350
	/* XXX: this only works for one DSI output */
668
	/* XXX: this only works for one DSI output */
351
	for (p = PIPE_A; p <= PIPE_B; p++) {
669
	for_each_dsi_port(port, intel_dsi->ports) {
352
		port = I915_READ(MIPI_PORT_CTRL(p));
670
		func = I915_READ(MIPI_DSI_FUNC_PRG(port));
-
 
671
		ctrl_reg = IS_BROXTON(dev) ? BXT_MIPI_PORT_CTRL(port) :
-
 
672
						MIPI_PORT_CTRL(port);
-
 
673
		dpi_enabled = I915_READ(ctrl_reg) & DPI_ENABLE;
-
 
674
 
-
 
675
		/* Due to some hardware limitations on BYT, MIPI Port C DPI
-
 
676
		 * Enable bit does not get set. To check whether DSI Port C
-
 
677
		 * was enabled in BIOS, check the Pipe B enable bit
-
 
678
		 */
-
 
679
		if (IS_VALLEYVIEW(dev) && !IS_CHERRYVIEW(dev) &&
-
 
680
		    (port == PORT_C))
353
		func = I915_READ(MIPI_DSI_FUNC_PRG(p));
681
			dpi_enabled = I915_READ(PIPECONF(PIPE_B)) &
-
 
682
							PIPECONF_ENABLE;
354
 
683
 
355
		if ((port & DPI_ENABLE) || (func & CMD_MODE_DATA_WIDTH_MASK)) {
684
		if (dpi_enabled || (func & CMD_MODE_DATA_WIDTH_MASK)) {
356
			if (I915_READ(MIPI_DEVICE_READY(p)) & DEVICE_READY) {
685
			if (I915_READ(MIPI_DEVICE_READY(port)) & DEVICE_READY) {
357
				*pipe = p;
686
				*pipe = port == PORT_A ? PIPE_A : PIPE_B;
358
				return true;
687
				return true;
359
			}
688
			}
360
		}
689
		}
361
	}
690
	}
362
 
691
 
363
	return false;
692
	return false;
364
}
693
}
365
 
694
 
366
static void intel_dsi_get_config(struct intel_encoder *encoder,
695
static void intel_dsi_get_config(struct intel_encoder *encoder,
367
				 struct intel_crtc_config *pipe_config)
696
				 struct intel_crtc_state *pipe_config)
368
{
697
{
369
	u32 pclk;
698
	u32 pclk = 0;
370
	DRM_DEBUG_KMS("\n");
699
	DRM_DEBUG_KMS("\n");
371
 
700
 
372
	/*
701
	/*
373
	 * DPLL_MD is not used in case of DSI, reading will get some default value
702
	 * DPLL_MD is not used in case of DSI, reading will get some default value
374
	 * set dpll_md = 0
703
	 * set dpll_md = 0
375
	 */
704
	 */
376
	pipe_config->dpll_hw_state.dpll_md = 0;
705
	pipe_config->dpll_hw_state.dpll_md = 0;
-
 
706
 
-
 
707
	if (IS_BROXTON(encoder->base.dev))
-
 
708
		pclk = bxt_get_dsi_pclk(encoder, pipe_config->pipe_bpp);
377
 
709
	else if (IS_VALLEYVIEW(encoder->base.dev))
-
 
710
		pclk = vlv_get_dsi_pclk(encoder, pipe_config->pipe_bpp);
378
	pclk = vlv_get_dsi_pclk(encoder, pipe_config->pipe_bpp);
711
 
379
	if (!pclk)
712
	if (!pclk)
380
		return;
713
		return;
381
 
714
 
382
	pipe_config->adjusted_mode.crtc_clock = pclk;
715
	pipe_config->base.adjusted_mode.crtc_clock = pclk;
383
	pipe_config->port_clock = pclk;
716
	pipe_config->port_clock = pclk;
384
}
717
}
385
 
718
 
386
static enum drm_mode_status
719
static enum drm_mode_status
387
intel_dsi_mode_valid(struct drm_connector *connector,
720
intel_dsi_mode_valid(struct drm_connector *connector,
388
		     struct drm_display_mode *mode)
721
		     struct drm_display_mode *mode)
389
{
722
{
390
	struct intel_connector *intel_connector = to_intel_connector(connector);
723
	struct intel_connector *intel_connector = to_intel_connector(connector);
391
	struct drm_display_mode *fixed_mode = intel_connector->panel.fixed_mode;
724
	struct drm_display_mode *fixed_mode = intel_connector->panel.fixed_mode;
392
	struct intel_dsi *intel_dsi = intel_attached_dsi(connector);
725
	int max_dotclk = to_i915(connector->dev)->max_dotclk_freq;
393
 
726
 
394
	DRM_DEBUG_KMS("\n");
727
	DRM_DEBUG_KMS("\n");
395
 
728
 
396
	if (mode->flags & DRM_MODE_FLAG_DBLSCAN) {
729
	if (mode->flags & DRM_MODE_FLAG_DBLSCAN) {
397
		DRM_DEBUG_KMS("MODE_NO_DBLESCAN\n");
730
		DRM_DEBUG_KMS("MODE_NO_DBLESCAN\n");
398
		return MODE_NO_DBLESCAN;
731
		return MODE_NO_DBLESCAN;
399
	}
732
	}
400
 
733
 
401
	if (fixed_mode) {
734
	if (fixed_mode) {
402
		if (mode->hdisplay > fixed_mode->hdisplay)
735
		if (mode->hdisplay > fixed_mode->hdisplay)
403
			return MODE_PANEL;
736
			return MODE_PANEL;
404
		if (mode->vdisplay > fixed_mode->vdisplay)
737
		if (mode->vdisplay > fixed_mode->vdisplay)
405
			return MODE_PANEL;
738
			return MODE_PANEL;
-
 
739
		if (fixed_mode->clock > max_dotclk)
-
 
740
			return MODE_CLOCK_HIGH;
406
	}
741
	}
407
 
742
 
408
	return intel_dsi->dev.dev_ops->mode_valid(&intel_dsi->dev, mode);
743
	return MODE_OK;
409
}
744
}
410
 
745
 
411
/* return txclkesc cycles in terms of divider and duration in us */
746
/* return txclkesc cycles in terms of divider and duration in us */
412
static u16 txclkesc(u32 divider, unsigned int us)
747
static u16 txclkesc(u32 divider, unsigned int us)
413
{
748
{
414
	switch (divider) {
749
	switch (divider) {
415
	case ESCAPE_CLOCK_DIVIDER_1:
750
	case ESCAPE_CLOCK_DIVIDER_1:
416
	default:
751
	default:
417
		return 20 * us;
752
		return 20 * us;
418
	case ESCAPE_CLOCK_DIVIDER_2:
753
	case ESCAPE_CLOCK_DIVIDER_2:
419
		return 10 * us;
754
		return 10 * us;
420
	case ESCAPE_CLOCK_DIVIDER_4:
755
	case ESCAPE_CLOCK_DIVIDER_4:
421
		return 5 * us;
756
		return 5 * us;
422
	}
757
	}
423
}
758
}
424
 
759
 
425
/* return pixels in terms of txbyteclkhs */
760
/* return pixels in terms of txbyteclkhs */
426
static u16 txbyteclkhs(u16 pixels, int bpp, int lane_count,
761
static u16 txbyteclkhs(u16 pixels, int bpp, int lane_count,
427
		       u16 burst_mode_ratio)
762
		       u16 burst_mode_ratio)
428
{
763
{
429
	return DIV_ROUND_UP(DIV_ROUND_UP(pixels * bpp * burst_mode_ratio,
764
	return DIV_ROUND_UP(DIV_ROUND_UP(pixels * bpp * burst_mode_ratio,
430
					 8 * 100), lane_count);
765
					 8 * 100), lane_count);
431
}
766
}
432
 
767
 
433
static void set_dsi_timings(struct drm_encoder *encoder,
768
static void set_dsi_timings(struct drm_encoder *encoder,
434
			    const struct drm_display_mode *mode)
769
			    const struct drm_display_mode *adjusted_mode)
435
{
770
{
436
	struct drm_device *dev = encoder->dev;
771
	struct drm_device *dev = encoder->dev;
437
	struct drm_i915_private *dev_priv = dev->dev_private;
772
	struct drm_i915_private *dev_priv = dev->dev_private;
438
	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc);
773
	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc);
439
	struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder);
774
	struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder);
440
	int pipe = intel_crtc->pipe;
775
	enum port port;
441
	unsigned int bpp = intel_crtc->config.pipe_bpp;
776
	unsigned int bpp = intel_crtc->config->pipe_bpp;
442
	unsigned int lane_count = intel_dsi->lane_count;
777
	unsigned int lane_count = intel_dsi->lane_count;
443
 
778
 
444
	u16 hactive, hfp, hsync, hbp, vfp, vsync, vbp;
779
	u16 hactive, hfp, hsync, hbp, vfp, vsync, vbp;
445
 
780
 
446
	hactive = mode->hdisplay;
781
	hactive = adjusted_mode->crtc_hdisplay;
447
	hfp = mode->hsync_start - mode->hdisplay;
782
	hfp = adjusted_mode->crtc_hsync_start - adjusted_mode->crtc_hdisplay;
448
	hsync = mode->hsync_end - mode->hsync_start;
783
	hsync = adjusted_mode->crtc_hsync_end - adjusted_mode->crtc_hsync_start;
-
 
784
	hbp = adjusted_mode->crtc_htotal - adjusted_mode->crtc_hsync_end;
-
 
785
 
-
 
786
	if (intel_dsi->dual_link) {
-
 
787
		hactive /= 2;
-
 
788
		if (intel_dsi->dual_link == DSI_DUAL_LINK_FRONT_BACK)
-
 
789
			hactive += intel_dsi->pixel_overlap;
-
 
790
		hfp /= 2;
-
 
791
		hsync /= 2;
-
 
792
		hbp /= 2;
449
	hbp = mode->htotal - mode->hsync_end;
793
	}
450
 
794
 
451
	vfp = mode->vsync_start - mode->vdisplay;
795
	vfp = adjusted_mode->crtc_vsync_start - adjusted_mode->crtc_vdisplay;
452
	vsync = mode->vsync_end - mode->vsync_start;
796
	vsync = adjusted_mode->crtc_vsync_end - adjusted_mode->crtc_vsync_start;
453
	vbp = mode->vtotal - mode->vsync_end;
797
	vbp = adjusted_mode->crtc_vtotal - adjusted_mode->crtc_vsync_end;
454
 
798
 
455
	/* horizontal values are in terms of high speed byte clock */
799
	/* horizontal values are in terms of high speed byte clock */
456
	hactive = txbyteclkhs(hactive, bpp, lane_count,
800
	hactive = txbyteclkhs(hactive, bpp, lane_count,
457
			      intel_dsi->burst_mode_ratio);
801
			      intel_dsi->burst_mode_ratio);
458
	hfp = txbyteclkhs(hfp, bpp, lane_count, intel_dsi->burst_mode_ratio);
802
	hfp = txbyteclkhs(hfp, bpp, lane_count, intel_dsi->burst_mode_ratio);
459
	hsync = txbyteclkhs(hsync, bpp, lane_count,
803
	hsync = txbyteclkhs(hsync, bpp, lane_count,
460
			    intel_dsi->burst_mode_ratio);
804
			    intel_dsi->burst_mode_ratio);
461
	hbp = txbyteclkhs(hbp, bpp, lane_count, intel_dsi->burst_mode_ratio);
805
	hbp = txbyteclkhs(hbp, bpp, lane_count, intel_dsi->burst_mode_ratio);
-
 
806
 
-
 
807
	for_each_dsi_port(port, intel_dsi->ports) {
-
 
808
		if (IS_BROXTON(dev)) {
-
 
809
			/*
-
 
810
			 * Program hdisplay and vdisplay on MIPI transcoder.
-
 
811
			 * This is different from calculated hactive and
-
 
812
			 * vactive, as they are calculated per channel basis,
-
 
813
			 * whereas these values should be based on resolution.
462
 
814
			 */
-
 
815
			I915_WRITE(BXT_MIPI_TRANS_HACTIVE(port),
-
 
816
				   adjusted_mode->crtc_hdisplay);
-
 
817
			I915_WRITE(BXT_MIPI_TRANS_VACTIVE(port),
463
	I915_WRITE(MIPI_HACTIVE_AREA_COUNT(pipe), hactive);
818
				   adjusted_mode->crtc_vdisplay);
-
 
819
			I915_WRITE(BXT_MIPI_TRANS_VTOTAL(port),
-
 
820
				   adjusted_mode->crtc_vtotal);
-
 
821
		}
-
 
822
 
-
 
823
		I915_WRITE(MIPI_HACTIVE_AREA_COUNT(port), hactive);
464
	I915_WRITE(MIPI_HFP_COUNT(pipe), hfp);
824
		I915_WRITE(MIPI_HFP_COUNT(port), hfp);
465
 
825
 
466
	/* meaningful for video mode non-burst sync pulse mode only, can be zero
826
		/* meaningful for video mode non-burst sync pulse mode only,
467
	 * for non-burst sync events and burst modes */
827
		 * can be zero for non-burst sync events and burst modes */
468
	I915_WRITE(MIPI_HSYNC_PADDING_COUNT(pipe), hsync);
828
		I915_WRITE(MIPI_HSYNC_PADDING_COUNT(port), hsync);
469
	I915_WRITE(MIPI_HBP_COUNT(pipe), hbp);
829
		I915_WRITE(MIPI_HBP_COUNT(port), hbp);
470
 
830
 
471
	/* vertical values are in terms of lines */
831
		/* vertical values are in terms of lines */
-
 
832
		I915_WRITE(MIPI_VFP_COUNT(port), vfp);
472
	I915_WRITE(MIPI_VFP_COUNT(pipe), vfp);
833
		I915_WRITE(MIPI_VSYNC_PADDING_COUNT(port), vsync);
473
	I915_WRITE(MIPI_VSYNC_PADDING_COUNT(pipe), vsync);
834
		I915_WRITE(MIPI_VBP_COUNT(port), vbp);
474
	I915_WRITE(MIPI_VBP_COUNT(pipe), vbp);
835
	}
475
}
836
}
476
 
837
 
477
static void intel_dsi_prepare(struct intel_encoder *intel_encoder)
838
static void intel_dsi_prepare(struct intel_encoder *intel_encoder)
478
{
839
{
479
	struct drm_encoder *encoder = &intel_encoder->base;
840
	struct drm_encoder *encoder = &intel_encoder->base;
480
	struct drm_device *dev = encoder->dev;
841
	struct drm_device *dev = encoder->dev;
481
	struct drm_i915_private *dev_priv = dev->dev_private;
842
	struct drm_i915_private *dev_priv = dev->dev_private;
482
	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc);
843
	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc);
483
	struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder);
844
	struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder);
484
	struct drm_display_mode *adjusted_mode =
845
	const struct drm_display_mode *adjusted_mode = &intel_crtc->config->base.adjusted_mode;
485
		&intel_crtc->config.adjusted_mode;
-
 
486
	int pipe = intel_crtc->pipe;
846
	enum port port;
487
	unsigned int bpp = intel_crtc->config.pipe_bpp;
847
	unsigned int bpp = intel_crtc->config->pipe_bpp;
488
	u32 val, tmp;
848
	u32 val, tmp;
-
 
849
	u16 mode_hdisplay;
-
 
850
 
-
 
851
	DRM_DEBUG_KMS("pipe %c\n", pipe_name(intel_crtc->pipe));
-
 
852
 
-
 
853
	mode_hdisplay = adjusted_mode->crtc_hdisplay;
-
 
854
 
-
 
855
	if (intel_dsi->dual_link) {
-
 
856
		mode_hdisplay /= 2;
489
 
857
		if (intel_dsi->dual_link == DSI_DUAL_LINK_FRONT_BACK)
-
 
858
			mode_hdisplay += intel_dsi->pixel_overlap;
-
 
859
	}
-
 
860
 
-
 
861
	for_each_dsi_port(port, intel_dsi->ports) {
490
	DRM_DEBUG_KMS("pipe %c\n", pipe_name(pipe));
862
		if (IS_VALLEYVIEW(dev)) {
491
 
863
			/*
-
 
864
			 * escape clock divider, 20MHz, shared for A and C.
492
	/* escape clock divider, 20MHz, shared for A and C. device ready must be
865
			 * device ready must be off when doing this! txclkesc?
493
	 * off when doing this! txclkesc? */
866
			 */
494
	tmp = I915_READ(MIPI_CTRL(0));
867
			tmp = I915_READ(MIPI_CTRL(PORT_A));
-
 
868
			tmp &= ~ESCAPE_CLOCK_DIVIDER_MASK;
495
	tmp &= ~ESCAPE_CLOCK_DIVIDER_MASK;
869
			I915_WRITE(MIPI_CTRL(PORT_A), tmp |
496
	I915_WRITE(MIPI_CTRL(0), tmp | ESCAPE_CLOCK_DIVIDER_1);
870
					ESCAPE_CLOCK_DIVIDER_1);
497
 
871
 
498
	/* read request priority is per pipe */
872
			/* read request priority is per pipe */
-
 
873
			tmp = I915_READ(MIPI_CTRL(port));
-
 
874
			tmp &= ~READ_REQUEST_PRIORITY_MASK;
-
 
875
			I915_WRITE(MIPI_CTRL(port), tmp |
-
 
876
					READ_REQUEST_PRIORITY_HIGH);
-
 
877
		} else if (IS_BROXTON(dev)) {
-
 
878
			/*
-
 
879
			 * FIXME:
-
 
880
			 * BXT can connect any PIPE to any MIPI port.
-
 
881
			 * Select the pipe based on the MIPI port read from
-
 
882
			 * VBT for now. Pick PIPE A for MIPI port A and C
-
 
883
			 * for port C.
-
 
884
			 */
-
 
885
			tmp = I915_READ(MIPI_CTRL(port));
-
 
886
			tmp &= ~BXT_PIPE_SELECT_MASK;
-
 
887
 
-
 
888
			if (port == PORT_A)
-
 
889
				tmp |= BXT_PIPE_SELECT_A;
-
 
890
			else if (port == PORT_C)
-
 
891
				tmp |= BXT_PIPE_SELECT_C;
499
	tmp = I915_READ(MIPI_CTRL(pipe));
892
 
500
	tmp &= ~READ_REQUEST_PRIORITY_MASK;
893
			I915_WRITE(MIPI_CTRL(port), tmp);
501
	I915_WRITE(MIPI_CTRL(pipe), tmp | READ_REQUEST_PRIORITY_HIGH);
894
		}
502
 
895
 
503
	/* XXX: why here, why like this? handling in irq handler?! */
896
		/* XXX: why here, why like this? handling in irq handler?! */
504
	I915_WRITE(MIPI_INTR_STAT(pipe), 0xffffffff);
897
		I915_WRITE(MIPI_INTR_STAT(port), 0xffffffff);
505
	I915_WRITE(MIPI_INTR_EN(pipe), 0xffffffff);
898
		I915_WRITE(MIPI_INTR_EN(port), 0xffffffff);
-
 
899
 
506
 
900
		I915_WRITE(MIPI_DPHY_PARAM(port), intel_dsi->dphy_reg);
507
	I915_WRITE(MIPI_DPHY_PARAM(pipe), intel_dsi->dphy_reg);
901
 
508
 
902
		I915_WRITE(MIPI_DPI_RESOLUTION(port),
509
	I915_WRITE(MIPI_DPI_RESOLUTION(pipe),
903
			adjusted_mode->crtc_vdisplay << VERTICAL_ADDRESS_SHIFT |
510
		   adjusted_mode->vdisplay << VERTICAL_ADDRESS_SHIFT |
904
			mode_hdisplay << HORIZONTAL_ADDRESS_SHIFT);
511
		   adjusted_mode->hdisplay << HORIZONTAL_ADDRESS_SHIFT);
905
	}
512
 
906
 
513
	set_dsi_timings(encoder, adjusted_mode);
907
	set_dsi_timings(encoder, adjusted_mode);
514
 
908
 
515
	val = intel_dsi->lane_count << DATA_LANES_PRG_REG_SHIFT;
909
	val = intel_dsi->lane_count << DATA_LANES_PRG_REG_SHIFT;
516
	if (is_cmd_mode(intel_dsi)) {
910
	if (is_cmd_mode(intel_dsi)) {
517
		val |= intel_dsi->channel << CMD_MODE_CHANNEL_NUMBER_SHIFT;
911
		val |= intel_dsi->channel << CMD_MODE_CHANNEL_NUMBER_SHIFT;
518
		val |= CMD_MODE_DATA_WIDTH_8_BIT; /* XXX */
912
		val |= CMD_MODE_DATA_WIDTH_8_BIT; /* XXX */
519
	} else {
913
	} else {
520
		val |= intel_dsi->channel << VID_MODE_CHANNEL_NUMBER_SHIFT;
914
		val |= intel_dsi->channel << VID_MODE_CHANNEL_NUMBER_SHIFT;
521
 
915
 
522
		/* XXX: cross-check bpp vs. pixel format? */
916
		/* XXX: cross-check bpp vs. pixel format? */
523
		val |= intel_dsi->pixel_format;
917
		val |= intel_dsi->pixel_format;
524
	}
918
	}
525
	I915_WRITE(MIPI_DSI_FUNC_PRG(pipe), val);
-
 
-
 
919
 
-
 
920
	tmp = 0;
-
 
921
	if (intel_dsi->eotp_pkt == 0)
-
 
922
		tmp |= EOT_DISABLE;
-
 
923
	if (intel_dsi->clock_stop)
-
 
924
		tmp |= CLOCKSTOP;
-
 
925
 
-
 
926
	for_each_dsi_port(port, intel_dsi->ports) {
-
 
927
		I915_WRITE(MIPI_DSI_FUNC_PRG(port), val);
526
 
928
 
527
	/* timeouts for recovery. one frame IIUC. if counter expires, EOT and
929
		/* timeouts for recovery. one frame IIUC. if counter expires,
528
	 * stop state. */
930
		 * EOT and stop state. */
529
 
931
 
530
	/*
932
		/*
531
	 * In burst mode, value greater than one DPI line Time in byte clock
933
		 * In burst mode, value greater than one DPI line Time in byte
532
	 * (txbyteclkhs) To timeout this timer 1+ of the above said value is
934
		 * clock (txbyteclkhs) To timeout this timer 1+ of the above
533
	 * recommended.
935
		 * said value is recommended.
534
	 *
936
		 *
535
	 * In non-burst mode, Value greater than one DPI frame time in byte
937
		 * In non-burst mode, Value greater than one DPI frame time in
536
	 * clock(txbyteclkhs) To timeout this timer 1+ of the above said value
938
		 * byte clock(txbyteclkhs) To timeout this timer 1+ of the above
537
	 * is recommended.
939
		 * said value is recommended.
538
	 *
940
		 *
539
	 * In DBI only mode, value greater than one DBI frame time in byte
941
		 * In DBI only mode, value greater than one DBI frame time in
540
	 * clock(txbyteclkhs) To timeout this timer 1+ of the above said value
942
		 * byte clock(txbyteclkhs) To timeout this timer 1+ of the above
541
	 * is recommended.
943
		 * said value is recommended.
542
	 */
944
		 */
543
 
945
 
544
	if (is_vid_mode(intel_dsi) &&
946
		if (is_vid_mode(intel_dsi) &&
545
	    intel_dsi->video_mode_format == VIDEO_MODE_BURST) {
947
			intel_dsi->video_mode_format == VIDEO_MODE_BURST) {
546
		I915_WRITE(MIPI_HS_TX_TIMEOUT(pipe),
948
			I915_WRITE(MIPI_HS_TX_TIMEOUT(port),
547
			   txbyteclkhs(adjusted_mode->htotal, bpp,
949
				txbyteclkhs(adjusted_mode->crtc_htotal, bpp,
548
				       intel_dsi->lane_count,
950
					    intel_dsi->lane_count,
549
				       intel_dsi->burst_mode_ratio) + 1);
951
					    intel_dsi->burst_mode_ratio) + 1);
550
	} else {
952
		} else {
551
		I915_WRITE(MIPI_HS_TX_TIMEOUT(pipe),
953
			I915_WRITE(MIPI_HS_TX_TIMEOUT(port),
552
			   txbyteclkhs(adjusted_mode->vtotal *
954
				txbyteclkhs(adjusted_mode->crtc_vtotal *
553
				       adjusted_mode->htotal,
955
					    adjusted_mode->crtc_htotal,
554
				       bpp, intel_dsi->lane_count,
956
					    bpp, intel_dsi->lane_count,
555
				       intel_dsi->burst_mode_ratio) + 1);
957
					    intel_dsi->burst_mode_ratio) + 1);
556
	}
958
		}
557
	I915_WRITE(MIPI_LP_RX_TIMEOUT(pipe), intel_dsi->lp_rx_timeout);
959
		I915_WRITE(MIPI_LP_RX_TIMEOUT(port), intel_dsi->lp_rx_timeout);
558
	I915_WRITE(MIPI_TURN_AROUND_TIMEOUT(pipe), intel_dsi->turn_arnd_val);
960
		I915_WRITE(MIPI_TURN_AROUND_TIMEOUT(port),
-
 
961
						intel_dsi->turn_arnd_val);
559
	I915_WRITE(MIPI_DEVICE_RESET_TIMER(pipe), intel_dsi->rst_timer_val);
962
		I915_WRITE(MIPI_DEVICE_RESET_TIMER(port),
-
 
963
						intel_dsi->rst_timer_val);
560
 
964
 
561
	/* dphy stuff */
965
		/* dphy stuff */
562
 
966
 
563
	/* in terms of low power clock */
967
		/* in terms of low power clock */
-
 
968
		I915_WRITE(MIPI_INIT_COUNT(port),
564
	I915_WRITE(MIPI_INIT_COUNT(pipe), txclkesc(intel_dsi->escape_clk_div, 100));
969
				txclkesc(intel_dsi->escape_clk_div, 100));
-
 
970
 
565
 
971
		if (IS_BROXTON(dev) && (!intel_dsi->dual_link)) {
-
 
972
			/*
566
	val = 0;
973
			 * BXT spec says write MIPI_INIT_COUNT for
-
 
974
			 * both the ports, even if only one is
567
	if (intel_dsi->eotp_pkt == 0)
975
			 * getting used. So write the other port
568
		val |= EOT_DISABLE;
976
			 * if not in dual link mode.
-
 
977
			 */
-
 
978
			I915_WRITE(MIPI_INIT_COUNT(port ==
569
 
979
						PORT_A ? PORT_C : PORT_A),
570
	if (intel_dsi->clock_stop)
980
					intel_dsi->init_count);
571
		val |= CLOCKSTOP;
981
		}
572
 
982
 
573
	/* recovery disables */
983
		/* recovery disables */
574
	I915_WRITE(MIPI_EOT_DISABLE(pipe), val);
984
		I915_WRITE(MIPI_EOT_DISABLE(port), tmp);
575
 
985
 
576
	/* in terms of low power clock */
986
		/* in terms of low power clock */
577
	I915_WRITE(MIPI_INIT_COUNT(pipe), intel_dsi->init_count);
987
		I915_WRITE(MIPI_INIT_COUNT(port), intel_dsi->init_count);
578
 
988
 
579
	/* in terms of txbyteclkhs. actual high to low switch +
989
		/* in terms of txbyteclkhs. actual high to low switch +
580
	 * MIPI_STOP_STATE_STALL * MIPI_LP_BYTECLK.
990
		 * MIPI_STOP_STATE_STALL * MIPI_LP_BYTECLK.
581
	 *
991
		 *
582
	 * XXX: write MIPI_STOP_STATE_STALL?
992
		 * XXX: write MIPI_STOP_STATE_STALL?
583
	 */
993
		 */
584
	I915_WRITE(MIPI_HIGH_LOW_SWITCH_COUNT(pipe),
994
		I915_WRITE(MIPI_HIGH_LOW_SWITCH_COUNT(port),
585
						intel_dsi->hs_to_lp_count);
995
						intel_dsi->hs_to_lp_count);
586
 
996
 
587
	/* XXX: low power clock equivalence in terms of byte clock. the number
997
		/* XXX: low power clock equivalence in terms of byte clock.
-
 
998
		 * the number of byte clocks occupied in one low power clock.
588
	 * of byte clocks occupied in one low power clock. based on txbyteclkhs
999
		 * based on txbyteclkhs and txclkesc.
589
	 * and txclkesc. txclkesc time / txbyteclk time * (105 +
1000
		 * txclkesc time / txbyteclk time * (105 + MIPI_STOP_STATE_STALL
590
	 * MIPI_STOP_STATE_STALL) / 105.???
1001
		 * ) / 105.???
591
	 */
1002
		 */
592
	I915_WRITE(MIPI_LP_BYTECLK(pipe), intel_dsi->lp_byte_clk);
1003
		I915_WRITE(MIPI_LP_BYTECLK(port), intel_dsi->lp_byte_clk);
593
 
1004
 
594
	/* the bw essential for transmitting 16 long packets containing 252
1005
		/* the bw essential for transmitting 16 long packets containing
595
	 * bytes meant for dcs write memory command is programmed in this
1006
		 * 252 bytes meant for dcs write memory command is programmed in
596
	 * register in terms of byte clocks. based on dsi transfer rate and the
1007
		 * this register in terms of byte clocks. based on dsi transfer
597
	 * number of lanes configured the time taken to transmit 16 long packets
1008
		 * rate and the number of lanes configured the time taken to
598
	 * in a dsi stream varies. */
1009
		 * transmit 16 long packets in a dsi stream varies. */
599
	I915_WRITE(MIPI_DBI_BW_CTRL(pipe), intel_dsi->bw_timer);
1010
		I915_WRITE(MIPI_DBI_BW_CTRL(port), intel_dsi->bw_timer);
600
 
1011
 
601
	I915_WRITE(MIPI_CLK_LANE_SWITCH_TIME_CNT(pipe),
1012
		I915_WRITE(MIPI_CLK_LANE_SWITCH_TIME_CNT(port),
602
		   intel_dsi->clk_lp_to_hs_count << LP_HS_SSW_CNT_SHIFT |
1013
		intel_dsi->clk_lp_to_hs_count << LP_HS_SSW_CNT_SHIFT |
603
		   intel_dsi->clk_hs_to_lp_count << HS_LP_PWR_SW_CNT_SHIFT);
1014
		intel_dsi->clk_hs_to_lp_count << HS_LP_PWR_SW_CNT_SHIFT);
604
 
1015
 
605
	if (is_vid_mode(intel_dsi))
1016
		if (is_vid_mode(intel_dsi))
606
		/* Some panels might have resolution which is not a multiple of
1017
			/* Some panels might have resolution which is not a
607
		 * 64 like 1366 x 768. Enable RANDOM resolution support for such
1018
			 * multiple of 64 like 1366 x 768. Enable RANDOM
608
		 * panels by default */
1019
			 * resolution support for such panels by default */
609
		I915_WRITE(MIPI_VIDEO_MODE_FORMAT(pipe),
1020
			I915_WRITE(MIPI_VIDEO_MODE_FORMAT(port),
610
				intel_dsi->video_frmt_cfg_bits |
1021
				intel_dsi->video_frmt_cfg_bits |
611
				intel_dsi->video_mode_format |
1022
				intel_dsi->video_mode_format |
612
				IP_TG_CONFIG |
1023
				IP_TG_CONFIG |
613
				RANDOM_DPI_DISPLAY_RESOLUTION);
1024
				RANDOM_DPI_DISPLAY_RESOLUTION);
614
}
1025
	}
-
 
1026
}
615
 
1027
 
616
static void intel_dsi_pre_pll_enable(struct intel_encoder *encoder)
1028
static void intel_dsi_pre_pll_enable(struct intel_encoder *encoder)
617
{
1029
{
618
	DRM_DEBUG_KMS("\n");
1030
	DRM_DEBUG_KMS("\n");
619
 
1031
 
620
	intel_dsi_prepare(encoder);
1032
	intel_dsi_prepare(encoder);
-
 
1033
	intel_enable_dsi_pll(encoder);
621
 
-
 
622
	vlv_enable_dsi_pll(encoder);
1034
 
623
}
1035
}
624
 
1036
 
625
static enum drm_connector_status
1037
static enum drm_connector_status
626
intel_dsi_detect(struct drm_connector *connector, bool force)
1038
intel_dsi_detect(struct drm_connector *connector, bool force)
627
{
1039
{
628
	struct intel_dsi *intel_dsi = intel_attached_dsi(connector);
-
 
629
	struct intel_encoder *intel_encoder = &intel_dsi->base;
-
 
630
	enum intel_display_power_domain power_domain;
-
 
631
	enum drm_connector_status connector_status;
-
 
632
	struct drm_i915_private *dev_priv = intel_encoder->base.dev->dev_private;
-
 
633
 
-
 
634
	DRM_DEBUG_KMS("\n");
-
 
635
	power_domain = intel_display_port_power_domain(intel_encoder);
-
 
636
 
-
 
637
	intel_display_power_get(dev_priv, power_domain);
-
 
638
	connector_status = intel_dsi->dev.dev_ops->detect(&intel_dsi->dev);
-
 
639
	intel_display_power_put(dev_priv, power_domain);
-
 
640
 
-
 
641
	return connector_status;
1040
	return connector_status_connected;
642
}
1041
}
643
 
1042
 
644
static int intel_dsi_get_modes(struct drm_connector *connector)
1043
static int intel_dsi_get_modes(struct drm_connector *connector)
645
{
1044
{
646
	struct intel_connector *intel_connector = to_intel_connector(connector);
1045
	struct intel_connector *intel_connector = to_intel_connector(connector);
647
	struct drm_display_mode *mode;
1046
	struct drm_display_mode *mode;
648
 
1047
 
649
	DRM_DEBUG_KMS("\n");
1048
	DRM_DEBUG_KMS("\n");
650
 
1049
 
651
	if (!intel_connector->panel.fixed_mode) {
1050
	if (!intel_connector->panel.fixed_mode) {
652
		DRM_DEBUG_KMS("no fixed mode\n");
1051
		DRM_DEBUG_KMS("no fixed mode\n");
653
		return 0;
1052
		return 0;
654
	}
1053
	}
655
 
1054
 
656
	mode = drm_mode_duplicate(connector->dev,
1055
	mode = drm_mode_duplicate(connector->dev,
657
				  intel_connector->panel.fixed_mode);
1056
				  intel_connector->panel.fixed_mode);
658
	if (!mode) {
1057
	if (!mode) {
659
		DRM_DEBUG_KMS("drm_mode_duplicate failed\n");
1058
		DRM_DEBUG_KMS("drm_mode_duplicate failed\n");
660
		return 0;
1059
		return 0;
661
	}
1060
	}
662
 
1061
 
663
	drm_mode_probed_add(connector, mode);
1062
	drm_mode_probed_add(connector, mode);
664
	return 1;
1063
	return 1;
665
}
1064
}
666
 
1065
 
667
static void intel_dsi_destroy(struct drm_connector *connector)
1066
static void intel_dsi_connector_destroy(struct drm_connector *connector)
668
{
1067
{
669
	struct intel_connector *intel_connector = to_intel_connector(connector);
1068
	struct intel_connector *intel_connector = to_intel_connector(connector);
670
 
1069
 
671
	DRM_DEBUG_KMS("\n");
1070
	DRM_DEBUG_KMS("\n");
672
	intel_panel_fini(&intel_connector->panel);
1071
	intel_panel_fini(&intel_connector->panel);
673
	drm_connector_cleanup(connector);
1072
	drm_connector_cleanup(connector);
674
	kfree(connector);
1073
	kfree(connector);
675
}
1074
}
-
 
1075
 
-
 
1076
static void intel_dsi_encoder_destroy(struct drm_encoder *encoder)
-
 
1077
{
-
 
1078
	struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder);
-
 
1079
 
-
 
1080
	if (intel_dsi->panel) {
-
 
1081
		drm_panel_detach(intel_dsi->panel);
-
 
1082
		/* XXX: Logically this call belongs in the panel driver. */
-
 
1083
		drm_panel_remove(intel_dsi->panel);
-
 
1084
	}
-
 
1085
 
-
 
1086
	/* dispose of the gpios */
-
 
1087
	if (intel_dsi->gpio_panel)
-
 
1088
		gpiod_put(intel_dsi->gpio_panel);
-
 
1089
 
-
 
1090
	intel_encoder_destroy(encoder);
-
 
1091
}
676
 
1092
 
677
static const struct drm_encoder_funcs intel_dsi_funcs = {
1093
static const struct drm_encoder_funcs intel_dsi_funcs = {
678
	.destroy = intel_encoder_destroy,
1094
	.destroy = intel_dsi_encoder_destroy,
679
};
1095
};
680
 
1096
 
681
static const struct drm_connector_helper_funcs intel_dsi_connector_helper_funcs = {
1097
static const struct drm_connector_helper_funcs intel_dsi_connector_helper_funcs = {
682
	.get_modes = intel_dsi_get_modes,
1098
	.get_modes = intel_dsi_get_modes,
683
	.mode_valid = intel_dsi_mode_valid,
1099
	.mode_valid = intel_dsi_mode_valid,
684
	.best_encoder = intel_best_encoder,
1100
	.best_encoder = intel_best_encoder,
685
};
1101
};
686
 
1102
 
687
static const struct drm_connector_funcs intel_dsi_connector_funcs = {
1103
static const struct drm_connector_funcs intel_dsi_connector_funcs = {
688
	.dpms = intel_connector_dpms,
1104
	.dpms = drm_atomic_helper_connector_dpms,
689
	.detect = intel_dsi_detect,
1105
	.detect = intel_dsi_detect,
690
	.destroy = intel_dsi_destroy,
1106
	.destroy = intel_dsi_connector_destroy,
691
	.fill_modes = drm_helper_probe_single_connector_modes,
1107
	.fill_modes = drm_helper_probe_single_connector_modes,
-
 
1108
	.atomic_get_property = intel_connector_atomic_get_property,
-
 
1109
	.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
-
 
1110
	.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
692
};
1111
};
693
 
1112
 
694
void intel_dsi_init(struct drm_device *dev)
1113
void intel_dsi_init(struct drm_device *dev)
695
{
1114
{
696
	struct intel_dsi *intel_dsi;
1115
	struct intel_dsi *intel_dsi;
697
	struct intel_encoder *intel_encoder;
1116
	struct intel_encoder *intel_encoder;
698
	struct drm_encoder *encoder;
1117
	struct drm_encoder *encoder;
699
	struct intel_connector *intel_connector;
1118
	struct intel_connector *intel_connector;
700
	struct drm_connector *connector;
1119
	struct drm_connector *connector;
701
	struct drm_display_mode *fixed_mode = NULL;
1120
	struct drm_display_mode *scan, *fixed_mode = NULL;
702
	struct drm_i915_private *dev_priv = dev->dev_private;
1121
	struct drm_i915_private *dev_priv = dev->dev_private;
703
	const struct intel_dsi_device *dsi;
1122
	enum port port;
704
	unsigned int i;
1123
	unsigned int i;
705
 
1124
 
706
	DRM_DEBUG_KMS("\n");
1125
	DRM_DEBUG_KMS("\n");
707
 
1126
 
708
	/* There is no detection method for MIPI so rely on VBT */
1127
	/* There is no detection method for MIPI so rely on VBT */
709
	if (!dev_priv->vbt.has_mipi)
1128
	if (!dev_priv->vbt.has_mipi)
710
		return;
1129
		return;
711
 
1130
 
712
	if (IS_VALLEYVIEW(dev)) {
1131
	if (IS_VALLEYVIEW(dev)) {
713
		dev_priv->mipi_mmio_base = VLV_MIPI_BASE;
1132
		dev_priv->mipi_mmio_base = VLV_MIPI_BASE;
714
	} else {
1133
	} else {
715
		DRM_ERROR("Unsupported Mipi device to reg base");
1134
		DRM_ERROR("Unsupported Mipi device to reg base");
716
		return;
1135
		return;
717
	}
1136
	}
718
 
1137
 
719
	intel_dsi = kzalloc(sizeof(*intel_dsi), GFP_KERNEL);
1138
	intel_dsi = kzalloc(sizeof(*intel_dsi), GFP_KERNEL);
720
	if (!intel_dsi)
1139
	if (!intel_dsi)
721
		return;
1140
		return;
722
 
1141
 
723
	intel_connector = kzalloc(sizeof(*intel_connector), GFP_KERNEL);
1142
	intel_connector = intel_connector_alloc();
724
	if (!intel_connector) {
1143
	if (!intel_connector) {
725
		kfree(intel_dsi);
1144
		kfree(intel_dsi);
726
		return;
1145
		return;
727
	}
1146
	}
728
 
1147
 
729
	intel_encoder = &intel_dsi->base;
1148
	intel_encoder = &intel_dsi->base;
730
	encoder = &intel_encoder->base;
1149
	encoder = &intel_encoder->base;
731
	intel_dsi->attached_connector = intel_connector;
1150
	intel_dsi->attached_connector = intel_connector;
732
 
1151
 
733
	connector = &intel_connector->base;
1152
	connector = &intel_connector->base;
734
 
1153
 
735
	drm_encoder_init(dev, encoder, &intel_dsi_funcs, DRM_MODE_ENCODER_DSI);
1154
	drm_encoder_init(dev, encoder, &intel_dsi_funcs, DRM_MODE_ENCODER_DSI);
736
 
1155
 
737
	/* XXX: very likely not all of these are needed */
1156
	/* XXX: very likely not all of these are needed */
738
	intel_encoder->hot_plug = intel_dsi_hot_plug;
-
 
739
	intel_encoder->compute_config = intel_dsi_compute_config;
1157
	intel_encoder->compute_config = intel_dsi_compute_config;
740
	intel_encoder->pre_pll_enable = intel_dsi_pre_pll_enable;
1158
	intel_encoder->pre_pll_enable = intel_dsi_pre_pll_enable;
741
	intel_encoder->pre_enable = intel_dsi_pre_enable;
1159
	intel_encoder->pre_enable = intel_dsi_pre_enable;
742
	intel_encoder->enable = intel_dsi_enable_nop;
1160
	intel_encoder->enable = intel_dsi_enable_nop;
743
	intel_encoder->disable = intel_dsi_pre_disable;
1161
	intel_encoder->disable = intel_dsi_pre_disable;
744
	intel_encoder->post_disable = intel_dsi_post_disable;
1162
	intel_encoder->post_disable = intel_dsi_post_disable;
745
	intel_encoder->get_hw_state = intel_dsi_get_hw_state;
1163
	intel_encoder->get_hw_state = intel_dsi_get_hw_state;
746
	intel_encoder->get_config = intel_dsi_get_config;
1164
	intel_encoder->get_config = intel_dsi_get_config;
747
 
1165
 
748
	intel_connector->get_hw_state = intel_connector_get_hw_state;
1166
	intel_connector->get_hw_state = intel_connector_get_hw_state;
749
	intel_connector->unregister = intel_connector_unregister;
1167
	intel_connector->unregister = intel_connector_unregister;
-
 
1168
 
-
 
1169
	/* Pipe A maps to MIPI DSI port A, pipe B maps to MIPI DSI port C */
-
 
1170
	if (dev_priv->vbt.dsi.port == DVO_PORT_MIPIA) {
-
 
1171
		intel_encoder->crtc_mask = (1 << PIPE_A);
-
 
1172
		intel_dsi->ports = (1 << PORT_A);
-
 
1173
	} else if (dev_priv->vbt.dsi.port == DVO_PORT_MIPIC) {
-
 
1174
		intel_encoder->crtc_mask = (1 << PIPE_B);
-
 
1175
		intel_dsi->ports = (1 << PORT_C);
-
 
1176
	}
-
 
1177
 
-
 
1178
	if (dev_priv->vbt.dsi.config->dual_link)
-
 
1179
		intel_dsi->ports = ((1 << PORT_A) | (1 << PORT_C));
-
 
1180
 
750
 
1181
	/* Create a DSI host (and a device) for each port. */
751
	for (i = 0; i < ARRAY_SIZE(intel_dsi_devices); i++) {
1182
	for_each_dsi_port(port, intel_dsi->ports) {
-
 
1183
		struct intel_dsi_host *host;
752
		dsi = &intel_dsi_devices[i];
1184
 
-
 
1185
		host = intel_dsi_host_init(intel_dsi, port);
-
 
1186
		if (!host)
-
 
1187
			goto err;
-
 
1188
 
-
 
1189
		intel_dsi->dsi_hosts[port] = host;
-
 
1190
	}
-
 
1191
 
-
 
1192
	for (i = 0; i < ARRAY_SIZE(intel_dsi_drivers); i++) {
753
		intel_dsi->dev = *dsi;
1193
		intel_dsi->panel = intel_dsi_drivers[i].init(intel_dsi,
754
 
1194
							     intel_dsi_drivers[i].panel_id);
755
		if (dsi->dev_ops->init(&intel_dsi->dev))
1195
		if (intel_dsi->panel)
756
			break;
1196
			break;
757
	}
1197
	}
758
 
1198
 
759
	if (i == ARRAY_SIZE(intel_dsi_devices)) {
1199
	if (!intel_dsi->panel) {
760
		DRM_DEBUG_KMS("no device found\n");
1200
		DRM_DEBUG_KMS("no device found\n");
761
		goto err;
1201
		goto err;
762
	}
1202
	}
-
 
1203
 
-
 
1204
	/*
-
 
1205
	 * In case of BYT with CRC PMIC, we need to use GPIO for
-
 
1206
	 * Panel control.
-
 
1207
	 */
-
 
1208
	if (dev_priv->vbt.dsi.config->pwm_blc == PPS_BLC_PMIC) {
763
 
1209
		intel_dsi->gpio_panel =
-
 
1210
			gpiod_get(dev->dev, "panel", GPIOD_OUT_HIGH);
-
 
1211
 
-
 
1212
		if (IS_ERR(intel_dsi->gpio_panel)) {
764
	intel_encoder->type = INTEL_OUTPUT_DSI;
1213
			DRM_ERROR("Failed to own gpio for panel control\n");
-
 
1214
			intel_dsi->gpio_panel = NULL;
-
 
1215
		}
-
 
1216
	}
765
	intel_encoder->crtc_mask = (1 << 0); /* XXX */
1217
 
766
 
1218
	intel_encoder->type = INTEL_OUTPUT_DSI;
767
	intel_encoder->cloneable = 0;
1219
	intel_encoder->cloneable = 0;
768
	drm_connector_init(dev, connector, &intel_dsi_connector_funcs,
1220
	drm_connector_init(dev, connector, &intel_dsi_connector_funcs,
769
			   DRM_MODE_CONNECTOR_DSI);
1221
			   DRM_MODE_CONNECTOR_DSI);
770
 
1222
 
771
	drm_connector_helper_add(connector, &intel_dsi_connector_helper_funcs);
1223
	drm_connector_helper_add(connector, &intel_dsi_connector_helper_funcs);
772
 
1224
 
773
	connector->display_info.subpixel_order = SubPixelHorizontalRGB; /*XXX*/
1225
	connector->display_info.subpixel_order = SubPixelHorizontalRGB; /*XXX*/
774
	connector->interlace_allowed = false;
1226
	connector->interlace_allowed = false;
775
	connector->doublescan_allowed = false;
1227
	connector->doublescan_allowed = false;
776
 
1228
 
777
	intel_connector_attach_encoder(intel_connector, intel_encoder);
1229
	intel_connector_attach_encoder(intel_connector, intel_encoder);
778
 
1230
 
779
	drm_connector_register(connector);
1231
	drm_connector_register(connector);
-
 
1232
 
-
 
1233
	drm_panel_attach(intel_dsi->panel, connector);
-
 
1234
 
780
 
1235
	mutex_lock(&dev->mode_config.mutex);
-
 
1236
	drm_panel_get_modes(intel_dsi->panel);
-
 
1237
	list_for_each_entry(scan, &connector->probed_modes, head) {
-
 
1238
		if ((scan->type & DRM_MODE_TYPE_PREFERRED)) {
-
 
1239
			fixed_mode = drm_mode_duplicate(dev, scan);
-
 
1240
			break;
-
 
1241
		}
-
 
1242
	}
-
 
1243
	mutex_unlock(&dev->mode_config.mutex);
781
	fixed_mode = dsi->dev_ops->get_modes(&intel_dsi->dev);
1244
 
782
	if (!fixed_mode) {
1245
	if (!fixed_mode) {
783
		DRM_DEBUG_KMS("no fixed mode\n");
1246
		DRM_DEBUG_KMS("no fixed mode\n");
784
		goto err;
1247
		goto err;
785
	}
1248
	}
786
 
-
 
787
	fixed_mode->type |= DRM_MODE_TYPE_PREFERRED;
1249
 
-
 
1250
	intel_panel_init(&intel_connector->panel, fixed_mode, NULL);
788
	intel_panel_init(&intel_connector->panel, fixed_mode, NULL);
1251
	intel_panel_setup_backlight(connector, INVALID_PIPE);
789
 
1252
 
790
	return;
1253
	return;
791
 
1254
 
792
err:
1255
err:
793
	drm_encoder_cleanup(&intel_encoder->base);
1256
	drm_encoder_cleanup(&intel_encoder->base);
794
	kfree(intel_dsi);
1257
	kfree(intel_dsi);
795
	kfree(intel_connector);
1258
	kfree(intel_connector);
796
}
1259
}
797
>
1260
>
798
>
1261
>