rcar_du_vga.c 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /*
  2. * rcar_du_vga.c -- R-Car Display Unit VGA DAC
  3. *
  4. * Copyright (C) 2013 Renesas Corporation
  5. *
  6. * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com)
  7. *
  8. * This program is free software; you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as published by
  10. * the Free Software Foundation; either version 2 of the License, or
  11. * (at your option) any later version.
  12. */
  13. #include <drm/drmP.h>
  14. #include <drm/drm_crtc.h>
  15. #include <drm/drm_crtc_helper.h>
  16. #include "rcar_du_drv.h"
  17. #include "rcar_du_kms.h"
  18. #include "rcar_du_vga.h"
  19. #include "rcar_du_vgacon.h"
  20. static void rcar_du_vga_encoder_dpms(struct drm_encoder *encoder, int mode)
  21. {
  22. }
  23. static bool rcar_du_vga_encoder_mode_fixup(struct drm_encoder *encoder,
  24. const struct drm_display_mode *mode,
  25. struct drm_display_mode *adjusted_mode)
  26. {
  27. return true;
  28. }
  29. static const struct drm_encoder_helper_funcs encoder_helper_funcs = {
  30. .dpms = rcar_du_vga_encoder_dpms,
  31. .mode_fixup = rcar_du_vga_encoder_mode_fixup,
  32. .prepare = rcar_du_encoder_mode_prepare,
  33. .commit = rcar_du_encoder_mode_commit,
  34. .mode_set = rcar_du_encoder_mode_set,
  35. };
  36. static const struct drm_encoder_funcs encoder_funcs = {
  37. .destroy = drm_encoder_cleanup,
  38. };
  39. int rcar_du_vga_init(struct rcar_du_device *rcdu,
  40. const struct rcar_du_encoder_vga_data *data,
  41. unsigned int output)
  42. {
  43. struct rcar_du_encoder *renc;
  44. int ret;
  45. renc = devm_kzalloc(rcdu->dev, sizeof(*renc), GFP_KERNEL);
  46. if (renc == NULL)
  47. return -ENOMEM;
  48. renc->output = output;
  49. ret = drm_encoder_init(rcdu->ddev, &renc->encoder, &encoder_funcs,
  50. DRM_MODE_ENCODER_DAC);
  51. if (ret < 0)
  52. return ret;
  53. drm_encoder_helper_add(&renc->encoder, &encoder_helper_funcs);
  54. return rcar_du_vga_connector_init(rcdu, renc);
  55. }