bundle.h (2064B)
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" */ 20struct 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" */ 40struct gb_bundle *gb_bundle_create(struct gb_interface *intf, u8 bundle_id, 41 u8 class); 42int gb_bundle_add(struct gb_bundle *bundle); 43void gb_bundle_destroy(struct gb_bundle *bundle); 44 45/* Bundle Runtime PM wrappers */ 46#ifdef CONFIG_PM 47static 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 62static 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 72static inline void gb_pm_runtime_get_noresume(struct gb_bundle *bundle) 73{ 74 pm_runtime_get_noresume(&bundle->dev); 75} 76 77static inline void gb_pm_runtime_put_noidle(struct gb_bundle *bundle) 78{ 79 pm_runtime_put_noidle(&bundle->dev); 80} 81 82#else 83static inline int gb_pm_runtime_get_sync(struct gb_bundle *bundle) 84{ return 0; } 85static inline int gb_pm_runtime_put_autosuspend(struct gb_bundle *bundle) 86{ return 0; } 87 88static inline void gb_pm_runtime_get_noresume(struct gb_bundle *bundle) {} 89static inline void gb_pm_runtime_put_noidle(struct gb_bundle *bundle) {} 90#endif 91 92#endif /* __BUNDLE_H */