MTK添加充电(快充)

1.在添加充电之前,看准原理图弄清楚,你的充电是通过还是走pmic的线性充电还是外置充电IC

我用我项目情况mt6370芯片(支持快充)举例子

$(LINUX_KERNEL_VERSION)/arch/arm/boot/dts/mt6370.dtsi

mt6370,intr_gpio_num = <11>; /* direct defined GPIO num */
mt6370,intr_gpio = <&pio 11 0x0>; /* GPIO */

最好还同步配置一下dws

<gpio11>
                <eint_mode>true</eint_mode>
                <def_mode>0</def_mode>
                <inpull_en>true</inpull_en>
                <inpull_selhigh>true</inpull_selhigh>
                <def_dir>IN</def_dir>
                <out_high>false</out_high>
                <varName0>GPIO_SUBPMIC_IRQB_EINT_PIN</varName0>
                <smt>false</smt>
                <ies>true</ies>
 </gpio11>

配置好对应的pmic中断,你就会发现有充电图标显示了,不过此时充电电流只有0.5A左右

2.配置充电电流为2A左右(测量的时候充电器和线不适配可能会电流计显示偏差)

device/mediateksample/$(yourprojectname)/ProjectConfig.mk

MTK_DUAL_CHARGER_SUPPORT = no    //外部充电ic的时候启用比如sd7601,rt9465

$(LINUX_KERNEL_VERSION)/arch/arm/configs/$(yourprojectname)_debug_defconfig

$(LINUX_KERNEL_VERSION)/arch/arm/configs/$(yourprojectname)_defconfig

#  CONFIG_CHARGER_RT9465 is not set

很多时候需要把不用的宏开关给关掉,要不在某些驱动里面会识别运行,可能会让器件运行不起来(我就遇到过一次调试的时候因为添加打印log,打印出来的信息编码对不上,是乱码,造成系统一直开机重启,把log信息去掉就好了)

$(LINUX_KERNEL_VERSION)/arch/arm/boot/dts/mt6370.dtsi

aicr = <2000000>;    /* uA */            //设置输入电流的平均值2A
mivr = <4200000>;    /* uV */          //输入电压最小限定,原来是4.6,看你具体情况看要不要改

不改的无视下面46改42的修改部分

相关参数定义

ICHG = “設定的充電電流”,
AICR = “AICR 保護下允許的最高抽電流”
MIVR = “設定的允許的充電器最低電壓”
IEOC = “設定的截止充電電流”
CV = “設定的Constant Voltage 值”
VSYS = “量測到的 VSYS 值”
VBAT = “测量到的电池电压”
IBAT = “测量到的充电电流”
IBUS = “测量到充电器的电流”
VBUS = “测量到充电器的电压”
soc = 底层电量百分比
uiso = 上层显示电量百分比
CT = 充电器类型

$(LINUX_KERNEL_VERSION)/arch/arm/boot/dts/$(MTK_PLATFORM).dtsi

(我把修改地方上下文也给出来,方便定位,红色值为修改部分)

/* charging current */
         usb_charger_current = <500000>;
         ac_charger_current = <2000000>;
         ac_charger_input_current = <2000000>;
         non_std_ac_charger_current = <2000000>;
         charging_host_charger_current = <2000000>;
         ta_ac_charger_current = <2000000>;
         pd_charger_current = <500000>;

pe_ichg_level_threshold = <1000000>; /* uA */
         ta_start_battery_soc = <0>;
         ta_stop_battery_soc = <95>;
         min_charger_voltage = <4200000>;

ta_start_battery_soc = <0>;
         ta_stop_battery_soc = <85>;
         min_charger_voltage = <4200000>;

/* dual charger in series */
         dcs_input_current = <3200000>;
         dcs_chg1_charger_current = <2000000>;
         dcs_chg2_charger_current = <2000000>;

min_charger_voltage = <4200000>;
         pd_vbus_low_bound = <5000000>;
         pd_vbus_upper_bound = <5000000>;
         vsys_watt = <5000000>;

/* dual charger in series */
         dcs_input_current = <3200000>;
         dcs_chg1_charger_current = <2000000>;
         dcs_chg2_charger_current = <2000000>;

compatible = "mediatek,charger,pe4";
         gauge = <&mtk_gauge>;
 
        min_charger_voltage = <4200000>;
         pe40_stop_battery_soc = <80>;

/* dual charger in series*/
         dcs_input_current = <3200000>;
         dcs_chg1_charger_current = <2000000>;
         dcs_chg2_charger_current = <2000000>;

/* common */
         battery_cv = <4350000>;
         max_charger_voltage = <6500000>;
         min_charger_voltage = <4200000>;

/* charging current */
         usb_charger_current = <500000>;
         ac_charger_current = <2000000>;
         ac_charger_input_current = <2000000>;
         charging_host_charger_current = <2000000>;

$(LINUX_KERNEL_VERSION)/drivers/power/supply/mtk_basic_charger.c

static bool select_charging_current_limit函数

if (support_fast_charging(info))
		is_basic = false;
	else {
		is_basic = true;
		/* AICL */
		charger_dev_run_aicl(info->chg1_dev,
			&pdata->input_current_limit_by_aicl);
		if (info->enable_dynamic_mivr) {
			if (pdata->input_current_limit_by_aicl >
				info->data.max_dmivr_charger_current)
				pdata->input_current_limit_by_aicl =
					info->data.max_dmivr_charger_current;
		}
		if (is_typec_adapter(info)) {
			if (adapter_dev_get_property(info->pd_adapter, TYPEC_RP_LEVEL)
				== 3000) {
				pdata->input_current_limit = 3000000;
				pdata->charging_current_limit = 3000000;
			} else if (adapter_dev_get_property(info->pd_adapter,
				TYPEC_RP_LEVEL) == 1500) {
				pdata->input_current_limit = 1500000;
				pdata->charging_current_limit = 2000000;
			} else {
				chr_err("type-C: inquire rp error\n");
				//lpf add start
				pdata->input_current_limit = 2000000;    //同步修改这里
				pdata->charging_current_limit = 2000000; //这两个值
				//lpf add end
			}

			chr_err("type-C:%d current:%d\n",
				info->pd_type,
				adapter_dev_get_property(info->pd_adapter,
					TYPEC_RP_LEVEL));
		}
	}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值