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