bool requested;
struct gpiod_chip *chip;
struct gpioline_info info;
- struct gpiohandle_request req;
+ struct gpiohandle_request *req;
};
unsigned int gpiod_line_offset(struct gpiod_line *line)
struct gpiod_chip *chip;
int status, fd;
- req = &line->req;
+ req = zalloc(sizeof(*req));
+ if (!req)
+ return -1;
+
+ line->req = req;
memset(req, 0, sizeof(*req));
if (flags & GPIOD_REQUEST_ACTIVE_LOW)
void gpiod_line_release(struct gpiod_line *line)
{
- close(line->req.fd);
+ close(line->req->fd);
+ free(line->req);
line->requested = false;
}
memset(&data, 0, sizeof(data));
- status = gpio_ioctl(line->req.fd,
+ status = gpio_ioctl(line->req->fd,
GPIOHANDLE_GET_LINE_VALUES_IOCTL, &data);
if (status < 0)
return -1;
memset(&data, 0, sizeof(data));
data.values[0] = value ? 1 : 0;
- status = gpio_ioctl(line->req.fd,
+ status = gpio_ioctl(line->req->fd,
GPIOHANDLE_SET_LINE_VALUES_IOCTL, &data);
if (status < 0)
return -1;