/* SPDX-License-Identifier: GPL-2.0 OR MIT */ /* Copyright 2021, 2022 Innovative Advantage Inc. */ #ifndef _MFD_OCELOT_H #define _MFD_OCELOT_H #include <linux/kconfig.h> struct device; struct regmap; struct resource; /** * struct ocelot_ddata - Private data for an external Ocelot chip * @gcb_regmap: General Configuration Block regmap. Used for * operations like chip reset. * @cpuorg_regmap: CPU Device Origin Block regmap. Used for operations * like SPI bus configuration. * @spi_padding_bytes: Number of padding bytes that must be thrown out before * read data gets returned. This is calculated during * initialization based on bus speed. * @dummy_buf: Zero-filled buffer of spi_padding_bytes size. The dummy * bytes that will be sent out between the address and * data of a SPI read operation. */ struct ocelot_ddata { struct regmap *gcb_regmap; struct regmap *cpuorg_regmap; int spi_padding_bytes; void *dummy_buf; }; int ocelot_chip_reset(struct device *dev); int ocelot_core_init(struct device *dev); /* SPI-specific routines that won't be necessary for other interfaces */ struct regmap *ocelot_spi_init_regmap(struct device *dev, const struct resource *res); #define OCELOT_SPI_BYTE_ORDER_LE 0x00000000 #define OCELOT_SPI_BYTE_ORDER_BE 0x81818181 #ifdef __LITTLE_ENDIAN #define OCELOT_SPI_BYTE_ORDER OCELOT_SPI_BYTE_ORDER_LE #else #define OCELOT_SPI_BYTE_ORDER OCELOT_SPI_BYTE_ORDER_BE #endif #endif