mfd: madera: Allow more time for hardware reset
Both manual and power on resets have a brief period where the chip will not be accessible immediately afterwards. Extend the time allowed for this from a minimum of 1mS to 2mS based on newer evaluation of the hardware and ensure this reset happens in all reset conditions. Whilst making the change also remove the redundant NULL checks in the reset functions as the GPIO functions already check for this. Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> Signed-off-by: Lee Jones <lee.jones@linaro.org>
This commit is contained in:
Родитель
e9f4759179
Коммит
003035b3eb
|
@ -35,6 +35,9 @@
|
||||||
|
|
||||||
#define MADERA_32KZ_MCLK2 1
|
#define MADERA_32KZ_MCLK2 1
|
||||||
|
|
||||||
|
#define MADERA_RESET_MIN_US 2000
|
||||||
|
#define MADERA_RESET_MAX_US 3000
|
||||||
|
|
||||||
static const char * const madera_core_supplies[] = {
|
static const char * const madera_core_supplies[] = {
|
||||||
"AVDD",
|
"AVDD",
|
||||||
"DBVDD1",
|
"DBVDD1",
|
||||||
|
@ -256,16 +259,13 @@ static int madera_soft_reset(struct madera *madera)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allow time for internal clocks to startup after reset */
|
/* Allow time for internal clocks to startup after reset */
|
||||||
usleep_range(1000, 2000);
|
usleep_range(MADERA_RESET_MIN_US, MADERA_RESET_MAX_US);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void madera_enable_hard_reset(struct madera *madera)
|
static void madera_enable_hard_reset(struct madera *madera)
|
||||||
{
|
{
|
||||||
if (!madera->pdata.reset)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* There are many existing out-of-tree users of these codecs that we
|
* There are many existing out-of-tree users of these codecs that we
|
||||||
* can't break so preserve the expected behaviour of setting the line
|
* can't break so preserve the expected behaviour of setting the line
|
||||||
|
@ -276,11 +276,9 @@ static void madera_enable_hard_reset(struct madera *madera)
|
||||||
|
|
||||||
static void madera_disable_hard_reset(struct madera *madera)
|
static void madera_disable_hard_reset(struct madera *madera)
|
||||||
{
|
{
|
||||||
if (!madera->pdata.reset)
|
|
||||||
return;
|
|
||||||
|
|
||||||
gpiod_set_raw_value_cansleep(madera->pdata.reset, 1);
|
gpiod_set_raw_value_cansleep(madera->pdata.reset, 1);
|
||||||
usleep_range(1000, 2000);
|
|
||||||
|
usleep_range(MADERA_RESET_MIN_US, MADERA_RESET_MAX_US);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __maybe_unused madera_runtime_resume(struct device *dev)
|
static int __maybe_unused madera_runtime_resume(struct device *dev)
|
||||||
|
@ -299,6 +297,8 @@ static int __maybe_unused madera_runtime_resume(struct device *dev)
|
||||||
regcache_cache_only(madera->regmap, false);
|
regcache_cache_only(madera->regmap, false);
|
||||||
regcache_cache_only(madera->regmap_32bit, false);
|
regcache_cache_only(madera->regmap_32bit, false);
|
||||||
|
|
||||||
|
usleep_range(MADERA_RESET_MIN_US, MADERA_RESET_MAX_US);
|
||||||
|
|
||||||
ret = madera_wait_for_boot(madera);
|
ret = madera_wait_for_boot(madera);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче