Lines Matching +full:data +full:- +full:active
1 // SPDX-License-Identifier: GPL-2.0
37 bool active; member
43 struct sirf_data *data = gnss_get_drvdata(gdev); in sirf_open() local
44 struct serdev_device *serdev = data->serdev; in sirf_open()
51 serdev_device_set_baudrate(serdev, data->speed); in sirf_open()
54 ret = pm_runtime_get_sync(&serdev->dev); in sirf_open()
56 dev_err(&gdev->dev, "failed to runtime resume: %d\n", ret); in sirf_open()
57 pm_runtime_put_noidle(&serdev->dev); in sirf_open()
71 struct sirf_data *data = gnss_get_drvdata(gdev); in sirf_close() local
72 struct serdev_device *serdev = data->serdev; in sirf_close()
76 pm_runtime_put(&serdev->dev); in sirf_close()
82 struct sirf_data *data = gnss_get_drvdata(gdev); in sirf_write_raw() local
83 struct serdev_device *serdev = data->serdev; in sirf_write_raw()
106 struct sirf_data *data = serdev_device_get_drvdata(serdev); in sirf_receive_buf() local
107 struct gnss_device *gdev = data->gdev; in sirf_receive_buf()
119 struct sirf_data *data = dev_id; in sirf_wakeup_handler() local
120 struct device *dev = &data->serdev->dev; in sirf_wakeup_handler()
123 ret = gpiod_get_value_cansleep(data->wakeup); in sirf_wakeup_handler()
124 dev_dbg(dev, "%s - wakeup = %d\n", __func__, ret); in sirf_wakeup_handler()
128 data->active = !!ret; in sirf_wakeup_handler()
129 wake_up_interruptible(&data->power_wait); in sirf_wakeup_handler()
134 static int sirf_wait_for_power_state(struct sirf_data *data, bool active, in sirf_wait_for_power_state() argument
139 ret = wait_event_interruptible_timeout(data->power_wait, in sirf_wait_for_power_state()
140 data->active == active, msecs_to_jiffies(timeout)); in sirf_wait_for_power_state()
145 dev_warn(&data->serdev->dev, "timeout waiting for active state = %d\n", in sirf_wait_for_power_state()
146 active); in sirf_wait_for_power_state()
147 return -ETIMEDOUT; in sirf_wait_for_power_state()
153 static void sirf_pulse_on_off(struct sirf_data *data) in sirf_pulse_on_off() argument
155 gpiod_set_value_cansleep(data->on_off, 1); in sirf_pulse_on_off()
157 gpiod_set_value_cansleep(data->on_off, 0); in sirf_pulse_on_off()
160 static int sirf_set_active(struct sirf_data *data, bool active) in sirf_set_active() argument
166 if (active) in sirf_set_active()
172 sirf_pulse_on_off(data); in sirf_set_active()
173 ret = sirf_wait_for_power_state(data, active, timeout); in sirf_set_active()
175 if (ret == -ETIMEDOUT) in sirf_set_active()
182 } while (retries--); in sirf_set_active()
185 return -ETIMEDOUT; in sirf_set_active()
192 struct sirf_data *data = dev_get_drvdata(dev); in sirf_runtime_suspend() local
194 if (!data->on_off) in sirf_runtime_suspend()
195 return regulator_disable(data->vcc); in sirf_runtime_suspend()
197 return sirf_set_active(data, false); in sirf_runtime_suspend()
202 struct sirf_data *data = dev_get_drvdata(dev); in sirf_runtime_resume() local
204 if (!data->on_off) in sirf_runtime_resume()
205 return regulator_enable(data->vcc); in sirf_runtime_resume()
207 return sirf_set_active(data, true); in sirf_runtime_resume()
212 struct sirf_data *data = dev_get_drvdata(dev); in sirf_suspend() local
218 if (data->wakeup) in sirf_suspend()
219 disable_irq(data->irq); in sirf_suspend()
226 struct sirf_data *data = dev_get_drvdata(dev); in sirf_resume() local
229 if (data->wakeup) in sirf_resume()
230 enable_irq(data->irq); in sirf_resume()
245 struct sirf_data *data = serdev_device_get_drvdata(serdev); in sirf_parse_dt() local
246 struct device_node *node = serdev->dev.of_node; in sirf_parse_dt()
249 of_property_read_u32(node, "current-speed", &speed); in sirf_parse_dt()
251 data->speed = speed; in sirf_parse_dt()
258 struct device *dev = &serdev->dev; in sirf_probe()
260 struct sirf_data *data; in sirf_probe() local
263 data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); in sirf_probe()
264 if (!data) in sirf_probe()
265 return -ENOMEM; in sirf_probe()
269 return -ENOMEM; in sirf_probe()
271 gdev->type = GNSS_TYPE_SIRF; in sirf_probe()
272 gdev->ops = &sirf_gnss_ops; in sirf_probe()
273 gnss_set_drvdata(gdev, data); in sirf_probe()
275 data->serdev = serdev; in sirf_probe()
276 data->gdev = gdev; in sirf_probe()
278 init_waitqueue_head(&data->power_wait); in sirf_probe()
280 serdev_device_set_drvdata(serdev, data); in sirf_probe()
287 data->vcc = devm_regulator_get(dev, "vcc"); in sirf_probe()
288 if (IS_ERR(data->vcc)) { in sirf_probe()
289 ret = PTR_ERR(data->vcc); in sirf_probe()
293 data->on_off = devm_gpiod_get_optional(dev, "sirf,onoff", in sirf_probe()
295 if (IS_ERR(data->on_off)) { in sirf_probe()
296 ret = PTR_ERR(data->on_off); in sirf_probe()
300 if (data->on_off) { in sirf_probe()
301 data->wakeup = devm_gpiod_get_optional(dev, "sirf,wakeup", in sirf_probe()
303 if (IS_ERR(data->wakeup)) { in sirf_probe()
304 ret = PTR_ERR(data->wakeup); in sirf_probe()
312 if (!data->wakeup) { in sirf_probe()
314 ret = -ENODEV; in sirf_probe()
318 ret = regulator_enable(data->vcc); in sirf_probe()
326 if (data->wakeup) { in sirf_probe()
327 ret = gpiod_to_irq(data->wakeup); in sirf_probe()
330 data->irq = ret; in sirf_probe()
332 ret = request_threaded_irq(data->irq, NULL, sirf_wakeup_handler, in sirf_probe()
334 "wakeup", data); in sirf_probe()
360 if (data->wakeup) in sirf_probe()
361 free_irq(data->irq, data); in sirf_probe()
363 if (data->on_off) in sirf_probe()
364 regulator_disable(data->vcc); in sirf_probe()
366 gnss_put_device(data->gdev); in sirf_probe()
373 struct sirf_data *data = serdev_device_get_drvdata(serdev); in sirf_remove() local
375 gnss_deregister_device(data->gdev); in sirf_remove()
378 pm_runtime_disable(&serdev->dev); in sirf_remove()
380 sirf_runtime_suspend(&serdev->dev); in sirf_remove()
382 if (data->wakeup) in sirf_remove()
383 free_irq(data->irq, data); in sirf_remove()
385 if (data->on_off) in sirf_remove()
386 regulator_disable(data->vcc); in sirf_remove()
388 gnss_put_device(data->gdev); in sirf_remove()
404 .name = "gnss-sirf",