adv7604.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * adv7604 - Analog Devices ADV7604 video decoder driver
  4. *
  5. * Copyright 2012 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
  6. */
  7. #ifndef _ADV7604_
  8. #define _ADV7604_
  9. #include <linux/types.h>
  10. /* Analog input muxing modes (AFE register 0x02, [2:0]) */
  11. enum adv7604_ain_sel {
  12. ADV7604_AIN1_2_3_NC_SYNC_1_2 = 0,
  13. ADV7604_AIN4_5_6_NC_SYNC_2_1 = 1,
  14. ADV7604_AIN7_8_9_NC_SYNC_3_1 = 2,
  15. ADV7604_AIN10_11_12_NC_SYNC_4_1 = 3,
  16. ADV7604_AIN9_4_5_6_SYNC_2_1 = 4,
  17. };
  18. /*
  19. * Bus rotation and reordering. This is used to specify component reordering on
  20. * the board and describes the components order on the bus when the ADV7604
  21. * outputs RGB.
  22. */
  23. enum adv7604_bus_order {
  24. ADV7604_BUS_ORDER_RGB, /* No operation */
  25. ADV7604_BUS_ORDER_GRB, /* Swap 1-2 */
  26. ADV7604_BUS_ORDER_RBG, /* Swap 2-3 */
  27. ADV7604_BUS_ORDER_BGR, /* Swap 1-3 */
  28. ADV7604_BUS_ORDER_BRG, /* Rotate right */
  29. ADV7604_BUS_ORDER_GBR, /* Rotate left */
  30. };
  31. /* Input Color Space (IO register 0x02, [7:4]) */
  32. enum adv76xx_inp_color_space {
  33. ADV76XX_INP_COLOR_SPACE_LIM_RGB = 0,
  34. ADV76XX_INP_COLOR_SPACE_FULL_RGB = 1,
  35. ADV76XX_INP_COLOR_SPACE_LIM_YCbCr_601 = 2,
  36. ADV76XX_INP_COLOR_SPACE_LIM_YCbCr_709 = 3,
  37. ADV76XX_INP_COLOR_SPACE_XVYCC_601 = 4,
  38. ADV76XX_INP_COLOR_SPACE_XVYCC_709 = 5,
  39. ADV76XX_INP_COLOR_SPACE_FULL_YCbCr_601 = 6,
  40. ADV76XX_INP_COLOR_SPACE_FULL_YCbCr_709 = 7,
  41. ADV76XX_INP_COLOR_SPACE_AUTO = 0xf,
  42. };
  43. /* Select output format (IO register 0x03, [4:2]) */
  44. enum adv7604_op_format_mode_sel {
  45. ADV7604_OP_FORMAT_MODE0 = 0x00,
  46. ADV7604_OP_FORMAT_MODE1 = 0x04,
  47. ADV7604_OP_FORMAT_MODE2 = 0x08,
  48. };
  49. enum adv76xx_drive_strength {
  50. ADV76XX_DR_STR_MEDIUM_LOW = 1,
  51. ADV76XX_DR_STR_MEDIUM_HIGH = 2,
  52. ADV76XX_DR_STR_HIGH = 3,
  53. };
  54. /* INT1 Configuration (IO register 0x40, [1:0]) */
  55. enum adv76xx_int1_config {
  56. ADV76XX_INT1_CONFIG_OPEN_DRAIN,
  57. ADV76XX_INT1_CONFIG_ACTIVE_LOW,
  58. ADV76XX_INT1_CONFIG_ACTIVE_HIGH,
  59. ADV76XX_INT1_CONFIG_DISABLED,
  60. };
  61. enum adv76xx_page {
  62. ADV76XX_PAGE_IO,
  63. ADV7604_PAGE_AVLINK,
  64. ADV76XX_PAGE_CEC,
  65. ADV76XX_PAGE_INFOFRAME,
  66. ADV7604_PAGE_ESDP,
  67. ADV7604_PAGE_DPP,
  68. ADV76XX_PAGE_AFE,
  69. ADV76XX_PAGE_REP,
  70. ADV76XX_PAGE_EDID,
  71. ADV76XX_PAGE_HDMI,
  72. ADV76XX_PAGE_TEST,
  73. ADV76XX_PAGE_CP,
  74. ADV7604_PAGE_VDP,
  75. ADV76XX_PAGE_MAX,
  76. };
  77. /* Platform dependent definition */
  78. struct adv76xx_platform_data {
  79. /* DIS_PWRDNB: 1 if the PWRDNB pin is unused and unconnected */
  80. unsigned disable_pwrdnb:1;
  81. /* DIS_CABLE_DET_RST: 1 if the 5V pins are unused and unconnected */
  82. unsigned disable_cable_det_rst:1;
  83. int default_input;
  84. /* Analog input muxing mode */
  85. enum adv7604_ain_sel ain_sel;
  86. /* Bus rotation and reordering */
  87. enum adv7604_bus_order bus_order;
  88. /* Select output format mode */
  89. enum adv7604_op_format_mode_sel op_format_mode_sel;
  90. /* Configuration of the INT1 pin */
  91. enum adv76xx_int1_config int1_config;
  92. /* IO register 0x02 */
  93. unsigned alt_gamma:1;
  94. /* IO register 0x05 */
  95. unsigned blank_data:1;
  96. unsigned insert_av_codes:1;
  97. unsigned replicate_av_codes:1;
  98. /* IO register 0x06 */
  99. unsigned inv_vs_pol:1;
  100. unsigned inv_hs_pol:1;
  101. unsigned inv_llc_pol:1;
  102. /* IO register 0x14 */
  103. enum adv76xx_drive_strength dr_str_data;
  104. enum adv76xx_drive_strength dr_str_clk;
  105. enum adv76xx_drive_strength dr_str_sync;
  106. /* IO register 0x30 */
  107. unsigned output_bus_lsb_to_msb:1;
  108. /* Free run */
  109. unsigned hdmi_free_run_mode;
  110. /* i2c addresses: 0 == use default */
  111. u8 i2c_addresses[ADV76XX_PAGE_MAX];
  112. };
  113. enum adv76xx_pad {
  114. ADV76XX_PAD_HDMI_PORT_A = 0,
  115. ADV7604_PAD_HDMI_PORT_B = 1,
  116. ADV7604_PAD_HDMI_PORT_C = 2,
  117. ADV7604_PAD_HDMI_PORT_D = 3,
  118. ADV7604_PAD_VGA_RGB = 4,
  119. ADV7604_PAD_VGA_COMP = 5,
  120. /* The source pad is either 1 (ADV7611) or 6 (ADV7604) */
  121. ADV7604_PAD_SOURCE = 6,
  122. ADV7611_PAD_SOURCE = 1,
  123. ADV76XX_PAD_MAX = 7,
  124. };
  125. #define V4L2_CID_ADV_RX_ANALOG_SAMPLING_PHASE (V4L2_CID_DV_CLASS_BASE + 0x1000)
  126. #define V4L2_CID_ADV_RX_FREE_RUN_COLOR_MANUAL (V4L2_CID_DV_CLASS_BASE + 0x1001)
  127. #define V4L2_CID_ADV_RX_FREE_RUN_COLOR (V4L2_CID_DV_CLASS_BASE + 0x1002)
  128. /* notify events */
  129. #define ADV76XX_HOTPLUG 1
  130. #endif