Xenomai 3.3.2
Loading...
Searching...
No Matches
spi-master.h
1
18#ifndef _RTDM_SPI_MASTER_H
19#define _RTDM_SPI_MASTER_H
20
21#include <rtdm/driver.h>
22#include <rtdm/uapi/spi.h>
23#include "spi-device.h"
24
25struct class;
26struct device_node;
27struct rtdm_spi_master;
28struct spi_master;
29
30struct rtdm_spi_master_ops {
31 int (*open)(struct rtdm_spi_remote_slave *slave);
32 void (*close)(struct rtdm_spi_remote_slave *slave);
33 int (*configure)(struct rtdm_spi_remote_slave *slave);
34 void (*chip_select)(struct rtdm_spi_remote_slave *slave,
35 bool active);
36 int (*set_iobufs)(struct rtdm_spi_remote_slave *slave,
37 struct rtdm_spi_iobufs *p);
38 int (*mmap_iobufs)(struct rtdm_spi_remote_slave *slave,
39 struct vm_area_struct *vma);
40 void (*mmap_release)(struct rtdm_spi_remote_slave *slave);
41 int (*transfer_iobufs)(struct rtdm_spi_remote_slave *slave);
42 int (*transfer_iobufs_n)(struct rtdm_spi_remote_slave *slave, int len);
43 ssize_t (*write)(struct rtdm_spi_remote_slave *slave,
44 const void *tx, size_t len);
45 ssize_t (*read)(struct rtdm_spi_remote_slave *slave,
46 void *rx, size_t len);
47 struct rtdm_spi_remote_slave *(*attach_slave)
48 (struct rtdm_spi_master *master,
49 struct spi_device *spi);
50 void (*detach_slave)(struct rtdm_spi_remote_slave *slave);
51};
52
53struct rtdm_spi_master {
54 int subclass;
55 const struct rtdm_spi_master_ops *ops;
56 struct spi_controller *controller;
57 struct { /* Internal */
58 struct rtdm_driver driver;
59 struct class *devclass;
60 char *classname;
61 struct list_head slaves;
62 struct list_head next;
63 rtdm_lock_t lock;
64 rtdm_mutex_t bus_lock;
65 struct rtdm_spi_remote_slave *cs;
66 };
67};
68
69#define rtdm_spi_alloc_master(__dev, __type, __mptr) \
70 __rtdm_spi_alloc_master(__dev, sizeof(__type), \
71 offsetof(__type, __mptr)) \
72
73struct rtdm_spi_master *
74__rtdm_spi_alloc_master(struct device *dev, size_t size, int off);
75
76int __rtdm_spi_setup_driver(struct rtdm_spi_master *master);
77
78int rtdm_spi_add_master(struct rtdm_spi_master *master);
79
80void rtdm_spi_remove_master(struct rtdm_spi_master *master);
81
82#endif /* !_RTDM_SPI_MASTER_H */
Real-Time Driver Model for Xenomai, driver API header.
pipeline_spinlock_t rtdm_lock_t
Lock variable.
Definition driver.h:552
RTDM driver.
Definition driver.h:251