]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - include/linux/fsi.h
Merge tag 'docs-4.13' of git://git.lwn.net/linux
[karo-tx-linux.git] / include / linux / fsi.h
index 273cbf6400eac4897237975cca926daa9e8fbace..141fd38d061ffbe168355e4938ed83bcf407eca1 100644 (file)
@@ -21,8 +21,18 @@ struct fsi_device {
        struct device           dev;
        u8                      engine_type;
        u8                      version;
+       u8                      unit;
+       struct fsi_slave        *slave;
+       uint32_t                addr;
+       uint32_t                size;
 };
 
+extern int fsi_device_read(struct fsi_device *dev, uint32_t addr,
+               void *val, size_t size);
+extern int fsi_device_write(struct fsi_device *dev, uint32_t addr,
+               const void *val, size_t size);
+extern int fsi_device_peek(struct fsi_device *dev, void *val);
+
 struct fsi_device_id {
        u8      engine_type;
        u8      version;
@@ -36,7 +46,6 @@ struct fsi_device_id {
 #define FSI_DEVICE_VERSIONED(t, v) \
        .engine_type = (t), .version = (v),
 
-
 struct fsi_driver {
        struct device_driver            drv;
        const struct fsi_device_id      *id_table;
@@ -45,6 +54,30 @@ struct fsi_driver {
 #define to_fsi_dev(devp) container_of(devp, struct fsi_device, dev)
 #define to_fsi_drv(drvp) container_of(drvp, struct fsi_driver, drv)
 
+extern int fsi_driver_register(struct fsi_driver *fsi_drv);
+extern void fsi_driver_unregister(struct fsi_driver *fsi_drv);
+
+/* module_fsi_driver() - Helper macro for drivers that don't do
+ * anything special in module init/exit.  This eliminates a lot of
+ * boilerplate.  Each module may only use this macro once, and
+ * calling it replaces module_init() and module_exit()
+ */
+#define module_fsi_driver(__fsi_driver) \
+               module_driver(__fsi_driver, fsi_driver_register, \
+                               fsi_driver_unregister)
+
+/* direct slave API */
+extern int fsi_slave_claim_range(struct fsi_slave *slave,
+               uint32_t addr, uint32_t size);
+extern void fsi_slave_release_range(struct fsi_slave *slave,
+               uint32_t addr, uint32_t size);
+extern int fsi_slave_read(struct fsi_slave *slave, uint32_t addr,
+               void *val, size_t size);
+extern int fsi_slave_write(struct fsi_slave *slave, uint32_t addr,
+               const void *val, size_t size);
+
+
+
 extern struct bus_type fsi_bus_type;
 
 #endif /* LINUX_FSI_H */