1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* |
3 | * Greybus operations |
4 | * |
5 | * Copyright 2015-2016 Google Inc. |
6 | */ |
7 | |
8 | #ifndef _GB_AUDIO_MANAGER_H_ |
9 | #define _GB_AUDIO_MANAGER_H_ |
10 | |
11 | #include <linux/kobject.h> |
12 | #include <linux/list.h> |
13 | |
14 | #define GB_AUDIO_MANAGER_NAME "gb_audio_manager" |
15 | #define GB_AUDIO_MANAGER_MODULE_NAME_LEN 64 |
16 | #define GB_AUDIO_MANAGER_MODULE_NAME_LEN_SSCANF "63" |
17 | |
18 | struct gb_audio_manager_module_descriptor { |
19 | char name[GB_AUDIO_MANAGER_MODULE_NAME_LEN]; |
20 | int vid; |
21 | int pid; |
22 | int intf_id; |
23 | unsigned int ip_devices; |
24 | unsigned int op_devices; |
25 | }; |
26 | |
27 | struct gb_audio_manager_module { |
28 | struct kobject kobj; |
29 | struct list_head list; |
30 | int id; |
31 | struct gb_audio_manager_module_descriptor desc; |
32 | }; |
33 | |
34 | /* |
35 | * Creates a new gb_audio_manager_module_descriptor, using the specified |
36 | * descriptor. |
37 | * |
38 | * Returns a negative result on error, or the id of the newly created module. |
39 | * |
40 | */ |
41 | int gb_audio_manager_add(struct gb_audio_manager_module_descriptor *desc); |
42 | |
43 | /* |
44 | * Removes a connected gb_audio_manager_module_descriptor for the specified ID. |
45 | * |
46 | * Returns zero on success, or a negative value on error. |
47 | */ |
48 | int gb_audio_manager_remove(int id); |
49 | |
50 | /* |
51 | * Removes all connected gb_audio_modules |
52 | * |
53 | * Returns zero on success, or a negative value on error. |
54 | */ |
55 | void gb_audio_manager_remove_all(void); |
56 | |
57 | /* |
58 | * Retrieves a gb_audio_manager_module_descriptor for the specified id. |
59 | * Returns the gb_audio_manager_module_descriptor structure, |
60 | * or NULL if there is no module with the specified ID. |
61 | */ |
62 | struct gb_audio_manager_module *gb_audio_manager_get_module(int id); |
63 | |
64 | /* |
65 | * Decreases the refcount of the module, obtained by the get function. |
66 | * Modules are removed via gb_audio_manager_remove |
67 | */ |
68 | void gb_audio_manager_put_module(struct gb_audio_manager_module *module); |
69 | |
70 | /* |
71 | * Dumps the module for the specified id |
72 | * Return 0 on success |
73 | */ |
74 | int gb_audio_manager_dump_module(int id); |
75 | |
76 | /* |
77 | * Dumps all connected modules |
78 | */ |
79 | void gb_audio_manager_dump_all(void); |
80 | |
81 | #endif /* _GB_AUDIO_MANAGER_H_ */ |
82 | |