1 /**
2   ******************************************************************************
3   * @file    stm32u5xx_hal_ltdc_ex.c
4   * @author  MCD Application Team
5   * @brief   LTDC Extension HAL module driver.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2021 STMicroelectronics.
10   * All rights reserved.
11   *
12   * This software is licensed under terms that can be found in the LICENSE file
13   * in the root directory of this software component.
14   * If no LICENSE file comes with this software, it is provided AS-IS.
15   *
16   ******************************************************************************
17   */
18 
19 /* Includes ------------------------------------------------------------------*/
20 #include "stm32u5xx_hal.h"
21 
22 /** @addtogroup STM32U5xx_HAL_Driver
23   * @{
24   */
25 
26 #if defined(HAL_LTDC_MODULE_ENABLED) && defined(HAL_DSI_MODULE_ENABLED)
27 
28 #if defined (LTDC) && defined (DSI)
29 
30 /** @defgroup LTDCEx LTDCEx
31   * @brief LTDC HAL module driver
32   * @{
33   */
34 
35 /* Private typedef -----------------------------------------------------------*/
36 /* Private define ------------------------------------------------------------*/
37 /* Private macro -------------------------------------------------------------*/
38 /* Private variables ---------------------------------------------------------*/
39 /* Private function prototypes -----------------------------------------------*/
40 /* Exported functions --------------------------------------------------------*/
41 
42 /** @defgroup LTDCEx_Exported_Functions LTDC Extended Exported Functions
43   * @{
44   */
45 
46 /** @defgroup LTDCEx_Exported_Functions_Group1 Initialization and Configuration functions
47   *  @brief   Initialization and Configuration functions
48   *
49 @verbatim
50  ===============================================================================
51                 ##### Initialization and Configuration functions #####
52  ===============================================================================
53     [..]  This section provides functions allowing to:
54       (+) Initialize and configure the LTDC
55 
56 @endverbatim
57   * @{
58   */
59 
60 /**
61   * @brief  Retrieve common parameters from DSI Video mode configuration structure
62   * @param  hltdc   pointer to a LTDC_HandleTypeDef structure that contains
63   *                 the configuration information for the LTDC.
64   * @param  VidCfg  pointer to a DSI_VidCfgTypeDef structure that contains
65   *                 the DSI video mode configuration parameters
66   * @note   The implementation of this function is taking into account the LTDC
67   *         polarities inversion as described in the current LTDC specification
68   * @retval HAL status
69   */
HAL_LTDCEx_StructInitFromVideoConfig(LTDC_HandleTypeDef * hltdc,DSI_VidCfgTypeDef * VidCfg)70 HAL_StatusTypeDef HAL_LTDCEx_StructInitFromVideoConfig(LTDC_HandleTypeDef *hltdc, DSI_VidCfgTypeDef *VidCfg)
71 {
72   /* Retrieve signal polarities from DSI */
73 
74   /* The following polarity is inverted:
75                      LTDC_DEPOLARITY_AL <-> LTDC_DEPOLARITY_AH */
76 
77   /* Note 1 : Code in line w/ Current LTDC specification */
78   hltdc->Init.DEPolarity = (VidCfg->DEPolarity == \
79                             DSI_DATA_ENABLE_ACTIVE_HIGH) ? LTDC_DEPOLARITY_AL : LTDC_DEPOLARITY_AH;
80   hltdc->Init.VSPolarity = (VidCfg->VSPolarity == DSI_VSYNC_ACTIVE_HIGH) ? LTDC_VSPOLARITY_AH : LTDC_VSPOLARITY_AL;
81   hltdc->Init.HSPolarity = (VidCfg->HSPolarity == DSI_HSYNC_ACTIVE_HIGH) ? LTDC_HSPOLARITY_AH : LTDC_HSPOLARITY_AL;
82 
83   /* Note 2: Code to be used in case LTDC polarities inversion updated in the specification */
84   /* hltdc->Init.DEPolarity = VidCfg->DEPolarity << 29;
85      hltdc->Init.VSPolarity = VidCfg->VSPolarity << 29;
86      hltdc->Init.HSPolarity = VidCfg->HSPolarity << 29; */
87 
88   /* Retrieve vertical timing parameters from DSI */
89   hltdc->Init.VerticalSync       = VidCfg->VerticalSyncActive - 1U;
90   hltdc->Init.AccumulatedVBP     = VidCfg->VerticalSyncActive + VidCfg->VerticalBackPorch - 1U;
91   hltdc->Init.AccumulatedActiveH = VidCfg->VerticalSyncActive + VidCfg->VerticalBackPorch + \
92                                    VidCfg->VerticalActive - 1U;
93   hltdc->Init.TotalHeigh         = VidCfg->VerticalSyncActive + VidCfg->VerticalBackPorch + \
94                                    VidCfg->VerticalActive + VidCfg->VerticalFrontPorch - 1U;
95 
96   return HAL_OK;
97 }
98 
99 /**
100   * @brief  Retrieve common parameters from DSI Adapted command mode configuration structure
101   * @param  hltdc   pointer to a LTDC_HandleTypeDef structure that contains
102   *                 the configuration information for the LTDC.
103   * @param  CmdCfg  pointer to a DSI_CmdCfgTypeDef structure that contains
104   *                 the DSI command mode configuration parameters
105   * @note   The implementation of this function is taking into account the LTDC
106   *         polarities inversion as described in the current LTDC specification
107   * @retval HAL status
108   */
HAL_LTDCEx_StructInitFromAdaptedCommandConfig(LTDC_HandleTypeDef * hltdc,DSI_CmdCfgTypeDef * CmdCfg)109 HAL_StatusTypeDef HAL_LTDCEx_StructInitFromAdaptedCommandConfig(LTDC_HandleTypeDef *hltdc, DSI_CmdCfgTypeDef *CmdCfg)
110 {
111   /* Retrieve signal polarities from DSI */
112 
113   /* The following polarities are inverted:
114                      LTDC_DEPOLARITY_AL <-> LTDC_DEPOLARITY_AH
115                      LTDC_VSPOLARITY_AL <-> LTDC_VSPOLARITY_AH
116                      LTDC_HSPOLARITY_AL <-> LTDC_HSPOLARITY_AH)*/
117 
118   /* Note 1 : Code in line w/ Current LTDC specification */
119   hltdc->Init.DEPolarity = (CmdCfg->DEPolarity == \
120                             DSI_DATA_ENABLE_ACTIVE_HIGH) ? LTDC_DEPOLARITY_AL : LTDC_DEPOLARITY_AH;
121   hltdc->Init.VSPolarity = (CmdCfg->VSPolarity == DSI_VSYNC_ACTIVE_HIGH) ? LTDC_VSPOLARITY_AL : LTDC_VSPOLARITY_AH;
122   hltdc->Init.HSPolarity = (CmdCfg->HSPolarity == DSI_HSYNC_ACTIVE_HIGH) ? LTDC_HSPOLARITY_AL : LTDC_HSPOLARITY_AH;
123 
124   /* Note 2: Code to be used in case LTDC polarities inversion updated in the specification */
125   /* hltdc->Init.DEPolarity = CmdCfg->DEPolarity << 29;
126      hltdc->Init.VSPolarity = CmdCfg->VSPolarity << 29;
127      hltdc->Init.HSPolarity = CmdCfg->HSPolarity << 29; */
128 
129   return HAL_OK;
130 }
131 
132 /**
133   * @}
134   */
135 
136 /**
137   * @}
138   */
139 
140 /**
141   * @}
142   */
143 
144 #endif /* LTDC && DSI */
145 
146 #endif /* HAL_LTCD_MODULE_ENABLED && HAL_DSI_MODULE_ENABLED */
147 
148 /**
149   * @}
150   */
151