Blame view

cmd/demo.c 2.85 KB
39f7611fe   Simon Glass   dm: Add a demonst...
1
2
3
4
5
6
7
8
9
10
11
  /*
   * Copyright (c) 2013 Google, Inc
   *
   * (C) Copyright 2012
   * Pavel Herrmann <morpheus.ibis@gmail.com>
   *
   * SPDX-License-Identifier:	GPL-2.0+
   */
  
  #include <common.h>
  #include <dm-demo.h>
0eb25b619   Joe Hershberger   common: Make sure...
12
  #include <mapmem.h>
39f7611fe   Simon Glass   dm: Add a demonst...
13
  #include <asm/io.h>
54c5d08a0   Heiko Schocher   dm: rename device...
14
  struct udevice *demo_dev;
39f7611fe   Simon Glass   dm: Add a demonst...
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
  
  static int do_demo_hello(cmd_tbl_t *cmdtp, int flag, int argc,
  			 char * const argv[])
  {
  	int ch = 0;
  
  	if (argc)
  		ch = *argv[0];
  
  	return demo_hello(demo_dev, ch);
  }
  
  static int do_demo_status(cmd_tbl_t *cmdtp, int flag, int argc,
  			  char * const argv[])
  {
  	int status;
  	int ret;
  
  	ret = demo_status(demo_dev, &status);
  	if (ret)
  		return ret;
  
  	printf("Status: %d
  ", status);
  
  	return 0;
  }
a02af4aee   Simon Glass   dm: demo: Add a s...
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
  static int do_demo_light(cmd_tbl_t *cmdtp, int flag, int argc,
  			 char * const argv[])
  {
  	int light;
  	int ret;
  
  	if (argc) {
  		light = simple_strtoul(argv[0], NULL, 16);
  		ret = demo_set_light(demo_dev, light);
  	} else {
  		ret = demo_get_light(demo_dev);
  		if (ret >= 0) {
  			printf("Light: %x
  ", ret);
  			ret = 0;
  		}
  	}
  
  	return ret;
  }
39f7611fe   Simon Glass   dm: Add a demonst...
62
63
  int do_demo_list(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
  {
54c5d08a0   Heiko Schocher   dm: rename device...
64
  	struct udevice *dev;
39f7611fe   Simon Glass   dm: Add a demonst...
65
66
67
68
69
70
71
72
73
74
  	int i, ret;
  
  	puts("Demo uclass entries:
  ");
  
  	for (i = 0, ret = uclass_first_device(UCLASS_DEMO, &dev);
  	     dev;
  	     ret = uclass_next_device(&dev)) {
  		printf("entry %d - instance %08x, ops %08x, platdata %08x
  ",
c6b89f318   Mario Six   sandbox: Add 64-b...
75
76
77
  		       i++, (uint)map_to_sysmem(dev),
  		       (uint)map_to_sysmem(dev->driver->ops),
  		       (uint)map_to_sysmem(dev_get_platdata(dev)));
39f7611fe   Simon Glass   dm: Add a demonst...
78
79
80
81
82
83
84
85
  	}
  
  	return cmd_process_error(cmdtp, ret);
  }
  
  static cmd_tbl_t demo_commands[] = {
  	U_BOOT_CMD_MKENT(list, 0, 1, do_demo_list, "", ""),
  	U_BOOT_CMD_MKENT(hello, 2, 1, do_demo_hello, "", ""),
a02af4aee   Simon Glass   dm: demo: Add a s...
86
  	U_BOOT_CMD_MKENT(light, 2, 1, do_demo_light, "", ""),
39f7611fe   Simon Glass   dm: Add a demonst...
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
  	U_BOOT_CMD_MKENT(status, 1, 1, do_demo_status, "", ""),
  };
  
  static int do_demo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
  {
  	cmd_tbl_t *demo_cmd;
  	int devnum = 0;
  	int ret;
  
  	if (argc < 2)
  		return CMD_RET_USAGE;
  	demo_cmd = find_cmd_tbl(argv[1], demo_commands,
  				ARRAY_SIZE(demo_commands));
  	argc -= 2;
  	argv += 2;
b922a5f94   Peter Tyser   dm: Prevent "demo...
102
103
104
  
  	if ((!demo_cmd || argc > demo_cmd->maxargs) ||
  	    ((demo_cmd->name[0] != 'l') && (argc < 1)))
39f7611fe   Simon Glass   dm: Add a demonst...
105
106
107
108
109
110
111
112
113
  		return CMD_RET_USAGE;
  
  	if (argc) {
  		devnum = simple_strtoul(argv[0], NULL, 10);
  		ret = uclass_get_device(UCLASS_DEMO, devnum, &demo_dev);
  		if (ret)
  			return cmd_process_error(cmdtp, ret);
  		argc--;
  		argv++;
a02af4aee   Simon Glass   dm: demo: Add a s...
114
115
116
117
  	} else {
  		demo_dev = NULL;
  		if (demo_cmd->cmd != do_demo_list)
  			return CMD_RET_USAGE;
39f7611fe   Simon Glass   dm: Add a demonst...
118
119
120
121
122
123
124
125
126
127
128
129
130
131
  	}
  
  	ret = demo_cmd->cmd(demo_cmd, flag, argc, argv);
  
  	return cmd_process_error(demo_cmd, ret);
  }
  
  U_BOOT_CMD(
  	demo,   4,      1,      do_demo,
  	"Driver model (dm) demo operations",
  	"list                     List available demo devices
  "
  	"demo hello <num> [<char>]     Say hello
  "
a02af4aee   Simon Glass   dm: demo: Add a s...
132
133
134
135
136
  	"demo light [<num>]            Set or get the lights
  "
  	"demo status <num>             Get demo device status
  "
  	"demo list                     List available demo devices"
39f7611fe   Simon Glass   dm: Add a demonst...
137
  );