RTEMS  5.0.0
spi.h
Go to the documentation of this file.
1 
9 /*
10  * Copyright (c) 2016, 2017 embedded brains GmbH. All rights reserved.
11  *
12  * embedded brains GmbH
13  * Dornierstr. 4
14  * 82178 Puchheim
15  * Germany
16  * <rtems@embedded-brains.de>
17  *
18  * The license and distribution terms for this file may be
19  * found in the file LICENSE in this distribution or at
20  * http://www.rtems.org/license/LICENSE.
21  */
22 
23 #ifndef _DEV_SPI_SPI_H
24 #define _DEV_SPI_SPI_H
25 
26 #include <linux/spi/spidev.h>
27 
28 #include <rtems.h>
29 #include <rtems/seterr.h>
30 #include <rtems/thread.h>
31 
32 #ifdef __cplusplus
33 extern "C" {
34 #endif /* __cplusplus */
35 
36 typedef struct spi_ioc_transfer spi_ioc_transfer;
37 
38 typedef struct spi_bus spi_bus;
39 
53 #define SPI_BUS_OBTAIN _IO(SPI_IOC_MAGIC, 13)
54 
60 #define SPI_BUS_RELEASE _IO(SPI_IOC_MAGIC, 23)
61 
65 struct spi_bus {
77  int (*transfer)(spi_bus *bus, const spi_ioc_transfer *msgs, uint32_t msg_count);
78 
88  int (*setup)(spi_bus *bus);
89 
95  void (*destroy)(spi_bus *bus);
96 
100  rtems_recursive_mutex mutex;
101 
105  uint32_t max_speed_hz;
106 
110  uint32_t speed_hz;
111 
115  bool cs_change;
116 
120  uint8_t cs;
121 
125  uint8_t bits_per_word;
126 
130  bool lsb_first;
131 
135  uint32_t mode;
136 
141  uint16_t delay_usecs;
142 };
143 
159 int spi_bus_init(spi_bus *bus);
160 
179 
185 void spi_bus_destroy(spi_bus *bus);
186 
193 
206 int spi_bus_register(
207  spi_bus *bus,
208  const char *bus_path
209 );
210 
213 #ifdef __cplusplus
214 }
215 #endif /* __cplusplus */
216 
217 #endif /* _DEV_SPI_SPI_H */
Data which Ease the Burden of Consistently Setting Errno.
uint32_t speed_hz
Indicates the speed of the current device message.
Definition: spi.h:110
rtems_recursive_mutex mutex
Mutex to protect the bus access.
Definition: spi.h:100
uint32_t max_speed_hz
Maximum Speed in Hz.
Definition: spi.h:105
SPI bus control.
Definition: spi.h:65
uint16_t delay_usecs
Indicates the delay between transfers on different chip select devices.
Definition: spi.h:141
int spi_bus_init(spi_bus *bus)
Initializes a bus control.
Definition: spi-bus.c:319
spi_bus * spi_bus_alloc_and_init(size_t size)
Allocates a bus control from the heap and initializes it.
Definition: spi-bus.c:326
void(* destroy)(spi_bus *bus)
Destroys the bus.
Definition: spi.h:95
SPI transfer message.
Definition: spidev.h:145
RTEMS Port of Linux SPI API.
void spi_bus_destroy_and_free(spi_bus *bus)
Destroys a bus control and frees its memory.
Definition: spi-bus.c:313
bool cs_change
Indicates if chip select must be set high after transfer.
Definition: spi.h:115
int(* transfer)(spi_bus *bus, const spi_ioc_transfer *msgs, uint32_t msg_count)
Transfers SPI messages.
Definition: spi.h:77
void spi_bus_destroy(spi_bus *bus)
Destroys a bus control.
Definition: spi-bus.c:308
int(* setup)(spi_bus *bus)
Checks if maximum speed and bits per word are in a valid range for the device.
Definition: spi.h:88
bool lsb_first
Indicates if LSB is supposed to be transmitted first.
Definition: spi.h:130
unsigned size
Definition: tte.h:74
int spi_bus_register(spi_bus *bus, const char *bus_path)
Registers a bus control.
Definition: spi-bus.c:252
uint32_t mode
Current mode.
Definition: spi.h:135
uint8_t bits_per_word
Indicates the bits per word used on the device.
Definition: spi.h:125
uint8_t cs
Indicates which device is selected by chip select.
Definition: spi.h:120