xref: /openbmc/linux/drivers/mfd/ocelot.h (revision 9b68f30b)
1 /* SPDX-License-Identifier: GPL-2.0 OR MIT */
2 /* Copyright 2021, 2022 Innovative Advantage Inc. */
3 
4 #ifndef _MFD_OCELOT_H
5 #define _MFD_OCELOT_H
6 
7 #include <linux/kconfig.h>
8 
9 struct device;
10 struct regmap;
11 struct resource;
12 
13 /**
14  * struct ocelot_ddata - Private data for an external Ocelot chip
15  * @gcb_regmap:		General Configuration Block regmap. Used for
16  *			operations like chip reset.
17  * @cpuorg_regmap:	CPU Device Origin Block regmap. Used for operations
18  *			like SPI bus configuration.
19  * @spi_padding_bytes:	Number of padding bytes that must be thrown out before
20  *			read data gets returned. This is calculated during
21  *			initialization based on bus speed.
22  * @dummy_buf:		Zero-filled buffer of spi_padding_bytes size. The dummy
23  *			bytes that will be sent out between the address and
24  *			data of a SPI read operation.
25  */
26 struct ocelot_ddata {
27 	struct regmap *gcb_regmap;
28 	struct regmap *cpuorg_regmap;
29 	int spi_padding_bytes;
30 	void *dummy_buf;
31 };
32 
33 int ocelot_chip_reset(struct device *dev);
34 int ocelot_core_init(struct device *dev);
35 
36 /* SPI-specific routines that won't be necessary for other interfaces */
37 struct regmap *ocelot_spi_init_regmap(struct device *dev,
38 				      const struct resource *res);
39 
40 #define OCELOT_SPI_BYTE_ORDER_LE 0x00000000
41 #define OCELOT_SPI_BYTE_ORDER_BE 0x81818181
42 
43 #ifdef __LITTLE_ENDIAN
44 #define OCELOT_SPI_BYTE_ORDER OCELOT_SPI_BYTE_ORDER_LE
45 #else
46 #define OCELOT_SPI_BYTE_ORDER OCELOT_SPI_BYTE_ORDER_BE
47 #endif
48 
49 #endif
50