aboutsummaryrefslogtreecommitdiff
path: root/src/soc/mediatek/mt8183
diff options
context:
space:
mode:
authorPo Xu <jg_poxu@mediatek.com>2020-08-04 11:39:47 +0800
committerHung-Te Lin <hungte@chromium.org>2020-11-20 08:40:19 +0000
commit3f11803075cc13e377287240734cf82654f48ade (patch)
tree71cf455b55236aab0514dec6c31c31939f1e31a8 /src/soc/mediatek/mt8183
parent0fd62f5b7963b2128d48aca190a93e9b94d70d13 (diff)
soc/mediatek: Move auxadc driver from MT8183 to common
The auxadc (auxiliary analogue-to-digital conversion) is a unit to identify the plugged peripherals or measure the temperature or voltages. The MT8183 auxadc driver can be shared by multiple MediaTek SoCs so we should move it to the common folder. Signed-off-by: Po Xu <jg_poxu@mediatek.com> Change-Id: Id4553e99c3578fa40e28b19a6e010b52650ba41e Reviewed-on: https://review.coreboot.org/c/coreboot/+/46390 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Hung-Te Lin <hungte@chromium.org>
Diffstat (limited to 'src/soc/mediatek/mt8183')
-rw-r--r--src/soc/mediatek/mt8183/Makefile.inc8
-rw-r--r--src/soc/mediatek/mt8183/auxadc.c73
-rw-r--r--src/soc/mediatek/mt8183/include/soc/auxadc.h6
3 files changed, 8 insertions, 79 deletions
diff --git a/src/soc/mediatek/mt8183/Makefile.inc b/src/soc/mediatek/mt8183/Makefile.inc
index b0dd48f7a4..43893c363d 100644
--- a/src/soc/mediatek/mt8183/Makefile.inc
+++ b/src/soc/mediatek/mt8183/Makefile.inc
@@ -1,7 +1,7 @@
ifeq ($(CONFIG_SOC_MEDIATEK_MT8183),y)
-bootblock-y += auxadc.c
bootblock-y += bootblock.c
+bootblock-y += ../common/auxadc.c
bootblock-y += ../common/gpio.c gpio.c
bootblock-y += ../common/pll.c pll.c
bootblock-$(CONFIG_SPI_FLASH) += ../common/spi.c spi.c
@@ -15,7 +15,7 @@ decompressor-y += decompressor.c
decompressor-y += ../common/mmu_operations.c
decompressor-y += ../common/timer.c
-verstage-y += auxadc.c
+verstage-y += ../common/auxadc.c
verstage-y += ../common/gpio.c gpio.c
verstage-$(CONFIG_SPI_FLASH) += ../common/spi.c spi.c
verstage-y += mt8183.c
@@ -24,7 +24,7 @@ verstage-y += ../common/timer.c
verstage-y += ../common/uart.c
verstage-y += ../common/wdt.c
-romstage-y += auxadc.c
+romstage-y += ../common/auxadc.c
romstage-y += ../common/cbmem.c emi.c
romstage-y += dramc_init_setting.c
romstage-y += dramc_param.c
@@ -44,8 +44,8 @@ romstage-y += ../common/timer.c
romstage-y += ../common/uart.c
romstage-y += ../common/wdt.c
-ramstage-y += auxadc.c
ramstage-y += emi.c
+ramstage-y += ../common/auxadc.c
ramstage-y += ../common/ddp.c ddp.c
ramstage-y += ../common/dsi.c dsi.c
ramstage-y += ../common/gpio.c gpio.c
diff --git a/src/soc/mediatek/mt8183/auxadc.c b/src/soc/mediatek/mt8183/auxadc.c
deleted file mode 100644
index 19c994872f..0000000000
--- a/src/soc/mediatek/mt8183/auxadc.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#include <device/mmio.h>
-#include <assert.h>
-#include <delay.h>
-#include <soc/addressmap.h>
-#include <soc/auxadc.h>
-#include <soc/efuse.h>
-#include <soc/infracfg.h>
-#include <timer.h>
-
-static struct mtk_auxadc_regs *const mtk_auxadc = (void *)AUXADC_BASE;
-
-#define ADC_GE_A_SHIFT 10
-#define ADC_GE_A_MASK (0x3ff << ADC_GE_A_SHIFT)
-#define ADC_OE_A_SHIFT 0
-#define ADC_OE_A_MASK (0x3ff << ADC_OE_A_SHIFT)
-#define ADC_CALI_EN_A_SHIFT 20
-#define ADC_CALI_EN_A_MASK (0x1 << ADC_CALI_EN_A_SHIFT)
-
-static int cali_oe;
-static int cali_ge;
-static int calibrated = 0;
-static void mt_auxadc_update_cali(void)
-{
- uint32_t cali_reg;
- int cali_ge_a;
- int cali_oe_a;
-
- cali_reg = read32(&mtk_efuse->adc_cali_reg);
-
- if ((cali_reg & ADC_CALI_EN_A_MASK) != 0) {
- cali_oe_a = (cali_reg & ADC_OE_A_MASK) >> ADC_OE_A_SHIFT;
- cali_ge_a = (cali_reg & ADC_GE_A_MASK) >> ADC_GE_A_SHIFT;
- cali_ge = cali_ge_a - 512;
- cali_oe = cali_oe_a - 512;
- }
-}
-static uint32_t auxadc_get_rawdata(int channel)
-{
- setbits32(&mt8183_infracfg->module_sw_cg_1_clr, 1 << 10);
- assert(wait_ms(300, !(read32(&mtk_auxadc->con2) & 0x1)));
-
- clrbits32(&mtk_auxadc->con1, 1 << channel);
- assert(wait_ms(300, !(read32(&mtk_auxadc->data[channel]) & (1 << 12))));
-
- setbits32(&mtk_auxadc->con1, 1 << channel);
- udelay(25);
- assert(wait_ms(300, read32(&mtk_auxadc->data[channel]) & (1 << 12)));
-
- uint32_t value = read32(&mtk_auxadc->data[channel]) & 0x0FFF;
-
- setbits32(&mt8183_infracfg->module_sw_cg_1_set, 1 << 10);
-
- return value;
-}
-
-int auxadc_get_voltage(unsigned int channel)
-{
- uint32_t raw_value;
- assert(channel < 16);
-
- if (!calibrated) {
- mt_auxadc_update_cali();
- calibrated = 1;
- }
-
- /* 1.5V in 4096 steps */
- raw_value = auxadc_get_rawdata(channel);
-
- raw_value = raw_value - cali_oe;
- return (int)((int64_t)raw_value * 1500000 / (4096 + cali_ge));
-}
diff --git a/src/soc/mediatek/mt8183/include/soc/auxadc.h b/src/soc/mediatek/mt8183/include/soc/auxadc.h
index 18350d63f0..0e07de073c 100644
--- a/src/soc/mediatek/mt8183/include/soc/auxadc.h
+++ b/src/soc/mediatek/mt8183/include/soc/auxadc.h
@@ -3,6 +3,8 @@
#ifndef _MTK_ADC_H
#define _MTK_ADC_H
+#include <soc/auxadc_common.h>
+#include <soc/infracfg.h>
#include <stdint.h>
typedef struct mtk_auxadc_regs {
@@ -16,6 +18,6 @@ typedef struct mtk_auxadc_regs {
uint32_t misc;
} mtk_auxadc_regs;
-/* Return voltage in uVolt */
-int auxadc_get_voltage(unsigned int channel);
+static struct mt8183_infracfg_regs *const mtk_infracfg = mt8183_infracfg;
+
#endif