Received: by 2002:ac0:946b:0:0:0:0:0 with SMTP id j40csp3147371imj; Mon, 11 Feb 2019 14:58:04 -0800 (PST) X-Google-Smtp-Source: AHgI3IabI/O5Isgj4WpGAHa8lEDIdM6HRS+24CFo0dUA9aBb2xI79L5vyakMIE5pClVj6/ylGoXD X-Received: by 2002:a62:44d8:: with SMTP id m85mr700336pfi.164.1549925883984; Mon, 11 Feb 2019 14:58:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1549925883; cv=none; d=google.com; s=arc-20160816; b=FGktFbj8FOBVkeYXBgd4fMln2plyHPMrVOM0V4aw9x7x8+46/FZeuYcuj20U4WijIj JF07zQjy56dgr5A+nPVJKmSwuG0qGqwS5V4ncYTM6Az7OjoyxMHfotrrquejS28n/bQ6 FqY3mMdwNVQNuITLU4ykXDQZruvtvGeyVdzZdwgVmLSczyjnwzwJVzGche2z9XmVuvSM JDHXCkQ8PKzV76iW9oJrqTZquVt2lDYUnqYokVchiHsdxfP159Zy45maCrE8nFHDlJfO lVOsXO10hd3dXS6JsdDmyt3cfCzbFwAOLw0t+L/NdQbPIW2az4t8v2sTmWjmoO7hG5WW pbow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=73t7qi1zk1tPxkCt6SMBSgN5wKOkgYdoY0Mpvu53YaQ=; b=CF+fGs72+JyNbVKtVGaoldkvSuk4FUmD9Lbcfl0NHC8k5EZDcf4E67gJSMTM9v4a2D K1aqsB/d7FtK0bVFpLIBTeQvM6XSfmhfWKsYriEvuSksZhvbYu/o8+4kBDE/dWwewVPP M3yJzcQyzVuov4ILPaRTnIL+rtq0RuXAJL/AViCq0JgrZod8KGkpEQR3VNOU0DQ+GR85 FbMhDYe6/5dQZs9M1ZGaMR3NIIiPnkH2CYjByc0pSSvVLbQZi4v1PJmas1s8EFU6j8+S +b9zUt7RkGicIj9HePj03IfpIcPKllcOJQzCvVVxHaXKb+FEGQXsqO4eYy00hsLZkqin jqaw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x14si10954927plr.378.2019.02.11.14.57.48; Mon, 11 Feb 2019 14:58:03 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727379AbfBKW5a (ORCPT + 99 others); Mon, 11 Feb 2019 17:57:30 -0500 Received: from muru.com ([72.249.23.125]:38134 "EHLO muru.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726847AbfBKW5a (ORCPT ); Mon, 11 Feb 2019 17:57:30 -0500 Received: from hillo.muru.com (localhost [127.0.0.1]) by muru.com (Postfix) with ESMTP id 919A580BF; Mon, 11 Feb 2019 22:57:39 +0000 (UTC) From: Tony Lindgren To: Lee Jones Cc: linux-kernel@vger.kernel.org, linux-omap@vger.kernel.org, Florian Vaussard , Peter Ujfalusi Subject: [PATCH] mfd: twl6040: Fix device init errors for ACCCTL register Date: Mon, 11 Feb 2019 14:57:26 -0800 Message-Id: <20190211225726.38355-1-tony@atomide.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org I noticed that we can get a -EREMOTEIO errors on at least omap4 duovero: twl6040 0-004b: Failed to write 2d = 19: -121 And then any following register access will produce errors. There 2d offset above is register ACCCTL that gets written on twl6040 powerup. With error checking added to the related regcache_sync() call, the -EREMOTEIO error is reproducable on twl6040 powerup at least duovero. To fix the error, we need to wait until twl6040 is accessible after the powerup. Based on tests on omap4 duovero, we need to wait over 8ms after powerup before register write will complete without failures. Let's also make sure we warn about possible errors too. Note that we have twl6040_patch[] reg_sequence with the ACCCTL register configuration and regcache_sync() will write the new value to ACCCTL. Cc: Florian Vaussard Cc: Peter Ujfalusi Signed-off-by: Tony Lindgren --- drivers/mfd/twl6040.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/mfd/twl6040.c b/drivers/mfd/twl6040.c --- a/drivers/mfd/twl6040.c +++ b/drivers/mfd/twl6040.c @@ -322,8 +322,19 @@ int twl6040_power(struct twl6040 *twl6040, int on) } } + /* + * Register access can produce errors after power-up unless we + * wait at least 8ms based on measurements on duovero. + */ + usleep_range(10000, 12000); + /* Sync with the HW */ - regcache_sync(twl6040->regmap); + ret = regcache_sync(twl6040->regmap); + if (ret) { + dev_err(twl6040->dev, "%s register write failed: %i\n", + __func__, ret); + goto out; + } /* Default PLL configuration after power up */ twl6040->pll = TWL6040_SYSCLK_SEL_LPPLL; -- 2.20.1