drv_lcd_mipi.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. /*
  2. * Copyright (c) 2006-2023, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2017-10-30 Tanek the first version
  9. * 2023-09-25 Frogrey export MIPI DSI config parameters.
  10. */
  11. #include <rtthread.h>
  12. #ifdef BSP_USING_LCD_MIPI
  13. #include "display_support.h"
  14. #include "drv_lcd_mipi.h"
  15. #include "fsl_common.h"
  16. #include "fsl_iomuxc.h"
  17. #include "fsl_elcdif.h"
  18. #include "drv_gpio.h"
  19. #define LOG_TAG "drv.lcd_mipi"
  20. #include <drv_log.h>
  21. #if !defined(LCD_MIPI_WIDTH) || !defined(LCD_MIPI_HEIGHT)
  22. #error "Please config mipi dsi pixel parameters."
  23. #endif
  24. #if !defined(LCD_MIPI_HFP) || !defined(LCD_MIPI_HBP) || !defined(LCD_MIPI_HSW) || \
  25. !defined(LCD_MIPI_VFP) || !defined(LCD_MIPI_VBP) || !defined(LCD_MIPI_VSW)
  26. #error "Please config mipi dsi timing parameters."
  27. #endif
  28. #if !defined(LCD_MIPI_BL_PIN) || !defined(LCD_MIPI_RST_PIN)
  29. #error "Please config mipi dsi backlight or reset pin."
  30. #endif
  31. struct imxrt_lcd_mipi
  32. {
  33. struct rt_device device;
  34. struct rt_device_graphic_info info;
  35. };
  36. static struct imxrt_lcd_mipi lcd_mipi;
  37. static rt_err_t imxrt_lcd_mipi_init(rt_device_t device)
  38. {
  39. RT_ASSERT(device != RT_NULL);
  40. BOARD_PrepareDisplayController();
  41. /* MIPI DSI DEVICE INFORMATION*/
  42. lcd_mipi.info.width = LCD_MIPI_WIDTH;
  43. lcd_mipi.info.height = LCD_MIPI_HEIGHT;
  44. #if DEMO_USE_XRGB8888
  45. lcd_mipi.info.pixel_format = RTGRAPHIC_PIXEL_FORMAT_ARGB888;
  46. lcd_mipi.info.bits_per_pixel = 32;
  47. #elif DEMO_USE_RGB565
  48. lcd_mipi.info.pixel_format = RTGRAPHIC_PIXEL_FORMAT_RGB565;
  49. lcd_mipi.info.bits_per_pixel = 16;
  50. #else
  51. lcd_mipi.info.bits_per_pixel = 16;
  52. #endif
  53. return RT_EOK;
  54. }
  55. static rt_err_t imxrt_lcd_mipi_control(rt_device_t device, int cmd, void *args)
  56. {
  57. switch(cmd)
  58. {
  59. case RTGRAPHIC_CTRL_RECT_UPDATE:
  60. break;
  61. case RTGRAPHIC_CTRL_POWERON:
  62. rt_pin_write(LCD_MIPI_BL_PIN, PIN_HIGH);
  63. break;
  64. case RTGRAPHIC_CTRL_POWEROFF:
  65. rt_pin_write(LCD_MIPI_BL_PIN, PIN_LOW);
  66. break;
  67. case RTGRAPHIC_CTRL_GET_INFO:
  68. rt_memcpy(args, &lcd_mipi.info, sizeof(lcd_mipi.info));
  69. break;
  70. case RTGRAPHIC_CTRL_SET_MODE:
  71. break;
  72. }
  73. return RT_EOK;
  74. }
  75. int rt_hw_lcd_mipi_init(void)
  76. {
  77. rt_err_t ret;
  78. lcd_mipi.device.type = RT_Device_Class_Graphic;
  79. lcd_mipi.device.init = imxrt_lcd_mipi_init;
  80. lcd_mipi.device.open = RT_NULL;
  81. lcd_mipi.device.close = RT_NULL;
  82. lcd_mipi.device.read = RT_NULL;
  83. lcd_mipi.device.write = RT_NULL;
  84. lcd_mipi.device.control = imxrt_lcd_mipi_control;
  85. lcd_mipi.device.user_data = (void *)&lcd_mipi.info;
  86. ret = rt_device_register(&lcd_mipi.device, "lcd_mipi", RT_DEVICE_FLAG_RDWR);
  87. return ret;
  88. }
  89. INIT_DEVICE_EXPORT(rt_hw_lcd_mipi_init);
  90. #endif /* BSP_USING_LCD_MIPI */