spi_controller
Regular
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
✅