diff options
author | Steven J. Hill <sjhill@mips.com> | 2012-04-18 10:13:51 -0400 |
---|---|---|
committer | Florian Tobias Schandinat <FlorianSchandinat@gmx.de> | 2012-04-29 15:34:05 -0400 |
commit | 13f36e9ea0f1419039763e7ba947fccd7f4b5a41 (patch) | |
tree | 03492958965202b57a11406efe3b4744e2009068 | |
parent | d313a86d2efb2c5568832389663322e93e291c59 (diff) |
cobalt_lcdfb: LCD panel framebuffer support for SEAD-3 platform.
Add support for LCD panel on MIPS SEAD-3 development platform.
Signed-off-by: Douglas Leung <douglas@mips.com>
Signed-off-by: Chris Dearman <chris@mips.com>
Signed-off-by: Steven J. Hill <sjhill@mips.com>
Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
-rw-r--r-- | drivers/video/Kconfig | 2 | ||||
-rw-r--r-- | drivers/video/cobalt_lcdfb.c | 45 |
2 files changed, 45 insertions, 2 deletions
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index a290be51a1f4..edc2a22d289e 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig | |||
@@ -2210,7 +2210,7 @@ config FB_XILINX | |||
2210 | 2210 | ||
2211 | config FB_COBALT | 2211 | config FB_COBALT |
2212 | tristate "Cobalt server LCD frame buffer support" | 2212 | tristate "Cobalt server LCD frame buffer support" |
2213 | depends on FB && MIPS_COBALT | 2213 | depends on FB && (MIPS_COBALT || MIPS_SEAD3) |
2214 | 2214 | ||
2215 | config FB_SH7760 | 2215 | config FB_SH7760 |
2216 | bool "SH7760/SH7763/SH7720/SH7721 LCDC support" | 2216 | bool "SH7760/SH7763/SH7720/SH7721 LCDC support" |
diff --git a/drivers/video/cobalt_lcdfb.c b/drivers/video/cobalt_lcdfb.c index f56699d8122a..eae46f6457e2 100644 --- a/drivers/video/cobalt_lcdfb.c +++ b/drivers/video/cobalt_lcdfb.c | |||
@@ -1,7 +1,8 @@ | |||
1 | /* | 1 | /* |
2 | * Cobalt server LCD frame buffer driver. | 2 | * Cobalt/SEAD3 LCD frame buffer driver. |
3 | * | 3 | * |
4 | * Copyright (C) 2008 Yoichi Yuasa <yuasa@linux-mips.org> | 4 | * Copyright (C) 2008 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * Copyright (C) 2012 MIPS Technologies, Inc. | ||
5 | * | 6 | * |
6 | * This program is free software; you can redistribute it and/or modify | 7 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 8 | * it under the terms of the GNU General Public License as published by |
@@ -62,6 +63,7 @@ | |||
62 | #define LCD_CUR_POS(x) ((x) & LCD_CUR_POS_MASK) | 63 | #define LCD_CUR_POS(x) ((x) & LCD_CUR_POS_MASK) |
63 | #define LCD_TEXT_POS(x) ((x) | LCD_TEXT_MODE) | 64 | #define LCD_TEXT_POS(x) ((x) | LCD_TEXT_MODE) |
64 | 65 | ||
66 | #ifdef CONFIG_MIPS_COBALT | ||
65 | static inline void lcd_write_control(struct fb_info *info, u8 control) | 67 | static inline void lcd_write_control(struct fb_info *info, u8 control) |
66 | { | 68 | { |
67 | writel((u32)control << 24, info->screen_base); | 69 | writel((u32)control << 24, info->screen_base); |
@@ -81,6 +83,47 @@ static inline u8 lcd_read_data(struct fb_info *info) | |||
81 | { | 83 | { |
82 | return readl(info->screen_base + LCD_DATA_REG_OFFSET) >> 24; | 84 | return readl(info->screen_base + LCD_DATA_REG_OFFSET) >> 24; |
83 | } | 85 | } |
86 | #else | ||
87 | |||
88 | #define LCD_CTL 0x00 | ||
89 | #define LCD_DATA 0x08 | ||
90 | #define CPLD_STATUS 0x10 | ||
91 | #define CPLD_DATA 0x18 | ||
92 | |||
93 | static inline void cpld_wait(struct fb_info *info) | ||
94 | { | ||
95 | do { | ||
96 | } while (readl(info->screen_base + CPLD_STATUS) & 1); | ||
97 | } | ||
98 | |||
99 | static inline void lcd_write_control(struct fb_info *info, u8 control) | ||
100 | { | ||
101 | cpld_wait(info); | ||
102 | writel(control, info->screen_base + LCD_CTL); | ||
103 | } | ||
104 | |||
105 | static inline u8 lcd_read_control(struct fb_info *info) | ||
106 | { | ||
107 | cpld_wait(info); | ||
108 | readl(info->screen_base + LCD_CTL); | ||
109 | cpld_wait(info); | ||
110 | return readl(info->screen_base + CPLD_DATA) & 0xff; | ||
111 | } | ||
112 | |||
113 | static inline void lcd_write_data(struct fb_info *info, u8 data) | ||
114 | { | ||
115 | cpld_wait(info); | ||
116 | writel(data, info->screen_base + LCD_DATA); | ||
117 | } | ||
118 | |||
119 | static inline u8 lcd_read_data(struct fb_info *info) | ||
120 | { | ||
121 | cpld_wait(info); | ||
122 | readl(info->screen_base + LCD_DATA); | ||
123 | cpld_wait(info); | ||
124 | return readl(info->screen_base + CPLD_DATA) & 0xff; | ||
125 | } | ||
126 | #endif | ||
84 | 127 | ||
85 | static int lcd_busy_wait(struct fb_info *info) | 128 | static int lcd_busy_wait(struct fb_info *info) |
86 | { | 129 | { |