From 4fddc1944570f60d0bda8280bd07192f31b41df4 Mon Sep 17 00:00:00 2001
From: Pawel Szewczyk
Date: Fri, 3 Jul 2015 11:58:36 +0200
Subject: [PATCH] gadget: Add gadget disable on libusbg backend
Change-Id: I6a42e3b11e50b365cac1af4b872ba693b0c02017
Signed-off-by: Pawel Szewczyk
---
source/gadget/src/gadget_libusbg.c | 46 +++++++++++++++++++++++++++++++++++++-
1 file changed, 45 insertions(+), 1 deletion(-)
diff --git a/source/gadget/src/gadget_libusbg.c b/source/gadget/src/gadget_libusbg.c
index c2c651c..6253527 100644
--- a/source/gadget/src/gadget_libusbg.c
+++ b/source/gadget/src/gadget_libusbg.c
@@ -155,13 +155,57 @@ static int enable_func(void *data)
return 0;
}
+static int disable_func(void *data)
+{
+ struct gt_gadget_disable_data *dt;
+
+ usbg_gadget *g;
+ usbg_udc *u;
+ int usbg_ret;
+
+ dt = (struct gt_gadget_disable_data *)data;
+
+ if (dt->gadget) {
+ g = usbg_get_gadget(backend_ctx.libusbg_state, dt->gadget);
+ if (g == NULL) {
+ fprintf(stderr, "Gadget '%s' not found\n", dt->gadget);
+ return -1;
+ }
+ } else if (dt->udc) {
+ u = usbg_get_udc(backend_ctx.libusbg_state, dt->udc);
+ if (u == NULL) {
+ fprintf(stderr, "UDC '%s' not found\n", dt->udc);
+ return -1;
+ }
+
+ g = usbg_get_udc_gadget(u);
+ if (g == NULL) {
+ fprintf(stderr, "No gadget enabled on this UDC\n");
+ return -1;
+ }
+ } else {
+ /*TODO disabling default gadget */
+ fprintf(stderr, "Gadget not specified\n");
+ return -1;
+ }
+
+ usbg_ret = usbg_disable_gadget(g);
+ if (usbg_ret != USBG_SUCCESS) {
+ fprintf(stderr, "Error on disable gadget: %s : %s\n",
+ usbg_error_name(usbg_ret), usbg_strerror(usbg_ret));
+ return -1;
+ }
+
+ return 0;
+}
+
struct gt_gadget_backend gt_gadget_backend_libusbg = {
.create = create_func,
.rm = rm_func,
.get = NULL,
.set = NULL,
.enable = enable_func,
- .disable = NULL,
+ .disable = disable_func,
.gadget = NULL,
.load = NULL,
.save = NULL,
--
2.7.4