Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | /* 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 |