1 /* 2 * Copyright (c) 2019-2020, NXP 3 * All rights reserved. 4 * 5 * SPDX-License-Identifier: BSD-3-Clause 6 */ 7 8 #ifndef _FSL_DC_FB_DSI_CMD_H_ 9 #define _FSL_DC_FB_DSI_CMD_H_ 10 11 #include "fsl_dc_fb.h" 12 #include "fsl_mipi_dsi_cmd.h" 13 #include "fsl_display.h" 14 15 /*! 16 * @addtogroup dc_fb_dsi_cmd 17 * @{ 18 */ 19 20 /* 21 * Change log: 22 * 23 * - 1.1.1 24 * - Bug Fixes 25 * - Fixed MISRA 2012 issues. 26 * 27 * - 1.1.0 28 * - Improvements 29 * - Supported using TE pin to handle smart panel tearing effect. 30 * 31 * - 1.0.0 32 * - Initial version 33 */ 34 35 /******************************************************************************* 36 * Definitions 37 ******************************************************************************/ 38 39 /* Only support one layer. To support multiple layers, the DSI transfer should 40 * be protected. If writing to a layer is in progress, the writing to another layer 41 * should be blocked until previous layer operation finished. 42 */ 43 #define DC_FB_DSI_CMD_MAX_LAYER 1U 44 #if (DC_FB_DSI_CMD_MAX_LAYER != 1U) 45 #error Current driver only supports one layer 46 #endif 47 48 /*! @brief DSI_CMD display configuration. */ 49 typedef struct _dc_fb_dsi_cmd_config 50 { 51 display_config_t commonConfig; /*!< Common display configuration. */ 52 bool useTEPin; /*!< Use TE pin to handle tearing effect or not. */ 53 } dc_fb_dsi_cmd_config_t; 54 55 /*! @brief Data for DSI_CMD display controller layer. */ 56 typedef struct _dc_fb_dsi_cmd_layer 57 { 58 bool enabled; /*!< The layer is enabled. */ 59 dc_fb_info_t fbInfo; /*!< Frame buffer info. */ 60 void *frameBuffer; /*!< Frame buffer sent currently. */ 61 dc_fb_callback_t callback; /*!< Callback for buffer switch off. */ 62 void *cbParam; /*!< Callback parameter. */ 63 void *volatile fbWaitTE; /*!< New frame buffer wait to send at next TE. */ 64 } dc_fb_dsi_cmd_layer_t; 65 66 /*! @brief Data for DSI_CMD display controller driver handle. */ 67 typedef struct _dc_fb_dsi_cmd_handle 68 { 69 mipi_dsi_device_t *dsiDevice; /*!< The MIPI DSI device that controls the panel. */ 70 display_handle_t *panelHandle; /*!< Handle of the panel. */ 71 uint8_t initTimes; /*!< How many times the DC is initialized. */ 72 uint8_t enabledLayerCount; /*!< How many times layers are enabled. */ 73 dc_fb_dsi_cmd_layer_t layers[DC_FB_DSI_CMD_MAX_LAYER]; /*!< Information of the layer. */ 74 bool useTEPin; /*!< Use TE pin to handle tearing effect or not. */ 75 } dc_fb_dsi_cmd_handle_t; 76 77 extern const dc_fb_ops_t g_dcFbOpsDsiCmd; 78 79 /******************************************************************************* 80 * API 81 ******************************************************************************/ 82 83 #if defined(__cplusplus) 84 extern "C" { 85 #endif 86 87 status_t DC_FB_DSI_CMD_Init(const dc_fb_t *dc); 88 status_t DC_FB_DSI_CMD_Deinit(const dc_fb_t *dc); 89 status_t DC_FB_DSI_CMD_EnableLayer(const dc_fb_t *dc, uint8_t layer); 90 status_t DC_FB_DSI_CMD_DisableLayer(const dc_fb_t *dc, uint8_t layer); 91 status_t DC_FB_DSI_CMD_SetLayerConfig(const dc_fb_t *dc, uint8_t layer, dc_fb_info_t *fbInfo); 92 status_t DC_FB_DSI_CMD_GetLayerDefaultConfig(const dc_fb_t *dc, uint8_t layer, dc_fb_info_t *fbInfo); 93 status_t DC_FB_DSI_CMD_SetFrameBuffer(const dc_fb_t *dc, uint8_t layer, void *frameBuffer); 94 uint32_t DC_FB_DSI_CMD_GetProperty(const dc_fb_t *dc); 95 void DC_FB_DSI_CMD_SetCallback(const dc_fb_t *dc, uint8_t layer, dc_fb_callback_t callback, void *param); 96 97 /* This function should be called in panel TE pin ISR. */ 98 void DC_FB_DSI_CMD_TE_IRQHandler(const dc_fb_t *dc); 99 100 #if defined(__cplusplus) 101 } 102 #endif 103 104 /*! @} */ 105 106 #endif /* _FSL_DC_FB_DSI_CMD_H_ */ 107