79 lines
1.5 KiB
C
79 lines
1.5 KiB
C
/** @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 <zephyr/types.h>
|
|
#include <device.h>
|
|
#include <drivers/gpio.h>
|
|
|
|
#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;
|
|
}
|