0001
0002
0003
0004
0005
0006
0007 #ifndef _LINUX_STM32_GPTIMER_H_
0008 #define _LINUX_STM32_GPTIMER_H_
0009
0010 #include <linux/clk.h>
0011 #include <linux/dmaengine.h>
0012 #include <linux/dma-mapping.h>
0013 #include <linux/regmap.h>
0014
0015 #define TIM_CR1 0x00
0016 #define TIM_CR2 0x04
0017 #define TIM_SMCR 0x08
0018 #define TIM_DIER 0x0C
0019 #define TIM_SR 0x10
0020 #define TIM_EGR 0x14
0021 #define TIM_CCMR1 0x18
0022 #define TIM_CCMR2 0x1C
0023 #define TIM_CCER 0x20
0024 #define TIM_CNT 0x24
0025 #define TIM_PSC 0x28
0026 #define TIM_ARR 0x2c
0027 #define TIM_CCR1 0x34
0028 #define TIM_CCR2 0x38
0029 #define TIM_CCR3 0x3C
0030 #define TIM_CCR4 0x40
0031 #define TIM_BDTR 0x44
0032 #define TIM_DCR 0x48
0033 #define TIM_DMAR 0x4C
0034
0035 #define TIM_CR1_CEN BIT(0)
0036 #define TIM_CR1_DIR BIT(4)
0037 #define TIM_CR1_ARPE BIT(7)
0038 #define TIM_CR2_MMS (BIT(4) | BIT(5) | BIT(6))
0039 #define TIM_CR2_MMS2 GENMASK(23, 20)
0040 #define TIM_SMCR_SMS (BIT(0) | BIT(1) | BIT(2))
0041 #define TIM_SMCR_TS (BIT(4) | BIT(5) | BIT(6))
0042 #define TIM_DIER_UIE BIT(0)
0043 #define TIM_DIER_UDE BIT(8)
0044 #define TIM_DIER_CC1DE BIT(9)
0045 #define TIM_DIER_CC2DE BIT(10)
0046 #define TIM_DIER_CC3DE BIT(11)
0047 #define TIM_DIER_CC4DE BIT(12)
0048 #define TIM_DIER_COMDE BIT(13)
0049 #define TIM_DIER_TDE BIT(14)
0050 #define TIM_SR_UIF BIT(0)
0051 #define TIM_EGR_UG BIT(0)
0052 #define TIM_CCMR_PE BIT(3)
0053 #define TIM_CCMR_M1 (BIT(6) | BIT(5))
0054 #define TIM_CCMR_CC1S (BIT(0) | BIT(1))
0055 #define TIM_CCMR_IC1PSC GENMASK(3, 2)
0056 #define TIM_CCMR_CC2S (BIT(8) | BIT(9))
0057 #define TIM_CCMR_IC2PSC GENMASK(11, 10)
0058 #define TIM_CCMR_CC1S_TI1 BIT(0)
0059 #define TIM_CCMR_CC1S_TI2 BIT(1)
0060 #define TIM_CCMR_CC2S_TI2 BIT(8)
0061 #define TIM_CCMR_CC2S_TI1 BIT(9)
0062 #define TIM_CCER_CC1E BIT(0)
0063 #define TIM_CCER_CC1P BIT(1)
0064 #define TIM_CCER_CC1NE BIT(2)
0065 #define TIM_CCER_CC1NP BIT(3)
0066 #define TIM_CCER_CC2E BIT(4)
0067 #define TIM_CCER_CC2P BIT(5)
0068 #define TIM_CCER_CC3E BIT(8)
0069 #define TIM_CCER_CC3P BIT(9)
0070 #define TIM_CCER_CC4E BIT(12)
0071 #define TIM_CCER_CC4P BIT(13)
0072 #define TIM_CCER_CCXE (BIT(0) | BIT(4) | BIT(8) | BIT(12))
0073 #define TIM_BDTR_BKE(x) BIT(12 + (x) * 12)
0074 #define TIM_BDTR_BKP(x) BIT(13 + (x) * 12)
0075 #define TIM_BDTR_AOE BIT(14)
0076 #define TIM_BDTR_MOE BIT(15)
0077 #define TIM_BDTR_BKF(x) (0xf << (16 + (x) * 4))
0078 #define TIM_DCR_DBA GENMASK(4, 0)
0079 #define TIM_DCR_DBL GENMASK(12, 8)
0080
0081 #define MAX_TIM_PSC 0xFFFF
0082 #define MAX_TIM_ICPSC 0x3
0083 #define TIM_CR2_MMS_SHIFT 4
0084 #define TIM_CR2_MMS2_SHIFT 20
0085 #define TIM_SMCR_SMS_SLAVE_MODE_DISABLED 0
0086 #define TIM_SMCR_SMS_ENCODER_MODE_1 1
0087 #define TIM_SMCR_SMS_ENCODER_MODE_2 2
0088 #define TIM_SMCR_SMS_ENCODER_MODE_3 3
0089 #define TIM_SMCR_TS_SHIFT 4
0090 #define TIM_BDTR_BKF_MASK 0xF
0091 #define TIM_BDTR_BKF_SHIFT(x) (16 + (x) * 4)
0092
0093 enum stm32_timers_dmas {
0094 STM32_TIMERS_DMA_CH1,
0095 STM32_TIMERS_DMA_CH2,
0096 STM32_TIMERS_DMA_CH3,
0097 STM32_TIMERS_DMA_CH4,
0098 STM32_TIMERS_DMA_UP,
0099 STM32_TIMERS_DMA_TRIG,
0100 STM32_TIMERS_DMA_COM,
0101 STM32_TIMERS_MAX_DMAS,
0102 };
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112 struct stm32_timers_dma {
0113 struct completion completion;
0114 phys_addr_t phys_base;
0115 struct mutex lock;
0116 struct dma_chan *chan;
0117 struct dma_chan *chans[STM32_TIMERS_MAX_DMAS];
0118 };
0119
0120 struct stm32_timers {
0121 struct clk *clk;
0122 struct regmap *regmap;
0123 u32 max_arr;
0124 struct stm32_timers_dma dma;
0125 };
0126
0127 #if IS_REACHABLE(CONFIG_MFD_STM32_TIMERS)
0128 int stm32_timers_dma_burst_read(struct device *dev, u32 *buf,
0129 enum stm32_timers_dmas id, u32 reg,
0130 unsigned int num_reg, unsigned int bursts,
0131 unsigned long tmo_ms);
0132 #else
0133 static inline int stm32_timers_dma_burst_read(struct device *dev, u32 *buf,
0134 enum stm32_timers_dmas id,
0135 u32 reg,
0136 unsigned int num_reg,
0137 unsigned int bursts,
0138 unsigned long tmo_ms)
0139 {
0140 return -ENODEV;
0141 }
0142 #endif
0143 #endif