From patchwork Tue Dec 13 23:56:44 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Rosin X-Patchwork-Id: 9473437 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id BC82B607EE for ; Wed, 14 Dec 2016 00:12:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AED8D2793B for ; Wed, 14 Dec 2016 00:12:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A347B285AC; Wed, 14 Dec 2016 00:12:36 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2DACA286C9 for ; Wed, 14 Dec 2016 00:12:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753040AbcLNAMN (ORCPT ); Tue, 13 Dec 2016 19:12:13 -0500 Received: from mail-he1eur01on0120.outbound.protection.outlook.com ([104.47.0.120]:53321 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752946AbcLNAML (ORCPT ); Tue, 13 Dec 2016 19:12:11 -0500 X-Greylist: delayed 900 seconds by postgrey-1.27 at vger.kernel.org; Tue, 13 Dec 2016 19:12:10 EST DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=axentiatech.onmicrosoft.com; s=selector1-axentia-se; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=Vbea2YkuMEr0zsUjarxTSvwdwXnfA9jpdPvHc0yRUa0=; b=vAd4m6usq0fcJG6ggbfPtygWGDGmw+L5MGFoGV9NTbM61TUB2gMWiiO699GhZCPcRFdIrLCUzzgKy12OX2HCiO7B8vt0C2OGc7i5yPD3kvyh+vj87J5FjuMCmqd9OjoHud6rDYeEaSytmkRV4wRaNHUfKtkUHRbJNv+nhRDFe2M= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peda@axentia.se; Received: from localhost.localdomain (217.210.101.82) by AM5PR0201MB2305.eurprd02.prod.outlook.com (10.169.242.149) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.771.8; Tue, 13 Dec 2016 23:57:07 +0000 From: Peter Rosin To: linux-kernel@vger.kernel.org Cc: Peter Rosin , Sebastian Reichel , Rob Herring , Mark Rutland , linux-pm@vger.kernel.org, devicetree@vger.kernel.org Subject: [PATCH v2 2/3] power: supply: bq24735-charger: optionally poll the ac-detect gpio Date: Wed, 14 Dec 2016 00:56:44 +0100 Message-Id: <1481673405-4547-3-git-send-email-peda@axentia.se> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1481673405-4547-1-git-send-email-peda@axentia.se> References: <1481673405-4547-1-git-send-email-peda@axentia.se> MIME-Version: 1.0 X-Originating-IP: [217.210.101.82] X-ClientProxiedBy: DB6P195CA0006.EURP195.PROD.OUTLOOK.COM (10.171.120.144) To AM5PR0201MB2305.eurprd02.prod.outlook.com (10.169.242.149) X-MS-Office365-Filtering-Correlation-Id: e00da515-f1c1-4cae-6f43-08d423b3bf4f X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:AM5PR0201MB2305; X-Microsoft-Exchange-Diagnostics: 1; AM5PR0201MB2305; 3:uRJpezBHZXzC2Hb5CL+7RtcGps1cDT6lw7ceztARg613V9ir6B3MbNXo0aD70anlZml3lHqtWe2ho2y0kiz2Pzb0hJNS00ShCX1MTK8jvWXRtmN/fCRh3Taelp0JE6ay7X1vXYPTGMDjzoKFOKdWQzhEjPJilwDsDGjjgJsnwZTb0wmnx7RH6mtBqidi7NtOdvDByZZkE/dcTxQdMs3YmtD6RPiCkK32ESY/7zgzIEuAGyZnoFs90DutQIOyYtaeKeR+nRZWbdr4S9NrRC+CRA==; 25:1ucE6pc7W7C2hzYZeg4Ecj3y8g/mbu2K9WEoiv8Np0EoVKXVa1lryKyVCrxEAutsb5X4pWx9GuwWpQaGlJNZdKiYGUAGQlCpwlkRG97pauJEsU/AByfSLJiTAIXdy4KBszOw2HS3oxC3ciKWvft1KjQBf9anM2tJLRs0xbSy5CB+Frz+W7ySlSunL53DBPgFgTREc4BtgwW3/AissmiHdKVq5snOrGKvsLiqjNwq2/E/iiDmVpGjaqz0kAI2igOgLkuIzoVVxzI0nsWfCgC47WNBex7O9vXl6qgTRND5yZlOXMuCntREL7t4g6qQp1SFPyBBneOrY6Tyyh+6N8rlv77S4qtHz1lNEUXjfs+sJ2v1rUP3EiQI/s+uNXrDKi56D6CVp/KXMR4GK/hG+vf9CCNq7RcZnkfK5TT9GCjGtnFFB82zMfMMwaQwuxntcPPmolFRfHF9eaybWzk7vLg+Tw== X-Microsoft-Exchange-Diagnostics: 1; AM5PR0201MB2305; 31:uX0jrJP2bzhM6ndnxZbJUEii1x2YhBGSqua/RsYMmgEgV/RT8dxt4jBI5IKSgwocs+fGXmNI1OZFcctD+z6Oshn9r+s3AjN9mLLrkcWlbZO9nBcgnLXremct2svepkkIDrfqEnZy+luLxl93zugQIrb1mCV7Czp8Cu18oKBl2L+Gp/onEYbXJQoGM4qIHDDVWvAK6FUOrxdz1oTbbyiw7ufzVq9KacRHnNG2ot8c15OhVu89s+veSP7mKZB/Jq4T; 4:VJHYiZB1IwhKW++kdJwSLBdo+cR3uSvkyxOquaPV+Syg8GOQGtUft+2LlQ9KsL5blRHi47yBUBpH//oxRXQmatJkEEDsjBYcriFqVyPqDpAvLac22ybanIkISM72NIU8G40hyQeaYpnKBEIrRRt2YwuZUoNEsZD5jmC60yBaSlF7FCjcSOwf7VvcCoHLPgubCoKRXCBRvOyYK8TC2U+FskM8Iv5QBHJTvX6XeMAKN9S3PQmLCwArn5ta3f6AZnWxvDyc1rqxyjqNkqSV9OZY9FacPME661fumJrY7FWpIDIg/82nIx6G2NnRydScMXMHIPDT9dsySw0jNkm6AFOHGV6WnVAkFZFk3SXiAgD9B4rrxVcT0OdXcbu5h7Q+9NpcRdoZMUUr7Vqu1biqFHvuNCnapGebsKRs+iO8HNpsNn7HTxjSUmEewHXH6jaUaRxL0ZjtUJgttrh34Fit+9ZId8y1N5j7nK/IOdsvuXafCItwT5jWApCPwYZTMc6jLdn34F9DuhUTBI8rLTFmCr4La0CB1/0J4cMB2kJXc7rPOrlbW7Z3z8FSIp5ErgDFPA8KkHmrCQLxyjizOHnRHh96BL9JpGNoCX/9+alO7aTbLCLF+npfM4E29CM6DTWlkwtt6Tg2IYUd/vCF7+LoKYsMRP52npMqkEX+e9W6 l2ofBJM= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6041248)(20161123562025)(20161123564025)(20161123560025)(20161123555025)(20161123558021)(2016111802025)(6072148)(6043046); SRVR:AM5PR0201MB2305; BCL:0; PCL:0; RULEID:; SRVR:AM5PR0201MB2305; X-Forefront-PRVS: 01559F388D X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(6069001)(7916002)(39450400003)(39830400002)(39410400002)(199003)(189002)(92566002)(86362001)(6666003)(47776003)(2950100002)(38730400001)(6916009)(305945005)(7736002)(36756003)(66066001)(575784001)(50986999)(33646002)(2906002)(42186005)(48376002)(50466002)(105586002)(106356001)(2351001)(68736007)(74482002)(6506006)(97736004)(101416001)(3846002)(76176999)(2361001)(6116002)(189998001)(6486002)(81156014)(5003940100001)(4326007)(8676002)(50226002)(110136003)(5660300001)(81166006)(6512006)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:AM5PR0201MB2305; H:localhost.localdomain; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: axentia.se does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM5PR0201MB2305; 23:qBoePbR6bLL7c8i51UO5GDcL4dLmObO2239Q58C?= =?us-ascii?Q?fZ0upxPqpjgyCI3Ex0xwh2sjPHCc/rCKbONBpX4C/GRrHoYwXV+t0ZXOsPx2?= =?us-ascii?Q?+fXQrqBVymRFZl42xM0ckIXW5oHA5oZzmqg29PBbgMyK/6fvngk4mtGcIBku?= =?us-ascii?Q?ncslTsXR/b4iofnOVRbYgNQPxjV8NmoolWQ2zOZtDvFTEJvOsjS+gEQxPWIU?= =?us-ascii?Q?LKGZ+v5BZ6rBHpTkuv8Rx2NO53uCwnjK1qNyVYIcF4iXHV7kGYVs59xw2mY4?= =?us-ascii?Q?XD4mU2ykhT9VxrCMmKKVNSgEAcopmuBIPaMAwjPisESXwR+0uF2+333+Gasj?= =?us-ascii?Q?JsEXOJ90fJIRmwc7v4ycWGw9GPJdzvK1gqiOUxwx8p2QWHkepHHJf3IKrLEf?= =?us-ascii?Q?AkCR/Chg5G0PsvTPgEX9ZowWHgwFgZMkxjYNjeGOBOHevMo4iUaHau+Bb3I3?= =?us-ascii?Q?buDbFP+zSLxZiMcnZsroBuP/NGqZe99l03GmUE0DXCUzZNYLaHmkTTTd6/Vm?= =?us-ascii?Q?mey2IJPxqMfMXT7YkgkFa2Ap17vVsuIaZX2gOVHWyAt/w2XYKT/xoJYaJZBk?= =?us-ascii?Q?KZswDUj17OsZUcLMrPDfm+8JMoL53rcd7ZLECewWBUEtgRS53qS7qZqiO0Ly?= =?us-ascii?Q?58nJPmZobeKXxsmbN2Ua6NQVF6/hI59ulKZtQfha1oIN4pOZVXB+2pTZGwl1?= =?us-ascii?Q?/fLPkWCtQOymJheSc2saTzbPfdsOW7np0bTf5PjVSp5n5mKI9uBqwWK8uxoX?= =?us-ascii?Q?dJB65KkkNWbd1hjzmeMLn4ow+lefM658VZRHjUPtkcSHQQ9w3k/3Y+iI5pGN?= =?us-ascii?Q?/ltekFm722LMh3FJYKYS8XC+rAyv48VajcSJ3L+h5FFslzVvM35KvnJ3+zjP?= =?us-ascii?Q?owq2rwNYXlImdDhWR6IKfx7yZ/otWMi6GbXBBtGPTJw4xoR/kkrFPcw9X9Fo?= =?us-ascii?Q?0+k5II8QogEXTPh0zi8erJg+UvClAxBt4+dXnGLHi68kGyxMb6cltMkOVQH3?= =?us-ascii?Q?2PIJ9ari6rpwyPCjXi0sYzmIrLQaX18Bb2E3F7OVi+v69c+9O5tqknn/Bva1?= =?us-ascii?Q?U48/Mr/DsMv0RaG3lO3pjkhAcgE06h2X4NtWg56KKWK2AbWpL2iIoolJzdOl?= =?us-ascii?Q?MTxpFn8BTain/SSRV0EPAiZhIhsKpKOt9bwMsDQPj634ixeEf6GUjD9RmvPR?= =?us-ascii?Q?Mr12RHOZ87nzwpPGMGEdIZyMbw+N8MEJ/2luJuhcT5cvhJN/JYEukI/rFAw?= =?us-ascii?Q?=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; AM5PR0201MB2305; 6:bsb4ntrWXfwpZn3lOftt7s6wnBXwYJgnfwDcLqpKzIPDHXSo84gpfToY5Op1MnzSuJbsVIjnl/EDTcFj7Q8kIiiMsY+j4CbgCFkIiwFui0r5Ld/3kQ7C2j5EEx8wmNwE+QfJZa2Iah5M0zAbKwF/Qt9J5WwCZGdNITrzapDFlXBtpCSLVPeHgkYb3I6mnkjVMskC7yHu3zbNBWrwdvC3eR1ZBifGdjdbsZey+Smd49Cs6uAQvgyKug+poobPIjubSAI8/VNrRq989g77nVve8y5zBPE2R7lt6212m1Cywsi8JCNI5iWt9MQ7unx/DP15WTKeJsYc7JuIRh1MIHaXeZlx+KoSPxW8PSjvXd7AWtys/MS9WPKK7ShbjZdgTYDOnd/kNHeul38tbB7EZ4+tTc2TpgzOo6uqfERgwGyeNzVxRAXAFIWkJvFHxi6Jayfj; 5:OgGWLNyZ5z9djlyj3Y7O21UDxtR0iYDlSM5HAYifyRkUzAq3MrMNvNgHmZ2SfU0bnsReOl+PreIySLRZWGr9+b5tVAIrP9q4hcCvn5QtVASFg8cBzrnG5E4K2i0dgWqZ6b+YOZtRllWjaGDb3koO5HXu3bP1i7WZpeMES+CH5wk=; 24:i/YHVfhY38morvFoHubwrex4scJlrRL8Mm8u3jo3PFokjF1FBko8uw5iP3iWtjEhoUNV8i0kMamyeyD3frvOubVs7b1fHtG7UxWzzPeQuD4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; AM5PR0201MB2305; 7:YWXzOAFft7sqm410QE8dsD6LOOP6cnMSeT8H4nlo58sAtT85g6ENqitMKpGjSUINSOqC1mvMay8MitmtBfVPHwEEPUyu8YD5gjkMEhgNnxlZ4Nz5U4AGZeIKPwvEL+xMUh1OyGglsQrCqS0wrrjuCLDtTkBSAOwWXjgyvZTcH9y/ibQ+MsIYlV7ngH6qLL3ZmJsQHjIMsYTJD5uRH8LhI5iKVHlSwDYKXL96Kc7uAkYzmFLsKOPD8fDSahc6doH2hO9sauBEYIgcGF90l7m/6FBWvhtG3h51+Kp4NVh9k9knkAfemFDqU/KOANF+zaNqv+auFtCaYjB1AE6dU6K77L82TNQ24YKq2lV7TI4jUKfwMLaEdCZhtGy0K+9Pag5gfBDy/x9/dTevWb+MvUBXxa8vpfk8QOJj9wkHJYnT3YJIRpngF6z42rpJ9NdIHZ0LWfJ16h3ItygPcY81OdcahQ== X-OriginatorOrg: axentia.se X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Dec 2016 23:57:07.1406 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0201MB2305 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP If the ac-detect gpio does not support interrupts, provide a fallback to poll the gpio at a configurable interval. Signed-off-by: Peter Rosin --- .../bindings/power/supply/ti,bq24735.txt | 2 + drivers/power/supply/bq24735-charger.c | 50 +++++++++++++++++++--- 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/Documentation/devicetree/bindings/power/supply/ti,bq24735.txt b/Documentation/devicetree/bindings/power/supply/ti,bq24735.txt index 3bf55757ceec..54f0004643e2 100644 --- a/Documentation/devicetree/bindings/power/supply/ti,bq24735.txt +++ b/Documentation/devicetree/bindings/power/supply/ti,bq24735.txt @@ -25,6 +25,8 @@ Optional properties : - ti,external-control : Indicates that the charger is configured externally and that the host should not attempt to enable/disable charging or set the charge voltage/current. + - poll-interval : In case 'interrupts' is not specified, poll AC presense + on the ti,ac-detect-gpios GPIO with this interval (milliseconds). Example: diff --git a/drivers/power/supply/bq24735-charger.c b/drivers/power/supply/bq24735-charger.c index 1d5c9206e0ed..f45876927676 100644 --- a/drivers/power/supply/bq24735-charger.c +++ b/drivers/power/supply/bq24735-charger.c @@ -50,6 +50,8 @@ struct bq24735 { struct bq24735_platform *pdata; struct mutex lock; struct gpio_desc *status_gpio; + struct delayed_work poll; + u32 poll_interval; bool charging; }; @@ -209,11 +211,8 @@ static int bq24735_charger_is_charging(struct bq24735 *charger) return !(ret & BQ24735_CHG_OPT_CHARGE_DISABLE); } -static irqreturn_t bq24735_charger_isr(int irq, void *devid) +static void bq24735_update(struct bq24735 *charger) { - struct power_supply *psy = devid; - struct bq24735 *charger = to_bq24735(psy); - mutex_lock(&charger->lock); if (charger->charging && bq24735_charger_is_present(charger)) @@ -223,11 +222,29 @@ static irqreturn_t bq24735_charger_isr(int irq, void *devid) mutex_unlock(&charger->lock); - power_supply_changed(psy); + power_supply_changed(charger->charger); +} + +static irqreturn_t bq24735_charger_isr(int irq, void *devid) +{ + struct power_supply *psy = devid; + struct bq24735 *charger = to_bq24735(psy); + + bq24735_update(charger); return IRQ_HANDLED; } +static void bq24735_poll(struct work_struct *work) +{ + struct bq24735 *charger = container_of(work, struct bq24735, poll.work); + + bq24735_update(charger); + + schedule_delayed_work(&charger->poll, + msecs_to_jiffies(charger->poll_interval)); +} + static int bq24735_charger_get_property(struct power_supply *psy, enum power_supply_property psp, union power_supply_propval *val) @@ -455,11 +472,33 @@ static int bq24735_charger_probe(struct i2c_client *client, client->irq, ret); return ret; } + } else if (charger->status_gpio) { + ret = of_property_read_u32(client->dev.of_node, + "poll-interval", + &charger->poll_interval); + if (ret) + return 0; + if (!charger->poll_interval) + return 0; + + INIT_DELAYED_WORK(&charger->poll, bq24735_poll); + schedule_delayed_work(&charger->poll, + msecs_to_jiffies(charger->poll_interval)); } return 0; } +static int bq24735_charger_remove(struct i2c_client *client) +{ + struct bq24735 *charger = i2c_get_clientdata(client); + + if (charger->poll_interval) + cancel_delayed_work_sync(&charger->poll); + + return 0; +} + static const struct i2c_device_id bq24735_charger_id[] = { { "bq24735-charger", 0 }, {} @@ -478,6 +517,7 @@ static struct i2c_driver bq24735_charger_driver = { .of_match_table = bq24735_match_ids, }, .probe = bq24735_charger_probe, + .remove = bq24735_charger_remove, .id_table = bq24735_charger_id, };