From patchwork Tue Mar 7 12:36:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Machek X-Patchwork-Id: 65436 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp2410309wrd; Tue, 7 Mar 2023 04:53:36 -0800 (PST) X-Google-Smtp-Source: AK7set9Rh3Th7iJ/0G/AJ943F9C/6vEQ2wsL6IZedJJklxC2LNIWrXO7QVwwHUUocAUCT9GWJ2Tg X-Received: by 2002:a17:902:c94c:b0:19d:20a:a219 with SMTP id i12-20020a170902c94c00b0019d020aa219mr18361892pla.66.1678193615848; Tue, 07 Mar 2023 04:53:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678193615; cv=none; d=google.com; s=arc-20160816; b=YGJoEM2u01bQilQ2JZcobIfFPcVXNbGOLHhIGYJoDdVvIY5xsdWS81oMfCtUA2ATLX iRdjnCooigj5J9sxSjcGDvTn4AHelxfT8a62tGmIuO92O5pAocotbsWYuhwYytQ8WeWD hHpkhAlX10fNbZb6ilh9SGFF9D2d+7a0KgmAU0P/uTDRQ0rVnNGy1c6aZDRwSjNB4+NK nq7FHYeBKcrUTiR6oq+fd5a6EIEp4HEgwx8gBGBHOnENV6sj7Tp99JDe/25d454/vbeX IGJAvCL+0Ys7+Ca/IPNdprNzNSZD7dY0EMevTO1WKrl4tExiAFCtMmK54jIhDC+LZD9/ jEyQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-disposition:mime-version:message-id :subject:to:from:date:dkim-signature; bh=1PlvY26tIHyNiqhAYJQIp+i1zuL+i9oLYMD+0Zno304=; b=QFfV50cNf+IHWAPMFGVz+s48hVE6sKWtUVeL4NP7tD2lyau98h0Pa/vlAK8SIh0XtL fZM55Lqmp+JQlVJ4l4mpER9p7UkrtneNxUH62iOLhTv/OM0GmiDcZhjAGXH6/MwEPR74 Eezz6IoF59l2mWWo5w62gfyJzYyakKGcnawaedNwFO0WJzFDadl/HEMMoWBk+9VEzr3N IfJjm5NdluhDWH5u4vxxiFc0rQ4Wow8bSS2v9F9g3vu2roftEqnQQnSHvzb5x/GzRPYb 3mzJ9gAbEf9RlAIOLpehEVO/zpp0peKmMgtgxiXNO8KUeJXDihj2BUElMZZIUiRwMqal ZsWg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ucw.cz header.s=gen1 header.b=ZdR2Q3Vm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=ucw.cz Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id kx11-20020a170902f94b00b0019e87f55956si11791726plb.471.2023.03.07.04.53.23; Tue, 07 Mar 2023 04:53:35 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@ucw.cz header.s=gen1 header.b=ZdR2Q3Vm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=ucw.cz Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230241AbjCGMgT (ORCPT + 99 others); Tue, 7 Mar 2023 07:36:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57178 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230386AbjCGMgN (ORCPT ); Tue, 7 Mar 2023 07:36:13 -0500 Received: from jabberwock.ucw.cz (jabberwock.ucw.cz [46.255.230.98]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 23EB44A1D6; Tue, 7 Mar 2023 04:36:11 -0800 (PST) Received: by jabberwock.ucw.cz (Postfix, from userid 1017) id B1CFD1C0DE7; Tue, 7 Mar 2023 13:36:08 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ucw.cz; s=gen1; t=1678192568; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=1PlvY26tIHyNiqhAYJQIp+i1zuL+i9oLYMD+0Zno304=; b=ZdR2Q3VmAJbqIfmzQBuo80BePszCATog/JJr5+3pFSbAMZNNSxBs7oym0QL+HViHRo5h6B PYL3JAeEErPbwg/Wskp6+LcC+1vQxKIhkPWh8P1vtIY4vpfcbz0Tny+UxFtuZlkyCh9H4o 4dWOfIeGVD2Ar7HNt4W/L/jrIz+qUl8= Date: Tue, 7 Mar 2023 13:36:08 +0100 From: Pavel Machek To: kernel list , linux-arm-kernel , linux-omap@vger.kernel.org, tony@atomide.com, sre@kernel.org, nekit1000@gmail.com, mpartap@gmx.net, merlijn@wizzup.org, martin_rysavy@centrum.cz, phone-devel@vger.kernel.org, maemo-leste@lists.dyne.org Subject: Motorola Droid 4 -- Stopping charger when battery is full Message-ID: MIME-Version: 1.0 Content-Disposition: inline X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_NONE, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759713548655110558?= X-GMAIL-MSGID: =?utf-8?q?1759713548655110558?= Hi! I complained that "battery life is very poor" with leste. It seems to be combination of several factors. 1) I was using very old battery 2) My charger is detected as "USB", not as "AC" 3) Charger was cycling on/off, which was annoying and I often ending up dissconnecting the charger 4) It probably has a bit higher power consuption than original android 5) Android is more aggressive, charges to 4.35V, and allows deeper discharge According to my measurements "CPCAP_REG_CRM_FET_OVRD | CPCAP_REG_CRM_FET_CTRL" results in battery discharding and 0A drawn frmo the USB. "CPCAP_REG_CRM_FET_OVRD" is phone powered from USB, with battery more or less disconnected (<12mA), which is what we want in battery full situation. Second problem was that phone never really stayed in "battery full", immediately exiting it. This should solve both issues (plus it enables a lot of debugging). Best regards, Pavel Signed-off-by: Pavel Machek diff --git a/drivers/power/supply/cpcap-charger.c b/drivers/power/supply/cpcap-charger.c index 8bd1abe246cc..af268fc87fbf 100644 --- a/drivers/power/supply/cpcap-charger.c +++ b/drivers/power/supply/cpcap-charger.c @@ -10,6 +10,7 @@ * Copyright (C) 2009-2010 Motorola, Inc. */ +#define DEBUG #include #include #include @@ -410,8 +411,7 @@ static int cpcap_charger_disable(struct cpcap_charger_ddata *ddata) int error; error = regmap_update_bits(ddata->reg, CPCAP_REG_CRM, 0x3fff, - CPCAP_REG_CRM_FET_OVRD | - CPCAP_REG_CRM_FET_CTRL); + CPCAP_REG_CRM_FET_OVRD); if (error) dev_err(ddata->dev, "%s failed with %i\n", __func__, error); @@ -686,8 +686,11 @@ static void cpcap_usb_detect(struct work_struct *work) if (error) return; + dev_dbg(ddata->dev, "%d %d %d %d\n", s.chrg_det, s.chrgcurr1, s.chrgcurr2, s.vbusvld); + /* Just init the state if a charger is connected with no chrg_det set */ if (!s.chrg_det && s.chrgcurr1 && s.vbusvld) { + printk("Just init -- not chrg_det\n"); cpcap_charger_update_state(ddata, POWER_SUPPLY_STATUS_NOT_CHARGING); @@ -699,6 +702,7 @@ static void cpcap_usb_detect(struct work_struct *work) * charged to 4.35V by Android. Try again in 10 minutes. */ if (cpcap_charger_get_charge_voltage(ddata) > ddata->voltage) { + printk("Battery overcharged, wait\n"); cpcap_charger_disconnect(ddata, POWER_SUPPLY_STATUS_NOT_CHARGING, HZ * 60 * 10); @@ -713,14 +717,24 @@ static void cpcap_usb_detect(struct work_struct *work) break; new_state = POWER_SUPPLY_STATUS_FULL; + printk("No current -> we are done\n"); + if (s.chrgcurr1 && s.vbusvld) { cpcap_charger_disconnect(ddata, new_state, HZ * 5); return; } break; case POWER_SUPPLY_STATUS_FULL: + if (s.vbusvld) { + printk("Full, stay full\n"); + schedule_delayed_work(&ddata->detect_work, HZ * 10); + return; + } if (!s.chrgcurr2) break; + + printk("Full but we need to do something\n"); + if (s.vbusvld) new_state = POWER_SUPPLY_STATUS_NOT_CHARGING; else @@ -762,6 +776,7 @@ static void cpcap_usb_detect(struct work_struct *work) if (!delayed_work_pending(&ddata->ramp_work)) schedule_delayed_work(&ddata->ramp_work, HZ/20); } else { + printk("No feeding bus, disabling\n"); ddata->set_current = 0; error = cpcap_charger_disable(ddata); if (error)