xref: /rk3399_rockchip-uboot/cmd/demo.c (revision 5395ac06d271209f5904a9da4392a3d8dad7597e)
12e192b24SSimon Glass /*
22e192b24SSimon Glass  * Copyright (c) 2013 Google, Inc
32e192b24SSimon Glass  *
42e192b24SSimon Glass  * (C) Copyright 2012
52e192b24SSimon Glass  * Pavel Herrmann <morpheus.ibis@gmail.com>
62e192b24SSimon Glass  *
72e192b24SSimon Glass  * SPDX-License-Identifier:	GPL-2.0+
82e192b24SSimon Glass  */
92e192b24SSimon Glass 
102e192b24SSimon Glass #include <common.h>
112e192b24SSimon Glass #include <dm-demo.h>
122e192b24SSimon Glass #include <mapmem.h>
132e192b24SSimon Glass #include <asm/io.h>
142e192b24SSimon Glass 
152e192b24SSimon Glass struct udevice *demo_dev;
162e192b24SSimon Glass 
do_demo_hello(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])172e192b24SSimon Glass static int do_demo_hello(cmd_tbl_t *cmdtp, int flag, int argc,
182e192b24SSimon Glass 			 char * const argv[])
192e192b24SSimon Glass {
202e192b24SSimon Glass 	int ch = 0;
212e192b24SSimon Glass 
222e192b24SSimon Glass 	if (argc)
232e192b24SSimon Glass 		ch = *argv[0];
242e192b24SSimon Glass 
252e192b24SSimon Glass 	return demo_hello(demo_dev, ch);
262e192b24SSimon Glass }
272e192b24SSimon Glass 
do_demo_status(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])282e192b24SSimon Glass static int do_demo_status(cmd_tbl_t *cmdtp, int flag, int argc,
292e192b24SSimon Glass 			  char * const argv[])
302e192b24SSimon Glass {
312e192b24SSimon Glass 	int status;
322e192b24SSimon Glass 	int ret;
332e192b24SSimon Glass 
342e192b24SSimon Glass 	ret = demo_status(demo_dev, &status);
352e192b24SSimon Glass 	if (ret)
362e192b24SSimon Glass 		return ret;
372e192b24SSimon Glass 
382e192b24SSimon Glass 	printf("Status: %d\n", status);
392e192b24SSimon Glass 
402e192b24SSimon Glass 	return 0;
412e192b24SSimon Glass }
422e192b24SSimon Glass 
do_demo_light(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])432e192b24SSimon Glass static int do_demo_light(cmd_tbl_t *cmdtp, int flag, int argc,
442e192b24SSimon Glass 			 char * const argv[])
452e192b24SSimon Glass {
462e192b24SSimon Glass 	int light;
472e192b24SSimon Glass 	int ret;
482e192b24SSimon Glass 
492e192b24SSimon Glass 	if (argc) {
502e192b24SSimon Glass 		light = simple_strtoul(argv[0], NULL, 16);
512e192b24SSimon Glass 		ret = demo_set_light(demo_dev, light);
522e192b24SSimon Glass 	} else {
532e192b24SSimon Glass 		ret = demo_get_light(demo_dev);
542e192b24SSimon Glass 		if (ret >= 0) {
552e192b24SSimon Glass 			printf("Light: %x\n", ret);
562e192b24SSimon Glass 			ret = 0;
572e192b24SSimon Glass 		}
582e192b24SSimon Glass 	}
592e192b24SSimon Glass 
602e192b24SSimon Glass 	return ret;
612e192b24SSimon Glass }
622e192b24SSimon Glass 
do_demo_list(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])632e192b24SSimon Glass int do_demo_list(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
642e192b24SSimon Glass {
652e192b24SSimon Glass 	struct udevice *dev;
662e192b24SSimon Glass 	int i, ret;
672e192b24SSimon Glass 
682e192b24SSimon Glass 	puts("Demo uclass entries:\n");
692e192b24SSimon Glass 
70*5395ac06SMichal Suchanek 	for (i = 0, uclass_first_device(UCLASS_DEMO, &dev); dev;
71*5395ac06SMichal Suchanek 	     uclass_next_device(&dev)) {
722e192b24SSimon Glass 		printf("entry %d - instance %08x, ops %08x, platdata %08x\n",
732e192b24SSimon Glass 		       i++, map_to_sysmem(dev),
742e192b24SSimon Glass 		       map_to_sysmem(dev->driver->ops),
752e192b24SSimon Glass 		       map_to_sysmem(dev_get_platdata(dev)));
762e192b24SSimon Glass 	}
772e192b24SSimon Glass 
782e192b24SSimon Glass 	return cmd_process_error(cmdtp, ret);
792e192b24SSimon Glass }
802e192b24SSimon Glass 
812e192b24SSimon Glass static cmd_tbl_t demo_commands[] = {
822e192b24SSimon Glass 	U_BOOT_CMD_MKENT(list, 0, 1, do_demo_list, "", ""),
832e192b24SSimon Glass 	U_BOOT_CMD_MKENT(hello, 2, 1, do_demo_hello, "", ""),
842e192b24SSimon Glass 	U_BOOT_CMD_MKENT(light, 2, 1, do_demo_light, "", ""),
852e192b24SSimon Glass 	U_BOOT_CMD_MKENT(status, 1, 1, do_demo_status, "", ""),
862e192b24SSimon Glass };
872e192b24SSimon Glass 
do_demo(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])882e192b24SSimon Glass static int do_demo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
892e192b24SSimon Glass {
902e192b24SSimon Glass 	cmd_tbl_t *demo_cmd;
912e192b24SSimon Glass 	int devnum = 0;
922e192b24SSimon Glass 	int ret;
932e192b24SSimon Glass 
942e192b24SSimon Glass 	if (argc < 2)
952e192b24SSimon Glass 		return CMD_RET_USAGE;
962e192b24SSimon Glass 	demo_cmd = find_cmd_tbl(argv[1], demo_commands,
972e192b24SSimon Glass 				ARRAY_SIZE(demo_commands));
982e192b24SSimon Glass 	argc -= 2;
992e192b24SSimon Glass 	argv += 2;
1002e192b24SSimon Glass 
1012e192b24SSimon Glass 	if ((!demo_cmd || argc > demo_cmd->maxargs) ||
1022e192b24SSimon Glass 	    ((demo_cmd->name[0] != 'l') && (argc < 1)))
1032e192b24SSimon Glass 		return CMD_RET_USAGE;
1042e192b24SSimon Glass 
1052e192b24SSimon Glass 	if (argc) {
1062e192b24SSimon Glass 		devnum = simple_strtoul(argv[0], NULL, 10);
1072e192b24SSimon Glass 		ret = uclass_get_device(UCLASS_DEMO, devnum, &demo_dev);
1082e192b24SSimon Glass 		if (ret)
1092e192b24SSimon Glass 			return cmd_process_error(cmdtp, ret);
1102e192b24SSimon Glass 		argc--;
1112e192b24SSimon Glass 		argv++;
1122e192b24SSimon Glass 	} else {
1132e192b24SSimon Glass 		demo_dev = NULL;
1142e192b24SSimon Glass 		if (demo_cmd->cmd != do_demo_list)
1152e192b24SSimon Glass 			return CMD_RET_USAGE;
1162e192b24SSimon Glass 	}
1172e192b24SSimon Glass 
1182e192b24SSimon Glass 	ret = demo_cmd->cmd(demo_cmd, flag, argc, argv);
1192e192b24SSimon Glass 
1202e192b24SSimon Glass 	return cmd_process_error(demo_cmd, ret);
1212e192b24SSimon Glass }
1222e192b24SSimon Glass 
1232e192b24SSimon Glass U_BOOT_CMD(
1242e192b24SSimon Glass 	demo,   4,      1,      do_demo,
1252e192b24SSimon Glass 	"Driver model (dm) demo operations",
1262e192b24SSimon Glass 	"list                     List available demo devices\n"
1272e192b24SSimon Glass 	"demo hello <num> [<char>]     Say hello\n"
1282e192b24SSimon Glass 	"demo light [<num>]            Set or get the lights\n"
1292e192b24SSimon Glass 	"demo status <num>             Get demo device status\n"
1302e192b24SSimon Glass 	"demo list                     List available demo devices"
1312e192b24SSimon Glass );
132