Lines Matching refs:data
78 struct ping_data *data = iio_priv(indio_dev);
81 if (gpiod_get_value(data->gpiod_ping)) {
82 data->ts_rising = now;
83 complete(&data->rising);
85 data->ts_falling = now;
86 complete(&data->falling);
94 struct ping_data *data = iio_priv(indio_dev);
99 struct platform_device *pdev = to_platform_device(data->dev);
105 mutex_lock(&data->lock);
107 reinit_completion(&data->rising);
108 reinit_completion(&data->falling);
110 gpiod_set_value(data->gpiod_ping, 1);
111 udelay(data->cfg->trigger_pulse_us);
112 gpiod_set_value(data->gpiod_ping, 0);
114 ret = gpiod_direction_input(data->gpiod_ping);
116 mutex_unlock(&data->lock);
120 data->irqnr = gpiod_to_irq(data->gpiod_ping);
121 if (data->irqnr < 0) {
122 dev_err(data->dev, "gpiod_to_irq: %d\n", data->irqnr);
123 mutex_unlock(&data->lock);
124 return data->irqnr;
127 ret = request_irq(data->irqnr, ping_handle_irq,
131 dev_err(data->dev, "request_irq: %d\n", ret);
132 mutex_unlock(&data->lock);
137 ret = wait_for_completion_killable_timeout(&data->rising, HZ/50);
146 ret = wait_for_completion_killable_timeout(&data->falling, HZ/20);
154 ktime_dt = ktime_sub(data->ts_falling, data->ts_rising);
156 free_irq(data->irqnr, indio_dev);
158 ret = gpiod_direction_output(data->gpiod_ping, GPIOD_OUT_LOW);
160 mutex_unlock(&data->lock);
164 mutex_unlock(&data->lock);
167 if (dt_ns > data->cfg->timeout_ns) {
168 dev_dbg(data->dev, "distance out of range: dt=%lldns\n",
179 if (data->cfg->laserping_error) {
181 dev_dbg(data->dev, "target too close or to far\n");
185 dev_dbg(data->dev, "internal sensor error\n");
189 dev_dbg(data->dev, "internal sensor timeout\n");
219 free_irq(data->irqnr, indio_dev);
220 mutex_unlock(&data->lock);
222 if (gpiod_direction_output(data->gpiod_ping, GPIOD_OUT_LOW))
223 dev_dbg(data->dev, "error in gpiod_direction_output\n");
270 { .compatible = "parallax,ping", .data = &pa_ping_cfg},
271 { .compatible = "parallax,laserping", .data = &pa_laser_ping_cfg},
280 struct ping_data *data;
289 data = iio_priv(indio_dev);
290 data->dev = dev;
291 data->cfg = of_device_get_match_data(dev);
293 mutex_init(&data->lock);
294 init_completion(&data->rising);
295 init_completion(&data->falling);
297 data->gpiod_ping = devm_gpiod_get(dev, "ping", GPIOD_OUT_LOW);
298 if (IS_ERR(data->gpiod_ping)) {
300 PTR_ERR(data->gpiod_ping));
301 return PTR_ERR(data->gpiod_ping);
304 if (gpiod_cansleep(data->gpiod_ping)) {
305 dev_err(data->dev, "cansleep-GPIOs not supported\n");