101-kernel-2.6.38-Fix-LCD-framebuffer-driver-data-swap-bug-for-MCF5441.patch 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. From 633531cdbaa3ed70a364db78fd7f8ae11da3e394 Mon Sep 17 00:00:00 2001
  2. From: Wang Huan <[email protected]>
  3. Date: Wed, 14 Sep 2011 17:40:41 +0800
  4. Subject: [PATCH] Fix LCD framebuffer driver data swap bug for MCF54418
  5. This patch fixed LCD framebuffer driver data swap bug
  6. for MCF54418.
  7. Signed-off-by: Alison Wang <[email protected]>
  8. ---
  9. drivers/video/fsl-ssd1289-fb.c | 13 ++++++++++---
  10. 1 files changed, 10 insertions(+), 3 deletions(-)
  11. --- a/drivers/video/fsl-ssd1289-fb.c
  12. +++ b/drivers/video/fsl-ssd1289-fb.c
  13. @@ -54,8 +54,10 @@ static int ssd1289_spi_writeblock(struct
  14. for (i = 0; i < SPI_LCD_BLOCK_SIZE; i++) {
  15. if (i % 2 == 0)
  16. spi_block_buffer[i] = 0x01;
  17. - else if (flag == 1)
  18. - spi_block_buffer[i] = *(daddr + (i >> 1));
  19. + else if ((flag == 1) && (i % 4 == 1))
  20. + spi_block_buffer[i] = *(daddr + (i >> 1) + 1);
  21. + else if ((flag == 1) && (i % 4 == 3))
  22. + spi_block_buffer[i] = *(daddr + (i >> 1) - 1);
  23. else if (flag == 0)
  24. spi_block_buffer[i] = 0;
  25. }
  26. @@ -331,6 +333,9 @@ static int ssd1289fbd(void *arg)
  27. int i;
  28. unsigned short *buf_p;
  29. struct fsl_ssd1289_fb_info *fbinfo = info->par;
  30. +#if defined(CONFIG_SSD1289_FLEXBUS_MODE)
  31. + unsigned short tmp;
  32. +#endif
  33. #if defined(CONFIG_SSD1289_SPI_MODE)
  34. unsigned char *bufspi_p;
  35. int count;
  36. @@ -344,7 +349,9 @@ static int ssd1289fbd(void *arg)
  37. #if defined(CONFIG_SSD1289_FLEXBUS_MODE)
  38. for (i = 0; i < info->screen_size; i += 2) {
  39. - ssd1289_write(info, *buf_p, 1);
  40. + tmp = ((((*buf_p) & 0x00ff) << 8) |
  41. + (((*buf_p) & 0xff00) >> 8));
  42. + ssd1289_write(info, tmp, 1);
  43. buf_p++;
  44. }
  45. #elif defined(CONFIG_SSD1289_SPI_MODE)