display-uclass.c 1.2 KB

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