| /* SPDX-License-Identifier: GPL-2.0+ */ | |
| /* | |
| * Copyright (c) 2016 Google, Inc | |
| * Written by Simon Glass <sjg@chromium.org> | |
| */ | |
| #ifndef _PANEL_H | |
| #define _PANEL_H | |
| #include <video.h> | |
| #include <fdtdec.h> | |
| /* DRM mode flags mapped to U-Boot DISPLAY_FLAGS for direct compatibility */ | |
| #define DRM_MODE_FLAG_NHSYNC DISPLAY_FLAGS_HSYNC_LOW | |
| #define DRM_MODE_FLAG_PHSYNC DISPLAY_FLAGS_HSYNC_HIGH | |
| #define DRM_MODE_FLAG_NVSYNC DISPLAY_FLAGS_VSYNC_LOW | |
| #define DRM_MODE_FLAG_PVSYNC DISPLAY_FLAGS_VSYNC_HIGH | |
| #define DRM_MODE_FLAG_INTERLACE DISPLAY_FLAGS_INTERLACED | |
| #define DRM_MODE_FLAG_DBLSCAN DISPLAY_FLAGS_DOUBLESCAN | |
| #define DRM_MODE_FLAG_DBLCLK DISPLAY_FLAGS_DOUBLECLK | |
| /** | |
| * struct drm_display_mode - DRM kernel-internal display mode structure | |
| * simplified for U-Boot | |
| * @hdisplay: horizontal display size | |
| * @hsync_start: horizontal sync start | |
| * @hsync_end: horizontal sync end | |
| * @htotal: horizontal total size | |
| * @vdisplay: vertical display size | |
| * @vsync_start: vertical sync start | |
| * @vsync_end: vertical sync end | |
| * @vtotal: vertical total size | |
| * | |
| * The horizontal and vertical timings are defined per the following diagram. | |
| * | |
| * :: | |
| * | |
| * | |
| * Active Front Sync Back | |
| * Region Porch Porch | |
| * <-----------------------><----------------><-------------><--------------> | |
| * //////////////////////| | |
| * ////////////////////// | | |
| * ////////////////////// |.................. ................ | |
| * _______________ | |
| * <----- [hv]display -----> | |
| * <------------- [hv]sync_start ------------> | |
| * <--------------------- [hv]sync_end ---------------------> | |
| * <-------------------------------- [hv]total ----------------------------->* | |
| */ | |
| struct drm_display_mode { | |
| unsigned int clock; /* in kHz */ | |
| u16 hdisplay; | |
| u16 hsync_start; | |
| u16 hsync_end; | |
| u16 htotal; | |
| u16 vdisplay; | |
| u16 vsync_start; | |
| u16 vsync_end; | |
| u16 vtotal; | |
| u32 flags; | |
| }; | |
| struct panel_ops { | |
| /** | |
| * enable_backlight() - Enable the panel backlight | |
| * | |
| * @dev: Panel device containing the backlight to enable | |
| * @return 0 if OK, -ve on error | |
| */ | |
| int (*enable_backlight)(struct udevice *dev); | |
| /** | |
| * set_backlight - Set panel backlight brightness | |
| * | |
| * @dev: Panel device containing the backlight to update | |
| * @percent: Brightness value (0 to 100, or BACKLIGHT_... value) | |
| * @return 0 if OK, -ve on error | |
| */ | |
| int (*set_backlight)(struct udevice *dev, int percent); | |
| /** | |
| * get_timings() - Get display timings from panel. | |
| * | |
| * @dev: Panel device containing the display timings | |
| * @timing: Pointer to the timing for storing | |
| * @return 0 if OK, -ve on error | |
| */ | |
| int (*get_display_timing)(struct udevice *dev, | |
| struct display_timing *timing); | |
| /** | |
| * get_modes() - Get display modes from panel | |
| * | |
| * Returns an array of display modes supported by the panel. | |
| * Similar to Linux's drm_panel_funcs->get_modes(). | |
| * | |
| * @dev: Panel device | |
| * @modes: Pointer to an array of modes | |
| * @return number of modes if OK, -ve on error | |
| */ | |
| int (*get_modes)(struct udevice *dev, | |
| const struct drm_display_mode **modes); | |
| }; | |
| #define panel_get_ops(dev) ((struct panel_ops *)(dev)->driver->ops) | |
| /** | |
| * panel_enable_backlight() - Enable/disable the panel backlight | |
| * | |
| * @dev: Panel device containing the backlight to enable | |
| * @enable: true to enable the backlight, false to dis | |
| * Return: 0 if OK, -ve on error | |
| */ | |
| int panel_enable_backlight(struct udevice *dev); | |
| /** | |
| * panel_set_backlight - Set brightness for the panel backlight | |
| * | |
| * @dev: Panel device containing the backlight to update | |
| * @percent: Brightness value (0 to 100, or BACKLIGHT_... value) | |
| * Return: 0 if OK, -ve on error | |
| */ | |
| int panel_set_backlight(struct udevice *dev, int percent); | |
| /** | |
| * panel_get_display_timing() - Get display timings from panel. | |
| * | |
| * @dev: Panel device containing the display timings | |
| * @timing: Pointer to the timing for storing | |
| * Return: 0 if OK, -ve on error | |
| */ | |
| int panel_get_display_timing(struct udevice *dev, | |
| struct display_timing *timing); | |
| #endif |