root/include/linux/sunxi-rsb.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. to_sunxi_rsb_device
  2. sunxi_rsb_device_get_drvdata
  3. sunxi_rsb_device_set_drvdata
  4. to_sunxi_rsb_driver
  5. sunxi_rsb_driver_unregister

   1 /*
   2  * Allwinner Reduced Serial Bus Driver
   3  *
   4  * Copyright (c) 2015 Chen-Yu Tsai
   5  *
   6  * Author: Chen-Yu Tsai <wens@csie.org>
   7  *
   8  * This file is licensed under the terms of the GNU General Public
   9  * License version 2.  This program is licensed "as is" without any
  10  * warranty of any kind, whether express or implied.
  11  */
  12 #ifndef _SUNXI_RSB_H
  13 #define _SUNXI_RSB_H
  14 
  15 #include <linux/device.h>
  16 #include <linux/regmap.h>
  17 #include <linux/types.h>
  18 
  19 struct sunxi_rsb;
  20 
  21 /**
  22  * struct sunxi_rsb_device - Basic representation of an RSB device
  23  * @dev:        Driver model representation of the device.
  24  * @ctrl:       RSB controller managing the bus hosting this device.
  25  * @rtaddr:     This device's runtime address
  26  * @hwaddr:     This device's hardware address
  27  */
  28 struct sunxi_rsb_device {
  29         struct device           dev;
  30         struct sunxi_rsb        *rsb;
  31         int                     irq;
  32         u8                      rtaddr;
  33         u16                     hwaddr;
  34 };
  35 
  36 static inline struct sunxi_rsb_device *to_sunxi_rsb_device(struct device *d)
  37 {
  38         return container_of(d, struct sunxi_rsb_device, dev);
  39 }
  40 
  41 static inline void *sunxi_rsb_device_get_drvdata(const struct sunxi_rsb_device *rdev)
  42 {
  43         return dev_get_drvdata(&rdev->dev);
  44 }
  45 
  46 static inline void sunxi_rsb_device_set_drvdata(struct sunxi_rsb_device *rdev,
  47                                                 void *data)
  48 {
  49         dev_set_drvdata(&rdev->dev, data);
  50 }
  51 
  52 /**
  53  * struct sunxi_rsb_driver - RSB slave device driver
  54  * @driver:     RSB device drivers should initialize name and owner field of
  55  *              this structure.
  56  * @probe:      binds this driver to a RSB device.
  57  * @remove:     unbinds this driver from the RSB device.
  58  */
  59 struct sunxi_rsb_driver {
  60         struct device_driver driver;
  61         int (*probe)(struct sunxi_rsb_device *rdev);
  62         int (*remove)(struct sunxi_rsb_device *rdev);
  63 };
  64 
  65 static inline struct sunxi_rsb_driver *to_sunxi_rsb_driver(struct device_driver *d)
  66 {
  67         return container_of(d, struct sunxi_rsb_driver, driver);
  68 }
  69 
  70 int sunxi_rsb_driver_register(struct sunxi_rsb_driver *rdrv);
  71 
  72 /**
  73  * sunxi_rsb_driver_unregister() - unregister an RSB client driver
  74  * @rdrv:       the driver to unregister
  75  */
  76 static inline void sunxi_rsb_driver_unregister(struct sunxi_rsb_driver *rdrv)
  77 {
  78         if (rdrv)
  79                 driver_unregister(&rdrv->driver);
  80 }
  81 
  82 #define module_sunxi_rsb_driver(__sunxi_rsb_driver) \
  83         module_driver(__sunxi_rsb_driver, sunxi_rsb_driver_register, \
  84                         sunxi_rsb_driver_unregister)
  85 
  86 struct regmap *__devm_regmap_init_sunxi_rsb(struct sunxi_rsb_device *rdev,
  87                                             const struct regmap_config *config,
  88                                             struct lock_class_key *lock_key,
  89                                             const char *lock_name);
  90 
  91 /**
  92  * devm_regmap_init_sunxi_rsb(): Initialise managed register map
  93  *
  94  * @rdev: Device that will be interacted with
  95  * @config: Configuration for register map
  96  *
  97  * The return value will be an ERR_PTR() on error or a valid pointer
  98  * to a struct regmap.  The regmap will be automatically freed by the
  99  * device management code.
 100  */
 101 #define devm_regmap_init_sunxi_rsb(rdev, config)                        \
 102         __regmap_lockdep_wrapper(__devm_regmap_init_sunxi_rsb, #config, \
 103                                  rdev, config)
 104 
 105 #endif /* _SUNXI_RSB_H */

/* [<][>][^][v][top][bottom][index][help] */