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