dsi_display_test.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
  4. */
  5. #include <linux/delay.h>
  6. #include <linux/slab.h>
  7. #include "dsi_display_test.h"
  8. static void dsi_display_test_dump_modes(struct dsi_display_mode *mode, u32
  9. count)
  10. {
  11. }
  12. static void dsi_display_test_work(struct work_struct *work)
  13. {
  14. struct dsi_display_test *test;
  15. struct dsi_display *display;
  16. struct dsi_display_mode *modes;
  17. u32 count = 0;
  18. int rc = 0;
  19. test = container_of(work, struct dsi_display_test, test_work);
  20. display = test->display;
  21. rc = dsi_display_get_mode_count(display, &count);
  22. if (rc) {
  23. DSI_ERR("failed to get modes count, rc=%d\n", rc);
  24. goto test_fail;
  25. }
  26. rc = dsi_display_get_modes(display, &modes);
  27. if (rc) {
  28. DSI_ERR("failed to get modes, rc=%d\n", rc);
  29. goto test_fail_free_modes;
  30. }
  31. dsi_display_test_dump_modes(modes, count);
  32. rc = dsi_display_set_mode(display, &modes[0], 0x0);
  33. if (rc) {
  34. DSI_ERR("failed to set mode, rc=%d\n", rc);
  35. goto test_fail_free_modes;
  36. }
  37. rc = dsi_display_prepare(display);
  38. if (rc) {
  39. DSI_ERR("failed to prepare display, rc=%d\n", rc);
  40. goto test_fail_free_modes;
  41. }
  42. rc = dsi_display_enable(display);
  43. if (rc) {
  44. DSI_ERR("failed to enable display, rc=%d\n", rc);
  45. goto test_fail_unprep_disp;
  46. }
  47. return;
  48. test_fail_unprep_disp:
  49. if (rc) {
  50. DSI_ERR("failed to unprep display, rc=%d\n", rc);
  51. goto test_fail_free_modes;
  52. }
  53. test_fail_free_modes:
  54. kfree(modes);
  55. test_fail:
  56. return;
  57. }
  58. int dsi_display_test_init(struct dsi_display *display)
  59. {
  60. static int done;
  61. int rc = 0;
  62. struct dsi_display_test *test;
  63. if (done)
  64. return rc;
  65. done = 1;
  66. if (!display) {
  67. DSI_ERR("Invalid params\n");
  68. return -EINVAL;
  69. }
  70. test = kzalloc(sizeof(*test), GFP_KERNEL);
  71. if (!test)
  72. return -ENOMEM;
  73. test->display = display;
  74. INIT_WORK(&test->test_work, dsi_display_test_work);
  75. dsi_display_test_work(&test->test_work);
  76. return rc;
  77. }