Lines Matching refs:data
77 struct ping_data *data = iio_priv(indio_dev);
80 if (gpiod_get_value(data->gpiod_ping)) {
81 data->ts_rising = now;
82 complete(&data->rising);
84 data->ts_falling = now;
85 complete(&data->falling);
93 struct ping_data *data = iio_priv(indio_dev);
98 struct platform_device *pdev = to_platform_device(data->dev);
104 mutex_lock(&data->lock);
106 reinit_completion(&data->rising);
107 reinit_completion(&data->falling);
109 gpiod_set_value(data->gpiod_ping, 1);
110 udelay(data->cfg->trigger_pulse_us);
111 gpiod_set_value(data->gpiod_ping, 0);
113 ret = gpiod_direction_input(data->gpiod_ping);
115 mutex_unlock(&data->lock);
119 data->irqnr = gpiod_to_irq(data->gpiod_ping);
120 if (data->irqnr < 0) {
121 dev_err(data->dev, "gpiod_to_irq: %d\n", data->irqnr);
122 mutex_unlock(&data->lock);
123 return data->irqnr;
126 ret = request_irq(data->irqnr, ping_handle_irq,
130 dev_err(data->dev, "request_irq: %d\n", ret);
131 mutex_unlock(&data->lock);
136 ret = wait_for_completion_killable_timeout(&data->rising, HZ/50);
145 ret = wait_for_completion_killable_timeout(&data->falling, HZ/20);
153 ktime_dt = ktime_sub(data->ts_falling, data->ts_rising);
155 free_irq(data->irqnr, indio_dev);
157 ret = gpiod_direction_output(data->gpiod_ping, GPIOD_OUT_LOW);
159 mutex_unlock(&data->lock);
163 mutex_unlock(&data->lock);
166 if (dt_ns > data->cfg->timeout_ns) {
167 dev_dbg(data->dev, "distance out of range: dt=%lldns\n",
178 if (data->cfg->laserping_error) {
180 dev_dbg(data->dev, "target too close or to far\n");
184 dev_dbg(data->dev, "internal sensor error\n");
188 dev_dbg(data->dev, "internal sensor timeout\n");
218 free_irq(data->irqnr, indio_dev);
219 mutex_unlock(&data->lock);
221 if (gpiod_direction_output(data->gpiod_ping, GPIOD_OUT_LOW))
222 dev_dbg(data->dev, "error in gpiod_direction_output\n");
269 { .compatible = "parallax,ping", .data = &pa_ping_cfg },
270 { .compatible = "parallax,laserping", .data = &pa_laser_ping_cfg },
279 struct ping_data *data;
288 data = iio_priv(indio_dev);
289 data->dev = dev;
290 data->cfg = device_get_match_data(dev);
292 mutex_init(&data->lock);
293 init_completion(&data->rising);
294 init_completion(&data->falling);
296 data->gpiod_ping = devm_gpiod_get(dev, "ping", GPIOD_OUT_LOW);
297 if (IS_ERR(data->gpiod_ping)) {
299 PTR_ERR(data->gpiod_ping));
300 return PTR_ERR(data->gpiod_ping);
303 if (gpiod_cansleep(data->gpiod_ping)) {
304 dev_err(data->dev, "cansleep-GPIOs not supported\n");