18e02d188SDavid Lechner /* SPDX-License-Identifier: GPL-2.0-only */ 28e02d188SDavid Lechner /* 38e02d188SDavid Lechner * Copyright (C) 2024 Analog Devices Inc. 48e02d188SDavid Lechner * Copyright (C) 2024 BayLibre, SAS 58e02d188SDavid Lechner */ 68e02d188SDavid Lechner 78e02d188SDavid Lechner #ifndef __LINUX_SPI_OFFLOAD_PROVIDER_H 88e02d188SDavid Lechner #define __LINUX_SPI_OFFLOAD_PROVIDER_H 98e02d188SDavid Lechner 108e02d188SDavid Lechner #include <linux/module.h> 11*d7231be4SDavid Lechner #include <linux/spi/offload/types.h> 128e02d188SDavid Lechner #include <linux/types.h> 138e02d188SDavid Lechner 148e02d188SDavid Lechner MODULE_IMPORT_NS("SPI_OFFLOAD"); 158e02d188SDavid Lechner 168e02d188SDavid Lechner struct device; 17*d7231be4SDavid Lechner struct spi_offload_trigger; 188e02d188SDavid Lechner 198e02d188SDavid Lechner struct spi_offload *devm_spi_offload_alloc(struct device *dev, size_t priv_size); 208e02d188SDavid Lechner 21*d7231be4SDavid Lechner struct spi_offload_trigger_ops { 22*d7231be4SDavid Lechner bool (*match)(struct spi_offload_trigger *trigger, 23*d7231be4SDavid Lechner enum spi_offload_trigger_type type, u64 *args, u32 nargs); 24*d7231be4SDavid Lechner int (*request)(struct spi_offload_trigger *trigger, 25*d7231be4SDavid Lechner enum spi_offload_trigger_type type, u64 *args, u32 nargs); 26*d7231be4SDavid Lechner void (*release)(struct spi_offload_trigger *trigger); 27*d7231be4SDavid Lechner int (*validate)(struct spi_offload_trigger *trigger, 28*d7231be4SDavid Lechner struct spi_offload_trigger_config *config); 29*d7231be4SDavid Lechner int (*enable)(struct spi_offload_trigger *trigger, 30*d7231be4SDavid Lechner struct spi_offload_trigger_config *config); 31*d7231be4SDavid Lechner void (*disable)(struct spi_offload_trigger *trigger); 32*d7231be4SDavid Lechner }; 33*d7231be4SDavid Lechner 34*d7231be4SDavid Lechner struct spi_offload_trigger_info { 35*d7231be4SDavid Lechner /** @fwnode: Provider fwnode, used to match to consumer. */ 36*d7231be4SDavid Lechner struct fwnode_handle *fwnode; 37*d7231be4SDavid Lechner /** @ops: Provider-specific callbacks. */ 38*d7231be4SDavid Lechner const struct spi_offload_trigger_ops *ops; 39*d7231be4SDavid Lechner /** Provider-specific state to be used in callbacks. */ 40*d7231be4SDavid Lechner void *priv; 41*d7231be4SDavid Lechner }; 42*d7231be4SDavid Lechner 43*d7231be4SDavid Lechner int devm_spi_offload_trigger_register(struct device *dev, 44*d7231be4SDavid Lechner struct spi_offload_trigger_info *info); 45*d7231be4SDavid Lechner void *spi_offload_trigger_get_priv(struct spi_offload_trigger *trigger); 46*d7231be4SDavid Lechner 478e02d188SDavid Lechner #endif /* __LINUX_SPI_OFFLOAD_PROVIDER_H */ 48