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