diff options
author | Steve Longerbeam <slongerbeam@gmail.com> | 2014-12-18 21:00:25 -0500 |
---|---|---|
committer | Philipp Zabel <p.zabel@pengutronix.de> | 2015-01-07 13:15:03 -0500 |
commit | b6835a719aaa5ee6f493c94cb8b1ff9ad13f5a18 (patch) | |
tree | a97e12f8d51dc4d333524e0f0612b75f99987cf7 | |
parent | eb10d6355532def3a74aaabd115e2373cca70b9d (diff) |
gpu: ipu-v3: Use videomode in struct ipu_di_signal_cfg
This patch changes struct ipu_di_signal_cfg to use struct videomode
to define video timings and flags.
Signed-off-by: Steve Longerbeam <steve_longerbeam@mentor.com>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
-rw-r--r-- | drivers/gpu/drm/imx/ipuv3-crtc.c | 26 | ||||
-rw-r--r-- | drivers/gpu/ipu-v3/ipu-di.c | 89 | ||||
-rw-r--r-- | include/video/imx-ipu-v3.h | 19 |
3 files changed, 56 insertions, 78 deletions
diff --git a/drivers/gpu/drm/imx/ipuv3-crtc.c b/drivers/gpu/drm/imx/ipuv3-crtc.c index 23d69ecb62dd..c1fc3735913d 100644 --- a/drivers/gpu/drm/imx/ipuv3-crtc.c +++ b/drivers/gpu/drm/imx/ipuv3-crtc.c | |||
@@ -153,35 +153,19 @@ static int ipu_crtc_mode_set(struct drm_crtc *crtc, | |||
153 | 153 | ||
154 | out_pixel_fmt = ipu_crtc->interface_pix_fmt; | 154 | out_pixel_fmt = ipu_crtc->interface_pix_fmt; |
155 | 155 | ||
156 | if (mode->flags & DRM_MODE_FLAG_INTERLACE) | ||
157 | sig_cfg.interlaced = 1; | ||
158 | if (mode->flags & DRM_MODE_FLAG_PHSYNC) | ||
159 | sig_cfg.Hsync_pol = 1; | ||
160 | if (mode->flags & DRM_MODE_FLAG_PVSYNC) | ||
161 | sig_cfg.Vsync_pol = 1; | ||
162 | |||
163 | sig_cfg.enable_pol = 1; | 156 | sig_cfg.enable_pol = 1; |
164 | sig_cfg.clk_pol = 0; | 157 | sig_cfg.clk_pol = 0; |
165 | sig_cfg.width = mode->hdisplay; | ||
166 | sig_cfg.height = mode->vdisplay; | ||
167 | sig_cfg.pixel_fmt = out_pixel_fmt; | 158 | sig_cfg.pixel_fmt = out_pixel_fmt; |
168 | sig_cfg.h_start_width = mode->htotal - mode->hsync_end; | ||
169 | sig_cfg.h_sync_width = mode->hsync_end - mode->hsync_start; | ||
170 | sig_cfg.h_end_width = mode->hsync_start - mode->hdisplay; | ||
171 | |||
172 | sig_cfg.v_start_width = mode->vtotal - mode->vsync_end; | ||
173 | sig_cfg.v_sync_width = mode->vsync_end - mode->vsync_start; | ||
174 | sig_cfg.v_end_width = mode->vsync_start - mode->vdisplay; | ||
175 | sig_cfg.pixelclock = mode->clock * 1000; | ||
176 | sig_cfg.clkflags = ipu_crtc->di_clkflags; | 159 | sig_cfg.clkflags = ipu_crtc->di_clkflags; |
177 | |||
178 | sig_cfg.v_to_h_sync = 0; | 160 | sig_cfg.v_to_h_sync = 0; |
179 | |||
180 | sig_cfg.hsync_pin = ipu_crtc->di_hsync_pin; | 161 | sig_cfg.hsync_pin = ipu_crtc->di_hsync_pin; |
181 | sig_cfg.vsync_pin = ipu_crtc->di_vsync_pin; | 162 | sig_cfg.vsync_pin = ipu_crtc->di_vsync_pin; |
182 | 163 | ||
183 | ret = ipu_dc_init_sync(ipu_crtc->dc, ipu_crtc->di, sig_cfg.interlaced, | 164 | drm_display_mode_to_videomode(mode, &sig_cfg.mode); |
184 | out_pixel_fmt, mode->hdisplay); | 165 | |
166 | ret = ipu_dc_init_sync(ipu_crtc->dc, ipu_crtc->di, | ||
167 | mode->flags & DRM_MODE_FLAG_INTERLACE, | ||
168 | out_pixel_fmt, mode->hdisplay); | ||
185 | if (ret) { | 169 | if (ret) { |
186 | dev_err(ipu_crtc->dev, | 170 | dev_err(ipu_crtc->dev, |
187 | "initializing display controller failed with %d\n", | 171 | "initializing display controller failed with %d\n", |
diff --git a/drivers/gpu/ipu-v3/ipu-di.c b/drivers/gpu/ipu-v3/ipu-di.c index 41df8d75d8bd..d95fbd0f6952 100644 --- a/drivers/gpu/ipu-v3/ipu-di.c +++ b/drivers/gpu/ipu-v3/ipu-di.c | |||
@@ -207,10 +207,10 @@ static void ipu_di_sync_config(struct ipu_di *di, struct di_sync_config *config, | |||
207 | static void ipu_di_sync_config_interlaced(struct ipu_di *di, | 207 | static void ipu_di_sync_config_interlaced(struct ipu_di *di, |
208 | struct ipu_di_signal_cfg *sig) | 208 | struct ipu_di_signal_cfg *sig) |
209 | { | 209 | { |
210 | u32 h_total = sig->width + sig->h_sync_width + | 210 | u32 h_total = sig->mode.hactive + sig->mode.hsync_len + |
211 | sig->h_start_width + sig->h_end_width; | 211 | sig->mode.hback_porch + sig->mode.hfront_porch; |
212 | u32 v_total = sig->height + sig->v_sync_width + | 212 | u32 v_total = sig->mode.vactive + sig->mode.vsync_len + |
213 | sig->v_start_width + sig->v_end_width; | 213 | sig->mode.vback_porch + sig->mode.vfront_porch; |
214 | u32 reg; | 214 | u32 reg; |
215 | struct di_sync_config cfg[] = { | 215 | struct di_sync_config cfg[] = { |
216 | { | 216 | { |
@@ -229,13 +229,13 @@ static void ipu_di_sync_config_interlaced(struct ipu_di *di, | |||
229 | }, { | 229 | }, { |
230 | .run_count = v_total / 2 - 1, | 230 | .run_count = v_total / 2 - 1, |
231 | .run_src = DI_SYNC_HSYNC, | 231 | .run_src = DI_SYNC_HSYNC, |
232 | .offset_count = sig->v_start_width, | 232 | .offset_count = sig->mode.vback_porch, |
233 | .offset_src = DI_SYNC_HSYNC, | 233 | .offset_src = DI_SYNC_HSYNC, |
234 | .repeat_count = 2, | 234 | .repeat_count = 2, |
235 | .cnt_clr_src = DI_SYNC_VSYNC, | 235 | .cnt_clr_src = DI_SYNC_VSYNC, |
236 | }, { | 236 | }, { |
237 | .run_src = DI_SYNC_HSYNC, | 237 | .run_src = DI_SYNC_HSYNC, |
238 | .repeat_count = sig->height / 2, | 238 | .repeat_count = sig->mode.vactive / 2, |
239 | .cnt_clr_src = 4, | 239 | .cnt_clr_src = 4, |
240 | }, { | 240 | }, { |
241 | .run_count = v_total - 1, | 241 | .run_count = v_total - 1, |
@@ -249,9 +249,9 @@ static void ipu_di_sync_config_interlaced(struct ipu_di *di, | |||
249 | .cnt_clr_src = DI_SYNC_VSYNC, | 249 | .cnt_clr_src = DI_SYNC_VSYNC, |
250 | }, { | 250 | }, { |
251 | .run_src = DI_SYNC_CLK, | 251 | .run_src = DI_SYNC_CLK, |
252 | .offset_count = sig->h_start_width, | 252 | .offset_count = sig->mode.hback_porch, |
253 | .offset_src = DI_SYNC_CLK, | 253 | .offset_src = DI_SYNC_CLK, |
254 | .repeat_count = sig->width, | 254 | .repeat_count = sig->mode.hactive, |
255 | .cnt_clr_src = 5, | 255 | .cnt_clr_src = 5, |
256 | }, { | 256 | }, { |
257 | .run_count = v_total - 1, | 257 | .run_count = v_total - 1, |
@@ -277,10 +277,10 @@ static void ipu_di_sync_config_interlaced(struct ipu_di *di, | |||
277 | static void ipu_di_sync_config_noninterlaced(struct ipu_di *di, | 277 | static void ipu_di_sync_config_noninterlaced(struct ipu_di *di, |
278 | struct ipu_di_signal_cfg *sig, int div) | 278 | struct ipu_di_signal_cfg *sig, int div) |
279 | { | 279 | { |
280 | u32 h_total = sig->width + sig->h_sync_width + sig->h_start_width + | 280 | u32 h_total = sig->mode.hactive + sig->mode.hsync_len + |
281 | sig->h_end_width; | 281 | sig->mode.hback_porch + sig->mode.hfront_porch; |
282 | u32 v_total = sig->height + sig->v_sync_width + sig->v_start_width + | 282 | u32 v_total = sig->mode.vactive + sig->mode.vsync_len + |
283 | sig->v_end_width; | 283 | sig->mode.vback_porch + sig->mode.vfront_porch; |
284 | struct di_sync_config cfg[] = { | 284 | struct di_sync_config cfg[] = { |
285 | { | 285 | { |
286 | /* 1: INT_HSYNC */ | 286 | /* 1: INT_HSYNC */ |
@@ -294,27 +294,29 @@ static void ipu_di_sync_config_noninterlaced(struct ipu_di *di, | |||
294 | .offset_src = DI_SYNC_CLK, | 294 | .offset_src = DI_SYNC_CLK, |
295 | .cnt_polarity_gen_en = 1, | 295 | .cnt_polarity_gen_en = 1, |
296 | .cnt_polarity_trigger_src = DI_SYNC_CLK, | 296 | .cnt_polarity_trigger_src = DI_SYNC_CLK, |
297 | .cnt_down = sig->h_sync_width * 2, | 297 | .cnt_down = sig->mode.hsync_len * 2, |
298 | } , { | 298 | } , { |
299 | /* PIN3: VSYNC */ | 299 | /* PIN3: VSYNC */ |
300 | .run_count = v_total - 1, | 300 | .run_count = v_total - 1, |
301 | .run_src = DI_SYNC_INT_HSYNC, | 301 | .run_src = DI_SYNC_INT_HSYNC, |
302 | .cnt_polarity_gen_en = 1, | 302 | .cnt_polarity_gen_en = 1, |
303 | .cnt_polarity_trigger_src = DI_SYNC_INT_HSYNC, | 303 | .cnt_polarity_trigger_src = DI_SYNC_INT_HSYNC, |
304 | .cnt_down = sig->v_sync_width * 2, | 304 | .cnt_down = sig->mode.vsync_len * 2, |
305 | } , { | 305 | } , { |
306 | /* 4: Line Active */ | 306 | /* 4: Line Active */ |
307 | .run_src = DI_SYNC_HSYNC, | 307 | .run_src = DI_SYNC_HSYNC, |
308 | .offset_count = sig->v_sync_width + sig->v_start_width, | 308 | .offset_count = sig->mode.vsync_len + |
309 | sig->mode.vback_porch, | ||
309 | .offset_src = DI_SYNC_HSYNC, | 310 | .offset_src = DI_SYNC_HSYNC, |
310 | .repeat_count = sig->height, | 311 | .repeat_count = sig->mode.vactive, |
311 | .cnt_clr_src = DI_SYNC_VSYNC, | 312 | .cnt_clr_src = DI_SYNC_VSYNC, |
312 | } , { | 313 | } , { |
313 | /* 5: Pixel Active, referenced by DC */ | 314 | /* 5: Pixel Active, referenced by DC */ |
314 | .run_src = DI_SYNC_CLK, | 315 | .run_src = DI_SYNC_CLK, |
315 | .offset_count = sig->h_sync_width + sig->h_start_width, | 316 | .offset_count = sig->mode.hsync_len + |
317 | sig->mode.hback_porch, | ||
316 | .offset_src = DI_SYNC_CLK, | 318 | .offset_src = DI_SYNC_CLK, |
317 | .repeat_count = sig->width, | 319 | .repeat_count = sig->mode.hactive, |
318 | .cnt_clr_src = 5, /* Line Active */ | 320 | .cnt_clr_src = 5, /* Line Active */ |
319 | } , { | 321 | } , { |
320 | /* unused */ | 322 | /* unused */ |
@@ -339,9 +341,10 @@ static void ipu_di_sync_config_noninterlaced(struct ipu_di *di, | |||
339 | } , { | 341 | } , { |
340 | /* 3: Line Active */ | 342 | /* 3: Line Active */ |
341 | .run_src = DI_SYNC_INT_HSYNC, | 343 | .run_src = DI_SYNC_INT_HSYNC, |
342 | .offset_count = sig->v_sync_width + sig->v_start_width, | 344 | .offset_count = sig->mode.vsync_len + |
345 | sig->mode.vback_porch, | ||
343 | .offset_src = DI_SYNC_INT_HSYNC, | 346 | .offset_src = DI_SYNC_INT_HSYNC, |
344 | .repeat_count = sig->height, | 347 | .repeat_count = sig->mode.vactive, |
345 | .cnt_clr_src = 3 /* VSYNC */, | 348 | .cnt_clr_src = 3 /* VSYNC */, |
346 | } , { | 349 | } , { |
347 | /* PIN4: HSYNC for VGA via TVEv2 on TQ MBa53 */ | 350 | /* PIN4: HSYNC for VGA via TVEv2 on TQ MBa53 */ |
@@ -351,13 +354,14 @@ static void ipu_di_sync_config_noninterlaced(struct ipu_di *di, | |||
351 | .offset_src = DI_SYNC_CLK, | 354 | .offset_src = DI_SYNC_CLK, |
352 | .cnt_polarity_gen_en = 1, | 355 | .cnt_polarity_gen_en = 1, |
353 | .cnt_polarity_trigger_src = DI_SYNC_CLK, | 356 | .cnt_polarity_trigger_src = DI_SYNC_CLK, |
354 | .cnt_down = sig->h_sync_width * 2, | 357 | .cnt_down = sig->mode.hsync_len * 2, |
355 | } , { | 358 | } , { |
356 | /* 5: Pixel Active signal to DC */ | 359 | /* 5: Pixel Active signal to DC */ |
357 | .run_src = DI_SYNC_CLK, | 360 | .run_src = DI_SYNC_CLK, |
358 | .offset_count = sig->h_sync_width + sig->h_start_width, | 361 | .offset_count = sig->mode.hsync_len + |
362 | sig->mode.hback_porch, | ||
359 | .offset_src = DI_SYNC_CLK, | 363 | .offset_src = DI_SYNC_CLK, |
360 | .repeat_count = sig->width, | 364 | .repeat_count = sig->mode.hactive, |
361 | .cnt_clr_src = 4, /* Line Active */ | 365 | .cnt_clr_src = 4, /* Line Active */ |
362 | } , { | 366 | } , { |
363 | /* PIN6: VSYNC for VGA via TVEv2 on TQ MBa53 */ | 367 | /* PIN6: VSYNC for VGA via TVEv2 on TQ MBa53 */ |
@@ -367,7 +371,7 @@ static void ipu_di_sync_config_noninterlaced(struct ipu_di *di, | |||
367 | .offset_src = DI_SYNC_INT_HSYNC, | 371 | .offset_src = DI_SYNC_INT_HSYNC, |
368 | .cnt_polarity_gen_en = 1, | 372 | .cnt_polarity_gen_en = 1, |
369 | .cnt_polarity_trigger_src = DI_SYNC_INT_HSYNC, | 373 | .cnt_polarity_trigger_src = DI_SYNC_INT_HSYNC, |
370 | .cnt_down = sig->v_sync_width * 2, | 374 | .cnt_down = sig->mode.vsync_len * 2, |
371 | } , { | 375 | } , { |
372 | /* PIN4: HSYNC for VGA via TVEv2 on i.MX53-QSB */ | 376 | /* PIN4: HSYNC for VGA via TVEv2 on i.MX53-QSB */ |
373 | .run_count = h_total - 1, | 377 | .run_count = h_total - 1, |
@@ -376,7 +380,7 @@ static void ipu_di_sync_config_noninterlaced(struct ipu_di *di, | |||
376 | .offset_src = DI_SYNC_CLK, | 380 | .offset_src = DI_SYNC_CLK, |
377 | .cnt_polarity_gen_en = 1, | 381 | .cnt_polarity_gen_en = 1, |
378 | .cnt_polarity_trigger_src = DI_SYNC_CLK, | 382 | .cnt_polarity_trigger_src = DI_SYNC_CLK, |
379 | .cnt_down = sig->h_sync_width * 2, | 383 | .cnt_down = sig->mode.hsync_len * 2, |
380 | } , { | 384 | } , { |
381 | /* PIN6: VSYNC for VGA via TVEv2 on i.MX53-QSB */ | 385 | /* PIN6: VSYNC for VGA via TVEv2 on i.MX53-QSB */ |
382 | .run_count = v_total - 1, | 386 | .run_count = v_total - 1, |
@@ -385,7 +389,7 @@ static void ipu_di_sync_config_noninterlaced(struct ipu_di *di, | |||
385 | .offset_src = DI_SYNC_INT_HSYNC, | 389 | .offset_src = DI_SYNC_INT_HSYNC, |
386 | .cnt_polarity_gen_en = 1, | 390 | .cnt_polarity_gen_en = 1, |
387 | .cnt_polarity_trigger_src = DI_SYNC_INT_HSYNC, | 391 | .cnt_polarity_trigger_src = DI_SYNC_INT_HSYNC, |
388 | .cnt_down = sig->v_sync_width * 2, | 392 | .cnt_down = sig->mode.vsync_len * 2, |
389 | } , { | 393 | } , { |
390 | /* unused */ | 394 | /* unused */ |
391 | }, | 395 | }, |
@@ -433,10 +437,11 @@ static void ipu_di_config_clock(struct ipu_di *di, | |||
433 | unsigned long in_rate; | 437 | unsigned long in_rate; |
434 | unsigned div; | 438 | unsigned div; |
435 | 439 | ||
436 | clk_set_rate(clk, sig->pixelclock); | 440 | clk_set_rate(clk, sig->mode.pixelclock); |
437 | 441 | ||
438 | in_rate = clk_get_rate(clk); | 442 | in_rate = clk_get_rate(clk); |
439 | div = (in_rate + sig->pixelclock / 2) / sig->pixelclock; | 443 | div = (in_rate + sig->mode.pixelclock / 2) / |
444 | sig->mode.pixelclock; | ||
440 | if (div == 0) | 445 | if (div == 0) |
441 | div = 1; | 446 | div = 1; |
442 | 447 | ||
@@ -454,10 +459,11 @@ static void ipu_di_config_clock(struct ipu_di *di, | |||
454 | unsigned div, error; | 459 | unsigned div, error; |
455 | 460 | ||
456 | clkrate = clk_get_rate(di->clk_ipu); | 461 | clkrate = clk_get_rate(di->clk_ipu); |
457 | div = (clkrate + sig->pixelclock / 2) / sig->pixelclock; | 462 | div = (clkrate + sig->mode.pixelclock / 2) / |
463 | sig->mode.pixelclock; | ||
458 | rate = clkrate / div; | 464 | rate = clkrate / div; |
459 | 465 | ||
460 | error = rate / (sig->pixelclock / 1000); | 466 | error = rate / (sig->mode.pixelclock / 1000); |
461 | 467 | ||
462 | dev_dbg(di->ipu->dev, " IPU clock can give %lu with divider %u, error %d.%u%%\n", | 468 | dev_dbg(di->ipu->dev, " IPU clock can give %lu with divider %u, error %d.%u%%\n", |
463 | rate, div, (signed)(error - 1000) / 10, error % 10); | 469 | rate, div, (signed)(error - 1000) / 10, error % 10); |
@@ -473,10 +479,11 @@ static void ipu_di_config_clock(struct ipu_di *di, | |||
473 | 479 | ||
474 | clk = di->clk_di; | 480 | clk = di->clk_di; |
475 | 481 | ||
476 | clk_set_rate(clk, sig->pixelclock); | 482 | clk_set_rate(clk, sig->mode.pixelclock); |
477 | 483 | ||
478 | in_rate = clk_get_rate(clk); | 484 | in_rate = clk_get_rate(clk); |
479 | div = (in_rate + sig->pixelclock / 2) / sig->pixelclock; | 485 | div = (in_rate + sig->mode.pixelclock / 2) / |
486 | sig->mode.pixelclock; | ||
480 | if (div == 0) | 487 | if (div == 0) |
481 | div = 1; | 488 | div = 1; |
482 | 489 | ||
@@ -504,7 +511,7 @@ static void ipu_di_config_clock(struct ipu_di *di, | |||
504 | ipu_di_write(di, val, DI_GENERAL); | 511 | ipu_di_write(di, val, DI_GENERAL); |
505 | 512 | ||
506 | dev_dbg(di->ipu->dev, "Want %luHz IPU %luHz DI %luHz using %s, %luHz\n", | 513 | dev_dbg(di->ipu->dev, "Want %luHz IPU %luHz DI %luHz using %s, %luHz\n", |
507 | sig->pixelclock, | 514 | sig->mode.pixelclock, |
508 | clk_get_rate(di->clk_ipu), | 515 | clk_get_rate(di->clk_ipu), |
509 | clk_get_rate(di->clk_di), | 516 | clk_get_rate(di->clk_di), |
510 | clk == di->clk_di ? "DI" : "IPU", | 517 | clk == di->clk_di ? "DI" : "IPU", |
@@ -547,15 +554,15 @@ int ipu_di_init_sync_panel(struct ipu_di *di, struct ipu_di_signal_cfg *sig) | |||
547 | u32 div; | 554 | u32 div; |
548 | 555 | ||
549 | dev_dbg(di->ipu->dev, "disp %d: panel size = %d x %d\n", | 556 | dev_dbg(di->ipu->dev, "disp %d: panel size = %d x %d\n", |
550 | di->id, sig->width, sig->height); | 557 | di->id, sig->mode.hactive, sig->mode.vactive); |
551 | 558 | ||
552 | if ((sig->v_sync_width == 0) || (sig->h_sync_width == 0)) | 559 | if ((sig->mode.vsync_len == 0) || (sig->mode.hsync_len == 0)) |
553 | return -EINVAL; | 560 | return -EINVAL; |
554 | 561 | ||
555 | dev_dbg(di->ipu->dev, "Clocks: IPU %luHz DI %luHz Needed %luHz\n", | 562 | dev_dbg(di->ipu->dev, "Clocks: IPU %luHz DI %luHz Needed %luHz\n", |
556 | clk_get_rate(di->clk_ipu), | 563 | clk_get_rate(di->clk_ipu), |
557 | clk_get_rate(di->clk_di), | 564 | clk_get_rate(di->clk_di), |
558 | sig->pixelclock); | 565 | sig->mode.pixelclock); |
559 | 566 | ||
560 | mutex_lock(&di_mutex); | 567 | mutex_lock(&di_mutex); |
561 | 568 | ||
@@ -574,7 +581,7 @@ int ipu_di_init_sync_panel(struct ipu_di *di, struct ipu_di_signal_cfg *sig) | |||
574 | di_gen = ipu_di_read(di, DI_GENERAL) & DI_GEN_DI_CLK_EXT; | 581 | di_gen = ipu_di_read(di, DI_GENERAL) & DI_GEN_DI_CLK_EXT; |
575 | di_gen |= DI_GEN_DI_VSYNC_EXT; | 582 | di_gen |= DI_GEN_DI_VSYNC_EXT; |
576 | 583 | ||
577 | if (sig->interlaced) { | 584 | if (sig->mode.flags & DISPLAY_FLAGS_INTERLACED) { |
578 | ipu_di_sync_config_interlaced(di, sig); | 585 | ipu_di_sync_config_interlaced(di, sig); |
579 | 586 | ||
580 | /* set y_sel = 1 */ | 587 | /* set y_sel = 1 */ |
@@ -584,9 +591,9 @@ int ipu_di_init_sync_panel(struct ipu_di *di, struct ipu_di_signal_cfg *sig) | |||
584 | 591 | ||
585 | vsync_cnt = 7; | 592 | vsync_cnt = 7; |
586 | 593 | ||
587 | if (sig->Hsync_pol) | 594 | if (sig->mode.flags & DISPLAY_FLAGS_HSYNC_HIGH) |
588 | di_gen |= DI_GEN_POLARITY_3; | 595 | di_gen |= DI_GEN_POLARITY_3; |
589 | if (sig->Vsync_pol) | 596 | if (sig->mode.flags & DISPLAY_FLAGS_VSYNC_HIGH) |
590 | di_gen |= DI_GEN_POLARITY_2; | 597 | di_gen |= DI_GEN_POLARITY_2; |
591 | } else { | 598 | } else { |
592 | ipu_di_sync_config_noninterlaced(di, sig, div); | 599 | ipu_di_sync_config_noninterlaced(di, sig, div); |
@@ -600,7 +607,7 @@ int ipu_di_init_sync_panel(struct ipu_di *di, struct ipu_di_signal_cfg *sig) | |||
600 | if (!(sig->hsync_pin == 2 && sig->vsync_pin == 3)) | 607 | if (!(sig->hsync_pin == 2 && sig->vsync_pin == 3)) |
601 | vsync_cnt = 6; | 608 | vsync_cnt = 6; |
602 | 609 | ||
603 | if (sig->Hsync_pol) { | 610 | if (sig->mode.flags & DISPLAY_FLAGS_HSYNC_HIGH) { |
604 | if (sig->hsync_pin == 2) | 611 | if (sig->hsync_pin == 2) |
605 | di_gen |= DI_GEN_POLARITY_2; | 612 | di_gen |= DI_GEN_POLARITY_2; |
606 | else if (sig->hsync_pin == 4) | 613 | else if (sig->hsync_pin == 4) |
@@ -608,7 +615,7 @@ int ipu_di_init_sync_panel(struct ipu_di *di, struct ipu_di_signal_cfg *sig) | |||
608 | else if (sig->hsync_pin == 7) | 615 | else if (sig->hsync_pin == 7) |
609 | di_gen |= DI_GEN_POLARITY_7; | 616 | di_gen |= DI_GEN_POLARITY_7; |
610 | } | 617 | } |
611 | if (sig->Vsync_pol) { | 618 | if (sig->mode.flags & DISPLAY_FLAGS_VSYNC_HIGH) { |
612 | if (sig->vsync_pin == 3) | 619 | if (sig->vsync_pin == 3) |
613 | di_gen |= DI_GEN_POLARITY_3; | 620 | di_gen |= DI_GEN_POLARITY_3; |
614 | else if (sig->vsync_pin == 6) | 621 | else if (sig->vsync_pin == 6) |
diff --git a/include/video/imx-ipu-v3.h b/include/video/imx-ipu-v3.h index d333d54203a8..73390c120cad 100644 --- a/include/video/imx-ipu-v3.h +++ b/include/video/imx-ipu-v3.h | |||
@@ -33,28 +33,15 @@ enum ipuv3_type { | |||
33 | * Bitfield of Display Interface signal polarities. | 33 | * Bitfield of Display Interface signal polarities. |
34 | */ | 34 | */ |
35 | struct ipu_di_signal_cfg { | 35 | struct ipu_di_signal_cfg { |
36 | unsigned datamask_en:1; | ||
37 | unsigned interlaced:1; | ||
38 | unsigned odd_field_first:1; | ||
39 | unsigned clksel_en:1; | ||
40 | unsigned clkidle_en:1; | ||
41 | unsigned data_pol:1; /* true = inverted */ | 36 | unsigned data_pol:1; /* true = inverted */ |
42 | unsigned clk_pol:1; /* true = rising edge */ | 37 | unsigned clk_pol:1; /* true = rising edge */ |
43 | unsigned enable_pol:1; | 38 | unsigned enable_pol:1; |
44 | unsigned Hsync_pol:1; /* true = active high */ | ||
45 | unsigned Vsync_pol:1; | ||
46 | 39 | ||
47 | u16 width; | 40 | struct videomode mode; |
48 | u16 height; | 41 | |
49 | u32 pixel_fmt; | 42 | u32 pixel_fmt; |
50 | u16 h_start_width; | ||
51 | u16 h_sync_width; | ||
52 | u16 h_end_width; | ||
53 | u16 v_start_width; | ||
54 | u16 v_sync_width; | ||
55 | u16 v_end_width; | ||
56 | u32 v_to_h_sync; | 43 | u32 v_to_h_sync; |
57 | unsigned long pixelclock; | 44 | |
58 | #define IPU_DI_CLKMODE_SYNC (1 << 0) | 45 | #define IPU_DI_CLKMODE_SYNC (1 << 0) |
59 | #define IPU_DI_CLKMODE_EXT (1 << 1) | 46 | #define IPU_DI_CLKMODE_EXT (1 << 1) |
60 | unsigned long clkflags; | 47 | unsigned long clkflags; |