in clients/pps-gpio.c [102:139]
static int pps_gpio_setup(struct device *dev)
{
struct pps_gpio_device_data *data = dev_get_drvdata(dev);
int ret;
u32 value;
data->gpio_pin = devm_gpiod_get(dev, NULL, GPIOD_IN);
if (IS_ERR(data->gpio_pin))
return dev_err_probe(dev, PTR_ERR(data->gpio_pin),
"failed to request PPS GPIO\n");
data->assert_falling_edge =
device_property_read_bool(dev, "assert-falling-edge");
data->echo_pin = devm_gpiod_get_optional(dev, "echo", GPIOD_OUT_LOW);
if (IS_ERR(data->echo_pin))
return dev_err_probe(dev, PTR_ERR(data->echo_pin),
"failed to request ECHO GPIO\n");
if (!data->echo_pin)
return 0;
ret = device_property_read_u32(dev, "echo-active-ms", &value);
if (ret) {
dev_err(dev, "failed to get echo-active-ms from FW\n");
return ret;
}
/* sanity check on echo_active_ms */
if (!value || value > 999) {
dev_err(dev, "echo-active-ms: %u - bad value from FW\n", value);
return -EINVAL;
}
data->echo_active_ms = value;
return 0;
}