1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright 2014 Google Inc.
6 #define LOG_CATEGORY UCLASS_DISPLAY
14 int display_read_edid(struct udevice *dev, u8 *buf, int buf_size)
16 struct dm_display_ops *ops = display_get_ops(dev);
18 if (!ops || !ops->read_edid)
20 return ops->read_edid(dev, buf, buf_size);
23 int display_enable(struct udevice *dev, int panel_bpp,
24 const struct display_timing *timing)
26 struct dm_display_ops *ops = display_get_ops(dev);
27 struct display_plat *disp_uc_plat;
30 if (!ops || !ops->enable)
32 ret = ops->enable(dev, panel_bpp, timing);
36 disp_uc_plat = dev_get_uclass_plat(dev);
37 disp_uc_plat->in_use = true;
42 static bool display_mode_valid(void *priv, const struct display_timing *timing)
44 struct udevice *dev = priv;
45 struct dm_display_ops *ops = display_get_ops(dev);
47 if (ops && ops->mode_valid)
48 return ops->mode_valid(dev, timing);
53 int display_read_timing(struct udevice *dev, struct display_timing *timing)
55 struct dm_display_ops *ops = display_get_ops(dev);
56 int panel_bits_per_colour;
57 u8 buf[EDID_EXT_SIZE];
60 if (ops && ops->read_timing)
61 return ops->read_timing(dev, timing);
63 if (!ops || !ops->read_edid)
65 ret = ops->read_edid(dev, buf, sizeof(buf));
69 return edid_get_timing_validate(buf, ret, timing,
70 &panel_bits_per_colour,
71 display_mode_valid, dev);
74 bool display_in_use(struct udevice *dev)
76 struct display_plat *disp_uc_plat = dev_get_uclass_plat(dev);
78 return disp_uc_plat->in_use;
81 UCLASS_DRIVER(display) = {
84 .per_device_plat_auto = sizeof(struct display_plat),