Add support for lvds lcd panels
Signed-off-by: Hans de Goede hdego...@redhat.com
---
arch/arm/include/asm/arch-sunxi/clock_sun4i.h | 2 ++
arch/arm/include/asm/arch-sunxi/display.h | 12 ++
arch/arm/include/asm/arch-sunxi/gpio.h| 1 +
board/sunxi/Kconfig | 14
drivers/video/sunxi_display.c | 33 +--
5 files changed, 60 insertions(+), 2 deletions(-)
diff --git a/arch/arm/include/asm/arch-sunxi/clock_sun4i.h
b/arch/arm/include/asm/arch-sunxi/clock_sun4i.h
index 64b5c38..70b789e 100644
--- a/arch/arm/include/asm/arch-sunxi/clock_sun4i.h
+++ b/arch/arm/include/asm/arch-sunxi/clock_sun4i.h
@@ -284,6 +284,8 @@ struct sunxi_ccm_reg {
/* Enable / disable both ch1 sclk1 and sclk2 at the same time */
#define CCM_LCD_CH1_CTRL_GATE (0x1 31 | 0x1 15)
+#define CCM_LVDS_CTRL_RST (1 0)
+
#define CCM_HDMI_CTRL_M(n) n) - 1) 0xf) 0)
#define CCM_HDMI_CTRL_PLL_MASK (3 24)
#define CCM_HDMI_CTRL_PLL3 (0 24)
diff --git a/arch/arm/include/asm/arch-sunxi/display.h
b/arch/arm/include/asm/arch-sunxi/display.h
index 44a274d..f1dfde1 100644
--- a/arch/arm/include/asm/arch-sunxi/display.h
+++ b/arch/arm/include/asm/arch-sunxi/display.h
@@ -88,6 +88,9 @@ struct sunxi_lcdc_reg {
u8 res3[0x44]; /* 0xac */
u32 tcon1_io_polarity; /* 0xf0 */
u32 tcon1_io_tristate; /* 0xf4 */
+ u8 res4[0x128]; /* 0xf8 */
+ u32 lvds_ana0; /* 0x220 */
+ u32 lvds_ana1; /* 0x224 */
};
struct sunxi_hdmi_reg {
@@ -241,12 +244,21 @@ struct sunxi_tve_reg {
#define SUNXI_LCDC_TCON0_TIMING_H_TOTAL(n) (((n) - 1) 16)
#define SUNXI_LCDC_TCON0_TIMING_V_BP(n)(((n) - 1) 0)
#define SUNXI_LCDC_TCON0_TIMING_V_TOTAL(n) (((n) * 2) 16)
+#define SUNXI_LCDC_TCON0_LVDS_INTF_BITWIDTH(n) ((n) 26)
+#define SUNXI_LCDC_TCON0_LVDS_INTF_ENABLE (1 31)
+#define SUNXI_LCDC_TCON0_IO_POL_DCLK_PHASE0(0 28)
+#define SUNXI_LCDC_TCON0_IO_POL_DCLK_PHASE60 (1 28)
+#define SUNXI_LCDC_TCON0_IO_POL_DCLK_PHASE120 (2 28)
#define SUNXI_LCDC_TCON1_CTRL_CLK_DELAY(n) (((n) 0x1f) 4)
#define SUNXI_LCDC_TCON1_CTRL_ENABLE (1 31)
#define SUNXI_LCDC_TCON1_TIMING_H_BP(n)(((n) - 1) 0)
#define SUNXI_LCDC_TCON1_TIMING_H_TOTAL(n) (((n) - 1) 16)
#define SUNXI_LCDC_TCON1_TIMING_V_BP(n)(((n) - 1) 0)
#define SUNXI_LCDC_TCON1_TIMING_V_TOTAL(n) (((n) * 2) 16)
+#define SUNXI_LCDC_LVDS_ANA0 0x3f31
+#define SUNXI_LCDC_LVDS_ANA0_UPDATE(1 22)
+#define SUNXI_LCDC_LVDS_ANA1_INIT1 (0x1f 26 | 0x1f 10)
+#define SUNXI_LCDC_LVDS_ANA1_INIT2 (0x1f 16 | 0x1f 00)
/*
* HDMI register constants.
diff --git a/arch/arm/include/asm/arch-sunxi/gpio.h
b/arch/arm/include/asm/arch-sunxi/gpio.h
index 9438f5a..71cc879 100644
--- a/arch/arm/include/asm/arch-sunxi/gpio.h
+++ b/arch/arm/include/asm/arch-sunxi/gpio.h
@@ -151,6 +151,7 @@ enum sunxi_gpio_number {
#define SUNXI_GPC6_SDC23
#define SUNXI_GPD0_LCD02
+#define SUNXI_GPD0_LVDS0 3
#define SUNXI_GPF0_SDC02
diff --git a/board/sunxi/Kconfig b/board/sunxi/Kconfig
index 8782394..fdb18a4 100644
--- a/board/sunxi/Kconfig
+++ b/board/sunxi/Kconfig
@@ -345,6 +345,20 @@ config VIDEO_LCD_BL_PWM
Set the backlight pwm pin for the LCD panel. This takes a string in the
format understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
+choice
+ prompt LCD panel support
+ depends on VIDEO
+ ---help---
+ Select which type of LCD panel to support.
+
+config VIDEO_LCD_PANEL_PARALLEL
+ bool Generic parallel interface LCD panel
+
+config VIDEO_LCD_PANEL_LVDS
+ bool Generic lvds interface LCD panel
+
+endchoice
+
config USB_KEYBOARD
boolean Enable USB keyboard support
default y
diff --git a/drivers/video/sunxi_display.c b/drivers/video/sunxi_display.c
index 319e578..4b63b01 100644
--- a/drivers/video/sunxi_display.c
+++ b/drivers/video/sunxi_display.c
@@ -339,8 +339,12 @@ static void sunxi_lcdc_pll_set(int tcon, int dotclock,
int best_double = 0;
if (tcon == 0) {
+#ifdef CONFIG_VIDEO_LCD_PANEL_LVDS
+ min_m = max_m = 7;
+#else
min_m = 6;
max_m = 127;
+#endif
} else {
min_m = 1;
max_m = 15;
@@ -420,6 +424,9 @@ static void sunxi_lcdc_init(void)
/* Clock on */
setbits_le32(ccm-ahb_gate1, 1 AHB_GATE_OFFSET_LCD0);
+#ifdef CONFIG_VIDEO_LCD_PANEL_LVDS
+ setbits_le32(ccm-lvds_clk_cfg, CCM_LVDS_CTRL_RST);
+#endif
/* Init lcdc */
writel(0, lcdc-ctrl); /* Disable tcon */
@@ -439,6 +446,16 @@ static void sunxi_lcdc_enable(void)
(struct sunxi_lcdc_reg