8321:
#define AUXADC_BASE 0x11003000
/kernel-4.19-lc/arch/arm/boot/dts/mt6580.dts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | / { model = "MT6580"; compatible = "mediatek,MT6580"; interrupt-parent = <&gic>; #address-cells = <2>; #size-cells = <2>;
/* chosen */ chosen: chosen { bootargs = "console=tty0 console=ttyMT3,921600n1 vmalloc=400M \ slub_debug=OFZPU page_owner=on swiotlb=noforce \ androidboot.hardware=mt6580 \ firmware_class.path=/vendor/firmware loop.max_part=7"; };
bus: bus { compatible = "simple-bus"; #address-cells = <1>; #size-cells = <1>; ranges = <0 0 0 0xffffffff>;
auxadc: adc_hw@11003000 { compatible = "mediatek,mt6735-auxadc"; reg = <0x11003000 0x1000>; interrupts = <GIC_SPI 35 IRQ_TYPE_EDGE_FALLING>; }; }; }; |
所有ADC真实地址如下:
/vendor/mediatek/proprietary/bootable/bootloader/lk/platform/mt6580/include/platform/mt_reg_base.h
mtk_auxadc.c需要的宏定义TOPCKGEN_BASE定义在mt_reg_base.h和mt6580.h(二选一)
\vendor\mediatek\proprietary\bootable\bootloader\preloader\platform\mt6580\src\drivers\inc\mt6580.h
LK添加AUX_ADC方法如下:
\bootable\bootloader\lk\platform\mt6580 添加:
mtk_auxadc.c
\bootable\bootloader\lk\platform\mt6580\rules.mk
OBJS += \
$(LOCAL_DIR)/mtk_auxadc.o \
\bootable\bootloader\lk\platform\mt6580\include\platform 添加:
mtk_auxadc_hw.h
mtk_auxadc_sw.h
mt_reg_base.h
\vendor\mediatek\proprietary\bootable\bootloader\lk\platform\mt6580\platform.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | //add by Isaac for bootup when dc in #include <platform/mtk_auxadc_sw.h> #define DC_MIN_VOLTAGE 4400 #define AP_AUXADC_DISO_VDC_CHANNEL 1 #define AP_AUXADC_DISO_VUSB_CHANNEL 12 #define R_DISO_DC_PULL_UP 10000 #define R_DISO_DC_PULL_DOWN 1000
static unsigned int diso_get_current_voltage(int Channel) { int ret = 0, data[4], i, ret_value = 0, ret_temp = 0, times = 5;
/*if (IMM_IsAdcInitReady() == 0) { dprintf("Isaac--->[DISO] [diso_get_current_voltage] AUXADC is not ready"); return 0; }*/
i = times; while(i--) { ret_value = IMM_GetOneChannelValue(Channel, data, & ret_temp); if(ret_value == 0) { ret += ret_temp; } else { times = times > 1 ? times - 1 : 1; dprintf(ALWAYS, "Isaac--->[diso_get_current_voltage] ret_value=%d, times=%d\n", ret_value, times); } }
ret = ret * 1500 / 4096; ret = ret / times;
return ret; }
int isDCplugin(void) { int vol = diso_get_current_voltage(AP_AUXADC_DISO_VDC_CHANNEL); vol = (R_DISO_DC_PULL_UP + R_DISO_DC_PULL_DOWN)*100*vol/(R_DISO_DC_PULL_DOWN)/100; kal_int32 bat_vol = get_bat_sense_volt(5); //int vol = IMM_GetOneChannelValue(12, 5, 1); dprintf(ALWAYS, "Isaac: isDCplugin vol=%d, bat_vol=%d \n", vol, bat_vol); if(vol > DC_MIN_VOLTAGE ) { g_boot_mode = NORMAL_BOOT; return 1; } return 0; } //add by Isaac for bootup when dc in |
\vendor\mediatek\proprietary\bootable\bootloader\lk\platform\mt6580\platform.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | int kernel_charging_boot(void) { if((g_boot_mode == KERNEL_POWER_OFF_CHARGING_BOOT || g_boot_mode == LOW_POWER_OFF_CHARGING_BOOT) && !isDCplugin() && upmu_is_chr_det() == KAL_TRUE) { dprintf(INFO, "[%s] Kernel Power Off Charging with Charger/Usb \n", __func__); return 1; } else if((g_boot_mode == KERNEL_POWER_OFF_CHARGING_BOOT || g_boot_mode == LOW_POWER_OFF_CHARGING_BOOT) && upmu_is_chr_det() == KAL_FALSE) { dprintf(INFO, "[%s] Kernel Power Off Charging without Charger/Usb \n", __func__); return -1; } else return 0; } |
REFERENCE:
\vendor\mediatek\proprietary\bootable\bootloader\lk\platform\mt8163\include\platform\boot_mode.h
/* boot type definitions */
typedef enum
{
NORMAL_BOOT = 0,
META_BOOT = 1,
RECOVERY_BOOT = 2,
SW_REBOOT = 3,
FACTORY_BOOT = 4,
ADVMETA_BOOT = 5,
ATE_FACTORY_BOOT = 6,
ALARM_BOOT = 7,
#if defined (MTK_KERNEL_POWER_OFF_CHARGING)
KERNEL_POWER_OFF_CHARGING_BOOT = 8,
LOW_POWER_OFF_CHARGING_BOOT = 9,
#endif
FASTBOOT = 99,
DOWNLOAD_BOOT = 100,
UNKNOWN_BOOT
} BOOTMODE;
\kernel-3.18\drivers\misc\mediatek\include\mt-plat\mt_boot_common.h
/* boot type definitions */
enum boot_mode_t {
NORMAL_BOOT = 0,
META_BOOT = 1,
RECOVERY_BOOT = 2,
SW_REBOOT = 3,
FACTORY_BOOT = 4,
ADVMETA_BOOT = 5,
ATE_FACTORY_BOOT = 6,
ALARM_BOOT = 7,
#if defined(CONFIG_MTK_KERNEL_POWER_OFF_CHARGING)
KERNEL_POWER_OFF_CHARGING_BOOT = 8,
LOW_POWER_OFF_CHARGING_BOOT = 9,
#endif
DONGLE_BOOT = 10,
UNKNOWN_BOOT
};