1*3c43fba3SSimon Glass /* 2*3c43fba3SSimon Glass * Copyright (C) 2015 Google, Inc 3*3c43fba3SSimon Glass * 4*3c43fba3SSimon Glass * SPDX-License-Identifier: GPL-2.0+ 5*3c43fba3SSimon Glass */ 6*3c43fba3SSimon Glass 7*3c43fba3SSimon Glass #include <common.h> 8*3c43fba3SSimon Glass #include <dm.h> 9*3c43fba3SSimon Glass #include <led.h> 10*3c43fba3SSimon Glass #include <asm/gpio.h> 11*3c43fba3SSimon Glass #include <dm/test.h> 12*3c43fba3SSimon Glass #include <test/ut.h> 13*3c43fba3SSimon Glass 14*3c43fba3SSimon Glass DECLARE_GLOBAL_DATA_PTR; 15*3c43fba3SSimon Glass 16*3c43fba3SSimon Glass /* Base test of the led uclass */ 17*3c43fba3SSimon Glass static int dm_test_led_base(struct unit_test_state *uts) 18*3c43fba3SSimon Glass { 19*3c43fba3SSimon Glass struct udevice *dev; 20*3c43fba3SSimon Glass 21*3c43fba3SSimon Glass /* Get the top-level device */ 22*3c43fba3SSimon Glass ut_assertok(uclass_get_device(UCLASS_LED, 0, &dev)); 23*3c43fba3SSimon Glass ut_assertok(uclass_get_device(UCLASS_LED, 1, &dev)); 24*3c43fba3SSimon Glass ut_assertok(uclass_get_device(UCLASS_LED, 2, &dev)); 25*3c43fba3SSimon Glass ut_asserteq(-ENODEV, uclass_get_device(UCLASS_LED, 3, &dev)); 26*3c43fba3SSimon Glass 27*3c43fba3SSimon Glass return 0; 28*3c43fba3SSimon Glass } 29*3c43fba3SSimon Glass DM_TEST(dm_test_led_base, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); 30*3c43fba3SSimon Glass 31*3c43fba3SSimon Glass /* Test of the led uclass using the led_gpio driver */ 32*3c43fba3SSimon Glass static int dm_test_led_gpio(struct unit_test_state *uts) 33*3c43fba3SSimon Glass { 34*3c43fba3SSimon Glass const int offset = 1; 35*3c43fba3SSimon Glass struct udevice *dev, *gpio; 36*3c43fba3SSimon Glass 37*3c43fba3SSimon Glass /* 38*3c43fba3SSimon Glass * Check that we can manipulate an LED. LED 1 is connected to GPIO 39*3c43fba3SSimon Glass * bank gpio_a, offset 1. 40*3c43fba3SSimon Glass */ 41*3c43fba3SSimon Glass ut_assertok(uclass_get_device(UCLASS_LED, 1, &dev)); 42*3c43fba3SSimon Glass ut_assertok(uclass_get_device(UCLASS_GPIO, 1, &gpio)); 43*3c43fba3SSimon Glass ut_asserteq(0, sandbox_gpio_get_value(gpio, offset)); 44*3c43fba3SSimon Glass led_set_on(dev, 1); 45*3c43fba3SSimon Glass ut_asserteq(1, sandbox_gpio_get_value(gpio, offset)); 46*3c43fba3SSimon Glass led_set_on(dev, 0); 47*3c43fba3SSimon Glass ut_asserteq(0, sandbox_gpio_get_value(gpio, offset)); 48*3c43fba3SSimon Glass 49*3c43fba3SSimon Glass return 0; 50*3c43fba3SSimon Glass } 51*3c43fba3SSimon Glass DM_TEST(dm_test_led_gpio, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); 52*3c43fba3SSimon Glass 53*3c43fba3SSimon Glass /* Test obtaining an LED by label */ 54*3c43fba3SSimon Glass static int dm_test_led_label(struct unit_test_state *uts) 55*3c43fba3SSimon Glass { 56*3c43fba3SSimon Glass struct udevice *dev, *cmp; 57*3c43fba3SSimon Glass 58*3c43fba3SSimon Glass ut_assertok(led_get_by_label("sandbox:red", &dev)); 59*3c43fba3SSimon Glass ut_asserteq(1, device_active(dev)); 60*3c43fba3SSimon Glass ut_assertok(uclass_get_device(UCLASS_LED, 1, &cmp)); 61*3c43fba3SSimon Glass ut_asserteq_ptr(dev, cmp); 62*3c43fba3SSimon Glass 63*3c43fba3SSimon Glass ut_assertok(led_get_by_label("sandbox:green", &dev)); 64*3c43fba3SSimon Glass ut_asserteq(1, device_active(dev)); 65*3c43fba3SSimon Glass ut_assertok(uclass_get_device(UCLASS_LED, 2, &cmp)); 66*3c43fba3SSimon Glass ut_asserteq_ptr(dev, cmp); 67*3c43fba3SSimon Glass 68*3c43fba3SSimon Glass ut_asserteq(-ENODEV, led_get_by_label("sandbox:blue", &dev)); 69*3c43fba3SSimon Glass 70*3c43fba3SSimon Glass return 0; 71*3c43fba3SSimon Glass } 72*3c43fba3SSimon Glass DM_TEST(dm_test_led_label, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); 73