插入DC开机

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

};

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值