button.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Copyright (C) 2020 Philippe Reynes <philippe.reynes@softathome.com>
  4. *
  5. * Based on led.c
  6. */
  7. #include <common.h>
  8. #include <dm.h>
  9. #include <button.h>
  10. #include <asm/gpio.h>
  11. #include <dm/test.h>
  12. #include <test/ut.h>
  13. /* Base test of the button uclass */
  14. static int dm_test_button_base(struct unit_test_state *uts)
  15. {
  16. struct udevice *dev;
  17. /* Get the top-level device */
  18. ut_assertok(uclass_get_device(UCLASS_BUTTON, 0, &dev));
  19. ut_assertok(uclass_get_device(UCLASS_BUTTON, 1, &dev));
  20. ut_assertok(uclass_get_device(UCLASS_BUTTON, 2, &dev));
  21. ut_asserteq(-ENODEV, uclass_get_device(UCLASS_BUTTON, 3, &dev));
  22. return 0;
  23. }
  24. DM_TEST(dm_test_button_base, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
  25. /* Test of the button uclass using the button_gpio driver */
  26. static int dm_test_button_gpio(struct unit_test_state *uts)
  27. {
  28. const int offset = 3;
  29. struct udevice *dev, *gpio;
  30. /*
  31. * Check that we can manipulate an BUTTON. BUTTON 1 is connected to GPIO
  32. * bank gpio_a, offset 3.
  33. */
  34. ut_assertok(uclass_get_device(UCLASS_BUTTON, 1, &dev));
  35. ut_assertok(uclass_get_device(UCLASS_GPIO, 1, &gpio));
  36. ut_asserteq(0, sandbox_gpio_set_value(gpio, offset, 0));
  37. ut_asserteq(0, sandbox_gpio_get_value(gpio, offset));
  38. ut_asserteq(BUTTON_OFF, button_get_state(dev));
  39. ut_asserteq(0, sandbox_gpio_set_value(gpio, offset, 1));
  40. ut_asserteq(1, sandbox_gpio_get_value(gpio, offset));
  41. ut_asserteq(BUTTON_ON, button_get_state(dev));
  42. return 0;
  43. }
  44. DM_TEST(dm_test_button_gpio, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
  45. /* Test obtaining an BUTTON by label */
  46. static int dm_test_button_label(struct unit_test_state *uts)
  47. {
  48. struct udevice *dev, *cmp;
  49. ut_assertok(button_get_by_label("summer", &dev));
  50. ut_asserteq(1, device_active(dev));
  51. ut_assertok(uclass_get_device(UCLASS_BUTTON, 1, &cmp));
  52. ut_asserteq_ptr(dev, cmp);
  53. ut_assertok(button_get_by_label("christmas", &dev));
  54. ut_asserteq(1, device_active(dev));
  55. ut_assertok(uclass_get_device(UCLASS_BUTTON, 2, &cmp));
  56. ut_asserteq_ptr(dev, cmp);
  57. ut_asserteq(-ENODEV, button_get_by_label("spring", &dev));
  58. return 0;
  59. }
  60. DM_TEST(dm_test_button_label, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);