* [PATCH v2] staging: greybus: Refactor gb_audio_gb_get_topology() into separate calls
@ 2023-08-05 1:42 Madhumitha Prabakaran
0 siblings, 0 replies; only message in thread
From: Madhumitha Prabakaran @ 2023-08-05 1:42 UTC (permalink / raw)
To: vaibhav.sr, mgreer, johan, elder, gregkh, greybus-dev,
linux-staging, linux-kernel
Cc: skhan, ivan.orlov0322, madhumithabiw
Refactor gb_audio_gb_get_topology() into separate calls for better modularity
Signed-off-by: Madhumitha Prabakaran <madhumithabiw@gmail.com>
----
Changes in v2:
Include prototype in the /audio_codec.h, as
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202308050511.y5Yb9otW-lkp@intel.com/
---
drivers/staging/greybus/audio_codec.h | 4 ++
drivers/staging/greybus/audio_gb.c | 67 +++++++++++++++++----------
2 files changed, 46 insertions(+), 25 deletions(-)
diff --git a/drivers/staging/greybus/audio_codec.h b/drivers/staging/greybus/audio_codec.h
index ce15e800e607..356143f3e241 100644
--- a/drivers/staging/greybus/audio_codec.h
+++ b/drivers/staging/greybus/audio_codec.h
@@ -176,7 +176,11 @@ int gbaudio_module_update(struct gbaudio_codec_info *codec,
int gbaudio_register_module(struct gbaudio_module_info *module);
void gbaudio_unregister_module(struct gbaudio_module_info *module);
+struct gb_audio_topology *gb_audio_gb_alloc_topology(u16 size);
+
/* protocol related */
+int gb_audio_gb_get_topology_size(struct gb_connection *connection,
+ u16 *size);
int gb_audio_gb_get_topology(struct gb_connection *connection,
struct gb_audio_topology **topology);
int gb_audio_gb_get_control(struct gb_connection *connection,
diff --git a/drivers/staging/greybus/audio_gb.c b/drivers/staging/greybus/audio_gb.c
index 9d8994fdb41a..a48ddadd6f1e 100644
--- a/drivers/staging/greybus/audio_gb.c
+++ b/drivers/staging/greybus/audio_gb.c
@@ -8,39 +8,56 @@
#include <linux/greybus.h>
#include "audio_codec.h"
-/* TODO: Split into separate calls */
-int gb_audio_gb_get_topology(struct gb_connection *connection,
- struct gb_audio_topology **topology)
+int gb_audio_gb_get_topology_size(struct gb_connection *connection, u16 *size)
{
- struct gb_audio_get_topology_size_response size_resp;
- struct gb_audio_topology *topo;
- u16 size;
- int ret;
+ struct gb_audio_get_topology_size_response size_resp;
+ int ret;
- ret = gb_operation_sync(connection, GB_AUDIO_TYPE_GET_TOPOLOGY_SIZE,
- NULL, 0, &size_resp, sizeof(size_resp));
- if (ret)
- return ret;
+ ret = gb_operation_sync(connection, GB_AUDIO_TYPE_GET_TOPOLOGY_SIZE,
+ NULL, 0, &size_resp, sizeof(size_resp));
+ if (ret)
+ return ret;
- size = le16_to_cpu(size_resp.size);
- if (size < sizeof(*topo))
- return -ENODATA;
+ *size = le16_to_cpu(size_resp.size);
+ return 0;
+}
- topo = kzalloc(size, GFP_KERNEL);
- if (!topo)
- return -ENOMEM;
+struct gb_audio_topology *gb_audio_gb_alloc_topology(u16 size)
+{
+ struct gb_audio_topology *topo;
- ret = gb_operation_sync(connection, GB_AUDIO_TYPE_GET_TOPOLOGY, NULL, 0,
- topo, size);
- if (ret) {
- kfree(topo);
- return ret;
- }
+ if (size < sizeof(struct gb_audio_topology))
+ return NULL;
- *topology = topo;
+ topo = kzalloc(size, GFP_KERNEL);
+ return topo;
+}
- return 0;
+int gb_audio_gb_get_topology(struct gb_connection *connection,
+ struct gb_audio_topology **topology)
+{
+ u16 size;
+ int ret;
+
+ ret = gb_audio_gb_get_topology_size(connection, &size);
+ if (ret)
+ return ret;
+
+ *topology = gb_audio_gb_alloc_topology(size);
+ if (!*topology)
+ return -ENOMEM;
+
+ ret = gb_operation_sync(connection, GB_AUDIO_TYPE_GET_TOPOLOGY,
+ NULL, 0, *topology, size);
+ if (ret) {
+ kfree(*topology);
+ *topology = NULL;
+ return ret;
+ }
+
+ return 0;
}
+
EXPORT_SYMBOL_GPL(gb_audio_gb_get_topology);
int gb_audio_gb_get_control(struct gb_connection *connection,
--
2.25.1
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2023-08-05 1:42 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-05 1:42 [PATCH v2] staging: greybus: Refactor gb_audio_gb_get_topology() into separate calls Madhumitha Prabakaran
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.