Lines Matching +full:autosuspend +full:- +full:delay

1 // SPDX-License-Identifier: GPL-2.0-only
3 * mpl115.c - Support for Freescale MPL115A pressure/temperature sensor
12 #include <linux/delay.h>
37 int ret = data->ops->write(data->dev, MPL115_CONVERT, 0); in mpl115_request()
54 mutex_lock(&data->lock); in mpl115_comp_pressure()
59 ret = data->ops->read(data->dev, MPL115_PADC); in mpl115_comp_pressure()
64 ret = data->ops->read(data->dev, MPL115_TADC); in mpl115_comp_pressure()
70 a1 = data->b1 + ((data->c12 * tadc) >> 11); in mpl115_comp_pressure()
71 y1 = (data->a0 << 10) + a1 * padc; in mpl115_comp_pressure()
74 pcomp = (y1 + ((data->b2 * (int) tadc) >> 1)) >> 9; in mpl115_comp_pressure()
76 kpa = pcomp * (115 - 50) / 1023 + (50 << 4); in mpl115_comp_pressure()
80 mutex_unlock(&data->lock); in mpl115_comp_pressure()
88 mutex_lock(&data->lock); in mpl115_read_temp()
92 ret = data->ops->read(data->dev, MPL115_TADC); in mpl115_read_temp()
94 mutex_unlock(&data->lock); in mpl115_read_temp()
107 pm_runtime_get_sync(data->dev); in mpl115_read_raw()
111 pm_runtime_mark_last_busy(data->dev); in mpl115_read_raw()
112 pm_runtime_put_autosuspend(data->dev); in mpl115_read_raw()
116 pm_runtime_get_sync(data->dev); in mpl115_read_raw()
117 /* temperature -5.35 C / LSB, 472 LSB is 25 C */ in mpl115_read_raw()
121 pm_runtime_mark_last_busy(data->dev); in mpl115_read_raw()
122 pm_runtime_put_autosuspend(data->dev); in mpl115_read_raw()
127 *val = -605; in mpl115_read_raw()
131 *val = -186; in mpl115_read_raw()
135 return -EINVAL; in mpl115_read_raw()
164 return -ENOMEM; in mpl115_probe()
167 data->dev = dev; in mpl115_probe()
168 data->ops = ops; in mpl115_probe()
169 mutex_init(&data->lock); in mpl115_probe()
171 indio_dev->info = &mpl115_info; in mpl115_probe()
172 indio_dev->name = name; in mpl115_probe()
173 indio_dev->modes = INDIO_DIRECT_MODE; in mpl115_probe()
174 indio_dev->channels = mpl115_channels; in mpl115_probe()
175 indio_dev->num_channels = ARRAY_SIZE(mpl115_channels); in mpl115_probe()
177 ret = data->ops->init(data->dev); in mpl115_probe()
183 ret = data->ops->read(data->dev, MPL115_A0); in mpl115_probe()
186 data->a0 = ret; in mpl115_probe()
187 ret = data->ops->read(data->dev, MPL115_B1); in mpl115_probe()
190 data->b1 = ret; in mpl115_probe()
191 ret = data->ops->read(data->dev, MPL115_B2); in mpl115_probe()
194 data->b2 = ret; in mpl115_probe()
195 ret = data->ops->read(data->dev, MPL115_C12); in mpl115_probe()
198 data->c12 = ret; in mpl115_probe()
200 data->shutdown = devm_gpiod_get_optional(dev, "shutdown", in mpl115_probe()
202 if (IS_ERR(data->shutdown)) in mpl115_probe()
203 return dev_err_probe(dev, PTR_ERR(data->shutdown), in mpl115_probe()
206 if (data->shutdown) { in mpl115_probe()
214 * reading after power-on and 5 ms to actually power-on, in mpl115_probe()
215 * do not shut it down unnecessarily. Set autosuspend to in mpl115_probe()
222 dev_dbg(dev, "low-power mode enabled"); in mpl115_probe()
224 dev_dbg(dev, "low-power mode disabled"); in mpl115_probe()
234 gpiod_set_value(data->shutdown, 1); in mpl115_runtime_suspend()
243 gpiod_set_value(data->shutdown, 0); in mpl115_runtime_resume()