* [U-Boot] [PATCH v2] common/lcd: use lcd_setcolreg() to setup CLUT
@ 2012-11-02 14:18 Andreas Bießmann
2012-11-06 10:13 ` [U-Boot] [PATCH v3 0/2] rework common/lcd Andreas Bießmann
0 siblings, 1 reply; 14+ messages in thread
From: Andreas Bießmann @ 2012-11-02 14:18 UTC (permalink / raw)
To: u-boot
The lcd_setcolreg() is a API provided by the lcd driver and used to setup the
color lookup table. However the lcd driver setup the CLUT by using a lot of
ifdiffery and accessing the CLUT arrays directly instead. Remove that and use
the API.
Signed-off-by: Andreas Bie?mann <andreas.devel@googlemail.com>
Cc: Marek Vasut <marex@denx.de>
Cc: Anatolij Gustschin <agust@denx.de>
---
since v1:
* also use lcd_setcolreg() in lcd_display_bitmap()
* remove RFC
This patch requires http://patchwork.ozlabs.org/patch/194861/ to compile all
arm boards cleanly!
Runtime tested on at91sam9263ek, please test and comment
Build tested for AVR32 and arm
common/lcd.c | 79 ++++++++++++----------------------------------------------
1 file changed, 16 insertions(+), 63 deletions(-)
diff --git a/common/lcd.c b/common/lcd.c
index b6be800..6835e65 100644
--- a/common/lcd.c
+++ b/common/lcd.c
@@ -523,11 +523,6 @@ static inline ushort *configuration_get_cmap(void)
#ifdef CONFIG_LCD_LOGO
void bitmap_plot(int x, int y)
{
-#ifdef CONFIG_ATMEL_LCD
- uint *cmap = (uint *)bmp_logo_palette;
-#else
- ushort *cmap = (ushort *)bmp_logo_palette;
-#endif
ushort i, j;
uchar *bmap;
uchar *fb;
@@ -545,44 +540,20 @@ void bitmap_plot(int x, int y)
fb = (uchar *)(lcd_base + y * lcd_line_length + x);
if (NBITS(panel_info.vl_bpix) < 12) {
- /* Leave room for default color map
- * default case: generic system with no cmap (most likely 16bpp)
- * cmap was set to the source palette, so no change is done.
- * This avoids even more ifdefs in the next stanza
- */
-#if defined(CONFIG_MPC823)
- cmap = (ushort *) &(cp->lcd_cmap[BMP_LOGO_OFFSET * sizeof(ushort)]);
-#elif defined(CONFIG_ATMEL_LCD)
- cmap = (uint *)configuration_get_cmap();
-#else
- cmap = configuration_get_cmap();
-#endif
WATCHDOG_RESET();
/* Set color map */
for (i = 0; i < ARRAY_SIZE(bmp_logo_palette); ++i) {
- ushort colreg = bmp_logo_palette[i];
-#ifdef CONFIG_ATMEL_LCD
- uint lut_entry;
-#ifdef CONFIG_ATMEL_LCD_BGR555
- lut_entry = ((colreg & 0x000F) << 11) |
- ((colreg & 0x00F0) << 2) |
- ((colreg & 0x0F00) >> 7);
-#else /* CONFIG_ATMEL_LCD_RGB565 */
- lut_entry = ((colreg & 0x000F) << 1) |
- ((colreg & 0x00F0) << 3) |
- ((colreg & 0x0F00) << 4);
-#endif
- *(cmap + BMP_LOGO_OFFSET) = lut_entry;
- cmap++;
-#else /* !CONFIG_ATMEL_LCD */
-#ifdef CONFIG_SYS_INVERT_COLORS
- *cmap++ = 0xffff - colreg;
-#else
- *cmap++ = colreg;
-#endif
-#endif /* CONFIG_ATMEL_LCD */
+ /* use the most significant bits here */
+ uint8_t red = ((bmp_logo_palette[i] >> 4) & 0xF0);
+ uint8_t green = ((bmp_logo_palette[i] >> 0) & 0xF0);
+ uint8_t blue = ((bmp_logo_palette[i] << 4) & 0xF0);
+ debug("LCD: setup colreg %u with "
+ "R: 0x%02x G: 0x%02x B: 0x%02x (0x%04x)\n",
+ i+BMP_LOGO_OFFSET, red, green, blue, bmp_logo_palette[i]);
+ /* leave room for the default colormap here */
+ lcd_setcolreg(i+BMP_LOGO_OFFSET, red, green, blue);
}
WATCHDOG_RESET();
@@ -667,9 +638,6 @@ static inline void fb_put_word(uchar **fb, uchar **from)
int lcd_display_bitmap(ulong bmp_image, int x, int y)
{
-#if !defined(CONFIG_MCC200)
- ushort *cmap = NULL;
-#endif
ushort *cmap_base = NULL;
ushort i, j;
uchar *fb;
@@ -716,34 +684,18 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
#if !defined(CONFIG_MCC200)
/* MCC200 LCD doesn't need CMAP, supports 1bpp b&w only */
if (bmp_bpix == 8) {
- cmap = configuration_get_cmap();
- cmap_base = cmap;
+ cmap_base = configuration_get_cmap();
/* Set color map */
for (i = 0; i < colors; ++i) {
bmp_color_table_entry_t cte = bmp->color_table[i];
-#if !defined(CONFIG_ATMEL_LCD)
- ushort colreg =
- ( ((cte.red) << 8) & 0xf800) |
- ( ((cte.green) << 3) & 0x07e0) |
- ( ((cte.blue) >> 3) & 0x001f) ;
-#ifdef CONFIG_SYS_INVERT_COLORS
- *cmap = 0xffff - colreg;
-#else
- *cmap = colreg;
-#endif
-#if defined(CONFIG_MPC823)
- cmap--;
-#else
- cmap++;
-#endif
-#else /* CONFIG_ATMEL_LCD */
+ debug("LCD: setup colreg %u with "
+ "R: 0x%02x G: 0x%02x B: 0x%02x\n",
+ i, cte.red, cte.green, cte.blue);
lcd_setcolreg(i, cte.red, cte.green, cte.blue);
-#endif
}
}
-#endif
-
+#else
/*
* BMP format for Monochrome assumes that the state of a
* pixel is described on a per Bit basis, not per Byte.
@@ -754,7 +706,6 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
* their own ways, so make the converting to be MCC200
* specific.
*/
-#if defined(CONFIG_MCC200)
if (bpix == 1) {
width = ((width + 7) & ~7) >> 3;
x = ((x + 7) & ~7) >> 3;
@@ -786,6 +737,8 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
else
byte_width = width * 2;
+ debug("LCD: draw %i b/pix image on %i b/pix display\n", bmp_bpix, bpix);
+
for (i = 0; i < height; ++i) {
WATCHDOG_RESET();
for (j = 0; j < width; j++) {
--
1.7.10.4
^ permalink raw reply related [flat|nested] 14+ messages in thread* [U-Boot] [PATCH v3 0/2] rework common/lcd
2012-11-02 14:18 [U-Boot] [PATCH v2] common/lcd: use lcd_setcolreg() to setup CLUT Andreas Bießmann
@ 2012-11-06 10:13 ` Andreas Bießmann
2012-11-06 10:13 ` [U-Boot] [PATCH v3 1/2] video: atmel: implement lcd_setcolreg funtion Andreas Bießmann
2012-11-06 10:13 ` [U-Boot] [PATCH v3 2/2] common/lcd: use lcd_setcolreg() to setup CLUT Andreas Bießmann
0 siblings, 2 replies; 14+ messages in thread
From: Andreas Bießmann @ 2012-11-06 10:13 UTC (permalink / raw)
To: u-boot
This series rework the CLUT management in common/lcd and use the driver API
lcd_setcolreg() for that. The change was first requested from Marek Vasut due to
a compiler warning (type-punned pointer stuff) encountered with eldk 4.2 and
introduced in 203c37b8c5556aad1901ce4954792afd718c7d42
BEWARE this change is only tested on atmel devices so far
Andreas Bie?mann (1):
common/lcd: use lcd_setcolreg() to setup CLUT
Bo Shen (1):
video: atmel: implement lcd_setcolreg funtion
common/lcd.c | 79 +++++++++---------------------------------
drivers/video/atmel_hlcdfb.c | 6 ++++
2 files changed, 22 insertions(+), 63 deletions(-)
--
1.7.10.4
^ permalink raw reply [flat|nested] 14+ messages in thread
* [U-Boot] [PATCH v3 1/2] video: atmel: implement lcd_setcolreg funtion
2012-11-06 10:13 ` [U-Boot] [PATCH v3 0/2] rework common/lcd Andreas Bießmann
@ 2012-11-06 10:13 ` Andreas Bießmann
2012-11-06 22:54 ` Marek Vasut
` (2 more replies)
2012-11-06 10:13 ` [U-Boot] [PATCH v3 2/2] common/lcd: use lcd_setcolreg() to setup CLUT Andreas Bießmann
1 sibling, 3 replies; 14+ messages in thread
From: Andreas Bießmann @ 2012-11-06 10:13 UTC (permalink / raw)
To: u-boot
From: Bo Shen <voice.shen@atmel.com>
Signed-off-by: Bo Shen <voice.shen@atmel.com>
Signed-off-by: Andreas Bie?mann <andreas.devel@googlemail.com>
---
since v2:
* add this single patch
drivers/video/atmel_hlcdfb.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/video/atmel_hlcdfb.c b/drivers/video/atmel_hlcdfb.c
index beb7fa3..4110d4d 100644
--- a/drivers/video/atmel_hlcdfb.c
+++ b/drivers/video/atmel_hlcdfb.c
@@ -51,6 +51,12 @@ short console_row;
#define lcdc_readl(reg) __raw_readl((reg))
#define lcdc_writel(reg, val) __raw_writel((val), (reg))
+void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue)
+{
+ lcdc_writel((red << 16) | (green << 8) | blue,
+ panel_info.mmio + ATMEL_LCDC_LUT(regno));
+}
+
void lcd_ctrl_init(void *lcdbase)
{
unsigned long value;
--
1.7.10.4
^ permalink raw reply related [flat|nested] 14+ messages in thread* [U-Boot] [PATCH v3 1/2] video: atmel: implement lcd_setcolreg funtion
2012-11-06 10:13 ` [U-Boot] [PATCH v3 1/2] video: atmel: implement lcd_setcolreg funtion Andreas Bießmann
@ 2012-11-06 22:54 ` Marek Vasut
2012-11-07 1:26 ` Bo Shen
2012-11-08 9:10 ` [U-Boot] [PATCH v4] " Bo Shen
2012-11-09 3:49 ` [U-Boot] [Patch v5] video: atmel: implement lcd_setcolreg function Bo Shen
2 siblings, 1 reply; 14+ messages in thread
From: Marek Vasut @ 2012-11-06 22:54 UTC (permalink / raw)
To: u-boot
Dear Andreas Bie?mann,
> From: Bo Shen <voice.shen@atmel.com>
Missing commit message
> Signed-off-by: Bo Shen <voice.shen@atmel.com>
> Signed-off-by: Andreas Bie?mann <andreas.devel@googlemail.com>
> ---
> since v2:
> * add this single patch
>
> drivers/video/atmel_hlcdfb.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/drivers/video/atmel_hlcdfb.c b/drivers/video/atmel_hlcdfb.c
> index beb7fa3..4110d4d 100644
> --- a/drivers/video/atmel_hlcdfb.c
> +++ b/drivers/video/atmel_hlcdfb.c
> @@ -51,6 +51,12 @@ short console_row;
> #define lcdc_readl(reg) __raw_readl((reg))
> #define lcdc_writel(reg, val) __raw_writel((val), (reg))
>
> +void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue)
> +{
> + lcdc_writel((red << 16) | (green << 8) | blue,
> + panel_info.mmio + ATMEL_LCDC_LUT(regno));
So this is RGB666? Or what are those magic numbers ?
> +}
> +
> void lcd_ctrl_init(void *lcdbase)
> {
> unsigned long value;
Best regards,
Marek Vasut
^ permalink raw reply [flat|nested] 14+ messages in thread* [U-Boot] [PATCH v3 1/2] video: atmel: implement lcd_setcolreg funtion
2012-11-06 22:54 ` Marek Vasut
@ 2012-11-07 1:26 ` Bo Shen
2012-11-07 13:26 ` Marek Vasut
0 siblings, 1 reply; 14+ messages in thread
From: Bo Shen @ 2012-11-07 1:26 UTC (permalink / raw)
To: u-boot
Hi Marek,
On 11/7/2012 6:54, Marek Vasut wrote:
> Dear Andreas Bie?mann,
>
>> From: Bo Shen <voice.shen@atmel.com>
>
> Missing commit message
>
>> Signed-off-by: Bo Shen <voice.shen@atmel.com>
>> Signed-off-by: Andreas Bie?mann <andreas.devel@googlemail.com>
>> ---
>> since v2:
>> * add this single patch
>>
>> drivers/video/atmel_hlcdfb.c | 6 ++++++
>> 1 file changed, 6 insertions(+)
>>
>> diff --git a/drivers/video/atmel_hlcdfb.c b/drivers/video/atmel_hlcdfb.c
>> index beb7fa3..4110d4d 100644
>> --- a/drivers/video/atmel_hlcdfb.c
>> +++ b/drivers/video/atmel_hlcdfb.c
>> @@ -51,6 +51,12 @@ short console_row;
>> #define lcdc_readl(reg) __raw_readl((reg))
>> #define lcdc_writel(reg, val) __raw_writel((val), (reg))
>>
>> +void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue)
>> +{
>> + lcdc_writel((red << 16) | (green << 8) | blue,
>> + panel_info.mmio + ATMEL_LCDC_LUT(regno));
>
> So this is RGB666? Or what are those magic numbers ?
This is a little different with the driver of atmel_lcdfb.c.
The register for LUT is layout as following:
RCLUT (24 ~ 16), GCLUT (15 ~ 8) and BCLUT (7 ~ 0).
So, use those magic numbers.
More information, you can get from [1] on page 1163.
1. http://www.atmel.com/Images/doc11053.pdf
BRs
Bo Shen
>> +}
>> +
>> void lcd_ctrl_init(void *lcdbase)
>> {
>> unsigned long value;
>
> Best regards,
> Marek Vasut
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>
^ permalink raw reply [flat|nested] 14+ messages in thread* [U-Boot] [PATCH v3 1/2] video: atmel: implement lcd_setcolreg funtion
2012-11-07 1:26 ` Bo Shen
@ 2012-11-07 13:26 ` Marek Vasut
2012-11-08 3:06 ` Bo Shen
0 siblings, 1 reply; 14+ messages in thread
From: Marek Vasut @ 2012-11-07 13:26 UTC (permalink / raw)
To: u-boot
Dear Bo Shen,
> Hi Marek,
>
> On 11/7/2012 6:54, Marek Vasut wrote:
> > Dear Andreas Bie?mann,
> >
> >> From: Bo Shen <voice.shen@atmel.com>
> >
> > Missing commit message
> >
> >> Signed-off-by: Bo Shen <voice.shen@atmel.com>
> >> Signed-off-by: Andreas Bie?mann <andreas.devel@googlemail.com>
> >> ---
> >>
> >> since v2:
> >> * add this single patch
> >>
> >> drivers/video/atmel_hlcdfb.c | 6 ++++++
> >> 1 file changed, 6 insertions(+)
> >>
> >> diff --git a/drivers/video/atmel_hlcdfb.c b/drivers/video/atmel_hlcdfb.c
> >> index beb7fa3..4110d4d 100644
> >> --- a/drivers/video/atmel_hlcdfb.c
> >> +++ b/drivers/video/atmel_hlcdfb.c
> >> @@ -51,6 +51,12 @@ short console_row;
> >>
> >> #define lcdc_readl(reg) __raw_readl((reg))
> >> #define lcdc_writel(reg, val) __raw_writel((val), (reg))
> >>
> >> +void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue)
> >> +{
> >> + lcdc_writel((red << 16) | (green << 8) | blue,
> >> + panel_info.mmio + ATMEL_LCDC_LUT(regno));
> >
> > So this is RGB666? Or what are those magic numbers ?
>
> This is a little different with the driver of atmel_lcdfb.c.
> The register for LUT is layout as following:
> RCLUT (24 ~ 16), GCLUT (15 ~ 8) and BCLUT (7 ~ 0).
> So, use those magic numbers.
Good, can you define those magic offsets then please?
> More information, you can get from [1] on page 1163.
>
> 1. http://www.atmel.com/Images/doc11053.pdf
[...]
Best regards,
Marek Vasut
^ permalink raw reply [flat|nested] 14+ messages in thread* [U-Boot] [PATCH v3 1/2] video: atmel: implement lcd_setcolreg funtion
2012-11-07 13:26 ` Marek Vasut
@ 2012-11-08 3:06 ` Bo Shen
2012-11-08 7:53 ` Andreas Bießmann
0 siblings, 1 reply; 14+ messages in thread
From: Bo Shen @ 2012-11-08 3:06 UTC (permalink / raw)
To: u-boot
Hi Andreas,
On 11/7/2012 21:26, Marek Vasut wrote:
> Dear Bo Shen,
>
>> Hi Marek,
>>
>> On 11/7/2012 6:54, Marek Vasut wrote:
>>> Dear Andreas Bie?mann,
>>>
>>>> From: Bo Shen <voice.shen@atmel.com>
>>>
>>> Missing commit message
>>>
>>>> Signed-off-by: Bo Shen <voice.shen@atmel.com>
>>>> Signed-off-by: Andreas Bie?mann <andreas.devel@googlemail.com>
>>>> ---
>>>>
>>>> since v2:
>>>> * add this single patch
>>>>
>>>> drivers/video/atmel_hlcdfb.c | 6 ++++++
>>>> 1 file changed, 6 insertions(+)
>>>>
>>>> diff --git a/drivers/video/atmel_hlcdfb.c b/drivers/video/atmel_hlcdfb.c
>>>> index beb7fa3..4110d4d 100644
>>>> --- a/drivers/video/atmel_hlcdfb.c
>>>> +++ b/drivers/video/atmel_hlcdfb.c
>>>> @@ -51,6 +51,12 @@ short console_row;
>>>>
>>>> #define lcdc_readl(reg) __raw_readl((reg))
>>>> #define lcdc_writel(reg, val) __raw_writel((val), (reg))
>>>>
>>>> +void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue)
>>>> +{
>>>> + lcdc_writel((red << 16) | (green << 8) | blue,
>>>> + panel_info.mmio + ATMEL_LCDC_LUT(regno));
>>>
>>> So this is RGB666? Or what are those magic numbers ?
>>
>> This is a little different with the driver of atmel_lcdfb.c.
>> The register for LUT is layout as following:
>> RCLUT (24 ~ 16), GCLUT (15 ~ 8) and BCLUT (7 ~ 0).
>> So, use those magic numbers.
>
> Good, can you define those magic offsets then please?
Will you redo your patch series or do I need to implement this and send
the patch to you again?
Which do you prefer?
Best Regards,
Bo Shen
>> More information, you can get from [1] on page 1163.
>>
>> 1. http://www.atmel.com/Images/doc11053.pdf
>
> [...]
>
> Best regards,
> Marek Vasut
>
^ permalink raw reply [flat|nested] 14+ messages in thread* [U-Boot] [PATCH v3 1/2] video: atmel: implement lcd_setcolreg funtion
2012-11-08 3:06 ` Bo Shen
@ 2012-11-08 7:53 ` Andreas Bießmann
0 siblings, 0 replies; 14+ messages in thread
From: Andreas Bießmann @ 2012-11-08 7:53 UTC (permalink / raw)
To: u-boot
Hi Bo,
On 08.11.2012 04:06, Bo Shen wrote:
> Hi Andreas,
>
> On 11/7/2012 21:26, Marek Vasut wrote:
>> Dear Bo Shen,
>>
>>> Hi Marek,
>>>
>>> On 11/7/2012 6:54, Marek Vasut wrote:
>>>> Dear Andreas Bie?mann,
>>>>
>>>>> From: Bo Shen <voice.shen@atmel.com>
>>>>
>>>> Missing commit message
>>>>
>>>>> Signed-off-by: Bo Shen <voice.shen@atmel.com>
>>>>> Signed-off-by: Andreas Bie?mann <andreas.devel@googlemail.com>
>>>>> ---
>>>>>
>>>>> since v2:
>>>>> * add this single patch
>>>>>
>>>>> drivers/video/atmel_hlcdfb.c | 6 ++++++
>>>>> 1 file changed, 6 insertions(+)
>>>>>
>>>>> diff --git a/drivers/video/atmel_hlcdfb.c
>>>>> b/drivers/video/atmel_hlcdfb.c
>>>>> index beb7fa3..4110d4d 100644
>>>>> --- a/drivers/video/atmel_hlcdfb.c
>>>>> +++ b/drivers/video/atmel_hlcdfb.c
>>>>> @@ -51,6 +51,12 @@ short console_row;
>>>>>
>>>>> #define lcdc_readl(reg) __raw_readl((reg))
>>>>> #define lcdc_writel(reg, val) __raw_writel((val), (reg))
>>>>>
>>>>> +void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort
>>>>> blue)
>>>>> +{
>>>>> + lcdc_writel((red << 16) | (green << 8) | blue,
>>>>> + panel_info.mmio + ATMEL_LCDC_LUT(regno));
>>>>
>>>> So this is RGB666? Or what are those magic numbers ?
>>>
>>> This is a little different with the driver of atmel_lcdfb.c.
>>> The register for LUT is layout as following:
>>> RCLUT (24 ~ 16), GCLUT (15 ~ 8) and BCLUT (7 ~ 0).
>>> So, use those magic numbers.
>>
>> Good, can you define those magic offsets then please?
>
> Will you redo your patch series or do I need to implement this and send
> the patch to you again?
can you please just send a v4 for this single patch? Add correct
in-reply-to header so we can see it belongs to the series. Thanks in
advance, I'm a bit busy currently.
Best regards
Andreas Bie?mann
^ permalink raw reply [flat|nested] 14+ messages in thread
* [U-Boot] [PATCH v4] video: atmel: implement lcd_setcolreg funtion
2012-11-06 10:13 ` [U-Boot] [PATCH v3 1/2] video: atmel: implement lcd_setcolreg funtion Andreas Bießmann
2012-11-06 22:54 ` Marek Vasut
@ 2012-11-08 9:10 ` Bo Shen
2012-11-08 13:08 ` Marek Vasut
2012-11-09 3:49 ` [U-Boot] [Patch v5] video: atmel: implement lcd_setcolreg function Bo Shen
2 siblings, 1 reply; 14+ messages in thread
From: Bo Shen @ 2012-11-08 9:10 UTC (permalink / raw)
To: u-boot
implement the common api lce_setcolreg in include/lcd.h
Signed-off-by: Bo Shen <voice.shen@atmel.com>
---
since v3:
* add magic number
since v2:
* add this single patch
---
drivers/video/atmel_hlcdfb.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/drivers/video/atmel_hlcdfb.c b/drivers/video/atmel_hlcdfb.c
index beb7fa3..8ebde04 100644
--- a/drivers/video/atmel_hlcdfb.c
+++ b/drivers/video/atmel_hlcdfb.c
@@ -51,6 +51,16 @@ short console_row;
#define lcdc_readl(reg) __raw_readl((reg))
#define lcdc_writel(reg, val) __raw_writel((val), (reg))
+/*
+ * the CLUT register map as following
+ * RCLUT(24 ~ 16), GCLUT(15 ~ 8), BCLUT(7 ~ 0)
+ */
+void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue)
+{
+ lcdc_writel((red << 16) & 0xff0000 | (green << 8) & 0xff00 |
+ blue & 0xff, panel_info.mmio + ATMEL_LCDC_LUT(regno));
+}
+
void lcd_ctrl_init(void *lcdbase)
{
unsigned long value;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 14+ messages in thread* [U-Boot] [PATCH v4] video: atmel: implement lcd_setcolreg funtion
2012-11-08 9:10 ` [U-Boot] [PATCH v4] " Bo Shen
@ 2012-11-08 13:08 ` Marek Vasut
2012-11-09 3:46 ` Bo Shen
0 siblings, 1 reply; 14+ messages in thread
From: Marek Vasut @ 2012-11-08 13:08 UTC (permalink / raw)
To: u-boot
Dear Bo Shen,
[...]
> +/*
> + * the CLUT register map as following
> + * RCLUT(24 ~ 16), GCLUT(15 ~ 8), BCLUT(7 ~ 0)
> + */
> +void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue)
> +{
> + lcdc_writel((red << 16) & 0xff0000 | (green << 8) & 0xff00 |
> + blue & 0xff, panel_info.mmio + ATMEL_LCDC_LUT(regno));
> +}
> +
Why don't you #define these values instead?
> void lcd_ctrl_init(void *lcdbase)
> {
> unsigned long value;
Best regards,
Marek Vasut
^ permalink raw reply [flat|nested] 14+ messages in thread* [U-Boot] [PATCH v4] video: atmel: implement lcd_setcolreg funtion
2012-11-08 13:08 ` Marek Vasut
@ 2012-11-09 3:46 ` Bo Shen
0 siblings, 0 replies; 14+ messages in thread
From: Bo Shen @ 2012-11-09 3:46 UTC (permalink / raw)
To: u-boot
Hi Marek Vasut,
On 11/8/2012 21:08, Marek Vasut wrote:
> Dear Bo Shen,
>
> [...]
>> +/*
>> + * the CLUT register map as following
>> + * RCLUT(24 ~ 16), GCLUT(15 ~ 8), BCLUT(7 ~ 0)
>> + */
>> +void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue)
>> +{
>> + lcdc_writel((red << 16) & 0xff0000 | (green << 8) & 0xff00 |
>> + blue & 0xff, panel_info.mmio + ATMEL_LCDC_LUT(regno));
>> +}
>> +
>
> Why don't you #define these values instead?
Ok, I will change to use #define.
Thanks,
Best Regards,
Bo Shen
^ permalink raw reply [flat|nested] 14+ messages in thread
* [U-Boot] [Patch v5] video: atmel: implement lcd_setcolreg function
2012-11-06 10:13 ` [U-Boot] [PATCH v3 1/2] video: atmel: implement lcd_setcolreg funtion Andreas Bießmann
2012-11-06 22:54 ` Marek Vasut
2012-11-08 9:10 ` [U-Boot] [PATCH v4] " Bo Shen
@ 2012-11-09 3:49 ` Bo Shen
2012-11-10 13:13 ` Anatolij Gustschin
2 siblings, 1 reply; 14+ messages in thread
From: Bo Shen @ 2012-11-09 3:49 UTC (permalink / raw)
To: u-boot
implement the common api lce_setcolreg in include/lcd.h
Signed-off-by: Bo Shen <voice.shen@atmel.com>
---
since v4:
* using define for these magic number
since v3:
* add magic number
since v2:
* add this single patch
---
drivers/video/atmel_hlcdfb.c | 12 ++++++++++++
include/atmel_hlcdc.h | 7 +++++++
2 files changed, 19 insertions(+)
diff --git a/drivers/video/atmel_hlcdfb.c b/drivers/video/atmel_hlcdfb.c
index beb7fa3..e04eaf6 100644
--- a/drivers/video/atmel_hlcdfb.c
+++ b/drivers/video/atmel_hlcdfb.c
@@ -51,6 +51,18 @@ short console_row;
#define lcdc_readl(reg) __raw_readl((reg))
#define lcdc_writel(reg, val) __raw_writel((val), (reg))
+/*
+ * the CLUT register map as following
+ * RCLUT(24 ~ 16), GCLUT(15 ~ 8), BCLUT(7 ~ 0)
+ */
+void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue)
+{
+ lcdc_writel((red << LCDC_BASECLUT_RCLUT_Pos) & LCDC_BASECLUT_RCLUT_Msk
+ | (green << LCDC_BASECLUT_GCLUT_Pos) & LCDC_BASECLUT_GCLUT_Msk
+ | (blue << LCDC_BASECLUT_BCLUT_Pos) & LCDC_BASECLUT_BCLUT_Msk,
+ panel_info.mmio + ATMEL_LCDC_LUT(regno));
+}
+
void lcd_ctrl_init(void *lcdbase)
{
unsigned long value;
diff --git a/include/atmel_hlcdc.h b/include/atmel_hlcdc.h
index 945b30a..fbd2f92 100644
--- a/include/atmel_hlcdc.h
+++ b/include/atmel_hlcdc.h
@@ -217,6 +217,13 @@ struct atmel_hlcd_regs {
#define LCDC_BASECFG3_RDEF(value) \
((LCDC_BASECFG3_RDEF_Msk & ((value) << LCDC_BASECFG3_RDEF_Pos)))
+#define LCDC_BASECLUT_BCLUT_Pos 0
+#define LCDC_BASECLUT_BCLUT_Msk (0xff << LCDC_BASECLUT_BCLUT_Pos)
+#define LCDC_BASECLUT_GCLUT_Pos 8
+#define LCDC_BASECLUT_GCLUT_Msk (0xff << LCDC_BASECLUT_GCLUT_Pos)
+#define LCDC_BASECLUT_RCLUT_Pos 16
+#define LCDC_BASECLUT_RCLUT_Msk (0xff << LCDC_BASECLUT_RCLUT_Pos)
+
#define LCDC_BASECFG4_DMA (0x1 << 8)
#define LCDC_BASECFG4_REP (0x1 << 9)
--
1.7.9.5
^ permalink raw reply related [flat|nested] 14+ messages in thread* [U-Boot] [Patch v5] video: atmel: implement lcd_setcolreg function
2012-11-09 3:49 ` [U-Boot] [Patch v5] video: atmel: implement lcd_setcolreg function Bo Shen
@ 2012-11-10 13:13 ` Anatolij Gustschin
0 siblings, 0 replies; 14+ messages in thread
From: Anatolij Gustschin @ 2012-11-10 13:13 UTC (permalink / raw)
To: u-boot
Hi,
On Fri, 9 Nov 2012 11:49:14 +0800
Bo Shen <voice.shen@atmel.com> wrote:
> implement the common api lce_setcolreg in include/lcd.h
>
> Signed-off-by: Bo Shen <voice.shen@atmel.com>
> ---
> since v4:
> * using define for these magic number
> since v3:
> * add magic number
> since v2:
> * add this single patch
> ---
> drivers/video/atmel_hlcdfb.c | 12 ++++++++++++
> include/atmel_hlcdc.h | 7 +++++++
> 2 files changed, 19 insertions(+)
Applied to video/master after fixing commit log and gcc 4.6 warnings.
Thanks!
Anatolij
^ permalink raw reply [flat|nested] 14+ messages in thread
* [U-Boot] [PATCH v3 2/2] common/lcd: use lcd_setcolreg() to setup CLUT
2012-11-06 10:13 ` [U-Boot] [PATCH v3 0/2] rework common/lcd Andreas Bießmann
2012-11-06 10:13 ` [U-Boot] [PATCH v3 1/2] video: atmel: implement lcd_setcolreg funtion Andreas Bießmann
@ 2012-11-06 10:13 ` Andreas Bießmann
1 sibling, 0 replies; 14+ messages in thread
From: Andreas Bießmann @ 2012-11-06 10:13 UTC (permalink / raw)
To: u-boot
The lcd_setcolreg() is a API provided by the lcd driver and used to setup the
color lookup table. However the lcd driver setup the CLUT by using a lot of
ifdiffery and accessing the CLUT arrays directly instead. Remove that and use
the API.
Signed-off-by: Andreas Bie?mann <andreas.devel@googlemail.com>
Cc: Marek Vasut <marex@denx.de>
Cc: Anatolij Gustschin <agust@denx.de>
---
since v1:
* also use lcd_setcolreg() in lcd_display_bitmap()
* remove RFC
since v2:
* no change
common/lcd.c | 79 ++++++++++++----------------------------------------------
1 file changed, 16 insertions(+), 63 deletions(-)
diff --git a/common/lcd.c b/common/lcd.c
index b6be800..6835e65 100644
--- a/common/lcd.c
+++ b/common/lcd.c
@@ -523,11 +523,6 @@ static inline ushort *configuration_get_cmap(void)
#ifdef CONFIG_LCD_LOGO
void bitmap_plot(int x, int y)
{
-#ifdef CONFIG_ATMEL_LCD
- uint *cmap = (uint *)bmp_logo_palette;
-#else
- ushort *cmap = (ushort *)bmp_logo_palette;
-#endif
ushort i, j;
uchar *bmap;
uchar *fb;
@@ -545,44 +540,20 @@ void bitmap_plot(int x, int y)
fb = (uchar *)(lcd_base + y * lcd_line_length + x);
if (NBITS(panel_info.vl_bpix) < 12) {
- /* Leave room for default color map
- * default case: generic system with no cmap (most likely 16bpp)
- * cmap was set to the source palette, so no change is done.
- * This avoids even more ifdefs in the next stanza
- */
-#if defined(CONFIG_MPC823)
- cmap = (ushort *) &(cp->lcd_cmap[BMP_LOGO_OFFSET * sizeof(ushort)]);
-#elif defined(CONFIG_ATMEL_LCD)
- cmap = (uint *)configuration_get_cmap();
-#else
- cmap = configuration_get_cmap();
-#endif
WATCHDOG_RESET();
/* Set color map */
for (i = 0; i < ARRAY_SIZE(bmp_logo_palette); ++i) {
- ushort colreg = bmp_logo_palette[i];
-#ifdef CONFIG_ATMEL_LCD
- uint lut_entry;
-#ifdef CONFIG_ATMEL_LCD_BGR555
- lut_entry = ((colreg & 0x000F) << 11) |
- ((colreg & 0x00F0) << 2) |
- ((colreg & 0x0F00) >> 7);
-#else /* CONFIG_ATMEL_LCD_RGB565 */
- lut_entry = ((colreg & 0x000F) << 1) |
- ((colreg & 0x00F0) << 3) |
- ((colreg & 0x0F00) << 4);
-#endif
- *(cmap + BMP_LOGO_OFFSET) = lut_entry;
- cmap++;
-#else /* !CONFIG_ATMEL_LCD */
-#ifdef CONFIG_SYS_INVERT_COLORS
- *cmap++ = 0xffff - colreg;
-#else
- *cmap++ = colreg;
-#endif
-#endif /* CONFIG_ATMEL_LCD */
+ /* use the most significant bits here */
+ uint8_t red = ((bmp_logo_palette[i] >> 4) & 0xF0);
+ uint8_t green = ((bmp_logo_palette[i] >> 0) & 0xF0);
+ uint8_t blue = ((bmp_logo_palette[i] << 4) & 0xF0);
+ debug("LCD: setup colreg %u with "
+ "R: 0x%02x G: 0x%02x B: 0x%02x (0x%04x)\n",
+ i+BMP_LOGO_OFFSET, red, green, blue, bmp_logo_palette[i]);
+ /* leave room for the default colormap here */
+ lcd_setcolreg(i+BMP_LOGO_OFFSET, red, green, blue);
}
WATCHDOG_RESET();
@@ -667,9 +638,6 @@ static inline void fb_put_word(uchar **fb, uchar **from)
int lcd_display_bitmap(ulong bmp_image, int x, int y)
{
-#if !defined(CONFIG_MCC200)
- ushort *cmap = NULL;
-#endif
ushort *cmap_base = NULL;
ushort i, j;
uchar *fb;
@@ -716,34 +684,18 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
#if !defined(CONFIG_MCC200)
/* MCC200 LCD doesn't need CMAP, supports 1bpp b&w only */
if (bmp_bpix == 8) {
- cmap = configuration_get_cmap();
- cmap_base = cmap;
+ cmap_base = configuration_get_cmap();
/* Set color map */
for (i = 0; i < colors; ++i) {
bmp_color_table_entry_t cte = bmp->color_table[i];
-#if !defined(CONFIG_ATMEL_LCD)
- ushort colreg =
- ( ((cte.red) << 8) & 0xf800) |
- ( ((cte.green) << 3) & 0x07e0) |
- ( ((cte.blue) >> 3) & 0x001f) ;
-#ifdef CONFIG_SYS_INVERT_COLORS
- *cmap = 0xffff - colreg;
-#else
- *cmap = colreg;
-#endif
-#if defined(CONFIG_MPC823)
- cmap--;
-#else
- cmap++;
-#endif
-#else /* CONFIG_ATMEL_LCD */
+ debug("LCD: setup colreg %u with "
+ "R: 0x%02x G: 0x%02x B: 0x%02x\n",
+ i, cte.red, cte.green, cte.blue);
lcd_setcolreg(i, cte.red, cte.green, cte.blue);
-#endif
}
}
-#endif
-
+#else
/*
* BMP format for Monochrome assumes that the state of a
* pixel is described on a per Bit basis, not per Byte.
@@ -754,7 +706,6 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
* their own ways, so make the converting to be MCC200
* specific.
*/
-#if defined(CONFIG_MCC200)
if (bpix == 1) {
width = ((width + 7) & ~7) >> 3;
x = ((x + 7) & ~7) >> 3;
@@ -786,6 +737,8 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
else
byte_width = width * 2;
+ debug("LCD: draw %i b/pix image on %i b/pix display\n", bmp_bpix, bpix);
+
for (i = 0; i < height; ++i) {
WATCHDOG_RESET();
for (j = 0; j < width; j++) {
--
1.7.10.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
end of thread, other threads:[~2012-11-10 13:13 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-02 14:18 [U-Boot] [PATCH v2] common/lcd: use lcd_setcolreg() to setup CLUT Andreas Bießmann
2012-11-06 10:13 ` [U-Boot] [PATCH v3 0/2] rework common/lcd Andreas Bießmann
2012-11-06 10:13 ` [U-Boot] [PATCH v3 1/2] video: atmel: implement lcd_setcolreg funtion Andreas Bießmann
2012-11-06 22:54 ` Marek Vasut
2012-11-07 1:26 ` Bo Shen
2012-11-07 13:26 ` Marek Vasut
2012-11-08 3:06 ` Bo Shen
2012-11-08 7:53 ` Andreas Bießmann
2012-11-08 9:10 ` [U-Boot] [PATCH v4] " Bo Shen
2012-11-08 13:08 ` Marek Vasut
2012-11-09 3:46 ` Bo Shen
2012-11-09 3:49 ` [U-Boot] [Patch v5] video: atmel: implement lcd_setcolreg function Bo Shen
2012-11-10 13:13 ` Anatolij Gustschin
2012-11-06 10:13 ` [U-Boot] [PATCH v3 2/2] common/lcd: use lcd_setcolreg() to setup CLUT Andreas Bießmann
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.