atmel_lcdfb: support new-style palette format
Subsystems (2)
PATCH v2 1/1 atmel_lcdfb: support new-style palette format
The newer Atmel SoCs use normal 16bit 565 BGR/RGB for the palette data, rather than the special intensity + 555 format.
Fill out palette data correctly on these devices, and at the same time respect the RGB/BGR wiring mode.
---
Changes since v1:
- ATMEL_LCDC_WIRING_RGB/BGR was swapped
drivers/video/atmel_lcdfb.c | 32 ++++++++++++++++++++++++-------- 1 files changed, 24 insertions(+), 8 deletions(-)
drivers/video/atmel_lcdfb.c +24 -8
@@ -682,14 +682,30 @@ static int atmel_lcdfb_setcolreg(unsigned int regno, unsigned int red,case FB_VISUAL_PSEUDOCOLOR :if (regno <256 ) { - val = ((red >>11 ) &0x001f ); - val |= ((green >>6 ) &0x03e0 ); - val |= ((blue >>1 ) &0x7c00 ); - -/* -* TODO: intensity bit. Maybe something like -* ~(red[10] ^ green[10] ^ blue[10]) & 1 -*/ +if (cpu_is_at91sam9261 () ||cpu_is_at91sam9263 () + ||cpu_is_at91sam9rl ()) { +/* old style I+BGR:555 */ + val = ((red >>11 ) &0x001f ); + val |= ((green >>6 ) &0x03e0 ); + val |= ((blue >>1 ) &0x7c00 ); + +/* +* TODO: intensity bit. Maybe something like +* ~(red[10] ^ green[10] ^ blue[10]) & 1 +*/ + }else { +/* new style BGR:565 / RGB:565 */ +if (sinfo->lcd_wiring_mode == +ATMEL_LCDC_WIRING_RGB ) { + val = ((blue >>11 ) &0x001f ); + val |= ((red >>0 ) &0xf800 ); + }else { + val = ((red >>11 ) &0x001f ); + val |= ((blue >>0 ) &0xf800 ); + } + + val |= ((green >>5 ) &0x07e0 ); + }lcdc_writel (sinfo,ATMEL_LCDC_LUT (regno), val); ret =0 ;
Signature · 1 line
1.7.6.3
PATCH v2 1/1 atmel_lcdfb: support new-style palette format
Quoted 5 lines · Peter Korsgaard
The newer Atmel SoCs use normal 16bit 565 BGR/RGB for the palette data, rather than the special intensity + 555 format.
Fill out palette data correctly on these devices, and at the same time respect the RGB/BGR wiring mode.
Applied this patch.
Thanks,
Florian Tobias Schandinat
Quoted 52 lines
Signed-off-by Peter Korsgaard <[email protected]>---
Changes since v1:
- ATMEL_LCDC_WIRING_RGB/BGR was swappeddrivers/video/atmel_lcdfb.c | 32 ++++++++++++++++++++++++-------- 1 files changed, 24 insertions(+), 8 deletions(-)drivers/video/atmel_lcdfb.c +24
-8@@ -682,14 +682,30 @@ static int atmel_lcdfb_setcolreg(unsigned int regno, unsigned int red,case FB_VISUAL_PSEUDOCOLOR :if (regno <256 ) { - val = ((red >>11 ) &0x001f ); - val |= ((green >>6 ) &0x03e0 ); - val |= ((blue >>1 ) &0x7c00 ); - -/* -* TODO: intensity bit. Maybe something like -* ~(red[10] ^ green[10] ^ blue[10]) & 1 -*/ +if (cpu_is_at91sam9261 () ||cpu_is_at91sam9263 () + ||cpu_is_at91sam9rl ()) { +/* old style I+BGR:555 */ + val = ((red >>11 ) &0x001f ); + val |= ((green >>6 ) &0x03e0 ); + val |= ((blue >>1 ) &0x7c00 ); + +/* +* TODO: intensity bit. Maybe something like +* ~(red[10] ^ green[10] ^ blue[10]) & 1 +*/ + }else { +/* new style BGR:565 / RGB:565 */ +if (sinfo->lcd_wiring_mode == +ATMEL_LCDC_WIRING_RGB ) { + val = ((blue >>11 ) &0x001f ); + val |= ((red >>0 ) &0xf800 ); + }else { + val = ((red >>11 ) &0x001f ); + val |= ((blue >>0 ) &0xf800 ); + } + + val |= ((green >>5 ) &0x07e0 ); + }lcdc_writel (sinfo,ATMEL_LCDC_LUT (regno), val); ret =0 ;
PATCH v2 1/1 atmel_lcdfb: support new-style palette format
On 11/12/2011 01:16 AM, Florian Tobias Schandinat :
Quoted 7 lines · Peter Korsgaard
Quoted 5 lines
The newer Atmel SoCs use normal 16bit 565 BGR/RGB for the palette data, rather than the special intensity + 555 format.
Fill out palette data correctly on these devices, and at the same time respect the RGB/BGR wiring mode.
Quoted 6 lines
Applied this patch.
Thanks,
Florian Tobias Schandinat
Florian, here is my:
Can you please send it upstream through your tree?
Quoted 53 lines
Quoted 51 lines
Signed-off-by Peter Korsgaard <[email protected]>---
Changes since v1:
- ATMEL_LCDC_WIRING_RGB/BGR was swappeddrivers/video/atmel_lcdfb.c | 32 ++++++++++++++++++++++++-------- 1 files changed, 24 insertions(+), 8 deletions(-)drivers/video/atmel_lcdfb.c +24
-8@@ -682,14 +682,30 @@ static int atmel_lcdfb_setcolreg(unsigned int regno, unsigned int red,case FB_VISUAL_PSEUDOCOLOR :if (regno <256 ) { - val = ((red >>11 ) &0x001f ); - val |= ((green >>6 ) &0x03e0 ); - val |= ((blue >>1 ) &0x7c00 ); - -/* -* TODO: intensity bit. Maybe something like -* ~(red[10] ^ green[10] ^ blue[10]) & 1 -*/ +if (cpu_is_at91sam9261 () ||cpu_is_at91sam9263 () + ||cpu_is_at91sam9rl ()) { +/* old style I+BGR:555 */ + val = ((red >>11 ) &0x001f ); + val |= ((green >>6 ) &0x03e0 ); + val |= ((blue >>1 ) &0x7c00 ); + +/* +* TODO: intensity bit. Maybe something like +* ~(red[10] ^ green[10] ^ blue[10]) & 1 +*/ + }else { +/* new style BGR:565 / RGB:565 */ +if (sinfo->lcd_wiring_mode == +ATMEL_LCDC_WIRING_RGB ) { + val = ((blue >>11 ) &0x001f ); + val |= ((red >>0 ) &0xf800 ); + }else { + val = ((red >>11 ) &0x001f ); + val |= ((blue >>0 ) &0xf800 ); + } + + val |= ((green >>5 ) &0x07e0 ); + }lcdc_writel (sinfo,ATMEL_LCDC_LUT (regno), val); ret =0 ;
Signature · 1 line
Nicolas Ferre