xref: /openbsd/sys/dev/spi/spivar.h (revision 09467b48)
1 /* $OpenBSD: spivar.h,v 1.1 2018/07/26 10:59:07 patrick Exp $ */
2 /*
3  * Copyright (c) 2018 Patrick Wildt <patrick@blueri.se>
4  *
5  * Permission to use, copy, modify, and distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16  */
17 
18 struct spi_config {
19 	int		 sc_cs;
20 	int		 sc_flags;
21 #define SPI_CONFIG_CPOL		(1 << 0)
22 #define SPI_CONFIG_CPHA		(1 << 1)
23 #define SPI_CONFIG_CS_HIGH	(1 << 2)
24 	int		 sc_bpw;
25 	uint32_t	 sc_freq;
26 };
27 
28 typedef struct spi_controller {
29 	void			*sc_cookie;
30 	void			(*sc_config)(void *, struct spi_config *);
31 	int			(*sc_transfer)(void *, char *, char *, int);
32 	int			(*sc_acquire_bus)(void *, int);
33 	void			(*sc_release_bus)(void *, int);
34 } *spi_tag_t;
35 
36 struct spi_attach_args {
37 	spi_tag_t	 sa_tag;
38 	char		*sa_name;
39 	void		*sa_cookie;
40 };
41 
42 #define	spi_config(sc, config)						\
43 	(*(sc)->sc_config)((sc)->sc_cookie, (config))
44 #define	spi_read(sc, data, len)						\
45 	(*(sc)->sc_transfer)((sc)->sc_cookie, NULL, (data), (len))
46 #define	spi_write(sc, data, len)					\
47 	(*(sc)->sc_transfer)((sc)->sc_cookie, (data), NULL, (len))
48 #define	spi_transfer(sc, out, in, len)					\
49 	(*(sc)->sc_transfer)((sc)->sc_cookie, (out), (in), (len))
50 #define	spi_acquire_bus(sc, flags)					\
51 	(*(sc)->sc_acquire_bus)((sc)->sc_cookie, (flags))
52 #define	spi_release_bus(sc, flags)					\
53 	(*(sc)->sc_release_bus)((sc)->sc_cookie, (flags))
54