Lines Matching refs:data
50 * * pmin - minimum pressure range value of sensor (data->pmin)
51 * * pmax - maximum pressure range value of sensor (data->pmax)
120 * loop until data is ready
146 static void mpr_reset(struct mpr_data *data)
148 if (data->gpiod_reset) {
149 gpiod_set_value(data->gpiod_reset, 0);
151 gpiod_set_value(data->gpiod_reset, 1);
157 * @data: Pointer to private data struct.
165 * Context: The function can sleep and data->lock should be held when calling it
171 static int mpr_read_pressure(struct mpr_data *data, s32 *press)
173 struct device *dev = &data->client->dev;
180 reinit_completion(&data->completion);
182 ret = i2c_master_send(data->client, wdata, sizeof(wdata));
193 if (data->irq > 0) {
194 ret = wait_for_completion_timeout(&data->completion, HZ);
200 /* wait until status indicates data is ready */
204 * data but leave the maximum response time open
209 status = i2c_smbus_read_byte(data->client);
225 ret = i2c_master_recv(data->client, buf, sizeof(buf));
241 dev_err(dev, "data still not ready: %08x\n", buf[0]);
254 struct mpr_data *data = p;
256 complete(&data->completion);
266 struct mpr_data *data = iio_priv(indio_dev);
268 mutex_lock(&data->lock);
269 ret = mpr_read_pressure(data, &data->chan.pres);
273 iio_push_to_buffers_with_timestamp(indio_dev, &data->chan,
277 mutex_unlock(&data->lock);
288 struct mpr_data *data = iio_priv(indio_dev);
295 mutex_lock(&data->lock);
296 ret = mpr_read_pressure(data, &pressure);
297 mutex_unlock(&data->lock);
303 *val = data->scale;
304 *val2 = data->scale2;
307 *val = data->offset;
308 *val2 = data->offset2;
322 struct mpr_data *data;
332 indio_dev = devm_iio_device_alloc(dev, sizeof(*data));
336 data = iio_priv(indio_dev);
337 data->client = client;
338 data->irq = client->irq;
340 mutex_init(&data->lock);
341 init_completion(&data->completion);
356 &data->pmin);
361 &data->pmax);
370 data->function = func - 1;
371 if (data->function > MPR_FUNCTION_C)
374 data->function);
378 data->pmin = 0;
379 data->pmax = 172369; /* 25 psi */
380 data->function = MPR_FUNCTION_A;
383 data->outmin = mpr_func_spec[data->function].output_min;
384 data->outmax = mpr_func_spec[data->function].output_max;
387 scale = div_s64(((s64)(data->pmax - data->pmin)) * NANO,
388 data->outmax - data->outmin);
389 data->scale = div_s64_rem(scale, NANO, &data->scale2);
394 offset = ((-1LL) * (s64)data->outmin) * NANO -
395 div_s64(div_s64((s64)data->pmin * NANO, scale), NANO);
396 data->offset = div_s64_rem(offset, NANO, &data->offset2);
398 if (data->irq > 0) {
399 ret = devm_request_irq(dev, data->irq, mpr_eoc_handler,
400 IRQF_TRIGGER_RISING, client->name, data);
403 "request irq %d failed\n", data->irq);
406 data->gpiod_reset = devm_gpiod_get_optional(dev, "reset",
408 if (IS_ERR(data->gpiod_reset))
409 return dev_err_probe(dev, PTR_ERR(data->gpiod_reset),
412 mpr_reset(data);