MTK6739-----解决接入OTG线时会显示充电

在kernel-4.4\drivers\misc\mediatek\pmic\mt6357\v1\pmic_chr_type_det_v2.c

void do_charger_detect(void)
{
	if (!mt_usb_is_device()) {//检测是否为OTG模式
		g_chr_type = CHARGER_UNKNOWN;
		pr_err("charger type: UNKNOWN, Now is usb host mode. Skip detection!!!\n");
		return;
	}

	mutex_lock(&chrdet_lock);

    if (pmic_get_register_value(PMIC_RGS_CHRDET)) {
		pr_info("charger type: charger IN\n");
		g_chr_type = hw_charging_get_charger_type();
		chrdet_inform_psy_changed(g_chr_type, 1);//上报充电类型及状态
	} else {
        pr_info("charger type: charger OUT\n");
		g_chr_type = CHARGER_UNKNOWN;
		chrdet_inform_psy_changed(g_chr_type, 0);
	}

	mutex_unlock(&chrdet_lock);
}

2.kernel-4.4\drivers\misc\mediatek\usb20\mt6739\usb20.c

bool mt_usb_is_device(void)
{
	DBG(4, "called\n");

	if (!mtk_musb) {
		DBG(0, "mtk_musb is NULL\n");
		return false;	/* don't do charger detection when usb is not ready */
	}
	DBG(4, "is_host=%d\n", mtk_musb->is_host);

#ifdef CONFIG_MTK_UART_USB_SWITCH
	if (in_uart_mode) {
		DBG(0, "in UART Mode\n");
		return false;
	}
#endif
#ifdef CONFIG_USB_MTK_OTG
	return !usb20_check_vbus_on();//定义OTG是无法充电
#else
	return true;
#endif
}

原理:

         当插入DC头或者USB充电的时候,会给到模块VBUS一个电压,从而触发PMIC中断,再调用到do_charger_detect(void)函数判断,最终上报到系统。

在调试项目,由于硬件设计的原因,当使用OTG线时,VBUS也有5V电平过去,mt_usb_is_device()一直返回true,所以也触发了充电上报

解决方案:1.硬件做处理,设计改板,很难实现

2.软件处理:当使用OTG线时,虽然有VBUS电压,但我不上报充电状态

本例中使用时通用IO判断模式USB_ID脚状态,从而判断是否为USB主从模式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值