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

Commit 60d3e3bb authored by NeilBrown's avatar NeilBrown Committed by Jonathan Cameron
Browse files

iio: gyro: itg3200: add suspend/resume support.



Unless we put the device to sleep when not it use, it wastes
6mA.

If the device is asleep on probe, the 'id' register
sometimes mis-reads - so reset first.  If the device responds
at all a command sent to the address, it is almost certainly
the correct device already.

Acked-by: default avatarManuel Stahl <manuel.stahl@iis.fraunhofer.de>
Acked-by: default avatarHartmut Knaack <knaack.h@gmx.de>
Signed-off-by: default avatarNeilBrown <neil@brown.name>
Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
parent d1bd4867
Loading
Loading
Loading
Loading
+25 −4
Original line number Diff line number Diff line
@@ -223,6 +223,10 @@ static int itg3200_initial_setup(struct iio_dev *indio_dev)
	int ret;
	u8 val;

	ret = itg3200_reset(indio_dev);
	if (ret)
		goto err_ret;

	ret = itg3200_read_reg_8(indio_dev, ITG3200_REG_ADDRESS, &val);
	if (ret)
		goto err_ret;
@@ -233,10 +237,6 @@ static int itg3200_initial_setup(struct iio_dev *indio_dev)
		goto err_ret;
	}

	ret = itg3200_reset(indio_dev);
	if (ret)
		goto err_ret;

	ret = itg3200_enable_full_scale(indio_dev);
err_ret:
	return ret;
@@ -351,6 +351,26 @@ static int itg3200_remove(struct i2c_client *client)
	return 0;
}

static int __maybe_unused itg3200_suspend(struct device *dev)
{
	struct iio_dev *indio_dev = dev_get_drvdata(dev);
	struct itg3200 *st = iio_priv(indio_dev);

	dev_dbg(&st->i2c->dev, "suspend device");

	return itg3200_write_reg_8(indio_dev, ITG3200_REG_POWER_MANAGEMENT,
				   ITG3200_SLEEP);
}

static int __maybe_unused itg3200_resume(struct device *dev)
{
	struct iio_dev *indio_dev = dev_get_drvdata(dev);

	return itg3200_initial_setup(indio_dev);
}

static SIMPLE_DEV_PM_OPS(itg3200_pm_ops, itg3200_suspend, itg3200_resume);

static const struct i2c_device_id itg3200_id[] = {
	{ "itg3200", 0 },
	{ }
@@ -361,6 +381,7 @@ static struct i2c_driver itg3200_driver = {
	.driver = {
		.owner  = THIS_MODULE,
		.name	= "itg3200",
		.pm	= &itg3200_pm_ops,
	},
	.id_table	= itg3200_id,
	.probe		= itg3200_probe,