static bool line_bulk_is_requested(struct gpiod_line_bulk *bulk)
{
- unsigned int i;
+ struct gpiod_line *line, **lineptr;
- for (i = 0; i < bulk->num_lines; i++) {
- if (!gpiod_line_is_requested(bulk->lines[i]))
+ gpiod_line_bulk_foreach_line(bulk, line, lineptr) {
+ if (!gpiod_line_is_requested(line))
return false;
}
static bool verify_line_bulk(struct gpiod_line_bulk *bulk)
{
- struct gpiod_line *line;
+ struct gpiod_line *line, **lineptr;
struct gpiod_chip *chip;
- unsigned int i;
-
- chip = gpiod_line_get_chip(bulk->lines[0]);
+ int i;
- for (i = 0; i < bulk->num_lines; i++) {
- line = bulk->lines[i];
+ chip = gpiod_line_get_chip(gpiod_line_bulk_get_line(bulk, 0));
- if (i > 0 && chip != gpiod_line_get_chip(line)) {
+ i = 0;
+ gpiod_line_bulk_foreach_line(bulk, line, lineptr) {
+ if (i++ > 0 && chip != gpiod_line_get_chip(line)) {
errno = EINVAL;
return false;
}
const struct gpiod_line_request_config *config,
const int *default_vals)
{
+ struct gpiod_line *line, **lineptr;
struct gpiohandle_request *req;
struct handle_data *handle;
- struct gpiod_line *line;
unsigned int i;
int rv, fd;
else if (config->request_type == GPIOD_LINE_REQUEST_DIRECTION_OUTPUT)
req->flags |= GPIOHANDLE_REQUEST_OUTPUT;
- req->lines = bulk->num_lines;
+ req->lines = gpiod_line_bulk_num_lines(bulk);
- for (i = 0; i < bulk->num_lines; i++) {
- req->lineoffsets[i] = gpiod_line_offset(bulk->lines[i]);
+ for (i = 0; i < gpiod_line_bulk_num_lines(bulk); i++) {
+ line = gpiod_line_bulk_get_line(bulk, i);
+ req->lineoffsets[i] = gpiod_line_offset(line);
if (config->request_type == GPIOD_LINE_REQUEST_DIRECTION_OUTPUT)
req->default_values[i] = !!default_vals[i];
}
strncpy(req->consumer_label, config->consumer,
sizeof(req->consumer_label) - 1);
- fd = bulk->lines[0]->chip->fd;
+ line = gpiod_line_bulk_get_line(bulk, 0);
+ fd = line->chip->fd;
rv = ioctl(fd, GPIO_GET_LINEHANDLE_IOCTL, req);
if (rv < 0)
return -1;
- for (i = 0; i < bulk->num_lines; i++) {
- line = bulk->lines[i];
-
+ gpiod_line_bulk_foreach_line(bulk, line, lineptr) {
line_set_handle(line, handle);
line_set_state(line, LINE_REQUESTED_VALUES);
line_maybe_update(line);
static int line_request_events(struct gpiod_line_bulk *bulk,
const struct gpiod_line_request_config *config)
{
+ struct gpiod_line *line, **lineptr;
unsigned int i, j;
int rv;
- for (i = 0; i < bulk->num_lines; i++) {
- rv = line_request_event_single(bulk->lines[i], config);
+ i = 0;
+ gpiod_line_bulk_foreach_line(bulk, line, lineptr) {
+ rv = line_request_event_single(line, config);
if (rv) {
- for (j = i - 1; i > 0; i--)
- gpiod_line_release(bulk->lines[j]);
+ for (j = i - 1; i > 0; i--) {
+ line = gpiod_line_bulk_get_line(bulk, j);
+ gpiod_line_release(line);
+ }
return -1;
}
+
+ i++;
}
return 0;
void gpiod_line_release_bulk(struct gpiod_line_bulk *bulk)
{
- struct gpiod_line *line;
- unsigned int i;
-
- for (i = 0; i < bulk->num_lines; i++) {
- line = bulk->lines[i];
+ struct gpiod_line *line, **lineptr;
+ gpiod_line_bulk_foreach_line(bulk, line, lineptr) {
if (line_get_state(line) == LINE_REQUESTED_VALUES)
line_remove_handle(line);
else if (line_get_state(line) == LINE_REQUESTED_EVENTS)
unsigned int i;
int status, fd;
- first = bulk->lines[0];
+ first = gpiod_line_bulk_get_line(bulk, 0);
if (!line_bulk_is_requested(bulk)) {
errno = EPERM;
if (status < 0)
return -1;
- for (i = 0; i < bulk->num_lines; i++)
+ for (i = 0; i < gpiod_line_bulk_num_lines(bulk); i++)
values[i] = data.values[i];
return 0;
int gpiod_line_set_value_bulk(struct gpiod_line_bulk *bulk, int *values)
{
struct gpiohandle_data data;
+ struct gpiod_line *line;
unsigned int i;
int status;
memset(&data, 0, sizeof(data));
- for (i = 0; i < bulk->num_lines; i++)
+ for (i = 0; i < gpiod_line_bulk_num_lines(bulk); i++)
data.values[i] = (uint8_t)!!values[i];
- status = ioctl(line_get_handle_fd(bulk->lines[0]),
+ line = gpiod_line_bulk_get_line(bulk, 0);
+ status = ioctl(line_get_handle_fd(line),
GPIOHANDLE_SET_LINE_VALUES_IOCTL, &data);
if (status < 0)
return -1;
struct gpiod_line **line)
{
struct pollfd fds[GPIOD_LINE_BULK_MAX_LINES];
- struct gpiod_line *linetmp;
+ struct gpiod_line *linetmp, **lineptr;
unsigned int i;
int status;
memset(fds, 0, sizeof(fds));
- for (i = 0; i < bulk->num_lines; i++) {
- linetmp = bulk->lines[i];
-
+ i = 0;
+ gpiod_line_bulk_foreach_line(bulk, linetmp, lineptr) {
fds[i].fd = line_get_event_fd(linetmp);
fds[i].events = POLLIN | POLLPRI;
+ i++;
}
- status = ppoll(fds, bulk->num_lines, timeout, NULL);
+ status = ppoll(fds, gpiod_line_bulk_num_lines(bulk), timeout, NULL);
if (status < 0)
return -1;
else if (status == 0)
for (i = 0; !fds[i].revents; i++);
if (line)
- *line = bulk->lines[i];
+ *line = gpiod_line_bulk_get_line(bulk, i);
return 1;
}