spi_controllerRegular
4.4: Absent ⚠️
4.8: Absent ⚠️
4.10: Absent ⚠️
4.13: ✅struct spi_controller {
struct device dev;
struct list_head list;
s16 bus_num;
u16 num_chipselect;
u16 dma_alignment;
u16 mode_bits;
u32 bits_per_word_mask;
u32 min_speed_hz;
u32 max_speed_hz;
u16 flags;
bool slave;
size_t (*max_transfer_size)(struct spi_device *);
size_t (*max_message_size)(struct spi_device *);
struct mutex io_mutex;
spinlock_t bus_lock_spinlock;
struct mutex bus_lock_mutex;
bool bus_lock_flag;
int (*setup)(struct spi_device *);
int (*transfer)(struct spi_device *, struct spi_message *);
void (*cleanup)(struct spi_device *);
bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
bool queued;
struct kthread_worker kworker;
struct task_struct *kworker_task;
struct kthread_work pump_messages;
spinlock_t queue_lock;
struct list_head queue;
struct spi_message *cur_msg;
bool idling;
bool busy;
bool running;
bool rt;
bool auto_runtime_pm;
bool cur_msg_prepared;
bool cur_msg_mapped;
struct completion xfer_completion;
size_t max_dma_len;
int (*prepare_transfer_hardware)(struct spi_controller *);
int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_transfer_hardware)(struct spi_controller *);
int (*prepare_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_message)(struct spi_controller *, struct spi_message *);
int (*slave_abort)(struct spi_controller *);
int (*spi_flash_read)(struct spi_device *, struct spi_flash_read_message *);
bool (*spi_flash_can_dma)(struct spi_device *, struct spi_flash_read_message *);
bool (*flash_read_supported)(struct spi_device *);
void (*set_cs)(struct spi_device *, bool);
int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
void (*handle_err)(struct spi_controller *, struct spi_message *);
int *cs_gpios;
struct spi_statistics statistics;
struct dma_chan *dma_tx;
struct dma_chan *dma_rx;
void *dummy_rx;
void *dummy_tx;
int (*fw_translate_cs)(struct spi_controller *, unsigned int);
};
4.15: ✅struct spi_controller {
struct device dev;
struct list_head list;
s16 bus_num;
u16 num_chipselect;
u16 dma_alignment;
u16 mode_bits;
u32 bits_per_word_mask;
u32 min_speed_hz;
u32 max_speed_hz;
u16 flags;
bool slave;
size_t (*max_transfer_size)(struct spi_device *);
size_t (*max_message_size)(struct spi_device *);
struct mutex io_mutex;
spinlock_t bus_lock_spinlock;
struct mutex bus_lock_mutex;
bool bus_lock_flag;
int (*setup)(struct spi_device *);
int (*transfer)(struct spi_device *, struct spi_message *);
void (*cleanup)(struct spi_device *);
bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
bool queued;
struct kthread_worker kworker;
struct task_struct *kworker_task;
struct kthread_work pump_messages;
spinlock_t queue_lock;
struct list_head queue;
struct spi_message *cur_msg;
bool idling;
bool busy;
bool running;
bool rt;
bool auto_runtime_pm;
bool cur_msg_prepared;
bool cur_msg_mapped;
struct completion xfer_completion;
size_t max_dma_len;
int (*prepare_transfer_hardware)(struct spi_controller *);
int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_transfer_hardware)(struct spi_controller *);
int (*prepare_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_message)(struct spi_controller *, struct spi_message *);
int (*slave_abort)(struct spi_controller *);
int (*spi_flash_read)(struct spi_device *, struct spi_flash_read_message *);
bool (*spi_flash_can_dma)(struct spi_device *, struct spi_flash_read_message *);
bool (*flash_read_supported)(struct spi_device *);
void (*set_cs)(struct spi_device *, bool);
int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
void (*handle_err)(struct spi_controller *, struct spi_message *);
int *cs_gpios;
struct spi_statistics statistics;
struct dma_chan *dma_tx;
struct dma_chan *dma_rx;
void *dummy_rx;
void *dummy_tx;
int (*fw_translate_cs)(struct spi_controller *, unsigned int);
};
4.18: ✅struct spi_controller {
struct device dev;
struct list_head list;
s16 bus_num;
u16 num_chipselect;
u16 dma_alignment;
u16 mode_bits;
u32 bits_per_word_mask;
u32 min_speed_hz;
u32 max_speed_hz;
u16 flags;
bool slave;
size_t (*max_transfer_size)(struct spi_device *);
size_t (*max_message_size)(struct spi_device *);
struct mutex io_mutex;
spinlock_t bus_lock_spinlock;
struct mutex bus_lock_mutex;
bool bus_lock_flag;
int (*setup)(struct spi_device *);
int (*transfer)(struct spi_device *, struct spi_message *);
void (*cleanup)(struct spi_device *);
bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
bool queued;
struct kthread_worker kworker;
struct task_struct *kworker_task;
struct kthread_work pump_messages;
spinlock_t queue_lock;
struct list_head queue;
struct spi_message *cur_msg;
bool idling;
bool busy;
bool running;
bool rt;
bool auto_runtime_pm;
bool cur_msg_prepared;
bool cur_msg_mapped;
struct completion xfer_completion;
size_t max_dma_len;
int (*prepare_transfer_hardware)(struct spi_controller *);
int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_transfer_hardware)(struct spi_controller *);
int (*prepare_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_message)(struct spi_controller *, struct spi_message *);
int (*slave_abort)(struct spi_controller *);
void (*set_cs)(struct spi_device *, bool);
int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
void (*handle_err)(struct spi_controller *, struct spi_message *);
const struct spi_controller_mem_ops *mem_ops;
int *cs_gpios;
struct spi_statistics statistics;
struct dma_chan *dma_tx;
struct dma_chan *dma_rx;
void *dummy_rx;
void *dummy_tx;
int (*fw_translate_cs)(struct spi_controller *, unsigned int);
};
5.0: ✅struct spi_controller {
struct device dev;
struct list_head list;
s16 bus_num;
u16 num_chipselect;
u16 dma_alignment;
u16 mode_bits;
u32 bits_per_word_mask;
u32 min_speed_hz;
u32 max_speed_hz;
u16 flags;
bool slave;
size_t (*max_transfer_size)(struct spi_device *);
size_t (*max_message_size)(struct spi_device *);
struct mutex io_mutex;
spinlock_t bus_lock_spinlock;
struct mutex bus_lock_mutex;
bool bus_lock_flag;
int (*setup)(struct spi_device *);
int (*transfer)(struct spi_device *, struct spi_message *);
void (*cleanup)(struct spi_device *);
bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
bool queued;
struct kthread_worker kworker;
struct task_struct *kworker_task;
struct kthread_work pump_messages;
spinlock_t queue_lock;
struct list_head queue;
struct spi_message *cur_msg;
bool idling;
bool busy;
bool running;
bool rt;
bool auto_runtime_pm;
bool cur_msg_prepared;
bool cur_msg_mapped;
struct completion xfer_completion;
size_t max_dma_len;
int (*prepare_transfer_hardware)(struct spi_controller *);
int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_transfer_hardware)(struct spi_controller *);
int (*prepare_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_message)(struct spi_controller *, struct spi_message *);
int (*slave_abort)(struct spi_controller *);
void (*set_cs)(struct spi_device *, bool);
int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
void (*handle_err)(struct spi_controller *, struct spi_message *);
const struct spi_controller_mem_ops *mem_ops;
int *cs_gpios;
struct spi_statistics statistics;
struct dma_chan *dma_tx;
struct dma_chan *dma_rx;
void *dummy_rx;
void *dummy_tx;
int (*fw_translate_cs)(struct spi_controller *, unsigned int);
};
5.3: ✅struct spi_controller {
struct device dev;
struct list_head list;
s16 bus_num;
u16 num_chipselect;
u16 dma_alignment;
u32 mode_bits;
u32 bits_per_word_mask;
u32 min_speed_hz;
u32 max_speed_hz;
u16 flags;
bool slave;
size_t (*max_transfer_size)(struct spi_device *);
size_t (*max_message_size)(struct spi_device *);
struct mutex io_mutex;
spinlock_t bus_lock_spinlock;
struct mutex bus_lock_mutex;
bool bus_lock_flag;
int (*setup)(struct spi_device *);
void (*set_cs_timing)(struct spi_device *, u8, u8, u8);
int (*transfer)(struct spi_device *, struct spi_message *);
void (*cleanup)(struct spi_device *);
bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
bool queued;
struct kthread_worker kworker;
struct task_struct *kworker_task;
struct kthread_work pump_messages;
spinlock_t queue_lock;
struct list_head queue;
struct spi_message *cur_msg;
bool idling;
bool busy;
bool running;
bool rt;
bool auto_runtime_pm;
bool cur_msg_prepared;
bool cur_msg_mapped;
struct completion xfer_completion;
size_t max_dma_len;
int (*prepare_transfer_hardware)(struct spi_controller *);
int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_transfer_hardware)(struct spi_controller *);
int (*prepare_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_message)(struct spi_controller *, struct spi_message *);
int (*slave_abort)(struct spi_controller *);
void (*set_cs)(struct spi_device *, bool);
int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
void (*handle_err)(struct spi_controller *, struct spi_message *);
const struct spi_controller_mem_ops *mem_ops;
int *cs_gpios;
struct gpio_desc **cs_gpiods;
bool use_gpio_descriptors;
struct spi_statistics statistics;
struct dma_chan *dma_tx;
struct dma_chan *dma_rx;
void *dummy_rx;
void *dummy_tx;
int (*fw_translate_cs)(struct spi_controller *, unsigned int);
};
5.4: ✅struct spi_controller {
struct device dev;
struct list_head list;
s16 bus_num;
u16 num_chipselect;
u16 dma_alignment;
u32 mode_bits;
u32 buswidth_override_bits;
u32 bits_per_word_mask;
u32 min_speed_hz;
u32 max_speed_hz;
u16 flags;
bool slave;
size_t (*max_transfer_size)(struct spi_device *);
size_t (*max_message_size)(struct spi_device *);
struct mutex io_mutex;
spinlock_t bus_lock_spinlock;
struct mutex bus_lock_mutex;
bool bus_lock_flag;
int (*setup)(struct spi_device *);
void (*set_cs_timing)(struct spi_device *, u8, u8, u8);
int (*transfer)(struct spi_device *, struct spi_message *);
void (*cleanup)(struct spi_device *);
bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
bool queued;
struct kthread_worker kworker;
struct task_struct *kworker_task;
struct kthread_work pump_messages;
spinlock_t queue_lock;
struct list_head queue;
struct spi_message *cur_msg;
bool idling;
bool busy;
bool running;
bool rt;
bool auto_runtime_pm;
bool cur_msg_prepared;
bool cur_msg_mapped;
struct completion xfer_completion;
size_t max_dma_len;
int (*prepare_transfer_hardware)(struct spi_controller *);
int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_transfer_hardware)(struct spi_controller *);
int (*prepare_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_message)(struct spi_controller *, struct spi_message *);
int (*slave_abort)(struct spi_controller *);
void (*set_cs)(struct spi_device *, bool);
int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
void (*handle_err)(struct spi_controller *, struct spi_message *);
const struct spi_controller_mem_ops *mem_ops;
int *cs_gpios;
struct gpio_desc **cs_gpiods;
bool use_gpio_descriptors;
struct spi_statistics statistics;
struct dma_chan *dma_tx;
struct dma_chan *dma_rx;
void *dummy_rx;
void *dummy_tx;
int (*fw_translate_cs)(struct spi_controller *, unsigned int);
};
5.8: ✅struct spi_controller {
struct device dev;
struct list_head list;
s16 bus_num;
u16 num_chipselect;
u16 dma_alignment;
u32 mode_bits;
u32 buswidth_override_bits;
u32 bits_per_word_mask;
u32 min_speed_hz;
u32 max_speed_hz;
u16 flags;
bool slave;
size_t (*max_transfer_size)(struct spi_device *);
size_t (*max_message_size)(struct spi_device *);
struct mutex io_mutex;
spinlock_t bus_lock_spinlock;
struct mutex bus_lock_mutex;
bool bus_lock_flag;
int (*setup)(struct spi_device *);
int (*set_cs_timing)(struct spi_device *, struct spi_delay *, struct spi_delay *, struct spi_delay *);
int (*transfer)(struct spi_device *, struct spi_message *);
void (*cleanup)(struct spi_device *);
bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
bool queued;
struct kthread_worker kworker;
struct task_struct *kworker_task;
struct kthread_work pump_messages;
spinlock_t queue_lock;
struct list_head queue;
struct spi_message *cur_msg;
bool idling;
bool busy;
bool running;
bool rt;
bool auto_runtime_pm;
bool cur_msg_prepared;
bool cur_msg_mapped;
struct completion xfer_completion;
size_t max_dma_len;
int (*prepare_transfer_hardware)(struct spi_controller *);
int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_transfer_hardware)(struct spi_controller *);
int (*prepare_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_message)(struct spi_controller *, struct spi_message *);
int (*slave_abort)(struct spi_controller *);
void (*set_cs)(struct spi_device *, bool);
int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
void (*handle_err)(struct spi_controller *, struct spi_message *);
const struct spi_controller_mem_ops *mem_ops;
struct spi_delay cs_setup;
struct spi_delay cs_hold;
struct spi_delay cs_inactive;
int *cs_gpios;
struct gpio_desc **cs_gpiods;
bool use_gpio_descriptors;
u8 unused_native_cs;
u8 max_native_cs;
struct spi_statistics statistics;
struct dma_chan *dma_tx;
struct dma_chan *dma_rx;
void *dummy_rx;
void *dummy_tx;
int (*fw_translate_cs)(struct spi_controller *, unsigned int);
bool ptp_sts_supported;
long unsigned int irq_flags;
};
5.11: ✅struct spi_controller {
struct device dev;
struct list_head list;
s16 bus_num;
u16 num_chipselect;
u16 dma_alignment;
u32 mode_bits;
u32 buswidth_override_bits;
u32 bits_per_word_mask;
u32 min_speed_hz;
u32 max_speed_hz;
u16 flags;
bool slave;
size_t (*max_transfer_size)(struct spi_device *);
size_t (*max_message_size)(struct spi_device *);
struct mutex io_mutex;
spinlock_t bus_lock_spinlock;
struct mutex bus_lock_mutex;
bool bus_lock_flag;
int (*setup)(struct spi_device *);
int (*set_cs_timing)(struct spi_device *, struct spi_delay *, struct spi_delay *, struct spi_delay *);
int (*transfer)(struct spi_device *, struct spi_message *);
void (*cleanup)(struct spi_device *);
bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
bool queued;
struct kthread_worker *kworker;
struct kthread_work pump_messages;
spinlock_t queue_lock;
struct list_head queue;
struct spi_message *cur_msg;
bool idling;
bool busy;
bool running;
bool rt;
bool auto_runtime_pm;
bool cur_msg_prepared;
bool cur_msg_mapped;
bool last_cs_enable;
bool last_cs_mode_high;
bool fallback;
struct completion xfer_completion;
size_t max_dma_len;
int (*prepare_transfer_hardware)(struct spi_controller *);
int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_transfer_hardware)(struct spi_controller *);
int (*prepare_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_message)(struct spi_controller *, struct spi_message *);
int (*slave_abort)(struct spi_controller *);
void (*set_cs)(struct spi_device *, bool);
int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
void (*handle_err)(struct spi_controller *, struct spi_message *);
const struct spi_controller_mem_ops *mem_ops;
struct spi_delay cs_setup;
struct spi_delay cs_hold;
struct spi_delay cs_inactive;
int *cs_gpios;
struct gpio_desc **cs_gpiods;
bool use_gpio_descriptors;
u8 unused_native_cs;
u8 max_native_cs;
struct spi_statistics statistics;
struct dma_chan *dma_tx;
struct dma_chan *dma_rx;
void *dummy_rx;
void *dummy_tx;
int (*fw_translate_cs)(struct spi_controller *, unsigned int);
bool ptp_sts_supported;
long unsigned int irq_flags;
};
5.13: ✅struct spi_controller {
struct device dev;
struct list_head list;
s16 bus_num;
u16 num_chipselect;
u16 dma_alignment;
u32 mode_bits;
u32 buswidth_override_bits;
u32 bits_per_word_mask;
u32 min_speed_hz;
u32 max_speed_hz;
u16 flags;
bool devm_allocated;
bool slave;
size_t (*max_transfer_size)(struct spi_device *);
size_t (*max_message_size)(struct spi_device *);
struct mutex io_mutex;
spinlock_t bus_lock_spinlock;
struct mutex bus_lock_mutex;
bool bus_lock_flag;
int (*setup)(struct spi_device *);
int (*set_cs_timing)(struct spi_device *, struct spi_delay *, struct spi_delay *, struct spi_delay *);
int (*transfer)(struct spi_device *, struct spi_message *);
void (*cleanup)(struct spi_device *);
bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
bool queued;
struct kthread_worker *kworker;
struct kthread_work pump_messages;
spinlock_t queue_lock;
struct list_head queue;
struct spi_message *cur_msg;
bool idling;
bool busy;
bool running;
bool rt;
bool auto_runtime_pm;
bool cur_msg_prepared;
bool cur_msg_mapped;
bool last_cs_enable;
bool last_cs_mode_high;
bool fallback;
struct completion xfer_completion;
size_t max_dma_len;
int (*prepare_transfer_hardware)(struct spi_controller *);
int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_transfer_hardware)(struct spi_controller *);
int (*prepare_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_message)(struct spi_controller *, struct spi_message *);
int (*slave_abort)(struct spi_controller *);
void (*set_cs)(struct spi_device *, bool);
int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
void (*handle_err)(struct spi_controller *, struct spi_message *);
const struct spi_controller_mem_ops *mem_ops;
struct spi_delay cs_setup;
struct spi_delay cs_hold;
struct spi_delay cs_inactive;
int *cs_gpios;
struct gpio_desc **cs_gpiods;
bool use_gpio_descriptors;
s8 unused_native_cs;
s8 max_native_cs;
struct spi_statistics statistics;
struct dma_chan *dma_tx;
struct dma_chan *dma_rx;
void *dummy_rx;
void *dummy_tx;
int (*fw_translate_cs)(struct spi_controller *, unsigned int);
bool ptp_sts_supported;
long unsigned int irq_flags;
};
5.15: ✅struct spi_controller {
struct device dev;
struct list_head list;
s16 bus_num;
u16 num_chipselect;
u16 dma_alignment;
u32 mode_bits;
u32 buswidth_override_bits;
u32 bits_per_word_mask;
u32 min_speed_hz;
u32 max_speed_hz;
u16 flags;
bool devm_allocated;
bool slave;
size_t (*max_transfer_size)(struct spi_device *);
size_t (*max_message_size)(struct spi_device *);
struct mutex io_mutex;
struct mutex add_lock;
spinlock_t bus_lock_spinlock;
struct mutex bus_lock_mutex;
bool bus_lock_flag;
int (*setup)(struct spi_device *);
int (*set_cs_timing)(struct spi_device *);
int (*transfer)(struct spi_device *, struct spi_message *);
void (*cleanup)(struct spi_device *);
bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
struct device *dma_map_dev;
bool queued;
struct kthread_worker *kworker;
struct kthread_work pump_messages;
spinlock_t queue_lock;
struct list_head queue;
struct spi_message *cur_msg;
bool idling;
bool busy;
bool running;
bool rt;
bool auto_runtime_pm;
bool cur_msg_prepared;
bool cur_msg_mapped;
bool last_cs_enable;
bool last_cs_mode_high;
bool fallback;
struct completion xfer_completion;
size_t max_dma_len;
int (*prepare_transfer_hardware)(struct spi_controller *);
int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_transfer_hardware)(struct spi_controller *);
int (*prepare_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_message)(struct spi_controller *, struct spi_message *);
int (*slave_abort)(struct spi_controller *);
void (*set_cs)(struct spi_device *, bool);
int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
void (*handle_err)(struct spi_controller *, struct spi_message *);
const struct spi_controller_mem_ops *mem_ops;
int *cs_gpios;
struct gpio_desc **cs_gpiods;
bool use_gpio_descriptors;
s8 unused_native_cs;
s8 max_native_cs;
struct spi_statistics statistics;
struct dma_chan *dma_tx;
struct dma_chan *dma_rx;
void *dummy_rx;
void *dummy_tx;
int (*fw_translate_cs)(struct spi_controller *, unsigned int);
bool ptp_sts_supported;
long unsigned int irq_flags;
};
5.19: ✅struct spi_controller {
struct device dev;
struct list_head list;
s16 bus_num;
u16 num_chipselect;
u16 dma_alignment;
u32 mode_bits;
u32 buswidth_override_bits;
u32 bits_per_word_mask;
u32 min_speed_hz;
u32 max_speed_hz;
u16 flags;
bool devm_allocated;
bool slave;
size_t (*max_transfer_size)(struct spi_device *);
size_t (*max_message_size)(struct spi_device *);
struct mutex io_mutex;
struct mutex add_lock;
spinlock_t bus_lock_spinlock;
struct mutex bus_lock_mutex;
bool bus_lock_flag;
int (*setup)(struct spi_device *);
int (*set_cs_timing)(struct spi_device *);
int (*transfer)(struct spi_device *, struct spi_message *);
void (*cleanup)(struct spi_device *);
bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
struct device *dma_map_dev;
bool queued;
struct kthread_worker *kworker;
struct kthread_work pump_messages;
spinlock_t queue_lock;
struct list_head queue;
struct spi_message *cur_msg;
bool idling;
bool busy;
bool running;
bool rt;
bool auto_runtime_pm;
bool cur_msg_prepared;
bool cur_msg_mapped;
char last_cs;
bool last_cs_mode_high;
bool fallback;
struct completion xfer_completion;
size_t max_dma_len;
int (*prepare_transfer_hardware)(struct spi_controller *);
int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_transfer_hardware)(struct spi_controller *);
int (*prepare_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_message)(struct spi_controller *, struct spi_message *);
int (*slave_abort)(struct spi_controller *);
void (*set_cs)(struct spi_device *, bool);
int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
void (*handle_err)(struct spi_controller *, struct spi_message *);
const struct spi_controller_mem_ops *mem_ops;
const struct spi_controller_mem_caps *mem_caps;
struct gpio_desc **cs_gpiods;
bool use_gpio_descriptors;
s8 unused_native_cs;
s8 max_native_cs;
struct spi_statistics statistics;
struct dma_chan *dma_tx;
struct dma_chan *dma_rx;
void *dummy_rx;
void *dummy_tx;
int (*fw_translate_cs)(struct spi_controller *, unsigned int);
bool ptp_sts_supported;
long unsigned int irq_flags;
};
6.2: ✅struct spi_controller {
struct device dev;
struct list_head list;
s16 bus_num;
u16 num_chipselect;
u16 dma_alignment;
u32 mode_bits;
u32 buswidth_override_bits;
u32 bits_per_word_mask;
u32 min_speed_hz;
u32 max_speed_hz;
u16 flags;
bool devm_allocated;
bool slave;
bool target;
size_t (*max_transfer_size)(struct spi_device *);
size_t (*max_message_size)(struct spi_device *);
struct mutex io_mutex;
struct mutex add_lock;
spinlock_t bus_lock_spinlock;
struct mutex bus_lock_mutex;
bool bus_lock_flag;
int (*setup)(struct spi_device *);
int (*set_cs_timing)(struct spi_device *);
int (*transfer)(struct spi_device *, struct spi_message *);
void (*cleanup)(struct spi_device *);
bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
struct device *dma_map_dev;
struct device *cur_rx_dma_dev;
struct device *cur_tx_dma_dev;
bool queued;
struct kthread_worker *kworker;
struct kthread_work pump_messages;
spinlock_t queue_lock;
struct list_head queue;
struct spi_message *cur_msg;
struct completion cur_msg_completion;
bool cur_msg_incomplete;
bool cur_msg_need_completion;
bool busy;
bool running;
bool rt;
bool auto_runtime_pm;
bool cur_msg_mapped;
char last_cs;
bool last_cs_mode_high;
bool fallback;
struct completion xfer_completion;
size_t max_dma_len;
int (*prepare_transfer_hardware)(struct spi_controller *);
int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_transfer_hardware)(struct spi_controller *);
int (*prepare_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_message)(struct spi_controller *, struct spi_message *);
int (*slave_abort)(struct spi_controller *);
int (*target_abort)(struct spi_controller *);
void (*set_cs)(struct spi_device *, bool);
int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
void (*handle_err)(struct spi_controller *, struct spi_message *);
const struct spi_controller_mem_ops *mem_ops;
const struct spi_controller_mem_caps *mem_caps;
struct gpio_desc **cs_gpiods;
bool use_gpio_descriptors;
s8 unused_native_cs;
s8 max_native_cs;
struct spi_statistics *pcpu_statistics;
struct dma_chan *dma_tx;
struct dma_chan *dma_rx;
void *dummy_rx;
void *dummy_tx;
int (*fw_translate_cs)(struct spi_controller *, unsigned int);
bool ptp_sts_supported;
long unsigned int irq_flags;
bool queue_empty;
bool must_async;
};
6.5: ✅struct spi_controller {
struct device dev;
struct list_head list;
s16 bus_num;
u16 num_chipselect;
u16 dma_alignment;
u32 mode_bits;
u32 buswidth_override_bits;
u32 bits_per_word_mask;
u32 min_speed_hz;
u32 max_speed_hz;
u16 flags;
bool devm_allocated;
bool slave;
bool target;
size_t (*max_transfer_size)(struct spi_device *);
size_t (*max_message_size)(struct spi_device *);
struct mutex io_mutex;
struct mutex add_lock;
spinlock_t bus_lock_spinlock;
struct mutex bus_lock_mutex;
bool bus_lock_flag;
int (*setup)(struct spi_device *);
int (*set_cs_timing)(struct spi_device *);
int (*transfer)(struct spi_device *, struct spi_message *);
void (*cleanup)(struct spi_device *);
bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
struct device *dma_map_dev;
struct device *cur_rx_dma_dev;
struct device *cur_tx_dma_dev;
bool queued;
struct kthread_worker *kworker;
struct kthread_work pump_messages;
spinlock_t queue_lock;
struct list_head queue;
struct spi_message *cur_msg;
struct completion cur_msg_completion;
bool cur_msg_incomplete;
bool cur_msg_need_completion;
bool busy;
bool running;
bool rt;
bool auto_runtime_pm;
bool cur_msg_mapped;
char last_cs;
bool last_cs_mode_high;
bool fallback;
struct completion xfer_completion;
size_t max_dma_len;
int (*prepare_transfer_hardware)(struct spi_controller *);
int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_transfer_hardware)(struct spi_controller *);
int (*prepare_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_message)(struct spi_controller *, struct spi_message *);
int (*slave_abort)(struct spi_controller *);
int (*target_abort)(struct spi_controller *);
void (*set_cs)(struct spi_device *, bool);
int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
void (*handle_err)(struct spi_controller *, struct spi_message *);
const struct spi_controller_mem_ops *mem_ops;
const struct spi_controller_mem_caps *mem_caps;
struct gpio_desc **cs_gpiods;
bool use_gpio_descriptors;
s8 unused_native_cs;
s8 max_native_cs;
struct spi_statistics *pcpu_statistics;
struct dma_chan *dma_tx;
struct dma_chan *dma_rx;
void *dummy_rx;
void *dummy_tx;
int (*fw_translate_cs)(struct spi_controller *, unsigned int);
bool ptp_sts_supported;
long unsigned int irq_flags;
bool queue_empty;
bool must_async;
};
6.8: ✅struct spi_controller {
struct device dev;
struct list_head list;
s16 bus_num;
u16 num_chipselect;
u16 dma_alignment;
u32 mode_bits;
u32 buswidth_override_bits;
u32 bits_per_word_mask;
u32 min_speed_hz;
u32 max_speed_hz;
u16 flags;
bool devm_allocated;
bool slave;
bool target;
size_t (*max_transfer_size)(struct spi_device *);
size_t (*max_message_size)(struct spi_device *);
struct mutex io_mutex;
struct mutex add_lock;
spinlock_t bus_lock_spinlock;
struct mutex bus_lock_mutex;
bool bus_lock_flag;
int (*setup)(struct spi_device *);
int (*set_cs_timing)(struct spi_device *);
int (*transfer)(struct spi_device *, struct spi_message *);
void (*cleanup)(struct spi_device *);
bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
struct device *dma_map_dev;
struct device *cur_rx_dma_dev;
struct device *cur_tx_dma_dev;
bool queued;
struct kthread_worker *kworker;
struct kthread_work pump_messages;
spinlock_t queue_lock;
struct list_head queue;
struct spi_message *cur_msg;
struct completion cur_msg_completion;
bool cur_msg_incomplete;
bool cur_msg_need_completion;
bool busy;
bool running;
bool rt;
bool auto_runtime_pm;
bool cur_msg_mapped;
char last_cs[16];
char last_cs_index_mask;
bool last_cs_mode_high;
bool fallback;
struct completion xfer_completion;
size_t max_dma_len;
int (*prepare_transfer_hardware)(struct spi_controller *);
int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_transfer_hardware)(struct spi_controller *);
int (*prepare_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_message)(struct spi_controller *, struct spi_message *);
int (*slave_abort)(struct spi_controller *);
int (*target_abort)(struct spi_controller *);
void (*set_cs)(struct spi_device *, bool);
int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
void (*handle_err)(struct spi_controller *, struct spi_message *);
const struct spi_controller_mem_ops *mem_ops;
const struct spi_controller_mem_caps *mem_caps;
struct gpio_desc **cs_gpiods;
bool use_gpio_descriptors;
s8 unused_native_cs;
s8 max_native_cs;
struct spi_statistics *pcpu_statistics;
struct dma_chan *dma_tx;
struct dma_chan *dma_rx;
void *dummy_rx;
void *dummy_tx;
int (*fw_translate_cs)(struct spi_controller *, unsigned int);
bool ptp_sts_supported;
long unsigned int irq_flags;
bool queue_empty;
bool must_async;
};
arm64: ✅struct spi_controller {
struct device dev;
struct list_head list;
s16 bus_num;
u16 num_chipselect;
u16 dma_alignment;
u32 mode_bits;
u32 buswidth_override_bits;
u32 bits_per_word_mask;
u32 min_speed_hz;
u32 max_speed_hz;
u16 flags;
bool slave;
size_t (*max_transfer_size)(struct spi_device *);
size_t (*max_message_size)(struct spi_device *);
struct mutex io_mutex;
spinlock_t bus_lock_spinlock;
struct mutex bus_lock_mutex;
bool bus_lock_flag;
int (*setup)(struct spi_device *);
void (*set_cs_timing)(struct spi_device *, u8, u8, u8);
int (*transfer)(struct spi_device *, struct spi_message *);
void (*cleanup)(struct spi_device *);
bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
bool queued;
struct kthread_worker kworker;
struct task_struct *kworker_task;
struct kthread_work pump_messages;
spinlock_t queue_lock;
struct list_head queue;
struct spi_message *cur_msg;
bool idling;
bool busy;
bool running;
bool rt;
bool auto_runtime_pm;
bool cur_msg_prepared;
bool cur_msg_mapped;
struct completion xfer_completion;
size_t max_dma_len;
int (*prepare_transfer_hardware)(struct spi_controller *);
int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_transfer_hardware)(struct spi_controller *);
int (*prepare_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_message)(struct spi_controller *, struct spi_message *);
int (*slave_abort)(struct spi_controller *);
void (*set_cs)(struct spi_device *, bool);
int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
void (*handle_err)(struct spi_controller *, struct spi_message *);
const struct spi_controller_mem_ops *mem_ops;
int *cs_gpios;
struct gpio_desc **cs_gpiods;
bool use_gpio_descriptors;
struct spi_statistics statistics;
struct dma_chan *dma_tx;
struct dma_chan *dma_rx;
void *dummy_rx;
void *dummy_tx;
int (*fw_translate_cs)(struct spi_controller *, unsigned int);
};
armhf: ✅struct spi_controller {
struct device dev;
struct list_head list;
s16 bus_num;
u16 num_chipselect;
u16 dma_alignment;
u32 mode_bits;
u32 buswidth_override_bits;
u32 bits_per_word_mask;
u32 min_speed_hz;
u32 max_speed_hz;
u16 flags;
bool slave;
size_t (*max_transfer_size)(struct spi_device *);
size_t (*max_message_size)(struct spi_device *);
struct mutex io_mutex;
spinlock_t bus_lock_spinlock;
struct mutex bus_lock_mutex;
bool bus_lock_flag;
int (*setup)(struct spi_device *);
void (*set_cs_timing)(struct spi_device *, u8, u8, u8);
int (*transfer)(struct spi_device *, struct spi_message *);
void (*cleanup)(struct spi_device *);
bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
bool queued;
struct kthread_worker kworker;
struct task_struct *kworker_task;
struct kthread_work pump_messages;
spinlock_t queue_lock;
struct list_head queue;
struct spi_message *cur_msg;
bool idling;
bool busy;
bool running;
bool rt;
bool auto_runtime_pm;
bool cur_msg_prepared;
bool cur_msg_mapped;
struct completion xfer_completion;
size_t max_dma_len;
int (*prepare_transfer_hardware)(struct spi_controller *);
int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_transfer_hardware)(struct spi_controller *);
int (*prepare_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_message)(struct spi_controller *, struct spi_message *);
int (*slave_abort)(struct spi_controller *);
void (*set_cs)(struct spi_device *, bool);
int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
void (*handle_err)(struct spi_controller *, struct spi_message *);
const struct spi_controller_mem_ops *mem_ops;
int *cs_gpios;
struct gpio_desc **cs_gpiods;
bool use_gpio_descriptors;
struct spi_statistics statistics;
struct dma_chan *dma_tx;
struct dma_chan *dma_rx;
void *dummy_rx;
void *dummy_tx;
int (*fw_translate_cs)(struct spi_controller *, unsigned int);
};
ppc64el: ✅struct spi_controller {
struct device dev;
struct list_head list;
s16 bus_num;
u16 num_chipselect;
u16 dma_alignment;
u32 mode_bits;
u32 buswidth_override_bits;
u32 bits_per_word_mask;
u32 min_speed_hz;
u32 max_speed_hz;
u16 flags;
bool slave;
size_t (*max_transfer_size)(struct spi_device *);
size_t (*max_message_size)(struct spi_device *);
struct mutex io_mutex;
spinlock_t bus_lock_spinlock;
struct mutex bus_lock_mutex;
bool bus_lock_flag;
int (*setup)(struct spi_device *);
void (*set_cs_timing)(struct spi_device *, u8, u8, u8);
int (*transfer)(struct spi_device *, struct spi_message *);
void (*cleanup)(struct spi_device *);
bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
bool queued;
struct kthread_worker kworker;
struct task_struct *kworker_task;
struct kthread_work pump_messages;
spinlock_t queue_lock;
struct list_head queue;
struct spi_message *cur_msg;
bool idling;
bool busy;
bool running;
bool rt;
bool auto_runtime_pm;
bool cur_msg_prepared;
bool cur_msg_mapped;
struct completion xfer_completion;
size_t max_dma_len;
int (*prepare_transfer_hardware)(struct spi_controller *);
int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_transfer_hardware)(struct spi_controller *);
int (*prepare_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_message)(struct spi_controller *, struct spi_message *);
int (*slave_abort)(struct spi_controller *);
void (*set_cs)(struct spi_device *, bool);
int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
void (*handle_err)(struct spi_controller *, struct spi_message *);
const struct spi_controller_mem_ops *mem_ops;
int *cs_gpios;
struct gpio_desc **cs_gpiods;
bool use_gpio_descriptors;
struct spi_statistics statistics;
struct dma_chan *dma_tx;
struct dma_chan *dma_rx;
void *dummy_rx;
void *dummy_tx;
int (*fw_translate_cs)(struct spi_controller *, unsigned int);
};
riscv64: ✅struct spi_controller {
struct device dev;
struct list_head list;
s16 bus_num;
u16 num_chipselect;
u16 dma_alignment;
u32 mode_bits;
u32 buswidth_override_bits;
u32 bits_per_word_mask;
u32 min_speed_hz;
u32 max_speed_hz;
u16 flags;
bool slave;
size_t (*max_transfer_size)(struct spi_device *);
size_t (*max_message_size)(struct spi_device *);
struct mutex io_mutex;
spinlock_t bus_lock_spinlock;
struct mutex bus_lock_mutex;
bool bus_lock_flag;
int (*setup)(struct spi_device *);
void (*set_cs_timing)(struct spi_device *, u8, u8, u8);
int (*transfer)(struct spi_device *, struct spi_message *);
void (*cleanup)(struct spi_device *);
bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
bool queued;
struct kthread_worker kworker;
struct task_struct *kworker_task;
struct kthread_work pump_messages;
spinlock_t queue_lock;
struct list_head queue;
struct spi_message *cur_msg;
bool idling;
bool busy;
bool running;
bool rt;
bool auto_runtime_pm;
bool cur_msg_prepared;
bool cur_msg_mapped;
struct completion xfer_completion;
size_t max_dma_len;
int (*prepare_transfer_hardware)(struct spi_controller *);
int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_transfer_hardware)(struct spi_controller *);
int (*prepare_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_message)(struct spi_controller *, struct spi_message *);
int (*slave_abort)(struct spi_controller *);
void (*set_cs)(struct spi_device *, bool);
int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
void (*handle_err)(struct spi_controller *, struct spi_message *);
const struct spi_controller_mem_ops *mem_ops;
int *cs_gpios;
struct gpio_desc **cs_gpiods;
bool use_gpio_descriptors;
struct spi_statistics statistics;
struct dma_chan *dma_tx;
struct dma_chan *dma_rx;
void *dummy_rx;
void *dummy_tx;
int (*fw_translate_cs)(struct spi_controller *, unsigned int);
};
aws: ✅struct spi_controller {
struct device dev;
struct list_head list;
s16 bus_num;
u16 num_chipselect;
u16 dma_alignment;
u32 mode_bits;
u32 buswidth_override_bits;
u32 bits_per_word_mask;
u32 min_speed_hz;
u32 max_speed_hz;
u16 flags;
bool slave;
size_t (*max_transfer_size)(struct spi_device *);
size_t (*max_message_size)(struct spi_device *);
struct mutex io_mutex;
spinlock_t bus_lock_spinlock;
struct mutex bus_lock_mutex;
bool bus_lock_flag;
int (*setup)(struct spi_device *);
void (*set_cs_timing)(struct spi_device *, u8, u8, u8);
int (*transfer)(struct spi_device *, struct spi_message *);
void (*cleanup)(struct spi_device *);
bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
bool queued;
struct kthread_worker kworker;
struct task_struct *kworker_task;
struct kthread_work pump_messages;
spinlock_t queue_lock;
struct list_head queue;
struct spi_message *cur_msg;
bool idling;
bool busy;
bool running;
bool rt;
bool auto_runtime_pm;
bool cur_msg_prepared;
bool cur_msg_mapped;
struct completion xfer_completion;
size_t max_dma_len;
int (*prepare_transfer_hardware)(struct spi_controller *);
int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_transfer_hardware)(struct spi_controller *);
int (*prepare_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_message)(struct spi_controller *, struct spi_message *);
int (*slave_abort)(struct spi_controller *);
void (*set_cs)(struct spi_device *, bool);
int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
void (*handle_err)(struct spi_controller *, struct spi_message *);
const struct spi_controller_mem_ops *mem_ops;
int *cs_gpios;
struct gpio_desc **cs_gpiods;
bool use_gpio_descriptors;
struct spi_statistics statistics;
struct dma_chan *dma_tx;
struct dma_chan *dma_rx;
void *dummy_rx;
void *dummy_tx;
int (*fw_translate_cs)(struct spi_controller *, unsigned int);
};
azure: ✅struct spi_controller {
struct device dev;
struct list_head list;
s16 bus_num;
u16 num_chipselect;
u16 dma_alignment;
u32 mode_bits;
u32 buswidth_override_bits;
u32 bits_per_word_mask;
u32 min_speed_hz;
u32 max_speed_hz;
u16 flags;
bool slave;
size_t (*max_transfer_size)(struct spi_device *);
size_t (*max_message_size)(struct spi_device *);
struct mutex io_mutex;
spinlock_t bus_lock_spinlock;
struct mutex bus_lock_mutex;
bool bus_lock_flag;
int (*setup)(struct spi_device *);
void (*set_cs_timing)(struct spi_device *, u8, u8, u8);
int (*transfer)(struct spi_device *, struct spi_message *);
void (*cleanup)(struct spi_device *);
bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
bool queued;
struct kthread_worker kworker;
struct task_struct *kworker_task;
struct kthread_work pump_messages;
spinlock_t queue_lock;
struct list_head queue;
struct spi_message *cur_msg;
bool idling;
bool busy;
bool running;
bool rt;
bool auto_runtime_pm;
bool cur_msg_prepared;
bool cur_msg_mapped;
struct completion xfer_completion;
size_t max_dma_len;
int (*prepare_transfer_hardware)(struct spi_controller *);
int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_transfer_hardware)(struct spi_controller *);
int (*prepare_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_message)(struct spi_controller *, struct spi_message *);
int (*slave_abort)(struct spi_controller *);
void (*set_cs)(struct spi_device *, bool);
int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
void (*handle_err)(struct spi_controller *, struct spi_message *);
const struct spi_controller_mem_ops *mem_ops;
int *cs_gpios;
struct gpio_desc **cs_gpiods;
bool use_gpio_descriptors;
struct spi_statistics statistics;
struct dma_chan *dma_tx;
struct dma_chan *dma_rx;
void *dummy_rx;
void *dummy_tx;
int (*fw_translate_cs)(struct spi_controller *, unsigned int);
};
gcp: ✅struct spi_controller {
struct device dev;
struct list_head list;
s16 bus_num;
u16 num_chipselect;
u16 dma_alignment;
u32 mode_bits;
u32 buswidth_override_bits;
u32 bits_per_word_mask;
u32 min_speed_hz;
u32 max_speed_hz;
u16 flags;
bool slave;
size_t (*max_transfer_size)(struct spi_device *);
size_t (*max_message_size)(struct spi_device *);
struct mutex io_mutex;
spinlock_t bus_lock_spinlock;
struct mutex bus_lock_mutex;
bool bus_lock_flag;
int (*setup)(struct spi_device *);
void (*set_cs_timing)(struct spi_device *, u8, u8, u8);
int (*transfer)(struct spi_device *, struct spi_message *);
void (*cleanup)(struct spi_device *);
bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
bool queued;
struct kthread_worker kworker;
struct task_struct *kworker_task;
struct kthread_work pump_messages;
spinlock_t queue_lock;
struct list_head queue;
struct spi_message *cur_msg;
bool idling;
bool busy;
bool running;
bool rt;
bool auto_runtime_pm;
bool cur_msg_prepared;
bool cur_msg_mapped;
struct completion xfer_completion;
size_t max_dma_len;
int (*prepare_transfer_hardware)(struct spi_controller *);
int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_transfer_hardware)(struct spi_controller *);
int (*prepare_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_message)(struct spi_controller *, struct spi_message *);
int (*slave_abort)(struct spi_controller *);
void (*set_cs)(struct spi_device *, bool);
int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
void (*handle_err)(struct spi_controller *, struct spi_message *);
const struct spi_controller_mem_ops *mem_ops;
int *cs_gpios;
struct gpio_desc **cs_gpiods;
bool use_gpio_descriptors;
struct spi_statistics statistics;
struct dma_chan *dma_tx;
struct dma_chan *dma_rx;
void *dummy_rx;
void *dummy_tx;
int (*fw_translate_cs)(struct spi_controller *, unsigned int);
};
lowlatency: ✅struct spi_controller {
struct device dev;
struct list_head list;
s16 bus_num;
u16 num_chipselect;
u16 dma_alignment;
u32 mode_bits;
u32 buswidth_override_bits;
u32 bits_per_word_mask;
u32 min_speed_hz;
u32 max_speed_hz;
u16 flags;
bool slave;
size_t (*max_transfer_size)(struct spi_device *);
size_t (*max_message_size)(struct spi_device *);
struct mutex io_mutex;
spinlock_t bus_lock_spinlock;
struct mutex bus_lock_mutex;
bool bus_lock_flag;
int (*setup)(struct spi_device *);
void (*set_cs_timing)(struct spi_device *, u8, u8, u8);
int (*transfer)(struct spi_device *, struct spi_message *);
void (*cleanup)(struct spi_device *);
bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
bool queued;
struct kthread_worker kworker;
struct task_struct *kworker_task;
struct kthread_work pump_messages;
spinlock_t queue_lock;
struct list_head queue;
struct spi_message *cur_msg;
bool idling;
bool busy;
bool running;
bool rt;
bool auto_runtime_pm;
bool cur_msg_prepared;
bool cur_msg_mapped;
struct completion xfer_completion;
size_t max_dma_len;
int (*prepare_transfer_hardware)(struct spi_controller *);
int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_transfer_hardware)(struct spi_controller *);
int (*prepare_message)(struct spi_controller *, struct spi_message *);
int (*unprepare_message)(struct spi_controller *, struct spi_message *);
int (*slave_abort)(struct spi_controller *);
void (*set_cs)(struct spi_device *, bool);
int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
void (*handle_err)(struct spi_controller *, struct spi_message *);
const struct spi_controller_mem_ops *mem_ops;
int *cs_gpios;
struct gpio_desc **cs_gpiods;
bool use_gpio_descriptors;
struct spi_statistics statistics;
struct dma_chan *dma_tx;
struct dma_chan *dma_rx;
void *dummy_rx;
void *dummy_tx;
int (*fw_translate_cs)(struct spi_controller *, unsigned int);
};
Regular
4.13 and 4.15 ✅
4.15 and 4.18 ⚠️const struct spi_controller_mem_ops *mem_ops
int (*spi_flash_read)(struct spi_device *, struct spi_flash_read_message *)
bool (*spi_flash_can_dma)(struct spi_device *, struct spi_flash_read_message *)
bool (*flash_read_supported)(struct spi_device *)
4.18 and 5.0 ✅
5.0 and 5.3 ⚠️void (*set_cs_timing)(struct spi_device *, u8, u8, u8)
struct gpio_desc **cs_gpiods
bool use_gpio_descriptors
u16 mode_bits ➡️ u32 mode_bits
5.3 and 5.4 ⚠️u32 buswidth_override_bits
5.4 and 5.8 ⚠️struct spi_delay cs_setup
struct spi_delay cs_hold
struct spi_delay cs_inactive
u8 unused_native_cs
u8 max_native_cs
bool ptp_sts_supported
long unsigned int irq_flags
void (*set_cs_timing)(struct spi_device *, u8, u8, u8) ➡️ int (*set_cs_timing)(struct spi_device *, struct spi_delay *, struct spi_delay *, struct spi_delay *)
5.8 and 5.11 ⚠️bool last_cs_enable
bool last_cs_mode_high
bool fallback
struct task_struct *kworker_task
struct kthread_worker kworker ➡️ struct kthread_worker *kworker
5.11 and 5.13 ⚠️bool devm_allocated
u8 unused_native_cs ➡️ s8 unused_native_cs
u8 max_native_cs ➡️ s8 max_native_cs
5.13 and 5.15 ⚠️struct mutex add_lock
struct device *dma_map_dev
struct spi_delay cs_setup
struct spi_delay cs_hold
struct spi_delay cs_inactive
int (*set_cs_timing)(struct spi_device *, struct spi_delay *, struct spi_delay *, struct spi_delay *) ➡️ int (*set_cs_timing)(struct spi_device *)
5.15 and 5.19 ⚠️char last_cs
const struct spi_controller_mem_caps *mem_caps
bool last_cs_enable
int *cs_gpios
5.19 and 6.2 ⚠️bool target
struct device *cur_rx_dma_dev
struct device *cur_tx_dma_dev
struct completion cur_msg_completion
bool cur_msg_incomplete
bool cur_msg_need_completion
int (*target_abort)(struct spi_controller *)
struct spi_statistics *pcpu_statistics
bool queue_empty
bool must_async
bool idling
bool cur_msg_prepared
struct spi_statistics statistics
6.2 and 6.5 ✅
6.5 and 6.8 ⚠️char last_cs_index_mask
char last_cs ➡️ char last_cs[16]
amd64 and arm64 ✅
amd64 and armhf ✅
amd64 and ppc64el ✅
amd64 and riscv64 ✅
generic and aws ✅
generic and azure ✅
generic and gcp ✅
generic and lowlatency ✅