sysinfo-gpio.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Copyright (C) 2021 Sean Anderson <sean.anderson@seco.com>
  4. */
  5. #include <common.h>
  6. #include <dm.h>
  7. #include <log.h>
  8. #include <sysinfo.h>
  9. #include <asm/gpio.h>
  10. #include <dm/test.h>
  11. #include <test/test.h>
  12. #include <test/ut.h>
  13. static int dm_test_sysinfo_gpio(struct unit_test_state *uts)
  14. {
  15. char buf[64];
  16. int val;
  17. struct udevice *sysinfo, *gpio;
  18. ut_assertok(uclass_get_device_by_name(UCLASS_SYSINFO, "sysinfo-gpio",
  19. &sysinfo));
  20. ut_assertok(uclass_get_device_by_name(UCLASS_GPIO, "base-gpios", &gpio));
  21. /*
  22. * Set up pins: pull-up (1), pull-down (0) and floating (2). This should
  23. * result in digits 2 0 1, i.e. 2 * 9 + 1 * 3 = 19
  24. */
  25. sandbox_gpio_set_flags(gpio, 15, GPIOD_EXT_PULL_UP);
  26. sandbox_gpio_set_flags(gpio, 16, GPIOD_EXT_PULL_DOWN);
  27. sandbox_gpio_set_flags(gpio, 17, 0);
  28. ut_assertok(sysinfo_detect(sysinfo));
  29. ut_assertok(sysinfo_get_int(sysinfo, SYSINFO_ID_BOARD_MODEL, &val));
  30. ut_asserteq(19, val);
  31. ut_assertok(sysinfo_get_str(sysinfo, SYSINFO_ID_BOARD_MODEL, sizeof(buf),
  32. buf));
  33. ut_asserteq_str("rev_a", buf);
  34. /*
  35. * Set up pins: floating (2), pull-up (1) and pull-down (0). This should
  36. * result in digits 0 1 2, i.e. 1 * 3 + 2 = 5
  37. */
  38. sandbox_gpio_set_flags(gpio, 15, 0);
  39. sandbox_gpio_set_flags(gpio, 16, GPIOD_EXT_PULL_UP);
  40. sandbox_gpio_set_flags(gpio, 17, GPIOD_EXT_PULL_DOWN);
  41. ut_assertok(sysinfo_detect(sysinfo));
  42. ut_assertok(sysinfo_get_int(sysinfo, SYSINFO_ID_BOARD_MODEL, &val));
  43. ut_asserteq(5, val);
  44. ut_assertok(sysinfo_get_str(sysinfo, SYSINFO_ID_BOARD_MODEL, sizeof(buf),
  45. buf));
  46. ut_asserteq_str("foo", buf);
  47. /*
  48. * Set up pins: floating (2), pull-up (1) and pull-down (0). This should
  49. * result in digits 1 2 0, i.e. 1 * 9 + 2 * 3 = 15
  50. */
  51. sandbox_gpio_set_flags(gpio, 15, GPIOD_EXT_PULL_DOWN);
  52. sandbox_gpio_set_flags(gpio, 16, 0);
  53. sandbox_gpio_set_flags(gpio, 17, GPIOD_EXT_PULL_UP);
  54. ut_assertok(sysinfo_detect(sysinfo));
  55. ut_assertok(sysinfo_get_int(sysinfo, SYSINFO_ID_BOARD_MODEL, &val));
  56. ut_asserteq(15, val);
  57. ut_assertok(sysinfo_get_str(sysinfo, SYSINFO_ID_BOARD_MODEL, sizeof(buf),
  58. buf));
  59. ut_asserteq_str("unknown", buf);
  60. return 0;
  61. }
  62. DM_TEST(dm_test_sysinfo_gpio, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);