of_videomode.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * generic videomode helper
  4. *
  5. * Copyright (c) 2012 Steffen Trumtrar <s.trumtrar@pengutronix.de>, Pengutronix
  6. */
  7. #include <linux/errno.h>
  8. #include <linux/export.h>
  9. #include <linux/of.h>
  10. #include <video/display_timing.h>
  11. #include <video/of_display_timing.h>
  12. #include <video/of_videomode.h>
  13. #include <video/videomode.h>
  14. /**
  15. * of_get_videomode - get the videomode #<index> from devicetree
  16. * @np - devicenode with the display_timings
  17. * @vm - set to return value
  18. * @index - index into list of display_timings
  19. * (Set this to OF_USE_NATIVE_MODE to use whatever mode is
  20. * specified as native mode in the DT.)
  21. *
  22. * DESCRIPTION:
  23. * Get a list of all display timings and put the one
  24. * specified by index into *vm. This function should only be used, if
  25. * only one videomode is to be retrieved. A driver that needs to work
  26. * with multiple/all videomodes should work with
  27. * of_get_display_timings instead.
  28. **/
  29. int of_get_videomode(struct device_node *np, struct videomode *vm,
  30. int index)
  31. {
  32. struct display_timings *disp;
  33. int ret;
  34. disp = of_get_display_timings(np);
  35. if (!disp) {
  36. pr_err("%pOF: no timings specified\n", np);
  37. return -EINVAL;
  38. }
  39. if (index == OF_USE_NATIVE_MODE)
  40. index = disp->native_mode;
  41. ret = videomode_from_timings(disp, vm, index);
  42. display_timings_release(disp);
  43. return ret;
  44. }
  45. EXPORT_SYMBOL_GPL(of_get_videomode);