Skip to content

Commit 9df322d

Browse files
JianyuWang0623jerpelea
authored andcommitted
system/fastboot: add disconn for usb transport
Disconnect usbdev when deinit USB transport. Signed-off-by: wangjianyu3 <wangjianyu3@xiaomi.com>
1 parent 4b5af95 commit 9df322d

File tree

1 file changed

+26
-2
lines changed

1 file changed

+26
-2
lines changed

system/fastboot/fastboot.c

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ struct fastboot_ctx_s
169169
*/
170170

171171
uint64_t left;
172+
FAR void *handle;
172173
FAR void *download_buffer;
173174
FAR struct fastboot_var_s *varlist;
174175
CODE int (*upload_func)(FAR struct fastboot_ctx_s *);
@@ -1157,7 +1158,6 @@ static int fastboot_usbdev_initialize(FAR struct fastboot_ctx_s *ctx)
11571158
# else
11581159
uint8_t dev = BOARDIOC_USBDEV_FASTBOOT;
11591160
# endif
1160-
FAR void *handle;
11611161
int ret;
11621162

11631163
ctrl.usbdev = dev;
@@ -1177,7 +1177,7 @@ static int fastboot_usbdev_initialize(FAR struct fastboot_ctx_s *ctx)
11771177
ctrl.action = BOARDIOC_USBDEV_CONNECT;
11781178
ctrl.instance = 0;
11791179
ctrl.config = 0;
1180-
ctrl.handle = &handle;
1180+
ctrl.handle = &ctx->handle;
11811181

11821182
ret = boardctl(BOARDIOC_USBDEV_CONTROL, (uintptr_t)&ctrl);
11831183
if (ret < 0)
@@ -1208,13 +1208,37 @@ static int fastboot_usbdev_initialize(FAR struct fastboot_ctx_s *ctx)
12081208

12091209
static void fastboot_usbdev_deinit(FAR struct fastboot_ctx_s *ctx)
12101210
{
1211+
#ifdef CONFIG_SYSTEM_FASTBOOTD_USB_BOARDCTL
1212+
struct boardioc_usbdev_ctrl_s ctrl;
1213+
#endif
12111214
int i;
12121215

12131216
for (i = 0; i < nitems(ctx->tran_fd); i++)
12141217
{
12151218
close(ctx->tran_fd[i]);
12161219
ctx->tran_fd[i] = -1;
12171220
}
1221+
1222+
#ifdef CONFIG_SYSTEM_FASTBOOTD_USB_BOARDCTL
1223+
if (ctx->handle)
1224+
{
1225+
# ifdef CONFIG_USBDEV_COMPOSITE
1226+
ctrl.usbdev = BOARDIOC_USBDEV_COMPOSITE;
1227+
# else
1228+
ctrl.usbdev = BOARDIOC_USBDEV_FASTBOOT;
1229+
# endif
1230+
ctrl.action = BOARDIOC_USBDEV_DISCONNECT;
1231+
ctrl.instance = 0;
1232+
ctrl.config = 0;
1233+
ctrl.handle = &ctx->handle;
1234+
1235+
i = boardctl(BOARDIOC_USBDEV_CONTROL, (uintptr_t)&ctrl);
1236+
if (i < 0)
1237+
{
1238+
fb_err("boardctl(BOARDIOC_USBDEV_DISCONNECT) failed: %d\n", i);
1239+
}
1240+
}
1241+
#endif /* SYSTEM_FASTBOOTD_USB_BOARDCTL */
12181242
}
12191243

12201244
static ssize_t fastboot_usbdev_read(FAR struct fastboot_ctx_s *ctx,

0 commit comments

Comments
 (0)