diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2015-07-21 05:00:15 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2015-10-06 14:58:21 -0400 |
commit | f94ab604db9db1a8a0cf0827f5573bfd2d2b89aa (patch) | |
tree | 3c921e8362921f116b9e71c921b4901cf9f0165e | |
parent | 049e6dde7e57f0054fdc49102e7ef4830c698b46 (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.c | 50 |
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 | } |
544 | EXPORT_SYMBOL_GPL(ipu_di_adjust_videomode); | 544 | EXPORT_SYMBOL_GPL(ipu_di_adjust_videomode); |
545 | 545 | ||
546 | static 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 | |||
546 | int ipu_di_init_sync_panel(struct ipu_di *di, struct ipu_di_signal_cfg *sig) | 569 | int 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 | ||