13c43fba3SSimon Glass /* 23c43fba3SSimon Glass * Copyright (C) 2015 Google, Inc 33c43fba3SSimon Glass * 43c43fba3SSimon Glass * SPDX-License-Identifier: GPL-2.0+ 53c43fba3SSimon Glass */ 63c43fba3SSimon Glass 73c43fba3SSimon Glass #include <common.h> 83c43fba3SSimon Glass #include <dm.h> 93c43fba3SSimon Glass #include <led.h> 103c43fba3SSimon Glass #include <asm/gpio.h> 113c43fba3SSimon Glass #include <dm/test.h> 123c43fba3SSimon Glass #include <test/ut.h> 133c43fba3SSimon Glass 143c43fba3SSimon Glass DECLARE_GLOBAL_DATA_PTR; 153c43fba3SSimon Glass 163c43fba3SSimon Glass /* Base test of the led uclass */ 173c43fba3SSimon Glass static int dm_test_led_base(struct unit_test_state *uts) 183c43fba3SSimon Glass { 193c43fba3SSimon Glass struct udevice *dev; 203c43fba3SSimon Glass 213c43fba3SSimon Glass /* Get the top-level device */ 223c43fba3SSimon Glass ut_assertok(uclass_get_device(UCLASS_LED, 0, &dev)); 233c43fba3SSimon Glass ut_assertok(uclass_get_device(UCLASS_LED, 1, &dev)); 243c43fba3SSimon Glass ut_assertok(uclass_get_device(UCLASS_LED, 2, &dev)); 253c43fba3SSimon Glass ut_asserteq(-ENODEV, uclass_get_device(UCLASS_LED, 3, &dev)); 263c43fba3SSimon Glass 273c43fba3SSimon Glass return 0; 283c43fba3SSimon Glass } 293c43fba3SSimon Glass DM_TEST(dm_test_led_base, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); 303c43fba3SSimon Glass 313c43fba3SSimon Glass /* Test of the led uclass using the led_gpio driver */ 323c43fba3SSimon Glass static int dm_test_led_gpio(struct unit_test_state *uts) 333c43fba3SSimon Glass { 343c43fba3SSimon Glass const int offset = 1; 353c43fba3SSimon Glass struct udevice *dev, *gpio; 363c43fba3SSimon Glass 373c43fba3SSimon Glass /* 383c43fba3SSimon Glass * Check that we can manipulate an LED. LED 1 is connected to GPIO 393c43fba3SSimon Glass * bank gpio_a, offset 1. 403c43fba3SSimon Glass */ 413c43fba3SSimon Glass ut_assertok(uclass_get_device(UCLASS_LED, 1, &dev)); 423c43fba3SSimon Glass ut_assertok(uclass_get_device(UCLASS_GPIO, 1, &gpio)); 433c43fba3SSimon Glass ut_asserteq(0, sandbox_gpio_get_value(gpio, offset)); 44*ddae9fcdSSimon Glass ut_assertok(led_set_state(dev, LEDST_ON)); 453c43fba3SSimon Glass ut_asserteq(1, sandbox_gpio_get_value(gpio, offset)); 46*ddae9fcdSSimon Glass 47*ddae9fcdSSimon Glass ut_assertok(led_set_state(dev, LEDST_OFF)); 483c43fba3SSimon Glass ut_asserteq(0, sandbox_gpio_get_value(gpio, offset)); 493c43fba3SSimon Glass 503c43fba3SSimon Glass return 0; 513c43fba3SSimon Glass } 523c43fba3SSimon Glass DM_TEST(dm_test_led_gpio, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); 533c43fba3SSimon Glass 543c43fba3SSimon Glass /* Test obtaining an LED by label */ 553c43fba3SSimon Glass static int dm_test_led_label(struct unit_test_state *uts) 563c43fba3SSimon Glass { 573c43fba3SSimon Glass struct udevice *dev, *cmp; 583c43fba3SSimon Glass 593c43fba3SSimon Glass ut_assertok(led_get_by_label("sandbox:red", &dev)); 603c43fba3SSimon Glass ut_asserteq(1, device_active(dev)); 613c43fba3SSimon Glass ut_assertok(uclass_get_device(UCLASS_LED, 1, &cmp)); 623c43fba3SSimon Glass ut_asserteq_ptr(dev, cmp); 633c43fba3SSimon Glass 643c43fba3SSimon Glass ut_assertok(led_get_by_label("sandbox:green", &dev)); 653c43fba3SSimon Glass ut_asserteq(1, device_active(dev)); 663c43fba3SSimon Glass ut_assertok(uclass_get_device(UCLASS_LED, 2, &cmp)); 673c43fba3SSimon Glass ut_asserteq_ptr(dev, cmp); 683c43fba3SSimon Glass 693c43fba3SSimon Glass ut_asserteq(-ENODEV, led_get_by_label("sandbox:blue", &dev)); 703c43fba3SSimon Glass 713c43fba3SSimon Glass return 0; 723c43fba3SSimon Glass } 733c43fba3SSimon Glass DM_TEST(dm_test_led_label, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); 74