Skip to content

Commit 4df76c8

Browse files
committed
hw/bus/spi_hal: Make cs pin optional
Other drivers already allow CS pin to be -1 if user does not need CS to be used automatically. Signed-off-by: Jerzy Kasenberg <[email protected]>
1 parent b4b9c2f commit 4df76c8

File tree

1 file changed

+19
-9
lines changed

1 file changed

+19
-9
lines changed

hw/bus/drivers/spi_hal/src/spi_hal.c

+19-9
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,14 @@
2525
#include "bus/bus_debug.h"
2626
#include "bus/drivers/spi_hal.h"
2727

28+
static void
29+
bus_spi_set_cs(struct bus_spi_node *node, int value)
30+
{
31+
if (node->pin_cs >= 0) {
32+
hal_gpio_write(node->pin_cs, value);
33+
}
34+
}
35+
2836
static int
2937
bus_spi_init_node(struct bus_dev *bdev, struct bus_node *bnode, void *arg)
3038
{
@@ -39,7 +47,9 @@ bus_spi_init_node(struct bus_dev *bdev, struct bus_node *bnode, void *arg)
3947
node->freq = cfg->freq;
4048
node->quirks = cfg->quirks;
4149

42-
hal_gpio_init_out(node->pin_cs, 1);
50+
if (node->pin_cs >= 0) {
51+
hal_gpio_init_out(node->pin_cs, 1);
52+
}
4353

4454
return 0;
4555
}
@@ -137,7 +147,7 @@ bus_spi_read(struct bus_dev *bdev, struct bus_node *bnode, uint8_t *buf,
137147
BUS_DEBUG_VERIFY_DEV(&dev->spi_dev);
138148
BUS_DEBUG_VERIFY_NODE(node);
139149

140-
hal_gpio_write(node->pin_cs, 0);
150+
bus_spi_set_cs(node, 0);
141151

142152
/* Use output buffer as input to generate SPI clock.
143153
* For security mostly, do not output random data, fill it with 0xFF.
@@ -154,7 +164,7 @@ bus_spi_read(struct bus_dev *bdev, struct bus_node *bnode, uint8_t *buf,
154164
#endif
155165

156166
if (rc || !(flags & BUS_F_NOSTOP)) {
157-
hal_gpio_write(node->pin_cs, 1);
167+
bus_spi_set_cs(node, 1);
158168
}
159169

160170
return rc;
@@ -171,7 +181,7 @@ bus_spi_write(struct bus_dev *bdev, struct bus_node *bnode, const uint8_t *buf,
171181
BUS_DEBUG_VERIFY_DEV(&dev->spi_dev);
172182
BUS_DEBUG_VERIFY_NODE(node);
173183

174-
hal_gpio_write(node->pin_cs, 0);
184+
bus_spi_set_cs(node, 0);
175185

176186
/* XXX update HAL to accept const instead */
177187

@@ -185,7 +195,7 @@ bus_spi_write(struct bus_dev *bdev, struct bus_node *bnode, const uint8_t *buf,
185195
#endif
186196

187197
if (rc || !(flags & BUS_F_NOSTOP)) {
188-
hal_gpio_write(node->pin_cs, 1);
198+
bus_spi_set_cs(node, 1);
189199
}
190200

191201
return rc;
@@ -205,7 +215,7 @@ bus_spi_write_read(struct bus_dev *bdev, struct bus_node *bnode,
205215
BUS_DEBUG_VERIFY_DEV(&dev->spi_dev);
206216
BUS_DEBUG_VERIFY_NODE(node);
207217

208-
hal_gpio_write(node->pin_cs, 0);
218+
bus_spi_set_cs(node, 0);
209219

210220
/* XXX update HAL to accept const instead */
211221

@@ -246,7 +256,7 @@ bus_spi_write_read(struct bus_dev *bdev, struct bus_node *bnode,
246256
#endif
247257

248258
if (rc || !(flags & BUS_F_NOSTOP)) {
249-
hal_gpio_write(node->pin_cs, 1);
259+
bus_spi_set_cs(node, 1);
250260
}
251261

252262
return rc;
@@ -264,7 +274,7 @@ bus_spi_duplex_write_read(struct bus_dev *bdev, struct bus_node *bnode,
264274
BUS_DEBUG_VERIFY_DEV(&dev->spi_dev);
265275
BUS_DEBUG_VERIFY_NODE(node);
266276

267-
hal_gpio_write(node->pin_cs, 0);
277+
bus_spi_set_cs(node, 0);
268278

269279
#if MYNEWT_VAL(SPI_HAL_USE_NOBLOCK)
270280
rc = hal_spi_txrx_noblock(dev->spi_dev.cfg.spi_num, (uint8_t *)wbuf, rbuf, length);
@@ -276,7 +286,7 @@ bus_spi_duplex_write_read(struct bus_dev *bdev, struct bus_node *bnode,
276286
#endif
277287

278288
if (rc || !(flags & BUS_F_NOSTOP)) {
279-
hal_gpio_write(node->pin_cs, 1);
289+
bus_spi_set_cs(node, 1);
280290
}
281291

282292
return rc;

0 commit comments

Comments
 (0)