From a7c9c882b73bf2e46de823cad0ec808249dff3ce Mon Sep 17 00:00:00 2001 From: shengfei Xu Date: Tue, 20 Jun 2023 06:58:41 +0000 Subject: [PATCH 1/2] power: supply: sgm41542: fix build error for kernel 6.1 drivers/power/supply/sgm41542_charger.c:930:52: error: incompatible pointer types passing 'struct power_supply_battery_info *' to parameter of type 'struct power_supply_battery_info **' [-Werror,-Wincompatible-pointer-types] ret = power_supply_get_battery_info(sgm->charger, &bat_info); ^~~~~~~~~ ./include/linux/power_supply.h:833:42: note: passing argument to parameter 'info_out' here struct power_supply_battery_info **info_out); ^ Signed-off-by: shengfei Xu Change-Id: I73e2e48d45611a3d9b11f3bae306d79aa86fc38c --- drivers/power/supply/sgm41542_charger.c | 48 +++++++++++++------------ 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/drivers/power/supply/sgm41542_charger.c b/drivers/power/supply/sgm41542_charger.c index 728414712f59..a3284608d5df 100644 --- a/drivers/power/supply/sgm41542_charger.c +++ b/drivers/power/supply/sgm41542_charger.c @@ -924,54 +924,58 @@ static int sgm4154x_power_supply_init(struct sgm4154x_device *sgm, static int sgm4154x_hw_init(struct sgm4154x_device *sgm) { - struct power_supply_battery_info bat_info = { }; + struct power_supply_battery_info *bat_info; int chrg_stat, ret = 0; ret = power_supply_get_battery_info(sgm->charger, &bat_info); if (ret) { + /* Allocate an empty battery */ + bat_info = devm_kzalloc(sgm->dev, sizeof(*bat_info), GFP_KERNEL); + if (!bat_info) + return -ENOMEM; pr_info("sgm4154x: no battery information is supplied\n"); /* * If no battery information is supplied, we should set * default charge termination current to 120 mA, and default * charge termination voltage to 4.35V. */ - bat_info.constant_charge_current_max_ua = + bat_info->constant_charge_current_max_ua = SGM4154x_ICHRG_I_DEF_uA; - bat_info.constant_charge_voltage_max_uv = + bat_info->constant_charge_voltage_max_uv = SGM4154x_VREG_V_DEF_uV; - bat_info.precharge_current_ua = + bat_info->precharge_current_ua = SGM4154x_PRECHRG_I_DEF_uA; - bat_info.charge_term_current_ua = + bat_info->charge_term_current_ua = SGM4154x_TERMCHRG_I_DEF_uA; sgm->init_data.max_ichg = SGM4154x_ICHRG_I_MAX_uA; sgm->init_data.max_vreg = SGM4154x_VREG_V_DEF_uV; } - if (!bat_info.constant_charge_current_max_ua) - bat_info.constant_charge_current_max_ua = + if (!bat_info->constant_charge_current_max_ua) + bat_info->constant_charge_current_max_ua = SGM4154x_ICHRG_I_MAX_uA; - if (!bat_info.constant_charge_voltage_max_uv) - bat_info.constant_charge_voltage_max_uv = + if (!bat_info->constant_charge_voltage_max_uv) + bat_info->constant_charge_voltage_max_uv = SGM4154x_VREG_V_DEF_uV; - if (!bat_info.precharge_current_ua) - bat_info.precharge_current_ua = + if (!bat_info->precharge_current_ua) + bat_info->precharge_current_ua = SGM4154x_PRECHRG_I_DEF_uA; - if (!bat_info.charge_term_current_ua) - bat_info.charge_term_current_ua = + if (!bat_info->charge_term_current_ua) + bat_info->charge_term_current_ua = SGM4154x_TERMCHRG_I_DEF_uA; if (!sgm->init_data.max_ichg) sgm->init_data.max_ichg = SGM4154x_ICHRG_I_MAX_uA; - if (bat_info.constant_charge_voltage_max_uv) - sgm->init_data.max_vreg = bat_info.constant_charge_voltage_max_uv; + if (bat_info->constant_charge_voltage_max_uv) + sgm->init_data.max_vreg = bat_info->constant_charge_voltage_max_uv; ret = sgm4154x_set_watchdog_timer(sgm, 0); if (ret) goto err_out; - ret = sgm4154x_set_prechrg_curr(sgm, bat_info.precharge_current_ua); + ret = sgm4154x_set_prechrg_curr(sgm, bat_info->precharge_current_ua); if (ret) goto err_out; @@ -981,7 +985,7 @@ static int sgm4154x_hw_init(struct sgm4154x_device *sgm) goto err_out; ret = sgm4154x_set_term_curr(sgm, - bat_info.charge_term_current_ua); + bat_info->charge_term_current_ua); if (ret) goto err_out; @@ -1000,7 +1004,7 @@ static int sgm4154x_hw_init(struct sgm4154x_device *sgm) if (ret) goto err_out; ret = sgm4154x_set_ichrg_curr(sgm, - bat_info.constant_charge_current_max_ua); + bat_info->constant_charge_current_max_ua); if (ret) goto err_out; @@ -1037,10 +1041,10 @@ static int sgm4154x_hw_init(struct sgm4154x_device *sgm) "chrg_vol:%d\n" "term_curr:%d\n" "input_curr_lim:%d\n", - bat_info.constant_charge_current_max_ua, - bat_info.precharge_current_ua, - bat_info.constant_charge_voltage_max_uv, - bat_info.charge_term_current_ua, + bat_info->constant_charge_current_max_ua, + bat_info->precharge_current_ua, + bat_info->constant_charge_voltage_max_uv, + bat_info->charge_term_current_ua, sgm->init_data.ilim); return 0; From a7d5f5ffcdfcf20212c10f4cb849c4183005a917 Mon Sep 17 00:00:00 2001 From: shengfei Xu Date: Tue, 20 Jun 2023 07:53:23 +0000 Subject: [PATCH 2/2] power: supply: rockchip_charger_manager: fix build error for kernel 6.1 drivers/power/supply/rockchip_charger_manager.c:2520:53: error: incompatible pointer types passing 'struct power_supply_battery_info *' to parameter of type 'struct power_supply_battery_info **' [-Werror,-Wincompatible-pointer-types] ret = power_supply_get_battery_info(&charger_psy, &(desc->info)); ^~~~~~~~~~~~~ ./include/linux/power_supply.h:833:42: note: passing argument to parameter 'info_out' here struct power_supply_battery_info **info_out); ^ Signed-off-by: shengfei Xu Change-Id: Ie8b34ac9d4320eb8d2bec4ca30d5e0690216907f --- .../power/supply/rockchip_charger_manager.c | 58 +++++++++---------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/drivers/power/supply/rockchip_charger_manager.c b/drivers/power/supply/rockchip_charger_manager.c index db8e33f33e82..44c6505de2e6 100644 --- a/drivers/power/supply/rockchip_charger_manager.c +++ b/drivers/power/supply/rockchip_charger_manager.c @@ -255,7 +255,7 @@ struct charger_desc { unsigned int polling_interval_ms; unsigned int polling_force_enable; - struct power_supply_battery_info info; + struct power_supply_battery_info *info; const char *psy_charger_stat; const char *psy_charger_pump_stat; @@ -1066,7 +1066,7 @@ static void cm_charge_pump_move_state(struct charger_manager *cm, static int cm_charge_limit_update(struct charger_manager *cm) { struct fastcharge_config *fc_config; - struct power_supply_battery_info info; + struct power_supply_battery_info *info; union power_supply_propval val; int ibus_dcdc_lmt; int ret = 0; @@ -1075,13 +1075,13 @@ static int cm_charge_limit_update(struct charger_manager *cm) fc_config = cm->fc_config; if (fc_config->jeita_charge_support) { - fc_config->vbat_lmt = min(info.constant_charge_voltage_max_uv, + fc_config->vbat_lmt = min(info->constant_charge_voltage_max_uv, fc_config->jeita_charge_voltage); - fc_config->ibat_lmt = min(info.constant_charge_current_max_ua, + fc_config->ibat_lmt = min(info->constant_charge_current_max_ua, fc_config->jeita_charge_current); } else { - fc_config->vbat_lmt = info.constant_charge_voltage_max_uv; - fc_config->ibat_lmt = info.constant_charge_current_max_ua; + fc_config->vbat_lmt = info->constant_charge_voltage_max_uv; + fc_config->ibat_lmt = info->constant_charge_current_max_ua; } ret = get_battery_voltage(cm, &fc_config->vbat_now); @@ -1159,19 +1159,19 @@ static int cm_charge_limit_update(struct charger_manager *cm) CM_DBG("battery info:\n"); CM_DBG("battery info:: charge-full-design-microamp-hours: %d\n", - info.charge_full_design_uah); + info->charge_full_design_uah); CM_DBG("battery info:: factory_internal_resistance_uohm: %d\n", - info.factory_internal_resistance_uohm); + info->factory_internal_resistance_uohm); CM_DBG("battery info:: charge_term_current_ua: %d\n", - info.charge_term_current_ua); + info->charge_term_current_ua); CM_DBG("battery info:: constant_charge_voltage_max_uv: %d\n", - info.constant_charge_voltage_max_uv); + info->constant_charge_voltage_max_uv); CM_DBG("battery info:: constant_charge_current_max_ua: %d\n", - info.constant_charge_current_max_ua); + info->constant_charge_current_max_ua); CM_DBG("battery info:: precharge_current_ua: %d\n", - info.precharge_current_ua); + info->precharge_current_ua); CM_DBG("battery info:: precharge-upper-limit-microvolt: %d\n", - info.precharge_voltage_max_uv); + info->precharge_voltage_max_uv); CM_DBG("charge type: %d\n", fc_config->charge_type); @@ -1436,7 +1436,7 @@ static void cm_sw_fast_charge_algo(struct charger_manager *cm) static int cm_charge_pump_sm(struct charger_manager *cm) { - struct power_supply_battery_info info; + struct power_supply_battery_info *info; struct fastcharge_config *fc_config; union power_supply_propval val; static int tune_vbus_retry; @@ -1507,7 +1507,7 @@ static int cm_charge_pump_sm(struct charger_manager *cm) } } - if (cm->cp.vbat_volt < info.precharge_voltage_max_uv) { + if (cm->cp.vbat_volt < info->precharge_voltage_max_uv) { ret = power_supply_get_property(cm->desc->tcpm_psy, POWER_SUPPLY_PROP_CURRENT_MAX, &val); @@ -1519,7 +1519,7 @@ static int cm_charge_pump_sm(struct charger_manager *cm) if (ret) return ret; CM_DBG("batt_volt-%d, waiting... > %d\n", - cm->cp.vbat_volt, info.precharge_voltage_max_uv); + cm->cp.vbat_volt, info->precharge_voltage_max_uv); } else if (cm->cp.vbat_volt > cm->fc_config->vbat_lmt - 100 * 1000) { pr_info("batt_volt-%d is too high for cp, charging with switch charger(%duv)\n", cm->cp.vbat_volt, cm->fc_config->vbat_lmt - 100 * 1000); @@ -1558,9 +1558,9 @@ static int cm_charge_pump_sm(struct charger_manager *cm) cm->cp.request_current = min(cm->cp.ibus_max + fc_config->ibus_dcdc_lmt, val.intval); - bat_voltage = fc_config->vbat_now - fc_config->ibat_now / 1000 * info.factory_internal_resistance_uohm; + bat_voltage = fc_config->vbat_now - fc_config->ibat_now / 1000 * info->factory_internal_resistance_uohm; ibat_max = min(fc_config->ibat_lmt, 2 * cm->cp.request_current); - vbus_volt_init_up = ibat_max / 1000 * info.factory_internal_resistance_uohm; + vbus_volt_init_up = ibat_max / 1000 * info->factory_internal_resistance_uohm; /* cm->cp.request_voltage = bat_voltage * 2 + 2 * vbus_volt_init_up + ibat_max / 2 * 100 / 1000; */ cm->cp.request_voltage = bat_voltage * 2 + 15 * vbus_volt_init_up / 10 + ibat_max / 2 * 100 / 1000; @@ -1693,7 +1693,7 @@ static int cm_charge_pump_sm(struct charger_manager *cm) CM_DBG("PPS_PM_STATE_FC_ENTRY_1: cm->cp.vbus_volt: %d vbus_volt_init_up: %d\n" "bat_res: %d, factory_internal_resistance_uohm: %d\n", cm->cp.vbus_volt, vbus_volt_init_up, bat_res, - info.factory_internal_resistance_uohm); + info->factory_internal_resistance_uohm); cm_charge_pump_move_state(cm, PPS_PM_STATE_FC_ENTRY_2); break; case PPS_PM_STATE_FC_ENTRY_2: @@ -2478,7 +2478,7 @@ static inline struct charger_desc *cm_get_drv_data(struct platform_device *pdev) static int charger_manager_probe(struct platform_device *pdev) { struct charger_desc *desc = cm_get_drv_data(pdev); - struct power_supply_battery_info info; + struct power_supply_battery_info *info; struct power_supply charger_psy; struct charger_manager *cm; int ret; @@ -2519,8 +2519,8 @@ static int charger_manager_probe(struct platform_device *pdev) charger_psy.of_node = cm->dev->of_node; ret = power_supply_get_battery_info(&charger_psy, &(desc->info)); if (ret) { - info = bat_default_info; - desc->info = bat_default_info; + info = &bat_default_info; + desc->info = &bat_default_info; dev_err(&pdev->dev, "failed to get battery information\n"); } else info = desc->info; @@ -2537,19 +2537,19 @@ static int charger_manager_probe(struct platform_device *pdev) CM_DBG("battery info:\n"); CM_DBG("INFO: charge-full-design-microamp-hours: %d\n", - info.charge_full_design_uah); + info->charge_full_design_uah); CM_DBG("INFO:factory_internal_resistance_uohm: %d\n", - info.factory_internal_resistance_uohm); + info->factory_internal_resistance_uohm); CM_DBG("charge_term_current_ua: %d\n", - info.charge_term_current_ua); + info->charge_term_current_ua); CM_DBG("constant_charge_voltage_max_uv: %d\n", - info.constant_charge_voltage_max_uv); + info->constant_charge_voltage_max_uv); CM_DBG("constant_charge_current_max_ua: %d\n", - info.constant_charge_current_max_ua); + info->constant_charge_current_max_ua); CM_DBG("precharge_current_ua: %d\n", - info.precharge_current_ua); + info->precharge_current_ua); CM_DBG("precharge-upper-limit-microvolt: %d\n", - info.precharge_voltage_max_uv); + info->precharge_voltage_max_uv); cm->cm_wq = alloc_ordered_workqueue("%s", WQ_MEM_RECLAIM | WQ_FREEZABLE,