Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 64a67d47 authored by Martin Fuzzey's avatar Martin Fuzzey Committed by Ulf Hansson
Browse files

mmc: pwrseq_simple: Make reset-gpios optional to match doc



The DT binding doc says reset-gpios is an optional property but the code
currently bails out if it is omitted.

This is a regression since it breaks previously working device trees.
Fix it by restoring the original documented behaviour.

Fixes: ce037275 ("mmc: pwrseq_simple: use GPIO descriptors array API")
Tested-by: default avatarTony Lindgren <tony@atomide.com>
Signed-off-by: default avatarMartin Fuzzey <mfuzzey@parkeon.com>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 07cbeea5
Loading
Loading
Loading
Loading
+14 −8
Original line number Original line Diff line number Diff line
@@ -29,15 +29,18 @@ struct mmc_pwrseq_simple {
static void mmc_pwrseq_simple_set_gpios_value(struct mmc_pwrseq_simple *pwrseq,
static void mmc_pwrseq_simple_set_gpios_value(struct mmc_pwrseq_simple *pwrseq,
					      int value)
					      int value)
{
{
	int i;
	struct gpio_descs *reset_gpios = pwrseq->reset_gpios;
	struct gpio_descs *reset_gpios = pwrseq->reset_gpios;

	if (!IS_ERR(reset_gpios)) {
		int i;
		int values[reset_gpios->ndescs];
		int values[reset_gpios->ndescs];


		for (i = 0; i < reset_gpios->ndescs; i++)
		for (i = 0; i < reset_gpios->ndescs; i++)
			values[i] = value;
			values[i] = value;


	gpiod_set_array_value_cansleep(reset_gpios->ndescs, reset_gpios->desc,
		gpiod_set_array_value_cansleep(
				       values);
			reset_gpios->ndescs, reset_gpios->desc, values);
	}
}
}


static void mmc_pwrseq_simple_pre_power_on(struct mmc_host *host)
static void mmc_pwrseq_simple_pre_power_on(struct mmc_host *host)
@@ -79,6 +82,7 @@ static void mmc_pwrseq_simple_free(struct mmc_host *host)
	struct mmc_pwrseq_simple *pwrseq = container_of(host->pwrseq,
	struct mmc_pwrseq_simple *pwrseq = container_of(host->pwrseq,
					struct mmc_pwrseq_simple, pwrseq);
					struct mmc_pwrseq_simple, pwrseq);


	if (!IS_ERR(pwrseq->reset_gpios))
		gpiod_put_array(pwrseq->reset_gpios);
		gpiod_put_array(pwrseq->reset_gpios);


	if (!IS_ERR(pwrseq->ext_clk))
	if (!IS_ERR(pwrseq->ext_clk))
@@ -112,7 +116,9 @@ struct mmc_pwrseq *mmc_pwrseq_simple_alloc(struct mmc_host *host,
	}
	}


	pwrseq->reset_gpios = gpiod_get_array(dev, "reset", GPIOD_OUT_HIGH);
	pwrseq->reset_gpios = gpiod_get_array(dev, "reset", GPIOD_OUT_HIGH);
	if (IS_ERR(pwrseq->reset_gpios)) {
	if (IS_ERR(pwrseq->reset_gpios) &&
	    PTR_ERR(pwrseq->reset_gpios) != -ENOENT &&
	    PTR_ERR(pwrseq->reset_gpios) != -ENOSYS) {
		ret = PTR_ERR(pwrseq->reset_gpios);
		ret = PTR_ERR(pwrseq->reset_gpios);
		goto clk_put;
		goto clk_put;
	}
	}