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

Commit bc05ab3b authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "spi: spi-msm-geni: Protect from register access in suspend state"

parents 8a66a0b1 eb759fe6
Loading
Loading
Loading
Loading
+27 −18
Original line number Diff line number Diff line
@@ -786,6 +786,25 @@ static int spi_geni_prepare_message(struct spi_master *spi,
		}
	}

	if (pm_runtime_status_suspended(mas->dev)) {
		if (!pm_runtime_enabled(mas->dev)) {
			GENI_SE_ERR(mas->ipc, false, NULL,
				"%s: System suspended\n", __func__);
			return -EACCES;
		}

		ret = pm_runtime_get_sync(mas->dev);
		if (ret < 0) {
			dev_err(mas->dev,
			"%s:pm_runtime_get_sync failed %d\n", __func__, ret);
			WARN_ON_ONCE(1);
			pm_runtime_put_noidle(mas->dev);
			/* Set device in suspended since resume failed */
			pm_runtime_set_suspended(mas->dev);
			return ret;
		}
	}

	mas->cur_xfer_mode = select_xfer_mode(spi, spi_msg);

	if (mas->cur_xfer_mode < 0) {
@@ -1877,27 +1896,17 @@ static int spi_geni_resume(struct device *dev)
static int spi_geni_suspend(struct device *dev)
{
	int ret = 0;

	if (!pm_runtime_status_suspended(dev)) {
	struct spi_master *spi = get_spi_master(dev);
	struct spi_geni_master *geni_mas = spi_master_get_devdata(spi);

		if (list_empty(&spi->queue) && !spi->cur_msg) {
			GENI_SE_ERR(geni_mas->ipc, true, dev,
					"%s: Force suspend", __func__);
			ret = spi_geni_runtime_suspend(dev);
			if (ret) {
	if (!pm_runtime_status_suspended(dev)) {
		GENI_SE_ERR(geni_mas->ipc, true, dev,
					"Force suspend Failed:%d", ret);
			} else {
				pm_runtime_disable(dev);
				pm_runtime_set_suspended(dev);
				pm_runtime_enable(dev);
			}
		} else {
			":%s: runtime PM is active\n", __func__);
		ret = -EBUSY;
		return ret;
	}
	}

	GENI_SE_ERR(geni_mas->ipc, true, dev, ":%s: End\n", __func__);
	return ret;
}
#else