1*2dcf1433SSimon Glass /* 2*2dcf1433SSimon Glass * Copyright 2014 Google Inc. 3*2dcf1433SSimon Glass * 4*2dcf1433SSimon Glass * SPDX-License-Identifier: GPL-2.0+ 5*2dcf1433SSimon Glass */ 6*2dcf1433SSimon Glass 7*2dcf1433SSimon Glass #include <common.h> 8*2dcf1433SSimon Glass #include <dm.h> 9*2dcf1433SSimon Glass #include <display.h> 10*2dcf1433SSimon Glass #include <edid.h> 11*2dcf1433SSimon Glass #include <errno.h> 12*2dcf1433SSimon Glass 13*2dcf1433SSimon Glass int display_read_edid(struct udevice *dev, u8 *buf, int buf_size) 14*2dcf1433SSimon Glass { 15*2dcf1433SSimon Glass struct dm_display_ops *ops = display_get_ops(dev); 16*2dcf1433SSimon Glass 17*2dcf1433SSimon Glass if (!ops || !ops->read_edid) 18*2dcf1433SSimon Glass return -ENOSYS; 19*2dcf1433SSimon Glass return ops->read_edid(dev, buf, buf_size); 20*2dcf1433SSimon Glass } 21*2dcf1433SSimon Glass 22*2dcf1433SSimon Glass int display_enable(struct udevice *dev, int panel_bpp, 23*2dcf1433SSimon Glass const struct display_timing *timing) 24*2dcf1433SSimon Glass { 25*2dcf1433SSimon Glass struct dm_display_ops *ops = display_get_ops(dev); 26*2dcf1433SSimon Glass 27*2dcf1433SSimon Glass if (!ops || !ops->enable) 28*2dcf1433SSimon Glass return -ENOSYS; 29*2dcf1433SSimon Glass return ops->enable(dev, panel_bpp, timing); 30*2dcf1433SSimon Glass } 31*2dcf1433SSimon Glass 32*2dcf1433SSimon Glass int display_read_timing(struct udevice *dev, struct display_timing *timing) 33*2dcf1433SSimon Glass { 34*2dcf1433SSimon Glass struct dm_display_ops *ops = display_get_ops(dev); 35*2dcf1433SSimon Glass int panel_bits_per_colour; 36*2dcf1433SSimon Glass u8 buf[EDID_EXT_SIZE]; 37*2dcf1433SSimon Glass int ret; 38*2dcf1433SSimon Glass 39*2dcf1433SSimon Glass if (!ops || !ops->read_edid) 40*2dcf1433SSimon Glass return -ENOSYS; 41*2dcf1433SSimon Glass ret = ops->read_edid(dev, buf, sizeof(buf)); 42*2dcf1433SSimon Glass if (ret < 0) 43*2dcf1433SSimon Glass return ret; 44*2dcf1433SSimon Glass 45*2dcf1433SSimon Glass return edid_get_timing(buf, ret, timing, &panel_bits_per_colour); 46*2dcf1433SSimon Glass } 47*2dcf1433SSimon Glass 48*2dcf1433SSimon Glass UCLASS_DRIVER(display) = { 49*2dcf1433SSimon Glass .id = UCLASS_DISPLAY, 50*2dcf1433SSimon Glass .name = "display", 51*2dcf1433SSimon Glass .per_device_platdata_auto_alloc_size = sizeof(struct display_plat), 52*2dcf1433SSimon Glass }; 53