// SPDX-License-Identifier: GPL-2.0+ /* * (C) Copyright 2018 * Mario Six, Guntermann & Drunck GmbH, mario.six@gdsys.cc */ #include #include #include #include "sandbox.h" struct board_sandbox_priv { bool called_detect; int test_i1; int test_i2; }; char vacation_spots[][64] = {"R'lyeh", "Dreamlands", "Plateau of Leng", "Carcosa", "Yuggoth", "The Nameless City"}; int board_sandbox_detect(struct udevice *dev) { struct board_sandbox_priv *priv = dev_get_priv(dev); priv->called_detect = true; priv->test_i2 = 100; return 0; } int board_sandbox_get_bool(struct udevice *dev, int id, bool *val) { struct board_sandbox_priv *priv = dev_get_priv(dev); switch (id) { case BOOL_CALLED_DETECT: /* Checks if the dectect method has been called */ *val = priv->called_detect; return 0; } return -ENOENT; } int board_sandbox_get_int(struct udevice *dev, int id, int *val) { struct board_sandbox_priv *priv = dev_get_priv(dev); switch (id) { case INT_TEST1: *val = priv->test_i1; /* Increments with every call */ priv->test_i1++; return 0; case INT_TEST2: *val = priv->test_i2; /* Decrements with every call */ priv->test_i2--; return 0; } return -ENOENT; } int board_sandbox_get_str(struct udevice *dev, int id, size_t size, char *val) { struct board_sandbox_priv *priv = dev_get_priv(dev); int i1 = priv->test_i1; int i2 = priv->test_i2; int index = (i1 * i2) % ARRAY_SIZE(vacation_spots); switch (id) { case STR_VACATIONSPOT: /* Picks a vacation spot depending on i1 and i2 */ snprintf(val, size, vacation_spots[index]); return 0; } return -ENOENT; } static const struct udevice_id board_sandbox_ids[] = { { .compatible = "sandbox,board_sandbox" }, { /* sentinel */ } }; static const struct board_ops board_sandbox_ops = { .detect = board_sandbox_detect, .get_bool = board_sandbox_get_bool, .get_int = board_sandbox_get_int, .get_str = board_sandbox_get_str, }; int board_sandbox_probe(struct udevice *dev) { return 0; } U_BOOT_DRIVER(board_sandbox) = { .name = "board_sandbox", .id = UCLASS_BOARD, .of_match = board_sandbox_ids, .ops = &board_sandbox_ops, .priv_auto_alloc_size = sizeof(struct board_sandbox_priv), .probe = board_sandbox_probe, };