From 6896ea4fc28945e3496d00915f2cd8125d553f7e Mon Sep 17 00:00:00 2001 From: Ravi Vembu Date: Thu, 12 Jul 2018 14:34:04 -0500 Subject: [PATCH] madera: Add boot delay for Moon Moon also requires a delay before reading the boot done bit and clearing the boot done interrupt. Otherwise the interrupt line gets pulled low forever. Change-Id: Ie4fbdd36d13e5ac2c75bf2171fbd44690773c1f4 Signed-off-by: Ravi Vembu Mot-CRs-Fixed: (CR) Change-Id: Ie4fbdd36d13e5ac2c75bf2171fbd44690773c1f4 Reviewed-on: https://gerrit.mot.com/1209117 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Rav(CR) Vembu Submit-Approved: Jira Key --- drivers/mfd/madera-core.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/drivers/mfd/madera-core.c b/drivers/mfd/madera-core.c index 26a5a1f4f7c0..9773e8bd72d0 100644 --- a/drivers/mfd/madera-core.c +++ b/drivers/mfd/madera-core.c @@ -227,21 +227,19 @@ static int madera_wait_for_boot(struct madera *madera) unsigned int val; /* ensure chid can read correctly, then check boot done bit */ - if (madera->type == CS47L35) { - for (i = 0; i < timeout; i++) { - ret = regmap_read(madera->regmap, MADERA_SOFTWARE_RESET, &val); - if (ret != 0) { - dev_err(madera->dev, "Failed to read chip id, ret %d\n", ret); - continue; - } - if (val == CS47L35_SILICON_ID) - break; - - usleep_range(1000, 1010); + for (i = 0; i < timeout; i++) { + ret = regmap_read(madera->regmap, MADERA_SOFTWARE_RESET, &val); + if (ret != 0) { + dev_err(madera->dev, "Failed to read chip id, ret %d\n", ret); + continue; } - if (i >= timeout) - return -ETIMEDOUT; + if (val == CS47L35_SILICON_ID || val == CS47L90_SILICON_ID) + break; + + usleep_range(1000, 1010); } + if (i >= timeout) + return -ETIMEDOUT; /* * We can't use an interrupt as we need to runtime resume to do so, * we won't race with the interrupt handler as it'll be blocked on