/** @file * @brief Modem pin setup for modem context driver * * GPIO-based pin handling for the modem context driver */ /* * Copyright (c) 2019 Foundries.io * * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #include "modem_context.h" int modem_pin_read(struct modem_context *ctx, u32_t pin) { int ret = 0; u32_t value = 0; if (pin < 0 || pin >= ctx->pins_len) { return -ENODEV; } ret = gpio_pin_read(ctx->pins[pin].gpio_port_dev, ctx->pins[pin].pin, &value); if (ret < 0) { return ret; } return (int)value; } int modem_pin_write(struct modem_context *ctx, u32_t pin, u32_t value) { if (pin < 0 || pin >= ctx->pins_len) { return -ENODEV; } return gpio_pin_write(ctx->pins[pin].gpio_port_dev, ctx->pins[pin].pin, value); } int modem_pin_config(struct modem_context *ctx, u32_t pin, int flags) { if (pin < 0 || pin >= ctx->pins_len) { return -ENODEV; } return gpio_pin_configure(ctx->pins[pin].gpio_port_dev, ctx->pins[pin].pin, flags); } int modem_pin_init(struct modem_context *ctx) { int i, ret; /* setup port devices and pin directions */ for (i = 0; i < ctx->pins_len; i++) { ctx->pins[i].gpio_port_dev = device_get_binding(ctx->pins[i].dev_name); if (!ctx->pins[i].gpio_port_dev) { return -ENODEV; } ret = gpio_pin_configure(ctx->pins[i].gpio_port_dev, ctx->pins[i].pin, ctx->pins[i].init_flags); if (ret < 0) { return ret; } } return 0; }