From: Kent Gibson <warthog618@gmail.com>
To: linux-gpio@vger.kernel.org, brgl@bgdev.pl
Cc: Kent Gibson <warthog618@gmail.com>
Subject: [libgpiod v2][PATCH 3/4] tools: migrate to gpiod_request_lines
Date: Thu, 31 Mar 2022 09:11:40 +0800 [thread overview]
Message-ID: <20220331011141.53489-4-warthog618@gmail.com> (raw)
In-Reply-To: <20220331011141.53489-1-warthog618@gmail.com>
Switch to gpiod_request_lines() for tools that only use the chip to
request lines.
Signed-off-by: Kent Gibson <warthog618@gmail.com>
---
tools/gpiodetect.c | 2 +-
tools/gpiofind.c | 2 +-
tools/gpioget.c | 11 +++++-----
tools/gpioinfo.c | 4 ++--
tools/gpiomon.c | 11 +++++-----
tools/gpioset.c | 11 +++++-----
tools/tools-common.c | 50 +++++++++++++++++---------------------------
tools/tools-common.h | 5 +++--
8 files changed, 41 insertions(+), 55 deletions(-)
diff --git a/tools/gpiodetect.c b/tools/gpiodetect.c
index 8f6e8b3..2fada05 100644
--- a/tools/gpiodetect.c
+++ b/tools/gpiodetect.c
@@ -67,7 +67,7 @@ int main(int argc, char **argv)
die_perror("unable to scan /dev");
for (i = 0; i < num_chips; i++) {
- chip = chip_open_by_name(entries[i]->d_name);
+ chip = chip_open(chip_path_from_name(entries[i]->d_name));
if (!chip)
die_perror("unable to open %s", entries[i]->d_name);
diff --git a/tools/gpiofind.c b/tools/gpiofind.c
index 36eba86..17e1702 100644
--- a/tools/gpiofind.c
+++ b/tools/gpiofind.c
@@ -67,7 +67,7 @@ int main(int argc, char **argv)
die_perror("unable to scan /dev");
for (i = 0; i < num_chips; i++) {
- chip = chip_open_by_name(entries[i]->d_name);
+ chip = chip_open(chip_path_from_name(entries[i]->d_name));
if (!chip) {
if (errno == EACCES)
continue;
diff --git a/tools/gpioget.c b/tools/gpioget.c
index 2cf5eae..f4c5d46 100644
--- a/tools/gpioget.c
+++ b/tools/gpioget.c
@@ -46,11 +46,10 @@ int main(int argc, char **argv)
struct gpiod_request_config *req_cfg;
struct gpiod_line_request *request;
struct gpiod_line_config *line_cfg;
- struct gpiod_chip *chip;
bool active_low = false;
unsigned int *offsets, *values;
size_t i, num_lines;
- char *device, *end;
+ char *device, *end, *path;
for (;;) {
optc = getopt_long(argc, argv, shortopts, longopts, &opti);
@@ -103,8 +102,8 @@ int main(int argc, char **argv)
die("invalid GPIO offset: %s", argv[i + 1]);
}
- chip = chip_open_lookup(device);
- if (!chip)
+ path = chip_path_lookup(device);
+ if (!path)
die_perror("unable to open %s", device);
line_cfg = gpiod_line_config_new();
@@ -126,7 +125,7 @@ int main(int argc, char **argv)
gpiod_request_config_set_consumer(req_cfg, "gpioget");
gpiod_request_config_set_offsets(req_cfg, num_lines, offsets);
- request = gpiod_chip_request_lines(chip, req_cfg, line_cfg);
+ request = gpiod_request_lines(path, req_cfg, line_cfg);
if (!request)
die_perror("unable to request lines");
@@ -144,7 +143,7 @@ int main(int argc, char **argv)
gpiod_line_request_release(request);
gpiod_request_config_free(req_cfg);
gpiod_line_config_free(line_cfg);
- gpiod_chip_close(chip);
+ free(path);
free(offsets);
free(values);
diff --git a/tools/gpioinfo.c b/tools/gpioinfo.c
index fbe2a13..f0f9926 100644
--- a/tools/gpioinfo.c
+++ b/tools/gpioinfo.c
@@ -227,7 +227,7 @@ int main(int argc, char **argv)
die_perror("unable to scan /dev");
for (i = 0; i < num_chips; i++) {
- chip = chip_open_by_name(entries[i]->d_name);
+ chip = chip_open(chip_path_from_name(entries[i]->d_name));
if (!chip)
die_perror("unable to open %s",
entries[i]->d_name);
@@ -240,7 +240,7 @@ int main(int argc, char **argv)
free(entries);
} else {
for (i = 0; i < argc; i++) {
- chip = chip_open_lookup(argv[i]);
+ chip = chip_open(chip_path_lookup(argv[i]));
if (!chip)
die_perror("looking up chip %s", argv[i]);
diff --git a/tools/gpiomon.c b/tools/gpiomon.c
index f6a0dba..e461458 100644
--- a/tools/gpiomon.c
+++ b/tools/gpiomon.c
@@ -164,9 +164,8 @@ int main(int argc, char **argv)
struct gpiod_line_config *line_cfg;
unsigned int offsets[64], offset;
struct gpiod_edge_event *event;
- struct gpiod_chip *chip;
struct mon_ctx ctx;
- char *end;
+ char *end, *path;
/*
* FIXME: use signalfd once the API has been converted to using a single file
@@ -250,8 +249,8 @@ int main(int argc, char **argv)
num_lines++;
}
- chip = chip_open_lookup(argv[0]);
- if (!chip)
+ path = chip_path_lookup(argv[0]);
+ if (!path)
die_perror("unable to open %s", argv[0]);
line_cfg = gpiod_line_config_new();
@@ -271,7 +270,7 @@ int main(int argc, char **argv)
gpiod_request_config_set_consumer(req_cfg, "gpiomon");
gpiod_request_config_set_offsets(req_cfg, num_lines, offsets);
- request = gpiod_chip_request_lines(chip, req_cfg, line_cfg);
+ request = gpiod_request_lines(path, req_cfg, line_cfg);
if (!request)
die_perror("unable to request lines");
@@ -314,7 +313,7 @@ done:
gpiod_line_request_release(request);
gpiod_request_config_free(req_cfg);
gpiod_line_config_free(line_cfg);
- gpiod_chip_close(chip);
+ free(path);
return EXIT_SUCCESS;
}
diff --git a/tools/gpioset.c b/tools/gpioset.c
index 1c11470..7497eab 100644
--- a/tools/gpioset.c
+++ b/tools/gpioset.c
@@ -195,11 +195,10 @@ int main(int argc, char **argv)
struct gpiod_line_request *request;
struct gpiod_line_config *line_cfg;
struct callback_data cbdata;
- struct gpiod_chip *chip;
bool active_low = false;
unsigned int *offsets, *values;
size_t i, num_lines;
- char *device, *end;
+ char *device, *end, *path;
memset(&cbdata, 0, sizeof(cbdata));
@@ -288,8 +287,8 @@ int main(int argc, char **argv)
die("invalid offset: %s", argv[i + 1]);
}
- chip = chip_open_lookup(device);
- if (!chip)
+ path = chip_path_lookup(device);
+ if (!path)
die_perror("unable to open %s", device);
line_cfg = gpiod_line_config_new();
@@ -314,7 +313,7 @@ int main(int argc, char **argv)
gpiod_request_config_set_consumer(req_cfg, "gpioset");
gpiod_request_config_set_offsets(req_cfg, num_lines, offsets);
- request = gpiod_chip_request_lines(chip, req_cfg, line_cfg);
+ request = gpiod_request_lines(path, req_cfg, line_cfg);
if (!request)
die_perror("unable to request lines");
@@ -324,7 +323,7 @@ int main(int argc, char **argv)
gpiod_line_request_release(request);
gpiod_request_config_free(req_cfg);
gpiod_line_config_free(line_cfg);
- gpiod_chip_close(chip);
+ free(path);
free(offsets);
return EXIT_SUCCESS;
diff --git a/tools/tools-common.c b/tools/tools-common.c
index f5fd50c..8d4ca12 100644
--- a/tools/tools-common.c
+++ b/tools/tools-common.c
@@ -114,36 +114,24 @@ int chip_dir_filter(const struct dirent *entry)
return !!is_chip;
}
-struct gpiod_chip *chip_open_by_name(const char *name)
+char *chip_path_from_name(const char *name)
{
- struct gpiod_chip *chip;
char *path;
- int ret;
- ret = asprintf(&path, "/dev/%s", name);
- if (ret < 0)
+ if (asprintf(&path, "/dev/%s", name) < 0)
return NULL;
- chip = gpiod_chip_open(path);
- free(path);
-
- return chip;
+ return path;
}
-static struct gpiod_chip *chip_open_by_number(unsigned int num)
+static char *chip_path_from_number(unsigned int num)
{
- struct gpiod_chip *chip;
char *path;
- int ret;
- ret = asprintf(&path, "/dev/gpiochip%u", num);
- if (!ret)
+ if (asprintf(&path, "/dev/gpiochip%u", num) < 0)
return NULL;
- chip = gpiod_chip_open(path);
- free(path);
-
- return chip;
+ return path;
}
static bool isuint(const char *str)
@@ -154,18 +142,18 @@ static bool isuint(const char *str)
return *str == '\0';
}
-struct gpiod_chip *chip_open_lookup(const char *device)
+char *chip_path_lookup(const char *device)
{
- struct gpiod_chip *chip;
-
- if (isuint(device)) {
- chip = chip_open_by_number(strtoul(device, NULL, 10));
- } else {
- if (strncmp(device, "/dev/", 5))
- chip = chip_open_by_name(device);
- else
- chip = gpiod_chip_open(device);
- }
-
- return chip;
+ if (isuint(device))
+ return chip_path_from_number(strtoul(device, NULL, 10));
+ if (strncmp(device, "/dev/", 5))
+ return chip_path_from_name(device);
+ return strdup(device);
+}
+
+struct gpiod_chip *chip_open(const char *path)
+{
+ if (path == NULL)
+ return NULL;
+ return gpiod_chip_open(path);
}
diff --git a/tools/tools-common.h b/tools/tools-common.h
index f059440..d0b3a83 100644
--- a/tools/tools-common.h
+++ b/tools/tools-common.h
@@ -29,7 +29,8 @@ int parse_bias(const char *option);
void print_bias_help(void);
int make_signalfd(void);
int chip_dir_filter(const struct dirent *entry);
-struct gpiod_chip *chip_open_by_name(const char *name);
-struct gpiod_chip *chip_open_lookup(const char *device);
+struct gpiod_chip *chip_open(const char *path);
+char *chip_path_from_name(const char *name);
+char *chip_path_lookup(const char *device);
#endif /* __GPIOD_TOOLS_COMMON_H__ */
--
2.35.1
next prev parent reply other threads:[~2022-03-31 1:13 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-31 1:11 [libgpiod v2][PATCH 0/4] core: add gpiod_request_lines Kent Gibson
2022-03-31 1:11 ` [libgpiod v2][PATCH 1/4] " Kent Gibson
2022-03-31 1:11 ` [libgpiod v2][PATCH 2/4] tools: rename inexistent to nonexistent Kent Gibson
2022-03-31 1:11 ` Kent Gibson [this message]
2022-03-31 1:11 ` [libgpiod v2][PATCH 4/4] tools: minimize object lifetimes Kent Gibson
2022-04-02 12:47 ` [libgpiod v2][PATCH 0/4] core: add gpiod_request_lines Bartosz Golaszewski
2022-04-04 9:54 ` Kent Gibson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220331011141.53489-4-warthog618@gmail.com \
--to=warthog618@gmail.com \
--cc=brgl@bgdev.pl \
--cc=linux-gpio@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.