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", &reg));
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