From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755473AbcITPaS (ORCPT ); Tue, 20 Sep 2016 11:30:18 -0400 Received: from mx0a-001ae601.pphosted.com ([67.231.149.25]:38751 "EHLO mx0b-001ae601.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752844AbcITPaQ (ORCPT ); Tue, 20 Sep 2016 11:30:16 -0400 Authentication-Results: ppops.net; spf=none smtp.mailfrom=ckeepax@opensource.wolfsonmicro.com From: Charles Keepax To: CC: , , Subject: [PATCH 2/2] mfd: arizona: Handle probe deferral for reset GPIO Date: Tue, 20 Sep 2016 16:30:14 +0100 Message-ID: <1474385414-27665-2-git-send-email-ckeepax@opensource.wolfsonmicro.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1474385414-27665-1-git-send-email-ckeepax@opensource.wolfsonmicro.com> References: <1474385414-27665-1-git-send-email-ckeepax@opensource.wolfsonmicro.com> MIME-Version: 1.0 Content-Type: text/plain X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 suspectscore=1 malwarescore=0 lowpriorityscore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1609020000 definitions=main-1609200196 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The Arizona CODECs will generally function correctly without a reset line although it is strongly advised to have one, as such we do allow the system to boot if the reset gpio is missing or incorrectly specified. However we should fail probe if we get a probe deferral request, this patch adds handling for this case. Reported-by: Richard Fitzgerald Signed-off-by: Charles Keepax --- drivers/mfd/arizona-core.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c index f466f29..d18f3b1 100644 --- a/drivers/mfd/arizona-core.c +++ b/drivers/mfd/arizona-core.c @@ -813,7 +813,9 @@ static int arizona_of_get_core_pdata(struct arizona *arizona) int count = 0; pdata->reset = of_get_named_gpio(arizona->dev->of_node, "wlf,reset", 0); - if (pdata->reset < 0) { + if (pdata->reset == -EPROBE_DEFER) { + return pdata->reset; + } else if (pdata->reset < 0) { dev_err(arizona->dev, "Reset gpio missing/malformed: %d\n", pdata->reset); @@ -1011,11 +1013,14 @@ int arizona_dev_init(struct arizona *arizona) dev_set_drvdata(arizona->dev, arizona); mutex_init(&arizona->clk_lock); - if (dev_get_platdata(arizona->dev)) + if (dev_get_platdata(arizona->dev)) { memcpy(&arizona->pdata, dev_get_platdata(arizona->dev), sizeof(arizona->pdata)); - else - arizona_of_get_core_pdata(arizona); + } else { + ret = arizona_of_get_core_pdata(arizona); + if (ret < 0) + return ret; + } BUILD_BUG_ON(ARRAY_SIZE(arizona->mclk) != ARRAY_SIZE(mclk_name)); for (i = 0; i < ARRAY_SIZE(arizona->mclk); i++) { -- 2.1.4