12dcf1433SSimon Glass /* 22dcf1433SSimon Glass * Copyright 2014 Google Inc. 32dcf1433SSimon Glass * 42dcf1433SSimon Glass * SPDX-License-Identifier: GPL-2.0+ 52dcf1433SSimon Glass */ 62dcf1433SSimon Glass 72dcf1433SSimon Glass #include <common.h> 82dcf1433SSimon Glass #include <dm.h> 92dcf1433SSimon Glass #include <display.h> 102dcf1433SSimon Glass #include <edid.h> 112dcf1433SSimon Glass #include <errno.h> 122dcf1433SSimon Glass 132dcf1433SSimon Glass int display_read_edid(struct udevice *dev, u8 *buf, int buf_size) 142dcf1433SSimon Glass { 152dcf1433SSimon Glass struct dm_display_ops *ops = display_get_ops(dev); 162dcf1433SSimon Glass 172dcf1433SSimon Glass if (!ops || !ops->read_edid) 182dcf1433SSimon Glass return -ENOSYS; 192dcf1433SSimon Glass return ops->read_edid(dev, buf, buf_size); 202dcf1433SSimon Glass } 212dcf1433SSimon Glass 222dcf1433SSimon Glass int display_enable(struct udevice *dev, int panel_bpp, 232dcf1433SSimon Glass const struct display_timing *timing) 242dcf1433SSimon Glass { 252dcf1433SSimon Glass struct dm_display_ops *ops = display_get_ops(dev); 262dcf1433SSimon Glass 272dcf1433SSimon Glass if (!ops || !ops->enable) 282dcf1433SSimon Glass return -ENOSYS; 292dcf1433SSimon Glass return ops->enable(dev, panel_bpp, timing); 302dcf1433SSimon Glass } 312dcf1433SSimon Glass 322dcf1433SSimon Glass int display_read_timing(struct udevice *dev, struct display_timing *timing) 332dcf1433SSimon Glass { 342dcf1433SSimon Glass struct dm_display_ops *ops = display_get_ops(dev); 352dcf1433SSimon Glass int panel_bits_per_colour; 362dcf1433SSimon Glass u8 buf[EDID_EXT_SIZE]; 372dcf1433SSimon Glass int ret; 382dcf1433SSimon Glass 39*eab314f5SJacob Chen if (ops && ops->read_timing) 40*eab314f5SJacob Chen return ops->read_timing(dev, timing); 41*eab314f5SJacob Chen 422dcf1433SSimon Glass if (!ops || !ops->read_edid) 432dcf1433SSimon Glass return -ENOSYS; 442dcf1433SSimon Glass ret = ops->read_edid(dev, buf, sizeof(buf)); 452dcf1433SSimon Glass if (ret < 0) 462dcf1433SSimon Glass return ret; 472dcf1433SSimon Glass 482dcf1433SSimon Glass return edid_get_timing(buf, ret, timing, &panel_bits_per_colour); 492dcf1433SSimon Glass } 502dcf1433SSimon Glass 512dcf1433SSimon Glass UCLASS_DRIVER(display) = { 522dcf1433SSimon Glass .id = UCLASS_DISPLAY, 532dcf1433SSimon Glass .name = "display", 542dcf1433SSimon Glass .per_device_platdata_auto_alloc_size = sizeof(struct display_plat), 552dcf1433SSimon Glass }; 56