Lines Matching refs:data

110 	union i2c_smbus_data data;  in mlx90614_write_word()  local
115 data.word = 0x0000; /* erase command */ in mlx90614_write_word()
119 I2C_SMBUS_WORD_DATA, &data); in mlx90614_write_word()
125 data.word = value; /* actual write */ in mlx90614_write_word()
129 I2C_SMBUS_WORD_DATA, &data); in mlx90614_write_word()
180 static int mlx90614_power_get(struct mlx90614_data *data, bool startup) in mlx90614_power_get() argument
184 if (!data->wakeup_gpio) in mlx90614_power_get()
187 pm_runtime_get_sync(&data->client->dev); in mlx90614_power_get()
191 if (time_before(now, data->ready_timestamp) && in mlx90614_power_get()
193 data->ready_timestamp - now)) != 0) { in mlx90614_power_get()
194 pm_runtime_put_autosuspend(&data->client->dev); in mlx90614_power_get()
202 static void mlx90614_power_put(struct mlx90614_data *data) in mlx90614_power_put() argument
204 if (!data->wakeup_gpio) in mlx90614_power_put()
207 pm_runtime_mark_last_busy(&data->client->dev); in mlx90614_power_put()
208 pm_runtime_put_autosuspend(&data->client->dev); in mlx90614_power_put()
211 static inline int mlx90614_power_get(struct mlx90614_data *data, bool startup) in mlx90614_power_get() argument
216 static inline void mlx90614_power_put(struct mlx90614_data *data) in mlx90614_power_put() argument
225 struct mlx90614_data *data = iio_priv(indio_dev); in mlx90614_read_raw() local
251 ret = mlx90614_power_get(data, true); in mlx90614_read_raw()
254 ret = i2c_smbus_read_word_data(data->client, cmd); in mlx90614_read_raw()
255 mlx90614_power_put(data); in mlx90614_read_raw()
274 mlx90614_power_get(data, false); in mlx90614_read_raw()
275 mutex_lock(&data->lock); in mlx90614_read_raw()
276 ret = i2c_smbus_read_word_data(data->client, in mlx90614_read_raw()
278 mutex_unlock(&data->lock); in mlx90614_read_raw()
279 mlx90614_power_put(data); in mlx90614_read_raw()
294 mlx90614_power_get(data, false); in mlx90614_read_raw()
295 mutex_lock(&data->lock); in mlx90614_read_raw()
296 ret = i2c_smbus_read_word_data(data->client, MLX90614_CONFIG); in mlx90614_read_raw()
297 mutex_unlock(&data->lock); in mlx90614_read_raw()
298 mlx90614_power_put(data); in mlx90614_read_raw()
316 struct mlx90614_data *data = iio_priv(indio_dev); in mlx90614_write_raw() local
326 mlx90614_power_get(data, false); in mlx90614_write_raw()
327 mutex_lock(&data->lock); in mlx90614_write_raw()
328 ret = mlx90614_write_word(data->client, MLX90614_EMISSIVITY, in mlx90614_write_raw()
330 mutex_unlock(&data->lock); in mlx90614_write_raw()
331 mlx90614_power_put(data); in mlx90614_write_raw()
338 mlx90614_power_get(data, false); in mlx90614_write_raw()
339 mutex_lock(&data->lock); in mlx90614_write_raw()
340 ret = mlx90614_iir_search(data->client, in mlx90614_write_raw()
342 mutex_unlock(&data->lock); in mlx90614_write_raw()
343 mlx90614_power_put(data); in mlx90614_write_raw()
407 static int mlx90614_sleep(struct mlx90614_data *data) in mlx90614_sleep() argument
411 if (!data->wakeup_gpio) { in mlx90614_sleep()
412 dev_dbg(&data->client->dev, "Sleep disabled"); in mlx90614_sleep()
416 dev_dbg(&data->client->dev, "Requesting sleep"); in mlx90614_sleep()
418 mutex_lock(&data->lock); in mlx90614_sleep()
419 ret = i2c_smbus_xfer(data->client->adapter, data->client->addr, in mlx90614_sleep()
420 data->client->flags | I2C_CLIENT_PEC, in mlx90614_sleep()
423 mutex_unlock(&data->lock); in mlx90614_sleep()
428 static int mlx90614_wakeup(struct mlx90614_data *data) in mlx90614_wakeup() argument
430 if (!data->wakeup_gpio) { in mlx90614_wakeup()
431 dev_dbg(&data->client->dev, "Wake-up disabled"); in mlx90614_wakeup()
435 dev_dbg(&data->client->dev, "Requesting wake-up"); in mlx90614_wakeup()
437 i2c_lock_adapter(data->client->adapter); in mlx90614_wakeup()
438 gpiod_direction_output(data->wakeup_gpio, 0); in mlx90614_wakeup()
440 gpiod_direction_input(data->wakeup_gpio); in mlx90614_wakeup()
441 i2c_unlock_adapter(data->client->adapter); in mlx90614_wakeup()
443 data->ready_timestamp = jiffies + in mlx90614_wakeup()
452 i2c_smbus_read_word_data(data->client, MLX90614_CONFIG); in mlx90614_wakeup()
484 static inline int mlx90614_sleep(struct mlx90614_data *data) in mlx90614_sleep() argument
488 static inline int mlx90614_wakeup(struct mlx90614_data *data) in mlx90614_wakeup() argument
515 struct mlx90614_data *data; in mlx90614_probe() local
521 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); in mlx90614_probe()
525 data = iio_priv(indio_dev); in mlx90614_probe()
527 data->client = client; in mlx90614_probe()
528 mutex_init(&data->lock); in mlx90614_probe()
529 data->wakeup_gpio = mlx90614_probe_wakeup(client); in mlx90614_probe()
531 mlx90614_wakeup(data); in mlx90614_probe()
554 if (data->wakeup_gpio) { in mlx90614_probe()
568 struct mlx90614_data *data = iio_priv(indio_dev); in mlx90614_remove() local
572 if (data->wakeup_gpio) { in mlx90614_remove()
575 mlx90614_sleep(data); in mlx90614_remove()
592 struct mlx90614_data *data = iio_priv(indio_dev); in mlx90614_pm_suspend() local
594 if (data->wakeup_gpio && pm_runtime_active(dev)) in mlx90614_pm_suspend()
595 return mlx90614_sleep(data); in mlx90614_pm_suspend()
603 struct mlx90614_data *data = iio_priv(indio_dev); in mlx90614_pm_resume() local
606 if (data->wakeup_gpio) { in mlx90614_pm_resume()
607 err = mlx90614_wakeup(data); in mlx90614_pm_resume()
624 struct mlx90614_data *data = iio_priv(indio_dev); in mlx90614_pm_runtime_suspend() local
626 return mlx90614_sleep(data); in mlx90614_pm_runtime_suspend()
632 struct mlx90614_data *data = iio_priv(indio_dev); in mlx90614_pm_runtime_resume() local
634 return mlx90614_wakeup(data); in mlx90614_pm_runtime_resume()