12dcf1433SSimon Glass /* 22dcf1433SSimon Glass * Copyright 2014 Google Inc. 32dcf1433SSimon Glass * 42dcf1433SSimon Glass * SPDX-License-Identifier: GPL-2.0+ 52dcf1433SSimon Glass */ 62dcf1433SSimon Glass 72dcf1433SSimon Glass #ifndef _DISPLAY_H 82dcf1433SSimon Glass #define _DISPLAY_H 92dcf1433SSimon Glass 102dcf1433SSimon Glass struct udevice; 112dcf1433SSimon Glass struct display_timing; 122dcf1433SSimon Glass 132dcf1433SSimon Glass /** 142dcf1433SSimon Glass * Display uclass platform data for each device 152dcf1433SSimon Glass * 162dcf1433SSimon Glass * @source_id: ID for the source of the display data, typically a video 172dcf1433SSimon Glass * controller 182dcf1433SSimon Glass * @src_dev: Source device providing the video 19*1b68283bSSimon Glass * @in_use: Display is being used 202dcf1433SSimon Glass */ 212dcf1433SSimon Glass struct display_plat { 222dcf1433SSimon Glass int source_id; 232dcf1433SSimon Glass struct udevice *src_dev; 24*1b68283bSSimon Glass bool in_use; 252dcf1433SSimon Glass }; 262dcf1433SSimon Glass 272dcf1433SSimon Glass /** 28eab314f5SJacob Chen * display_read_timing() - Read timing information 292dcf1433SSimon Glass * 302dcf1433SSimon Glass * @dev: Device to read from 312dcf1433SSimon Glass * @return 0 if OK, -ve on error 322dcf1433SSimon Glass */ 332dcf1433SSimon Glass int display_read_timing(struct udevice *dev, struct display_timing *timing); 342dcf1433SSimon Glass 352dcf1433SSimon Glass /** 362dcf1433SSimon Glass * display_port_enable() - Enable a display port device 372dcf1433SSimon Glass * 382dcf1433SSimon Glass * @dev: Device to enable 392dcf1433SSimon Glass * @panel_bpp: Number of bits per pixel for panel 402dcf1433SSimon Glass * @timing: Display timings 412dcf1433SSimon Glass * @return 0 if OK, -ve on error 422dcf1433SSimon Glass */ 432dcf1433SSimon Glass int display_enable(struct udevice *dev, int panel_bpp, 442dcf1433SSimon Glass const struct display_timing *timing); 452dcf1433SSimon Glass 46*1b68283bSSimon Glass /** 47*1b68283bSSimon Glass * display_in_use() - Check if a display is in use by any device 48*1b68283bSSimon Glass * 49*1b68283bSSimon Glass * @return true if the device is in use (display_enable() has been called 50*1b68283bSSimon Glass * successfully), else false 51*1b68283bSSimon Glass */ 52*1b68283bSSimon Glass bool display_in_use(struct udevice *dev); 53*1b68283bSSimon Glass 542dcf1433SSimon Glass struct dm_display_ops { 552dcf1433SSimon Glass /** 56eab314f5SJacob Chen * read_timing() - Read information directly 57eab314f5SJacob Chen * 58eab314f5SJacob Chen * @dev: Device to read from 59eab314f5SJacob Chen * @timing: Display timings 60eab314f5SJacob Chen * @return 0 if OK, -ve on error 61eab314f5SJacob Chen */ 62eab314f5SJacob Chen int (*read_timing)(struct udevice *dev, struct display_timing *timing); 63eab314f5SJacob Chen 64eab314f5SJacob Chen /** 652dcf1433SSimon Glass * read_edid() - Read information from EDID 662dcf1433SSimon Glass * 672dcf1433SSimon Glass * @dev: Device to read from 682dcf1433SSimon Glass * @buf: Buffer to read into (should be EDID_SIZE bytes) 692dcf1433SSimon Glass * @buf_size: Buffer size (should be EDID_SIZE) 702dcf1433SSimon Glass * @return number of bytes read, <=0 for error 712dcf1433SSimon Glass */ 722dcf1433SSimon Glass int (*read_edid)(struct udevice *dev, u8 *buf, int buf_size); 732dcf1433SSimon Glass 742dcf1433SSimon Glass /** 752dcf1433SSimon Glass * enable() - Enable the display port device 762dcf1433SSimon Glass * 772dcf1433SSimon Glass * @dev: Device to enable 782dcf1433SSimon Glass * @panel_bpp: Number of bits per pixel for panel 792dcf1433SSimon Glass * @timing: Display timings 802dcf1433SSimon Glass * @return 0 if OK, -ve on error 812dcf1433SSimon Glass */ 822dcf1433SSimon Glass int (*enable)(struct udevice *dev, int panel_bpp, 832dcf1433SSimon Glass const struct display_timing *timing); 842dcf1433SSimon Glass }; 852dcf1433SSimon Glass 862dcf1433SSimon Glass #define display_get_ops(dev) ((struct dm_display_ops *)(dev)->driver->ops) 872dcf1433SSimon Glass 882dcf1433SSimon Glass #endif 89