summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/Kconfig2
-rw-r--r--cmd/extension_board.c50
2 files changed, 48 insertions, 4 deletions
diff --git a/cmd/Kconfig b/cmd/Kconfig
index 986eeeba807..721bdb87c8a 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -548,7 +548,7 @@ config CMD_FDT
config CMD_EXTENSION
bool "Extension board management command"
select CMD_FDT
- depends on SUPPORT_EXTENSION_SCAN
+ depends on SUPPORT_EXTENSION_SCAN || SUPPORT_DM_EXTENSION_SCAN
help
Enables the "extension" command, which allows to detect
extension boards connected to the system, and apply
diff --git a/cmd/extension_board.c b/cmd/extension_board.c
index 129f3db9e4c..1f1eddbe976 100644
--- a/cmd/extension_board.c
+++ b/cmd/extension_board.c
@@ -4,6 +4,7 @@
* Köry Maincent, Bootlin, <[email protected]>
*/
+#include <alist.h>
#include <exports.h>
#include <command.h>
#include <extension_board.h>
@@ -11,9 +12,28 @@
static int do_extension_list(struct cmd_tbl *cmdtp, int flag,
int argc, char *const argv[])
{
+#if CONFIG_IS_ENABLED(SUPPORT_DM_EXTENSION_SCAN)
+ struct alist *dm_extension_list;
+#endif
struct extension *extension;
int i = 0;
+#if CONFIG_IS_ENABLED(SUPPORT_DM_EXTENSION_SCAN)
+ dm_extension_list = dm_extension_get_list();
+
+ if (!alist_get_ptr(dm_extension_list, 0)) {
+ printf("No extension registered - Please run \"extension scan\"\n");
+ return CMD_RET_SUCCESS;
+ }
+
+ alist_for_each(extension, dm_extension_list) {
+ printf("Extension %d: %s\n", i++, extension->name);
+ printf("\tManufacturer: \t\t%s\n", extension->owner);
+ printf("\tVersion: \t\t%s\n", extension->version);
+ printf("\tDevicetree overlay: \t%s\n", extension->overlay);
+ printf("\tOther information: \t%s\n", extension->other);
+ }
+#else
if (list_empty(&extension_list)) {
printf("No extension registered - Please run \"extension scan\"\n");
return CMD_RET_SUCCESS;
@@ -26,6 +46,7 @@ static int do_extension_list(struct cmd_tbl *cmdtp, int flag,
printf("\tDevicetree overlay: \t%s\n", extension->overlay);
printf("\tOther information: \t%s\n", extension->other);
}
+#endif
return CMD_RET_SUCCESS;
}
@@ -34,9 +55,19 @@ static int do_extension_scan(struct cmd_tbl *cmdtp, int flag,
{
int extension_num;
+#if CONFIG_IS_ENABLED(SUPPORT_DM_EXTENSION_SCAN)
+ extension_num = dm_extension_scan();
+ if (extension_num == -ENODEV)
+ extension_num = 0;
+ else if (extension_num < 0)
+ return CMD_RET_FAILURE;
+
+ printf("Found %d extension board(s).\n", extension_num);
+#else
extension_num = extension_scan(true);
- if (extension_num < 0)
+ if (extension_num < 0 && extension_num != -ENODEV)
return CMD_RET_FAILURE;
+#endif
return CMD_RET_SUCCESS;
}
@@ -44,22 +75,34 @@ static int do_extension_scan(struct cmd_tbl *cmdtp, int flag,
static int do_extension_apply(struct cmd_tbl *cmdtp, int flag,
int argc, char *const argv[])
{
+#if !CONFIG_IS_ENABLED(SUPPORT_DM_EXTENSION_SCAN)
struct extension *extension = NULL;
- int i = 0, extension_id, ret;
struct list_head *entry;
+ int i = 0;
+#endif
+ int extension_id, ret;
if (argc < 2)
return CMD_RET_USAGE;
if (strcmp(argv[1], "all") == 0) {
ret = CMD_RET_FAILURE;
+#if CONFIG_IS_ENABLED(SUPPORT_DM_EXTENSION_SCAN)
+ if (dm_extension_apply_all())
+ return CMD_RET_FAILURE;
+#else
list_for_each_entry(extension, &extension_list, list) {
ret = extension_apply(extension);
if (ret != CMD_RET_SUCCESS)
break;
}
+#endif
} else {
extension_id = simple_strtol(argv[1], NULL, 10);
+#if CONFIG_IS_ENABLED(SUPPORT_DM_EXTENSION_SCAN)
+ if (dm_extension_apply(extension_id))
+ return CMD_RET_FAILURE;
+#else
list_for_each(entry, &extension_list) {
if (i == extension_id) {
extension = list_entry(entry, struct extension, list);
@@ -74,9 +117,10 @@ static int do_extension_apply(struct cmd_tbl *cmdtp, int flag,
}
ret = extension_apply(extension);
+#endif
}
- return ret;
+ return CMD_RET_SUCCESS;
}
static struct cmd_tbl cmd_extension[] = {