From patchwork Wed Jun 14 09:25:56 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H. Nikolaus Schaller" X-Patchwork-Id: 9785913 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 B98CD602C9 for ; Wed, 14 Jun 2017 09:27:04 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B4B5B284F5 for ; Wed, 14 Jun 2017 09:27:04 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A97B7285E3; Wed, 14 Jun 2017 09:27:04 +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=-7.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_HI 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 56E9328567 for ; Wed, 14 Jun 2017 09:27:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751864AbdFNJ0r (ORCPT ); Wed, 14 Jun 2017 05:26:47 -0400 Received: from mo4-p00-ob.smtp.rzone.de ([81.169.146.219]:8959 "EHLO mo4-p00-ob.smtp.rzone.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752331AbdFNJ0o (ORCPT ); Wed, 14 Jun 2017 05:26:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1497432367; l=1615; s=domk; d=goldelico.com; h=References:In-Reply-To:References:In-Reply-To:Date:Subject:Cc:To: From; bh=y++acQmMFtUdgb3VH0NqP7Vc2jXfXn1i+AZ0y6/Rqhc=; b=SnQ4VZ3HHmJXPOuWdt1imkB3LDBeIV1NnJdo4VphNrtMnTbbxwRVCnphYSfIu1js/U UyLnB/fefTuhRDhQFpZ5E9PjKrN67uC3e6E81ZfAl8jgetPyDBwIywAoADxs+gQynA5I +u3hx7NC04FdiGU1hriKFWUSm4CpPdbCUe61g= X-RZG-AUTH: :JGIXVUS7cutRB/49FwqZ7WcecEarQROEYabkiUo6mSAGQ+qKID80POWQjQ== X-RZG-CLASS-ID: mo00 Received: from localhost.localdomain (p57AE0C45.dip0.t-ipconnect.de [87.174.12.69]) by smtp.strato.de (RZmta 40.9 DYNA|AUTH) with ESMTPSA id U05938t5E9Pw054 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA)) (Client did not present a certificate); Wed, 14 Jun 2017 11:25:58 +0200 (CEST) From: "H. Nikolaus Schaller" To: Grygorii Strashko , NeilBrown , Rob Herring , Mark Rutland , Russell King , Sebastian Reichel , Marek Belisko , "H. Nikolaus Schaller" Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-pm@vger.kernel.org, letux-kernel@openphoenux.org, notasas@gmail.com, linux-omap@vger.kernel.org Subject: [PATCH v6 4/4] power: supply: twl4030-charger: add deferred probing for phy and iio Date: Wed, 14 Jun 2017 11:25:56 +0200 Message-Id: <6573ec523aa73971562c9b7e7d89f6045185d8c4.1497432355.git.hns@goldelico.com> X-Mailer: git-send-email 2.12.2 In-Reply-To: References: In-Reply-To: References: 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 This fixes an issue if both this twl4030_charger driver and phy-twl4030-usb are compiled as modules and loaded in random order. It has been observed on GTA04 and OpenPandora devices that in worst case the boot process hangs and in best case the AC detection fails with a warning. Therefore we add deferred probing checks for the usb_phy and the iio channel for AC detection. Signed-off-by: H. Nikolaus Schaller --- drivers/power/supply/twl4030_charger.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/power/supply/twl4030_charger.c b/drivers/power/supply/twl4030_charger.c index 3bebeecb4a1f..6ac8816262bd 100644 --- a/drivers/power/supply/twl4030_charger.c +++ b/drivers/power/supply/twl4030_charger.c @@ -989,15 +989,21 @@ static int twl4030_bci_probe(struct platform_device *pdev) phynode = of_find_compatible_node(bci->dev->of_node->parent, NULL, "ti,twl4030-usb"); - if (phynode) + if (phynode) { bci->transceiver = devm_usb_get_phy_by_node( bci->dev, phynode, &bci->usb_nb); + if (IS_ERR(bci->transceiver) && + PTR_ERR(bci->transceiver) == -EPROBE_DEFER) + return -EPROBE_DEFER; /* PHY not ready */ + } } bci->channel_vac = devm_iio_channel_get(&pdev->dev, "vac"); if (IS_ERR(bci->channel_vac)) { - bci->channel_vac = NULL; + if (PTR_ERR(bci->channel_vac) == -EPROBE_DEFER) + return -EPROBE_DEFER; /* iio not ready */ dev_warn(&pdev->dev, "could not request vac iio channel"); + bci->channel_vac = NULL; } bci->ac = devm_power_supply_register(&pdev->dev, &twl4030_bci_ac_desc,