1 /* 2 * Copyright (C) 2017-2019 Alibaba Group Holding Limited 3 */ 4 5 /****************************************************************************** 6 * @file drv_clk.h 7 * @brief header file for clk driver 8 * @version V1.0 9 * @date 02. June 2017 10 * @model clk 11 ******************************************************************************/ 12 13 #ifndef _CSI_CLK_H_ 14 #define _CSI_CLK_H_ 15 16 17 #include <drv/common.h> 18 19 #ifdef __cplusplus 20 extern "C" { 21 #endif 22 typedef enum { 23 CK_TIMER0_PCLK = 0, 24 CK_TIMER1_PCLK, 25 CK_TIMER0_WCLK, 26 CK_TIMER1_WCLK, 27 AP_WDT_PCLK, 28 AP_WDT_WCLK, 29 UART0_PCLK, 30 UART1_PCLK, 31 UART2_PCLK, 32 LP_UART_PCLK, 33 UART0_WCLK_L1, 34 UART0_WCLK_L2, 35 UART1_WCLK, 36 UART2_WCLK, 37 LP_UART_WCLK, 38 I2C0_PCLK, 39 I2C1_PCLK, 40 I2C0_WCLK, 41 I2C1_WCLK, 42 SSP0_PCLK, 43 SSP1_PCLK, 44 SSP2_PCLK, 45 SSP0_WCLK, 46 SSP1_WCLK, 47 SSP2_WCLK, 48 GPIO_PD_PCLK, 49 ADC_PCLK, 50 ADC_WCLK, 51 DAC_PCLK, 52 DAC_WCLK, 53 AD_TIMER0_PCLK, 54 AD_TIMER1_PCLK, 55 AD_TIMER0_WCLK, 56 AD_TIMER1_WCLK, 57 AP_DMA_PCLK, 58 LP_TIMER_PCLK, 59 LP_TIMER_WCLK, 60 I2S0_PCLK, 61 I2S0_WCLK, 62 PD_LOGIC_MATRIX_CLK, 63 PD_PINMUX_CLK, 64 ICP_CLK, 65 SPINOR_PCLK, 66 SPINOR_WCLK, 67 IRAM_CLK, 68 GPIO_PCLK, 69 AO_PINMUX_PCLK, 70 AO_PCU_PCLK, 71 RTC_PCLK, 72 EFLASH2_CLK, 73 EFLASH1_CTRL_CLK, 74 EFLASH1_CFG_CLK, 75 LSP_61M44_WCLK, 76 AON_76M8_CLK, 77 RTC_32K_WCLK, 78 IWDT_PCLK, 79 IWDT_WCLK, 80 } 81 clk_name; 82 83 84 /* 85 * bits domain definition for clock frequency 86 * base clock name same clock number reserved clock selection frequency division 87 * 31...28 27...24 23...20 19...16 15...12 11...8 7...4 3...0 88 * invalid value: 89 * 0xff 0xf or 0x0 0x0 or ignore 0xff 0xff 90 */ 91 typedef enum { 92 FIXED_FREQ = 0xffffffff, 93 94 /*ck timer0&1/rm timer0&1/ceva timer0&1*/ 95 WCLK_TIMER_32K = (CK_TIMER0_WCLK << 24) | 0x00600000, 96 WCLK_TIMER_19M2 = (CK_TIMER0_WCLK << 24) | 0x06000100, /* 1 div*/ 97 WCLK_TIMER_9M6 = (CK_TIMER0_WCLK << 24) | 0x00600101, /* 2 div*/ 98 99 /*ap wdt/cp wdt*/ 100 WCLK_WDT_32K = (AP_WDT_WCLK << 24) | 0x00200000, 101 WCLK_WDT_19M2 = (AP_WDT_WCLK << 24) | 0x00200100, 102 WCLK_WDT_9M6 = (AP_WDT_WCLK << 24) | 0x00200101, 103 104 /*i2c0&1*/ 105 WCLK_I2C_76M8 = (I2C0_WCLK << 24) | 0x00200100, 106 WCLK_I2C_19M2 = (I2C0_WCLK << 24) | 0x00200000, 107 108 /*uart0&1&2&lp uart*/ 109 WCLK_UART_19M2 = (UART0_WCLK_L1 << 24) | 0x00400000, 110 WCLK_UART_76M8 = (UART0_WCLK_L1 << 24) | 0x00400100, 111 /*only for uart0& lp uart*/ 112 WCLK_UART_32K = (UART0_WCLK_L1 << 24) | 0x00400200, 113 114 /*ssp0&1&2*/ 115 WCLK_SSP_19M2 = (SSP0_WCLK << 24) | 0x00300000, 116 WCLK_SSP_76M8 = (SSP0_WCLK << 24) | 0x00300100, 117 WCLK_SSP_61m44 = (SSP0_WCLK << 24) | 0x00300200, 118 119 /*adc*/ 120 WCLK_ADC_19M2 = (ADC_WCLK << 24) | 0x00100000, 121 WCLK_ADC_38M4 = (ADC_WCLK << 24) | 0x00100100, 122 WCLK_ADC_61M44 = (ADC_WCLK << 24) | 0x00100200, 123 WCLK_ADC_32K = (ADC_WCLK << 24) | 0x00100300, 124 125 /*dac*/ 126 WCLK_DAC_19M2 = (DAC_WCLK << 24) | 0x001001000, 127 WCLK_DAC_32K = (DAC_WCLK << 24) | 0x00100200, 128 129 /*ad timer0&1*/ 130 WCLK_AD_TIMER_32K = (AD_TIMER0_WCLK << 24) | 0x002000000, 131 WCLK_AD_TIMER_76M8 = (AD_TIMER0_WCLK << 24) | 0x00200100, 132 WCLK_AD_TIMER_19M2 = (AD_TIMER0_WCLK << 24) | 0x00200200, 133 134 /*lp timer*/ 135 WCLK_LP_TIMER_32K = (LP_TIMER_WCLK << 24) | 0x001000000, 136 WCLK_LP_TIMER_76M8 = (LP_TIMER_WCLK << 24) | 0x001000100, 137 WCLK_LP_TIMER_19M2 = (LP_TIMER_WCLK << 24) | 0x001000200, 138 139 /*I2S0*/ 140 WCLK_I2S_19M2 = (I2S0_WCLK << 24) | 0x00100000, 141 WCLK_I2S_76M8 = (I2S0_WCLK << 24) | 0x00100100, 142 WCLK_I2S_61M44 = (I2S0_WCLK << 24) | 0x00100200, 143 /*spi nor*/ 144 WCLK_SPINOR_19M2 = (SPINOR_WCLK << 24) | 0x00100000, 145 WCLK_SPINOR_76M8 = (SPINOR_WCLK << 24) | 0x00100100, 146 WCLK_SPINOR_61M44 = (SPINOR_WCLK << 24) | 0x00100200, 147 148 /*iwdt*/ 149 WCLK_IWDT_RC32K = (IWDT_WCLK << 24) | 0x00100000, 150 WCLK_IWDT_XTAL32K = (IWDT_WCLK << 24) | 0x00100100, 151 152 } clk_freq_sel; 153 154 /** 155 \brief set software clock gate. 156 \param[in] name the clock name to set. 157 \param[in] ctrl 0 enable; 1 disable 158 \return error code 159 */ 160 int csi_clk_sw_gate_ctrl(clk_name name, uint32_t ctrl); 161 162 /** 163 \brief set clock autogate. 164 \param[in] name the clock name to set. 165 \param[in] ctrl 0 enable; 1 disable 166 \return error code 167 */ 168 int csi_clk_hw_gate_ctrl(clk_name name, uint32_t ctrl); 169 170 /** 171 \brief config clock reset ctrl. 172 \param[in] name the clock name to set. 173 \param[in] ctrl 0 enable; 1 disable 174 \return error code 175 */ 176 int csi_clk_reset(clk_name name, uint32_t ctrl); 177 178 /** 179 \brief set clock freq. 180 \param[in] name the clock name to set. 181 \param[in] freq teh corresponding freq to set 182 \return error code 183 */ 184 int csi_clk_set_freq(clk_name name, clk_freq_sel freq); 185 186 187 #ifdef __cplusplus 188 } 189 #endif 190 191 #endif /* _CSI_CLK_H_ */ 192