coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
tsadc.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <device/mmio.h>
4 #include <delay.h>
5 #include <soc/clock.h>
6 #include <soc/grf.h>
7 #include <soc/tsadc.h>
8 #include <stdint.h>
9 
15  u32 reserved0[(0x20 - 0x10) / 4];
28  u32 reserved1[(0x60 - 0x50) / 4];
33 };
34 check_member(rk3399_tsadc_regs, auto_period_ht, 0x6c);
35 
36 /* user_con */
37 #define ADC_POWER_CTRL (1 << 3)
38 #define START_MODE (1 << 4)
39 #define START_SHIFT 5
40 #define START_MASK 1
41 #define INTER_PD_SHIFT 6
42 #define INTER_PD_MASK 0x3f
43 
44 /* auto_con */
45 #define LAST_TSHUT (1 << 24)
46 #define SRC3_EN (1 << 7)
47 #define SRC2_EN (1 << 6)
48 #define SRC1_EN (1 << 5)
49 #define SRC0_EN (1 << 4)
50 #define Q_SEL (1 << 1)
51 #define AUTO_EN (1 << 0)
52 
53 /* int_en */
54 #define TSHUT_CRU_EN_SRC3 (1 << 11)
55 #define TSHUT_CRU_EN_SRC2 (1 << 10)
56 #define TSHUT_CRU_EN_SRC1 (1 << 9)
57 #define TSHUT_CRU_EN_SRC0 (1 << 8)
58 #define TSHUT_GPIO_EN_SRC3 (1 << 7)
59 #define TSHUT_GPIO_EN_SRC2 (1 << 6)
60 #define TSHUT_GPIO_EN_SRC1 (1 << 5)
61 #define TSHUT_GPIO_EN_SRC0 (1 << 4)
62 
63 #define AUTO_PERIOD 187500 /* 250ms */
64 #define AUTO_DEBOUNCE 4
65 #define AUTO_PERIOD_HT 37500 /* 50ms */
66 #define AUTO_DEBOUNCE_HT 4
67 #define TSADC_CLOCK_HZ (750 * KHz)
68 
69 /* AD value, correspond to 120 degrees Celsius,
70  * Please refer shut value table in:
71  * https://patchwork.kernel.org/patch/8908411/
72  * A quick ref:
73  * {573, 60000}, {599, 75000}, {616, 85000}, {633, 95000},
74  * {642, 100000}, {659, 110000}, {677, 120000}, {685, 125000}
75  */
76 #define TSADC_SHUT_VALUE 677
77 
78 #define GRF_TSADC_TSEN_PD0_ON RK_SETBITS(0)
79 #define GRF_TSADC_TSEN_PD0_OFF RK_CLRBITS(0)
80 #define GRF_SARADC_TSEN_ON RK_SETBITS(0)
81 
83 
84 void tsadc_init(uint32_t polarity)
85 {
87 
88  /* tsadc power sequence */
91  udelay(50);
93  udelay(20);
95  udelay(100);
96 
97  /* set the tshut polarity */
98  write32(&rk3399_tsadc->auto_con, polarity);
99 
100  /* setup the automatic mode:
101  * AUTO_PERIOD: interleave between every two accessing of TSADC
102  * AUTO_DEBOUNCE: only generate interrupt or TSHUT when temperature
103  * is higher than COMP_INT for "debounce" times
104  * AUTO_PERIOD_HT: the interleave between every two accessing after the
105  * temperature is higher than COMP_SHUT or COMP_INT
106  * AUTO_DEBOUNCE_HT: only generate interrupt or TSHUT when temperature
107  * is higher than COMP_SHUT for "debounce" times.
108  */
113  /* Enable the src0, negative temperature coefficient */
115  udelay(100);
117 
120 
121  /* Set the tsadc_int pinmux */
123 }
static void write32(void *addr, uint32_t val)
Definition: mmio.h:40
#define setbits32(addr, set)
Definition: mmio.h:21
#define clrbits32(addr, clear)
Definition: mmio.h:26
#define IOMUX_TSADC_INT
Definition: pmu.h:59
void tsadc_init(void)
Definition: tsadc.c:66
check_member(rk3288_tsadc_regs, auto_period_ht, 0x6c)
static struct rk3399_pmugrf_regs *const rk3399_pmugrf
Definition: grf.h:320
static struct rk3399_grf_regs *const rk3399_grf
Definition: grf.h:319
#define AUTO_DEBOUNCE
Definition: tsadc.c:64
#define Q_SEL
Definition: tsadc.c:50
#define AUTO_DEBOUNCE_HT
Definition: tsadc.c:66
#define SRC0_EN
Definition: tsadc.c:49
#define TSHUT_CRU_EN_SRC0
Definition: tsadc.c:57
#define TSHUT_GPIO_EN_SRC0
Definition: tsadc.c:61
#define TSADC_CLOCK_HZ
Definition: tsadc.c:67
#define TSADC_SHUT_VALUE
Definition: tsadc.c:76
#define AUTO_PERIOD_HT
Definition: tsadc.c:65
#define AUTO_EN
Definition: tsadc.c:51
#define ADC_POWER_CTRL
Definition: tsadc.c:37
#define GRF_SARADC_TSEN_ON
Definition: tsadc.c:80
#define GRF_TSADC_TSEN_PD0_ON
Definition: tsadc.c:78
#define GRF_TSADC_TSEN_PD0_OFF
Definition: tsadc.c:79
#define AUTO_PERIOD
Definition: tsadc.c:63
struct rk3399_tsadc_regs * rk3399_tsadc
Definition: tsadc.c:82
void rkclk_configure_tsadc(unsigned int hz)
Definition: clock.c:482
#define TSADC_BASE
Definition: addressmap.h:24
unsigned int uint32_t
Definition: stdint.h:14
uint32_t u32
Definition: stdint.h:51
u32 tsadc_testbit_l
Definition: grf.h:174
u32 saradc_testbit
Definition: grf.h:173
u32 hight_tshut_debounce
Definition: tsadc.c:30
u32 reserved0[(0x20 - 0x10)/4]
Definition: tsadc.c:15
u32 reserved1[(0x60 - 0x50)/4]
Definition: tsadc.c:28
u32 comp0_shut
Definition: tsadc.c:24
u32 auto_period_ht
Definition: tsadc.c:32
u32 comp1_shut
Definition: tsadc.c:25
u32 comp2_shut
Definition: tsadc.c:26
u32 hight_int_debounce
Definition: tsadc.c:29
u32 comp3_shut
Definition: tsadc.c:27
u32 auto_period
Definition: tsadc.c:31
void udelay(uint32_t us)
Definition: udelay.c:15