of_videomode.c 1.4 KB

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