aboutsummaryrefslogtreecommitdiffstats
path: root/tools/spi
diff options
context:
space:
mode:
authorJoshua Clayton <stillcompiling@gmail.com>2015-11-18 17:30:40 -0500
committerMark Brown <broonie@kernel.org>2015-11-23 09:54:01 -0500
commit983b27886a3c7f6eff4e987ddba932da74703f4e (patch)
treebb043005675308a78a890385fa874c74d0251b8c /tools/spi
parent7af475a5b55e8e47327818e8133fe22204c1fc4d (diff)
spi: spidev_test: output to a file
For testing of larger data transfers, output unmodified data directly to a file. Signed-off-by: Joshua Clayton <stillcompiling@gmail.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'tools/spi')
-rw-r--r--tools/spi/spidev_test.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/tools/spi/spidev_test.c b/tools/spi/spidev_test.c
index 71a45a4d7d49..02fc3a44901b 100644
--- a/tools/spi/spidev_test.c
+++ b/tools/spi/spidev_test.c
@@ -35,6 +35,7 @@ static const char *device = "/dev/spidev1.1";
35static uint32_t mode; 35static uint32_t mode;
36static uint8_t bits = 8; 36static uint8_t bits = 8;
37static char *input_file; 37static char *input_file;
38static char *output_file;
38static uint32_t speed = 500000; 39static uint32_t speed = 500000;
39static uint16_t delay; 40static uint16_t delay;
40static int verbose; 41static int verbose;
@@ -105,7 +106,7 @@ static int unescape(char *_dst, char *_src, size_t len)
105static void transfer(int fd, uint8_t const *tx, uint8_t const *rx, size_t len) 106static void transfer(int fd, uint8_t const *tx, uint8_t const *rx, size_t len)
106{ 107{
107 int ret; 108 int ret;
108 109 int out_fd;
109 struct spi_ioc_transfer tr = { 110 struct spi_ioc_transfer tr = {
110 .tx_buf = (unsigned long)tx, 111 .tx_buf = (unsigned long)tx,
111 .rx_buf = (unsigned long)rx, 112 .rx_buf = (unsigned long)rx,
@@ -136,7 +137,21 @@ static void transfer(int fd, uint8_t const *tx, uint8_t const *rx, size_t len)
136 137
137 if (verbose) 138 if (verbose)
138 hex_dump(tx, len, 32, "TX"); 139 hex_dump(tx, len, 32, "TX");
139 hex_dump(rx, len, 32, "RX"); 140
141 if (output_file) {
142 out_fd = open(output_file, O_WRONLY | O_CREAT | O_TRUNC, 0666);
143 if (out_fd < 0)
144 pabort("could not open output file");
145
146 ret = write(out_fd, rx, len);
147 if (ret != len)
148 pabort("not all bytes written to utput file");
149
150 close(out_fd);
151 }
152
153 if (verbose || !output_file)
154 hex_dump(rx, len, 32, "RX");
140} 155}
141 156
142static void print_usage(const char *prog) 157static void print_usage(const char *prog)
@@ -147,6 +162,7 @@ static void print_usage(const char *prog)
147 " -d --delay delay (usec)\n" 162 " -d --delay delay (usec)\n"
148 " -b --bpw bits per word \n" 163 " -b --bpw bits per word \n"
149 " -i --input input data from a file (e.g. \"test.bin\")\n" 164 " -i --input input data from a file (e.g. \"test.bin\")\n"
165 " -o --output output data to a file (e.g. \"results.bin\")\n"
150 " -l --loop loopback\n" 166 " -l --loop loopback\n"
151 " -H --cpha clock phase\n" 167 " -H --cpha clock phase\n"
152 " -O --cpol clock polarity\n" 168 " -O --cpol clock polarity\n"
@@ -171,6 +187,7 @@ static void parse_opts(int argc, char *argv[])
171 { "delay", 1, 0, 'd' }, 187 { "delay", 1, 0, 'd' },
172 { "bpw", 1, 0, 'b' }, 188 { "bpw", 1, 0, 'b' },
173 { "input", 1, 0, 'i' }, 189 { "input", 1, 0, 'i' },
190 { "output", 1, 0, 'o' },
174 { "loop", 0, 0, 'l' }, 191 { "loop", 0, 0, 'l' },
175 { "cpha", 0, 0, 'H' }, 192 { "cpha", 0, 0, 'H' },
176 { "cpol", 0, 0, 'O' }, 193 { "cpol", 0, 0, 'O' },
@@ -186,7 +203,7 @@ static void parse_opts(int argc, char *argv[])
186 }; 203 };
187 int c; 204 int c;
188 205
189 c = getopt_long(argc, argv, "D:s:d:b:i:lHOLC3NR24p:v", 206 c = getopt_long(argc, argv, "D:s:d:b:i:o:lHOLC3NR24p:v",
190 lopts, NULL); 207 lopts, NULL);
191 208
192 if (c == -1) 209 if (c == -1)
@@ -208,6 +225,9 @@ static void parse_opts(int argc, char *argv[])
208 case 'i': 225 case 'i':
209 input_file = optarg; 226 input_file = optarg;
210 break; 227 break;
228 case 'o':
229 output_file = optarg;
230 break;
211 case 'l': 231 case 'l':
212 mode |= SPI_LOOP; 232 mode |= SPI_LOOP;
213 break; 233 break;