Coverage Report

Created: 2026-03-11 06:21

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