xref: /rk3399_rockchip-uboot/cmd/usb_gadget_sdp.c (revision 1a4f6af8bfd44c8ae6e87a81ff125eed47042cc5)
12f005695SStefan Agner /*
22f005695SStefan Agner  * cmd_sdp.c -- sdp command
32f005695SStefan Agner  *
42f005695SStefan Agner  * Copyright (C) 2016 Toradex
52f005695SStefan Agner  * Author: Stefan Agner <stefan.agner@toradex.com>
62f005695SStefan Agner  *
72f005695SStefan Agner  * SPDX-License-Identifier:	GPL-2.0+
82f005695SStefan Agner  */
92f005695SStefan Agner 
102f005695SStefan Agner #include <common.h>
112f005695SStefan Agner #include <g_dnl.h>
122f005695SStefan Agner #include <sdp.h>
132f005695SStefan Agner #include <usb.h>
142f005695SStefan Agner 
do_sdp(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])152f005695SStefan Agner static int do_sdp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
162f005695SStefan Agner {
172f005695SStefan Agner 	int ret = CMD_RET_FAILURE;
182f005695SStefan Agner 
192f005695SStefan Agner 	if (argc < 2)
202f005695SStefan Agner 		return CMD_RET_USAGE;
212f005695SStefan Agner 
222f005695SStefan Agner 	char *usb_controller = argv[1];
232f005695SStefan Agner 	int controller_index = simple_strtoul(usb_controller, NULL, 0);
24*b95d4446SJean-Jacques Hiblot 	usb_gadget_initialize(controller_index);
252f005695SStefan Agner 
262f005695SStefan Agner 	g_dnl_clear_detach();
272f005695SStefan Agner 	g_dnl_register("usb_dnl_sdp");
282f005695SStefan Agner 
292f005695SStefan Agner 	ret = sdp_init(controller_index);
302f005695SStefan Agner 	if (ret) {
318e33586eSAndre Heider 		pr_err("SDP init failed: %d\n", ret);
322f005695SStefan Agner 		goto exit;
332f005695SStefan Agner 	}
342f005695SStefan Agner 
352f005695SStefan Agner 	/* This command typically does not return but jumps to an image */
362f005695SStefan Agner 	sdp_handle(controller_index);
378e33586eSAndre Heider 	pr_err("SDP ended\n");
382f005695SStefan Agner 
392f005695SStefan Agner exit:
402f005695SStefan Agner 	g_dnl_unregister();
41*b95d4446SJean-Jacques Hiblot 	usb_gadget_release(controller_index);
422f005695SStefan Agner 
432f005695SStefan Agner 	return ret;
442f005695SStefan Agner }
452f005695SStefan Agner 
462f005695SStefan Agner U_BOOT_CMD(sdp, 2, 1, do_sdp,
472f005695SStefan Agner 	"Serial Downloader Protocol",
482f005695SStefan Agner 	"<USB_controller>\n"
492f005695SStefan Agner 	"  - serial downloader protocol via <USB_controller>\n"
502f005695SStefan Agner );
51