shmob_drm.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /*
  2. * shmob_drm.h -- SH Mobile DRM driver
  3. *
  4. * Copyright (C) 2012 Renesas Corporation
  5. *
  6. * 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. #ifndef __SHMOB_DRM_H__
  14. #define __SHMOB_DRM_H__
  15. #include <linux/kernel.h>
  16. #include <drm/drm_mode.h>
  17. struct sh_mobile_meram_cfg;
  18. struct sh_mobile_meram_info;
  19. enum shmob_drm_clk_source {
  20. SHMOB_DRM_CLK_BUS,
  21. SHMOB_DRM_CLK_PERIPHERAL,
  22. SHMOB_DRM_CLK_EXTERNAL,
  23. };
  24. enum shmob_drm_interface {
  25. SHMOB_DRM_IFACE_RGB8, /* 24bpp, 8:8:8 */
  26. SHMOB_DRM_IFACE_RGB9, /* 18bpp, 9:9 */
  27. SHMOB_DRM_IFACE_RGB12A, /* 24bpp, 12:12 */
  28. SHMOB_DRM_IFACE_RGB12B, /* 12bpp */
  29. SHMOB_DRM_IFACE_RGB16, /* 16bpp */
  30. SHMOB_DRM_IFACE_RGB18, /* 18bpp */
  31. SHMOB_DRM_IFACE_RGB24, /* 24bpp */
  32. SHMOB_DRM_IFACE_YUV422, /* 16bpp */
  33. SHMOB_DRM_IFACE_SYS8A, /* 24bpp, 8:8:8 */
  34. SHMOB_DRM_IFACE_SYS8B, /* 18bpp, 8:8:2 */
  35. SHMOB_DRM_IFACE_SYS8C, /* 18bpp, 2:8:8 */
  36. SHMOB_DRM_IFACE_SYS8D, /* 16bpp, 8:8 */
  37. SHMOB_DRM_IFACE_SYS9, /* 18bpp, 9:9 */
  38. SHMOB_DRM_IFACE_SYS12, /* 24bpp, 12:12 */
  39. SHMOB_DRM_IFACE_SYS16A, /* 16bpp */
  40. SHMOB_DRM_IFACE_SYS16B, /* 18bpp, 16:2 */
  41. SHMOB_DRM_IFACE_SYS16C, /* 18bpp, 2:16 */
  42. SHMOB_DRM_IFACE_SYS18, /* 18bpp */
  43. SHMOB_DRM_IFACE_SYS24, /* 24bpp */
  44. };
  45. struct shmob_drm_backlight_data {
  46. const char *name;
  47. int max_brightness;
  48. int (*get_brightness)(void);
  49. int (*set_brightness)(int brightness);
  50. };
  51. struct shmob_drm_panel_data {
  52. unsigned int width_mm; /* Panel width in mm */
  53. unsigned int height_mm; /* Panel height in mm */
  54. struct drm_mode_modeinfo mode;
  55. };
  56. struct shmob_drm_sys_interface_data {
  57. unsigned int read_latch:6;
  58. unsigned int read_setup:8;
  59. unsigned int read_cycle:8;
  60. unsigned int read_strobe:8;
  61. unsigned int write_setup:8;
  62. unsigned int write_cycle:8;
  63. unsigned int write_strobe:8;
  64. unsigned int cs_setup:3;
  65. unsigned int vsync_active_high:1;
  66. unsigned int vsync_dir_input:1;
  67. };
  68. #define SHMOB_DRM_IFACE_FL_DWPOL (1 << 0) /* Rising edge dot clock data latch */
  69. #define SHMOB_DRM_IFACE_FL_DIPOL (1 << 1) /* Active low display enable */
  70. #define SHMOB_DRM_IFACE_FL_DAPOL (1 << 2) /* Active low display data */
  71. #define SHMOB_DRM_IFACE_FL_HSCNT (1 << 3) /* Disable HSYNC during VBLANK */
  72. #define SHMOB_DRM_IFACE_FL_DWCNT (1 << 4) /* Disable dotclock during blanking */
  73. struct shmob_drm_interface_data {
  74. enum shmob_drm_interface interface;
  75. struct shmob_drm_sys_interface_data sys;
  76. unsigned int clk_div;
  77. unsigned int flags;
  78. };
  79. struct shmob_drm_platform_data {
  80. enum shmob_drm_clk_source clk_source;
  81. struct shmob_drm_interface_data iface;
  82. struct shmob_drm_panel_data panel;
  83. struct shmob_drm_backlight_data backlight;
  84. const struct sh_mobile_meram_cfg *meram;
  85. };
  86. #endif /* __SHMOB_DRM_H__ */