搜索

430

主题

515

帖子

2066

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2066
QQ
发表于 2020-8-17 20:06:49 3276 浏览 0 回复

mt6762/MT6761/MT6771 如何实现插上电池自动开机

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

[SOLUTION]
实现该功能需要两个步骤,首先硬件上将pwrkey直接接地,然后在软件设置中去掉长按关机或重启的功能。
下面详述如何在软件中去掉长按关机或重启的功能:
1.请在文件/vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mt6771/src/drivers/pmic.c中重新定义如下函数:
  1. void PMIC_enable_long_press_reboot(void)
  2. {

  3.         pmic_config_interface(PMIC_RG_PWRKEY_RST_EN_ADDR, 0x00, PMIC_RG_PWRKEY_RST_EN_MASK, PMIC_RG_PWRKEY_RST_EN_SHIFT);
  4.         pmic_config_interface(PMIC_RG_HOMEKEY_RST_EN_ADDR, 0x00, PMIC_RG_HOMEKEY_RST_EN_MASK, PMIC_RG_HOMEKEY_RST_EN_SHIFT);
  5. }
复制代码
2.请在文件/kernel-4.4/drivers/input/keyboard/mediatek/mt6771/hal_kpd.c重新定义如下函数:
  1. void long_press_reboot_function_setting(void)
  2. {
  3.                 kpd_info("disable  mode LPRST\n");
  4.                 pmic_set_register_value(PMIC_RG_PWRKEY_RST_EN, 0x00);
  5.                 pmic_set_register_value(PMIC_RG_HOMEKEY_RST_EN, 0x00);
  6. }
复制代码
如果用的是MTK的charger IC,比如MT6370,6371。power key有拉到charger IC的话。还需要将charger IC的长按reboot关闭,关闭的方法:
  1. <b>1./kernel-4.4/drivers/misc/mediatek/pmic/mt6370/mt6370_pmu_charger.c</b>

  2. static int mt6370_pmu_charger_probe(struct platform_device *pdev){

  3. int ret = 0;

  4. .......................................
  5. /* Do initial setting */

  6. ////////////start add /////////////////////////////////////////////////

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

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

  9. if (ret < 0) {

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

  11. goto err_chg_init_setting;

  12. }

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

  14. if (ret < 0)

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

  16. else

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

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

  19. ////////////end add /////////////////////////////////////////////////
  20. ret = mt6370_chg_init_setting(chg_data);

  21. if (ret < 0) {

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

  23. goto err_chg_init_setting;

  24. }
  25. ..................................
  26. }

  27. <b>2./vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mtXXXX/src/drivers/mt6370.c</b>
  28. #ifdef MTK_EXT_CHGDET_SUPPORT
  29. int mtk_ext_chgdet(CHARGER_TYPE *chg_type)
  30. {
  31. int ret = 0, i = 0;
  32. const int max_retry_cnt = 5;
  33. unsigned char usb_status = 0;

  34. Charger_Detect_Init();

  35. *chg_type = CHARGER_UNKNOWN;
  36. + mt6370_set_bit(0x2A,0x80);
  37. /* Toggle chgdet flow */
  38. ret = mt6370_enable_chgdet_flow(false);
  39. if (ret != I2C_OK)
  40. goto out;

  41. ret = mt6370_enable_chgdet_flow(true);
  42. if (ret != I2C_OK)
  43. goto out;

  44. ...
复制代码








手机微信同号:13682654092
回复

使用道具 举报

返回列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


登录或注册
快速回复 返回顶部 返回列表