MTK6580 Android P版本PSX5415A 快充带OTG调试

news/2024/11/29 7:45:14/

之前一直没有记录工作过程的想法,现在开始慢慢想去记录和输出一些东西,废话少说,直奔主题吧。
下面是我在MTK6580 Android P PSC5415A 快充带OTG调试遇到的问题和解决方法。

一,6580 android P版本跑的是4.9的内核,先在对应项目的config里面打开otg相关的两个宏
kernel-4.9-lc\arch\arm\configs\k80_bsp_debug_defconfig 这是debug,如果user,对应改一下user的config

CONFIG_USB_MTK_OTG=y
CONFIG_USB_MTK_HDRC_HCD=y

二,usb id中断脚的配置,在otg设备没有插入时id脚为高电平,插入后为低电平。对应中断是否注册成功
可以在adb shell cat proc/interrupts 查看
kernel-4.9-lc\arch\arm\boot\dts\k80_bsp.dts

&pio {usbiddig_pins_default: usbiddigint7default {};usbiddig_pins_as_int: usbiddigint@7 {pins_cmd_dat {pinmux = <PINMUX_GPIO7__FUNC_EINT7>;slew-rate = <0>;bias-pull-up = <00>;};};
};&usbiddig {pinctrl-names = "usb_default", "usbiddig_pin_init";//, "drvvbus_init", "drvvbus_low", "drvvbus_high";pinctrl-0 = <&usbiddig_pins_default>;pinctrl-1 = <&usbiddig_pins_as_int>;status = "okay";
};

kernel-4.9-lc\drivers\misc\mediatek\dws\mt6580\k80_bsp.dws,注意dws在lk,pl,factory下也要做相应的改动
在这里插入图片描述在这里插入图片描述
通过request_irq注册mt_usb_ext_iddig_int中断,低电平触发
kernel-4.9-lc\drivers\misc\mediatek\usb20\mt6580\usb20_host.c

	struct device *dev = &pdev->dev;struct device_node *node = dev->of_node;//zx PSC5005 add startpinctrl = devm_pinctrl_get(&pdev->dev);pinctrl_iddig = pinctrl_lookup_state(pinctrl, "usbiddig_pin_init");if (IS_ERR(pinctrl_iddig)) {printk("Cannot find usb pinctrl otg_iddig_pin_init\n");return -ENODEV;}pinctrl_select_state(pinctrl, pinctrl_iddig);//zx PSC5005 add endiddig_eint_num = irq_of_parse_and_map(node, 0);DBG(0, "iddig_eint_num<%d>\n", iddig_eint_num);if (iddig_eint_num < 0)return -ENODEV;ret = request_irq(iddig_eint_num, mt_usb_ext_iddig_int,IRQF_TRIGGER_LOW, "USB_IDDIG", NULL);

注意看一cust.dtsi,有没有生成usbiddig中断,swithing_charger_mtk有没有注册到i2c1下面,psc5415 会根据 "mediatek,swithing_charger"来加载对应的驱动,这一点非常重要。
out\target\product\k80_bsp\obj\KERNEL_OBJ\arch\arm\boot\dts\k80_bsp\cust.dtsi

&i2c1 {#address-cells = <1>;#size-cells = <0>;cap_touch_mtk:cap_touch@5d {compatible = "mediatek,cap_touch";reg = <0x5d>;status = "okay";};ext_buck_mtk:ext_buck@60 {compatible = "mediatek,ext_buck";reg = <0x60>;status = "okay";};swithing_charger_mtk:swithing_charger@6a {compatible = "mediatek,swithing_charger";reg = <0x6a>;status = "okay";};
};
&usbiddig {interrupt-parent = <&eintc>;interrupts = <7 IRQ_TYPE_LEVEL_LOW>;debounce = <7 0>;status = "okay";
};

三、中断ok之后,插入otg u盘,发现vbus没有5v输出,打串口log发现如下问题:
[MUSB]vbus_init 171: **** before Init Drive VBUS KS!!!
[ 643.312533] <0>.(0)[3211:kworker/u8:9][MUSB]vbus_init 176: Cannot find usb pinctrl drvvbus

因为PSX5415 vbus是由psc5415 控制寄存器输出的,不需要再通过ldo输出vbus,所以在dts里面没有 “drvvbus_init”,“drvvbus_low”,"drvvbus_high"控制,导致VBUS输出异常,修改方法在vbus_init里面判断如果有定义CONFIG_MTK_PSC5005_SUPPORT,直接return 0,这样vbus5v就能够正常输出

int vbus_init(void)
{
#ifdef CONFIG_MTK_PSC5005_SUPPORT //zx PSC5005 modifyreturn 0;
#else#if !(defined(SWITCH_CHARGER) || defined(FPGA_PLATFORM))int ret = 0;DBG(0, "**** before Init Drive VBUS KS!!!!!\n");pinctrl_drvvbus = pinctrl_lookup_state(pinctrl, "drvvbus_init");if (IS_ERR(pinctrl_drvvbus)) {ret = PTR_ERR(pinctrl_drvvbus);DBG(0, "Cannot find usb pinctrl drvvbus\n");return -ENODEV;}pinctrl_drvvbus_low = pinctrl_lookup_state(pinctrl, "drvvbus_low");if (IS_ERR(pinctrl_drvvbus_low)) {ret = PTR_ERR(pinctrl_drvvbus_low);DBG(0, "zx cannot find usb pinctrl drvvbus_low\n");return -ENODEV;}pinctrl_drvvbus_high = pinctrl_lookup_state(pinctrl, "drvvbus_high");if (IS_ERR(pinctrl_drvvbus_high)) {ret = PTR_ERR(pinctrl_drvvbus_high);DBG(0, "Cannot find usb pinctrl drvvbus_high\n");return -ENODEV;}pinctrl_select_state(pinctrl, pinctrl_drvvbus);DBG(0, "**** end Init Drive VBUS KS!!!!!\n");return 0;#endif
#endif
}

四、在开完机,还遇到一个问题,插入充电器或者usb,直接关机进入充电模式
打串口log发现
[ 600.072238] <1>.(1)[188:mtk charger_hv_][MUSB]usb20_check_vbus_on 208: vbus_on<0>
[ 600.073537] <1>.(1)[188:mtk charger_hv_][BATTERY] Battery is not exist, power off FAN5405 and system (3)
[ 600.076327] <1>.(1)[188:mtk charger_hv_]charging_set_power_off
[ 600.077097] <1>.(1)[188:mtk charger_hv_]mtk_rtc_common: mt_power_off
[ 600.077940] <1>-(1)[188:mtk charger_hv_]mtk_rtc_hal: hal_rtc_bbpu_pwdn (RTC_CON=0x4a6)
[ 600.079127] <1>-(1)[188:mtk charger_hv_]mtk_rtc_hal: hal_rtc_bbpu_pwdn (RTC_CON=0x4a6)
然后找到对应的代码

void check_battery_exist(void)
{
//#if defined(CONFIG_DIS_CHECK_BATTERY)
#if 1// zx modify by charge otg, customer not supply bat just for debugbattery_log(BAT_LOG_CRTI, "[BATTERY] Disable check battery exist.\n");
#elseunsigned int baton_count = 0;unsigned int charging_enable = KAL_FALSE;unsigned int battery_status;unsigned int i;for (i = 0; i < 3; i++) {battery_charging_control(CHARGING_CMD_GET_BATTERY_STATUS, &battery_status);baton_count += battery_status;}if (baton_count >= 3) {if ((g_platform_boot_mode == META_BOOT) || (g_platform_boot_mode == ADVMETA_BOOT)|| (g_platform_boot_mode == ATE_FACTORY_BOOT)) {battery_log(BAT_LOG_FULL,"[BATTERY] boot mode = %d, bypass battery check\n",g_platform_boot_mode);} else {battery_log(BAT_LOG_CRTI,"[BATTERY] Battery is not exist, power off FAN5405 and system (%d)\n",baton_count);battery_charging_control(CHARGING_CMD_ENABLE, &charging_enable);#ifdef CONFIG_MTK_POWER_PATH_MANAGEMENT_SUPPORTbattery_charging_control(CHARGING_CMD_SET_PLATFORM_RESET, NULL);#elsebattery_charging_control(CHARGING_CMD_SET_POWER_OFF, NULL);#endif}}
#endif
}

由于主板调试阶段,客户没有提供电池过来,所以用电源供电,在check_battery_exist检测到电池没有存在,所以调用mt_power_off函数关机了。

最后晒两张靓图,otg调试OK
在这里插入图片描述在这里插入图片描述


http://www.ppmy.cn/news/494648.html

相关文章

mtk 6580 android 6.0 摄像头假对焦功能

ZoomManager.java FocusManager.java public void onSingleTapUp(int x, int y) { xxxxxxxxxx xxxxxxxxxx } CameraAppUiImpl.java 另外&#xff0c;还加一个假对焦隔几秒会再次对焦的功能&#xff0c;模似自动对焦。 CameraActivity.java Task task; Timer timer;cla…

mtk6580 8.1 如何操作vgp1电压

今天在调试一个外设时&#xff0c;需要用vgp1控制&#xff0c;需要设置3.3v,一直没有输出来。6580 8.1平台tp默认是用vgp1控制的&#xff0c;用下面的代码是可以输出2.8v的 下面是ft的tp驱动部分 int fts_power_init(void) {int ret;/*set TP volt*/tpd->reg regulator_g…

MTK6580调试IMX132流程分析

MTK6580调试IMX132流程分析 一开始不了解 MTK 的点亮流程,怎么办呢? 1 MTK 开机是 首先是 CameraService 先起来,然后就通过获取 HAL 中的 sensorList 中的信息 CameraManager与CameraService通过Binder机制,形成推拉回调 frameworks\base\core\java\android\hardware\ca…

mtk使用android开关机动画,Android MTK6580 客制化关机充电动画

1.客制化关机充电图片 vendor/mediatek/proprietary/bootable/bootloader/lk/dev/logo/xxx 找到对应分辨率替换 2.调整显示图片位置、大小 vendor/mediatek/proprietary/external/libshowlogo/cust_display.h 3.去掉原充电电池填充及波浪动画 vendor/mediatek/proprietary/boot…

联发科MTK6580安卓通讯智能模块核心板规格书

QL126模块硬件设计指导手册 深圳市褀联科技有限公司 一 、综述 1.1 适用范围 本文档适用的产品是&#xff1a;QL126模块。本核心板是以MT6580 为平台&#xff0c;周围配件主要有MT6350电源模块&#xff0c;存储模块&#xff0c;通过对核心板QL126的介绍&#xff0c; 用以指导…

MTK芯片资料下载,MT6580处理器参数介绍

MT6580处理器概述: MT6580是2015年联发科推出的是一款高度集成的3G系统级芯片(SoC)它集成了先进的功能,例如四核的ARMCortex-A7 MPCoreTM,3D图形(的OpenGL|ES 2.0),8M摄像头,1080p高清视频解码器,并内置RF收发器支持多频GSM,GPRS,EDGE和W-CDMA蜂窝系统。MT6580可以…

一、MTK6580 平台 Camera 驱动整体框架

一、MTK6580 平台 Camera 驱动整体框架 mtk平台三大件调试中&#xff0c;camera的调试难度最大&#xff0c;问题也就最多&#xff0c;为此特地分析了一下整个camera驱动 部分实现过程&#xff0c;以下为camera驱动框架序列图&#xff1a; 从图中可以看出&#xff0c;整个框架分…

MTK6580调试IMX132总结

MTK6580调试IMX132总结 10 MTK camera驱动结构介绍 MTK camera 主要内容在hal层,现在有hal1/hal3,当下主流使用的是hal3,驱动主要负责 sensor电源的控制和sensor寄存器的操作 MTK采用设备 和 驱动分离的思想,抽象出 imgsensor.c来 控制sensor的上下电以及sensor具体操作(…