mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-31 12:08:19 +00:00 
			
		
		
		
	This patch allows exiting from UMS mode to u-boot prompt by detaching usb cable or by pressing ctrl+c. Add new config: CONFIG_USB_CABLE_CHECK. If defined then board file should provide function: usb_cable_connected() (include/usb.h) that return 1 if cable is connected and 0 otherwise. Changes v2: - add a note to the README Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com> Cc: Marek Vasut <marex@denx.de>
		
			
				
	
	
		
			70 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Copyright (C) 2011 Samsung Electronics
 | |
|  * Lukasz Majewski <l.majewski@samsung.com>
 | |
|  *
 | |
|  * SPDX-License-Identifier:	GPL-2.0+
 | |
|  */
 | |
| 
 | |
| #include <errno.h>
 | |
| #include <common.h>
 | |
| #include <command.h>
 | |
| #include <g_dnl.h>
 | |
| #include <usb.h>
 | |
| #include <usb_mass_storage.h>
 | |
| 
 | |
| int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
 | |
| 			       int argc, char * const argv[])
 | |
| {
 | |
| 	if (argc < 3)
 | |
| 		return CMD_RET_USAGE;
 | |
| 
 | |
| 	const char *usb_controller = argv[1];
 | |
| 	const char *mmc_devstring  = argv[2];
 | |
| 
 | |
| 	unsigned int dev_num = simple_strtoul(mmc_devstring, NULL, 0);
 | |
| 
 | |
| 	struct ums *ums = ums_init(dev_num);
 | |
| 	if (!ums)
 | |
| 		return CMD_RET_FAILURE;
 | |
| 
 | |
| 	unsigned int controller_index = (unsigned int)(simple_strtoul(
 | |
| 					usb_controller,	NULL, 0));
 | |
| 	if (board_usb_init(controller_index, USB_INIT_DEVICE)) {
 | |
| 		error("Couldn't init USB controller.");
 | |
| 		return CMD_RET_FAILURE;
 | |
| 	}
 | |
| 
 | |
| 	int rc = fsg_init(ums);
 | |
| 	if (rc) {
 | |
| 		error("fsg_init failed");
 | |
| 		return CMD_RET_FAILURE;
 | |
| 	}
 | |
| 
 | |
| 	g_dnl_register("ums");
 | |
| 
 | |
| 	while (1) {
 | |
| 		usb_gadget_handle_interrupts();
 | |
| 
 | |
| 		rc = fsg_main_thread(NULL);
 | |
| 		if (rc) {
 | |
| 			/* Check I/O error */
 | |
| 			if (rc == -EIO)
 | |
| 				printf("\rCheck USB cable connection\n");
 | |
| 
 | |
| 			/* Check CTRL+C */
 | |
| 			if (rc == -EPIPE)
 | |
| 				printf("\rCTRL+C - Operation aborted\n");
 | |
| 
 | |
| 			goto exit;
 | |
| 		}
 | |
| 	}
 | |
| exit:
 | |
| 	g_dnl_unregister();
 | |
| 	return CMD_RET_SUCCESS;
 | |
| }
 | |
| 
 | |
| U_BOOT_CMD(ums, CONFIG_SYS_MAXARGS, 1, do_usb_mass_storage,
 | |
| 	"Use the UMS [User Mass Storage]",
 | |
| 	"ums <USB_controller> <mmc_dev>  e.g. ums 0 0"
 | |
| );
 |