1 /*
2 * Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6 
7 #ifndef R_MIPI_PHY_H
8 #define R_MIPI_PHY_H
9 
10 /***********************************************************************************************************************
11  * Includes
12  **********************************************************************************************************************/
13 
14 #include "bsp_api.h"
15 
16 /* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */
17 FSP_HEADER
18 
19 /*******************************************************************************************************************//**
20  * @addtogroup MIPI_PHY
21  * @{
22  **********************************************************************************************************************/
23 
24 /***********************************************************************************************************************
25  * Macro definitions
26  **********************************************************************************************************************/
27 
28 /***********************************************************************************************************************
29  * Typedef definitions
30  **********************************************************************************************************************/
31 
32 /* MIPI_PHY PLL speed configuration */
33 typedef union
34 {
35     __PACKED_STRUCT
36     {
37         uint8_t  div;                  ///< PHY PLL divisor
38         uint8_t  mul_frac;             ///< PHY PLL fractional multiplier (0, 1/3, 2/3, or 1/2)
39         uint16_t mul_int;              ///< PHY PLL integer multiplier (1-based)
40     };
41     uint32_t raw;
42 } mipi_phy_pll_cfg_t;
43 
44 /** MIPI PHY D-PHY power mode transition timing */
45 typedef struct st_mipi_phy_timing
46 {
47     uint32_t t_init : 19;              ///< Minimum duration of the TINIT state (Units: PCLKA cycles)
48     uint32_t        : 13;              // Padding
49     uint8_t t_clk_prep;                ///< Duration of the clock lane LP-00 state (immediately before entry to the HS-0 state)
50     uint8_t t_hs_prep;                 ///< Duration of the data lane LP-00 state (immediately before entry to the HS-0 state)
51     union
52     {
53         __PACKED_STRUCT
54         {
55             uint8_t t_clk_zero;        ///< TCLKZERO setting. See Figure 57.1 in User Manual (R01UH0995EJ0060) for more information
56             uint8_t t_clk_pre;         ///< TCLKPRE setting. See Figure 57.1 in User Manual (R01UH0995EJ0060) for more information
57             uint8_t t_clk_post;        ///< TCLKPOST setting. See Figure 57.1 in User Manual (R01UH0995EJ0060) for more information
58             uint8_t t_clk_trail;       ///< TCLKTRAIL setting. See Figure 57.1 in User Manual (R01UH0995EJ0060) for more information
59         } dphytim4_b;
60         uint32_t dphytim4;             ///< Clock lane pre and post data timing settings
61     };
62     union
63     {
64         __PACKED_STRUCT
65         {
66             uint8_t t_hs_zero;         ///< THSZERO setting. See Figure 57.1 in User Maual (R01UH0995EJ0060) for more information
67             uint8_t t_hs_trail;        ///< THSTRAIL setting. See Figure 57.1 in User Maual (R01UH0995EJ0060) for more information
68             uint8_t t_hs_exit;         ///< THSEXIT setting. See Figure 57.1 in User Maual (R01UH0995EJ0060) for more information
69             uint8_t : 8;
70         } dphytim5_b;
71         uint32_t dphytim5;             ///< High-Speed data lane timing settings
72     };
73     uint8_t t_lp_exit;                 ///< Low-power transition time to High-Speed mode
74 } mipi_phy_timing_t;
75 
76 /** MIPI_PHY configuration structure. */
77 typedef struct st_mipi_phy_cfg
78 {
79     mipi_phy_pll_cfg_t        pll_settings;   ///< PHY PLL configuration (DPHYPLFCR)
80     uint8_t                   lp_divisor : 5; ///< PHY PLL LP speed divisor setting (DPHYESCCR)
81     mipi_phy_timing_t const * p_timing;       ///< Pointer to D-PHY HS/LP transition timing values
82 } mipi_phy_cfg_t;
83 
84 /** MIPI_PHY instance control block. */
85 typedef struct st_mipi_phy_ctrl
86 {
87     uint32_t               open;
88     mipi_phy_cfg_t const * p_cfg;
89 } mipi_phy_ctrl_t;
90 
91 /** Private Interface definition for MIPI PHY peripheral */
92 typedef struct st_mipi_phy_api
93 {
94     /** Open MIPI PHY device.
95      * @param[in,out]  p_ctrl       Pointer to MIPI PHY interface control block.
96      * @param[in]      p_cfg        Pointer to MIPI PHY configuration structure.
97      */
98     fsp_err_t (* open)(mipi_phy_ctrl_t * const p_ctrl, mipi_phy_cfg_t const * const p_cfg);
99 
100     /** Close MIPI PHY device.
101      * @param[in]     p_ctrl        Pointer to MIPI PHY interface control block.
102      */
103     fsp_err_t (* close)(mipi_phy_ctrl_t * const p_ctrl);
104 } mipi_phy_api_t;
105 
106 /** This structure encompasses everything that is needed to use an instance of this interface. */
107 typedef struct st_mipi_phy_instance
108 {
109     mipi_phy_ctrl_t      * p_ctrl;     ///< Pointer to the control structure for this instance
110     mipi_phy_cfg_t const * p_cfg;      ///< Pointer to the configuration structure for this instance
111     mipi_phy_api_t const * p_api;      ///< Pointer to the API structure for this instance
112 } mipi_phy_instance_t;
113 
114 /**********************************************************************************************************************
115  * Exported global variables
116  **********************************************************************************************************************/
117 
118 /** @cond INC_HEADER_DEFS_SEC */
119 /** Filled in Interface API structure for this Instance. */
120 extern const mipi_phy_api_t g_mipi_phy;
121 
122 /** @endcond */
123 
124 /***********************************************************************************************************************
125  * Exported global functions (to be accessed by other files)
126  **********************************************************************************************************************/
127 
128 /***********************************************************************************************************************
129  * Instance Functions (Note: This is not a public API and should not be called directly)
130  **********************************************************************************************************************/
131 fsp_err_t r_mipi_phy_open(mipi_phy_ctrl_t * const p_api_ctrl, mipi_phy_cfg_t const * const p_cfg);
132 fsp_err_t r_mipi_phy_close(mipi_phy_ctrl_t * const p_api_ctrl);
133 
134 /*******************************************************************************************************************//**
135  * @} (end defgroup MIPI_PHY)
136  **********************************************************************************************************************/
137 
138 /* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */
139 FSP_FOOTER
140 
141 #endif                                 // R_MIPI_PHY_H
142