1 /*
2  * Copyright (c) 2023 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #include "hpm_mipi_csi_phy_drv.h"
9 
mipi_csi_phy_default_config(mipi_csi_phy_config_t * cfg)10 void mipi_csi_phy_default_config(mipi_csi_phy_config_t *cfg)
11 {
12     cfg->clane_cfg.t_settle_ns = 140;
13     cfg->clane_cfg.t_term_en_ns = 30;
14 
15     cfg->dlane_cfg.t_settle_ns = 100;
16     cfg->dlane_cfg.t_term_en_ns = 30;
17 }
18 
mipi_csi_phy_init(MIPI_CSI_PHY_Type * ptr,mipi_csi_phy_config_t * cfg)19 void mipi_csi_phy_init(MIPI_CSI_PHY_Type *ptr, mipi_csi_phy_config_t *cfg)
20 {
21     ptr->SOFT_RST = 0x03;
22     ptr->SOFT_RST = 0x00;
23 
24     ptr->CLANE_PARA = (ptr->CLANE_PARA & ~(MIPI_CSI_PHY_CLANE_PARA_T_CLK_TERMEN_MASK |
25                         MIPI_CSI_PHY_CLANE_PARA_T_CLK_SETTLE_MASK)) |
26                         MIPI_CSI_PHY_CLANE_PARA_T_CLK_TERMEN_SET(cfg->clane_cfg.t_term_en_ns / 10) |
27                         MIPI_CSI_PHY_CLANE_PARA_T_CLK_SETTLE_SET(cfg->clane_cfg.t_settle_ns / 10);
28 
29 
30     ptr->T_HS_TERMEN = (ptr->T_HS_TERMEN & ~(MIPI_CSI_PHY_T_HS_TERMEN_T_D1_TERMEN_MASK |
31                         MIPI_CSI_PHY_T_HS_TERMEN_T_D0_TERMEN_MASK)) |
32                         MIPI_CSI_PHY_T_HS_TERMEN_T_D1_TERMEN_SET(cfg->dlane_cfg.t_term_en_ns / 10) |
33                         MIPI_CSI_PHY_T_HS_TERMEN_T_D0_TERMEN_SET(cfg->dlane_cfg.t_term_en_ns / 10);
34 
35     ptr->T_HS_SETTLE = (ptr->T_HS_SETTLE & ~(MIPI_CSI_PHY_T_HS_SETTLE_T_D1_SETTLE_MASK |
36                         MIPI_CSI_PHY_T_HS_SETTLE_T_D0_SETTLE_MASK)) |
37                         MIPI_CSI_PHY_T_HS_SETTLE_T_D1_SETTLE_SET(cfg->dlane_cfg.t_settle_ns / 10) |
38                         MIPI_CSI_PHY_T_HS_SETTLE_T_D0_SETTLE_SET(cfg->dlane_cfg.t_settle_ns / 10);
39 }
40