root/include/linux/greybus/bundle.h

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

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. gb_pm_runtime_get_sync
  2. gb_pm_runtime_put_autosuspend
  3. gb_pm_runtime_get_noresume
  4. gb_pm_runtime_put_noidle
  5. gb_pm_runtime_get_sync
  6. gb_pm_runtime_put_autosuspend
  7. gb_pm_runtime_get_noresume
  8. gb_pm_runtime_put_noidle

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 /*
   3  * Greybus bundles
   4  *
   5  * Copyright 2014 Google Inc.
   6  * Copyright 2014 Linaro Ltd.
   7  */
   8 
   9 #ifndef __BUNDLE_H
  10 #define __BUNDLE_H
  11 
  12 #include <linux/types.h>
  13 #include <linux/list.h>
  14 #include <linux/pm_runtime.h>
  15 #include <linux/device.h>
  16 
  17 #define BUNDLE_ID_NONE  U8_MAX
  18 
  19 /* Greybus "public" definitions" */
  20 struct gb_bundle {
  21         struct device           dev;
  22         struct gb_interface     *intf;
  23 
  24         u8                      id;
  25         u8                      class;
  26         u8                      class_major;
  27         u8                      class_minor;
  28 
  29         size_t                  num_cports;
  30         struct greybus_descriptor_cport *cport_desc;
  31 
  32         struct list_head        connections;
  33         u8                      *state;
  34 
  35         struct list_head        links;  /* interface->bundles */
  36 };
  37 #define to_gb_bundle(d) container_of(d, struct gb_bundle, dev)
  38 
  39 /* Greybus "private" definitions" */
  40 struct gb_bundle *gb_bundle_create(struct gb_interface *intf, u8 bundle_id,
  41                                    u8 class);
  42 int gb_bundle_add(struct gb_bundle *bundle);
  43 void gb_bundle_destroy(struct gb_bundle *bundle);
  44 
  45 /* Bundle Runtime PM wrappers */
  46 #ifdef CONFIG_PM
  47 static inline int gb_pm_runtime_get_sync(struct gb_bundle *bundle)
  48 {
  49         int retval;
  50 
  51         retval = pm_runtime_get_sync(&bundle->dev);
  52         if (retval < 0) {
  53                 dev_err(&bundle->dev,
  54                         "pm_runtime_get_sync failed: %d\n", retval);
  55                 pm_runtime_put_noidle(&bundle->dev);
  56                 return retval;
  57         }
  58 
  59         return 0;
  60 }
  61 
  62 static inline int gb_pm_runtime_put_autosuspend(struct gb_bundle *bundle)
  63 {
  64         int retval;
  65 
  66         pm_runtime_mark_last_busy(&bundle->dev);
  67         retval = pm_runtime_put_autosuspend(&bundle->dev);
  68 
  69         return retval;
  70 }
  71 
  72 static inline void gb_pm_runtime_get_noresume(struct gb_bundle *bundle)
  73 {
  74         pm_runtime_get_noresume(&bundle->dev);
  75 }
  76 
  77 static inline void gb_pm_runtime_put_noidle(struct gb_bundle *bundle)
  78 {
  79         pm_runtime_put_noidle(&bundle->dev);
  80 }
  81 
  82 #else
  83 static inline int gb_pm_runtime_get_sync(struct gb_bundle *bundle)
  84 { return 0; }
  85 static inline int gb_pm_runtime_put_autosuspend(struct gb_bundle *bundle)
  86 { return 0; }
  87 
  88 static inline void gb_pm_runtime_get_noresume(struct gb_bundle *bundle) {}
  89 static inline void gb_pm_runtime_put_noidle(struct gb_bundle *bundle) {}
  90 #endif
  91 
  92 #endif /* __BUNDLE_H */

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