return -1;
}
+ if ((config->flags & GPIOD_LINE_REQUEST_FLAG_OPEN_DRAIN) &&
+ (config->flags & GPIOD_LINE_REQUEST_FLAG_OPEN_SOURCE)) {
+ errno = EINVAL;
+ return -1;
+ }
+
memset(&req, 0, sizeof(req));
if (config->flags & GPIOD_LINE_REQUEST_FLAG_OPEN_DRAIN)
"gpiod_line - open-source & open-drain for input mode (invalid)",
0, { 8 });
+static void line_open_source_open_drain_simultaneously(void)
+{
+ TEST_CLEANUP(test_close_chip) struct gpiod_chip *chip = NULL;
+ struct gpiod_line *line;
+ int rv;
+
+ chip = gpiod_chip_open(test_chip_path(0));
+ TEST_ASSERT_NOT_NULL(chip);
+
+ line = gpiod_chip_get_line(chip, 2);
+ TEST_ASSERT_NOT_NULL(line);
+
+ rv = gpiod_line_request_output_flags(line, TEST_CONSUMER,
+ GPIOD_LINE_REQUEST_FLAG_OPEN_SOURCE |
+ GPIOD_LINE_REQUEST_FLAG_OPEN_DRAIN, 1);
+ TEST_ASSERT_EQ(rv, -1);
+ TEST_ASSERT_ERRNO_IS(EINVAL);
+}
+TEST_DEFINE(line_open_source_open_drain_simultaneously,
+ "gpiod_line - open-source & open-drain flags simultaneously",
+ 0, { 8 });
+
static void line_null_consumer(void)
{
TEST_CLEANUP(test_close_chip) struct gpiod_chip *chip = NULL;