1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 /* 3 * Copyright 2014 Google Inc. 4 */ 5 6 #ifndef _DISPLAY_H 7 #define _DISPLAY_H 8 9 struct udevice; 10 struct display_timing; 11 12 /** 13 * Display uclass platform data for each device 14 * 15 * @source_id: ID for the source of the display data, typically a video 16 * controller 17 * @src_dev: Source device providing the video 18 * @in_use: Display is being used 19 */ 20 struct display_plat { 21 int source_id; 22 struct udevice *src_dev; 23 bool in_use; 24 }; 25 26 /** 27 * display_read_timing() - Read timing information 28 * 29 * @dev: Device to read from 30 * @return 0 if OK, -ve on error 31 */ 32 int display_read_timing(struct udevice *dev, struct display_timing *timing); 33 34 /** 35 * display_port_enable() - Enable a display port device 36 * 37 * @dev: Device to enable 38 * @panel_bpp: Number of bits per pixel for panel 39 * @timing: Display timings 40 * @return 0 if OK, -ve on error 41 */ 42 int display_enable(struct udevice *dev, int panel_bpp, 43 const struct display_timing *timing); 44 45 /** 46 * display_in_use() - Check if a display is in use by any device 47 * 48 * @return true if the device is in use (display_enable() has been called 49 * successfully), else false 50 */ 51 bool display_in_use(struct udevice *dev); 52 53 struct dm_display_ops { 54 /** 55 * read_timing() - Read information directly 56 * 57 * @dev: Device to read from 58 * @timing: Display timings 59 * @return 0 if OK, -ve on error 60 */ 61 int (*read_timing)(struct udevice *dev, struct display_timing *timing); 62 63 /** 64 * read_edid() - Read information from EDID 65 * 66 * @dev: Device to read from 67 * @buf: Buffer to read into (should be EDID_SIZE bytes) 68 * @buf_size: Buffer size (should be EDID_SIZE) 69 * @return number of bytes read, <=0 for error 70 */ 71 int (*read_edid)(struct udevice *dev, u8 *buf, int buf_size); 72 73 /** 74 * enable() - Enable the display port device 75 * 76 * @dev: Device to enable 77 * @panel_bpp: Number of bits per pixel for panel 78 * @timing: Display timings 79 * @return 0 if OK, -ve on error 80 */ 81 int (*enable)(struct udevice *dev, int panel_bpp, 82 const struct display_timing *timing); 83 84 /** 85 * mode_valid() - Check if mode is supported 86 * 87 * @dev: Device to enable 88 * @timing: Display timings 89 * @return true if supported, false if not 90 */ 91 bool (*mode_valid)(struct udevice *dev, 92 const struct display_timing *timing); 93 }; 94 95 #define display_get_ops(dev) ((struct dm_display_ops *)(dev)->driver->ops) 96 97 #endif 98