1231990Smp// SPDX-License-Identifier: GPL-2.0+ 259243Sobrien/* 359243Sobrien * Test for panel uclass 459243Sobrien * 559243Sobrien * Copyright (c) 2018 Google, Inc 659243Sobrien * Written by Simon Glass <sjg@chromium.org> 759243Sobrien */ 859243Sobrien 959243Sobrien#include <backlight.h> 1059243Sobrien#include <dm.h> 1159243Sobrien#include <panel.h> 1259243Sobrien#include <video.h> 1359243Sobrien#include <asm/gpio.h> 1459243Sobrien#include <asm/test.h> 1559243Sobrien#include <dm/test.h> 1659243Sobrien#include <power/regulator.h> 17100616Smp#include <test/test.h> 1859243Sobrien#include <test/ut.h> 1959243Sobrien 2059243Sobrien/* Basic test of the panel uclass */ 2159243Sobrienstatic int dm_test_panel(struct unit_test_state *uts) 2259243Sobrien{ 2359243Sobrien struct udevice *dev, *pwm, *gpio, *reg; 2459243Sobrien uint period_ns; 2559243Sobrien uint duty_ns; 2659243Sobrien bool enable; 2759243Sobrien bool polarity; 2859243Sobrien 2959243Sobrien ut_assertok(uclass_first_device_err(UCLASS_PANEL, &dev)); 3059243Sobrien ut_assertok(uclass_get_device_by_name(UCLASS_PWM, "pwm", &pwm)); 3159243Sobrien ut_assertok(uclass_get_device(UCLASS_GPIO, 1, &gpio)); 3259243Sobrien ut_assertok(regulator_get_by_platname("VDD_EMMC_1.8V", ®)); 3359243Sobrien ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns, 3459243Sobrien &enable, &polarity)); 35231990Smp ut_asserteq(false, enable); 3659243Sobrien ut_asserteq(false, regulator_get_enable(reg)); 3759243Sobrien 3859243Sobrien ut_assertok(panel_enable_backlight(dev)); 3959243Sobrien ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns, 40145479Smp &enable, &polarity)); 41145479Smp ut_asserteq(1000, period_ns); 42145479Smp ut_asserteq(170 * 1000 / 255, duty_ns); 43145479Smp ut_asserteq(true, enable); 44145479Smp ut_asserteq(false, polarity); 45131962Smp ut_asserteq(1, sandbox_gpio_get_value(gpio, 1)); 4659243Sobrien ut_asserteq(true, regulator_get_enable(reg)); 47167465Smp 48167465Smp ut_assertok(panel_set_backlight(dev, 40)); 49167465Smp ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns, 50167465Smp &enable, &polarity)); 51167465Smp ut_asserteq(64 * 1000 / 255, duty_ns); 52167465Smp 53231990Smp ut_assertok(panel_set_backlight(dev, BACKLIGHT_MAX)); 54167465Smp ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns, 55167465Smp &enable, &polarity)); 56167465Smp ut_asserteq(255 * 1000 / 255, duty_ns); 57167465Smp 5859243Sobrien ut_assertok(panel_set_backlight(dev, BACKLIGHT_MIN)); 5959243Sobrien ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns, 6059243Sobrien &enable, &polarity)); 6159243Sobrien ut_asserteq(0 * 1000 / 255, duty_ns); 6259243Sobrien ut_asserteq(1, sandbox_gpio_get_value(gpio, 1)); 6359243Sobrien 64167465Smp ut_assertok(panel_set_backlight(dev, BACKLIGHT_DEFAULT)); 6559243Sobrien ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns, 6659243Sobrien &enable, &polarity)); 67167465Smp ut_asserteq(true, enable); 68167465Smp ut_asserteq(170 * 1000 / 255, duty_ns); 69167465Smp 70167465Smp ut_assertok(panel_set_backlight(dev, BACKLIGHT_OFF)); 71167465Smp ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns, 72167465Smp &enable, &polarity)); 73167465Smp ut_asserteq(0 * 1000 / 255, duty_ns); 7459243Sobrien ut_asserteq(0, sandbox_gpio_get_value(gpio, 1)); 7559243Sobrien ut_asserteq(false, regulator_get_enable(reg)); 76145479Smp 7759243Sobrien return 0; 7859243Sobrien} 79231990SmpDM_TEST(dm_test_panel, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT); 80231990Smp