aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2015-07-21 05:00:15 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2015-10-06 14:58:21 -0400
commitf94ab604db9db1a8a0cf0827f5573bfd2d2b89aa (patch)
tree3c921e8362921f116b9e71c921b4901cf9f0165e
parent049e6dde7e57f0054fdc49102e7ef4830c698b46 (diff)
gpu: imx: simplify sync polarity setting
Use a function to convert the sync pin to a bit mask for the DI_GENERAL register, and move this out of the interlace/non-interlace path to the common path. Tested-by: Philipp Zabel <p.zabel@pengutronix.de> Reviewed-by: Fabio Estevam <fabio.estevam@freescale.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r--drivers/gpu/ipu-v3/ipu-di.c50
1 files changed, 28 insertions, 22 deletions
diff --git a/drivers/gpu/ipu-v3/ipu-di.c b/drivers/gpu/ipu-v3/ipu-di.c
index 2970c6bb668c..a96991c5c15f 100644
--- a/drivers/gpu/ipu-v3/ipu-di.c
+++ b/drivers/gpu/ipu-v3/ipu-di.c
@@ -543,6 +543,29 @@ int ipu_di_adjust_videomode(struct ipu_di *di, struct videomode *mode)
543} 543}
544EXPORT_SYMBOL_GPL(ipu_di_adjust_videomode); 544EXPORT_SYMBOL_GPL(ipu_di_adjust_videomode);
545 545
546static u32 ipu_di_gen_polarity(int pin)
547{
548 switch (pin) {
549 case 1:
550 return DI_GEN_POLARITY_1;
551 case 2:
552 return DI_GEN_POLARITY_2;
553 case 3:
554 return DI_GEN_POLARITY_3;
555 case 4:
556 return DI_GEN_POLARITY_4;
557 case 5:
558 return DI_GEN_POLARITY_5;
559 case 6:
560 return DI_GEN_POLARITY_6;
561 case 7:
562 return DI_GEN_POLARITY_7;
563 case 8:
564 return DI_GEN_POLARITY_8;
565 }
566 return 0;
567}
568
546int ipu_di_init_sync_panel(struct ipu_di *di, struct ipu_di_signal_cfg *sig) 569int ipu_di_init_sync_panel(struct ipu_di *di, struct ipu_di_signal_cfg *sig)
547{ 570{
548 u32 reg; 571 u32 reg;
@@ -586,11 +609,6 @@ int ipu_di_init_sync_panel(struct ipu_di *di, struct ipu_di_signal_cfg *sig)
586 di_gen |= DI_GEN_POLARITY_8; 609 di_gen |= DI_GEN_POLARITY_8;
587 610
588 vsync_cnt = 7; 611 vsync_cnt = 7;
589
590 if (sig->mode.flags & DISPLAY_FLAGS_HSYNC_HIGH)
591 di_gen |= DI_GEN_POLARITY_3;
592 if (sig->mode.flags & DISPLAY_FLAGS_VSYNC_HIGH)
593 di_gen |= DI_GEN_POLARITY_2;
594 } else { 612 } else {
595 ipu_di_sync_config_noninterlaced(di, sig, div); 613 ipu_di_sync_config_noninterlaced(di, sig, div);
596 614
@@ -602,25 +620,13 @@ int ipu_di_init_sync_panel(struct ipu_di *di, struct ipu_di_signal_cfg *sig)
602 */ 620 */
603 if (!(sig->hsync_pin == 2 && sig->vsync_pin == 3)) 621 if (!(sig->hsync_pin == 2 && sig->vsync_pin == 3))
604 vsync_cnt = 6; 622 vsync_cnt = 6;
605
606 if (sig->mode.flags & DISPLAY_FLAGS_HSYNC_HIGH) {
607 if (sig->hsync_pin == 2)
608 di_gen |= DI_GEN_POLARITY_2;
609 else if (sig->hsync_pin == 4)
610 di_gen |= DI_GEN_POLARITY_4;
611 else if (sig->hsync_pin == 7)
612 di_gen |= DI_GEN_POLARITY_7;
613 }
614 if (sig->mode.flags & DISPLAY_FLAGS_VSYNC_HIGH) {
615 if (sig->vsync_pin == 3)
616 di_gen |= DI_GEN_POLARITY_3;
617 else if (sig->vsync_pin == 6)
618 di_gen |= DI_GEN_POLARITY_6;
619 else if (sig->vsync_pin == 8)
620 di_gen |= DI_GEN_POLARITY_8;
621 }
622 } 623 }
623 624
625 if (sig->mode.flags & DISPLAY_FLAGS_HSYNC_HIGH)
626 di_gen |= ipu_di_gen_polarity(sig->hsync_pin);
627 if (sig->mode.flags & DISPLAY_FLAGS_VSYNC_HIGH)
628 di_gen |= ipu_di_gen_polarity(sig->vsync_pin);
629
624 if (sig->clk_pol) 630 if (sig->clk_pol)
625 di_gen |= DI_GEN_POLARITY_DISP_CLK; 631 di_gen |= DI_GEN_POLARITY_DISP_CLK;
626 632