[MTK][FAQ14772] 如何实现插上电池自动开机

[FAQ14772] 如何实现插上电池自动开机

[DESCRIPTION]

 有些行业应用产品,不需要pwrkey键,而且希望实现插上电池后自动开机

[SOLUTION]

 实现该功能需要两个步骤,首先硬件上将pwrkey直接接地,然后在软件设置中去掉长按关机或重启的功能。

下面详述如何在软件中去掉长按关机或重启的功能:

1.

请在文件/vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mt6771/src/drivers/pmic.c中重新定义如下函数:

void PMIC_enable_long_press_reboot(void)
{

	pmic_config_interface(PMIC_RG_PWRKEY_RST_EN_ADDR, 0x00, PMIC_RG_PWRKEY_RST_EN_MASK, PMIC_RG_PWRKEY_RST_EN_SHIFT);
	pmic_config_interface(PMIC_RG_HOMEKEY_RST_EN_ADDR, 0x00, PMIC_RG_HOMEKEY_RST_EN_MASK, PMIC_RG_HOMEKEY_RST_EN_SHIFT);

}

2.

请在文件/kernel-4.4/drivers/input/keyboard/mediatek/mt6771/hal_kpd.c重新定义如下函数:

void long_press_reboot_function_setting(void)
{

		kpd_info("disable  mode LPRST\n");
		pmic_set_register_value(PMIC_RG_PWRKEY_RST_EN, 0x00);
		pmic_set_register_value(PMIC_RG_HOMEKEY_RST_EN, 0x00);

}

如果用的是MTK的charger IC,比如MT6370,6371。power key有拉到charger IC的话。还需要将charger IC的长按reboot关闭,关闭的方法:

1./kernel-4.4/drivers/misc/mediatek/pmic/mt6370/mt6370_pmu_charger.c
static int mt6370_pmu_charger_probe(struct platform_device *pdev){

int ret = 0;

.......................................

 

/* Do initial setting */

start add /

dev_err(chg_data->dev, "%s: start MT6370_PMU_REG_CHGPUMP\n", __func__);

ret = mt6370_pmu_reg_set_bit(chg_data->chip,MT6370_PMU_REG_CHGPUMP, 0xE0);

if (ret < 0) {

dev_err(chg_data->dev, "%s: sw init failed\n", __func__);

goto err_chg_init_setting;

}

ret = mt6370_pmu_reg_read(chg_data->chip,MT6370_PMU_REG_CHGPUMP);

if (ret < 0)

 dev_err(chg_data->dev, "%s: read reg0x2A failed\n",__func__);

else

 dev_err(chg_data->dev, "%s: reg0x2A = 0x%02X\n",__func__, ret);

dev_err(chg_data->dev, "%s: end MT6370_PMU_REG_CHGPUMP\n", __func__);

end add /
ret = mt6370_chg_init_setting(chg_data);

if (ret < 0) {

dev_err(chg_data->dev, "%s: sw init failed\n", __func__);

goto err_chg_init_setting;

}
..................................
}
2./vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mtXXXX/src/drivers/mt6370.c
#ifdef MTK_EXT_CHGDET_SUPPORT
int mtk_ext_chgdet(CHARGER_TYPE *chg_type)
{
 int ret = 0, i = 0;
 const int max_retry_cnt = 5;
 unsigned char usb_status = 0;

 Charger_Detect_Init();

 *chg_type = CHARGER_UNKNOWN;
+ mt6370_set_bit(0x2A,0x80);
 /* Toggle chgdet flow */
 ret = mt6370_enable_chgdet_flow(false);
 if (ret != I2C_OK)
 goto out;

 ret = mt6370_enable_chgdet_flow(true);
 if (ret != I2C_OK)
 goto out;

...

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值