v4l2-subdev.c 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /*
  2. V4L2 sub-device support.
  3. Copyright (C) 2008 Hans Verkuil <hverkuil@xs4all.nl>
  4. This program is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation; either version 2 of the License, or
  7. (at your option) any later version.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with this program; if not, write to the Free Software
  14. Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  15. */
  16. #include <linux/types.h>
  17. #include <linux/ioctl.h>
  18. #include <linux/i2c.h>
  19. #include <linux/videodev2.h>
  20. #include <media/v4l2-subdev.h>
  21. int v4l2_subdev_command(struct v4l2_subdev *sd, unsigned cmd, void *arg)
  22. {
  23. switch (cmd) {
  24. case VIDIOC_QUERYCTRL:
  25. return v4l2_subdev_call(sd, core, queryctrl, arg);
  26. case VIDIOC_G_CTRL:
  27. return v4l2_subdev_call(sd, core, g_ctrl, arg);
  28. case VIDIOC_S_CTRL:
  29. return v4l2_subdev_call(sd, core, s_ctrl, arg);
  30. case VIDIOC_QUERYMENU:
  31. return v4l2_subdev_call(sd, core, querymenu, arg);
  32. case VIDIOC_LOG_STATUS:
  33. return v4l2_subdev_call(sd, core, log_status);
  34. case VIDIOC_DBG_G_CHIP_IDENT:
  35. return v4l2_subdev_call(sd, core, g_chip_ident, arg);
  36. case VIDIOC_INT_S_STANDBY:
  37. return v4l2_subdev_call(sd, core, s_standby, arg ? (*(u32 *)arg) : 0);
  38. case VIDIOC_INT_RESET:
  39. return v4l2_subdev_call(sd, core, reset, arg ? (*(u32 *)arg) : 0);
  40. case VIDIOC_INT_S_GPIO:
  41. return v4l2_subdev_call(sd, core, s_gpio, arg ? (*(u32 *)arg) : 0);
  42. case VIDIOC_INT_INIT:
  43. return v4l2_subdev_call(sd, core, init, arg ? (*(u32 *)arg) : 0);
  44. #ifdef CONFIG_VIDEO_ADV_DEBUG
  45. case VIDIOC_DBG_G_REGISTER:
  46. return v4l2_subdev_call(sd, core, g_register, arg);
  47. case VIDIOC_DBG_S_REGISTER:
  48. return v4l2_subdev_call(sd, core, s_register, arg);
  49. #endif
  50. case VIDIOC_INT_S_TUNER_MODE:
  51. return v4l2_subdev_call(sd, tuner, s_mode, *(enum v4l2_tuner_type *)arg);
  52. case AUDC_SET_RADIO:
  53. return v4l2_subdev_call(sd, tuner, s_radio);
  54. case VIDIOC_S_TUNER:
  55. return v4l2_subdev_call(sd, tuner, s_tuner, arg);
  56. case VIDIOC_G_TUNER:
  57. return v4l2_subdev_call(sd, tuner, g_tuner, arg);
  58. case VIDIOC_S_STD:
  59. return v4l2_subdev_call(sd, tuner, s_std, *(v4l2_std_id *)arg);
  60. case VIDIOC_S_FREQUENCY:
  61. return v4l2_subdev_call(sd, tuner, s_frequency, arg);
  62. case VIDIOC_G_FREQUENCY:
  63. return v4l2_subdev_call(sd, tuner, g_frequency, arg);
  64. case TUNER_SET_TYPE_ADDR:
  65. return v4l2_subdev_call(sd, tuner, s_type_addr, arg);
  66. case TUNER_SET_CONFIG:
  67. return v4l2_subdev_call(sd, tuner, s_config, arg);
  68. case VIDIOC_INT_AUDIO_CLOCK_FREQ:
  69. return v4l2_subdev_call(sd, audio, s_clock_freq, *(u32 *)arg);
  70. case VIDIOC_INT_S_AUDIO_ROUTING:
  71. return v4l2_subdev_call(sd, audio, s_routing, arg);
  72. case VIDIOC_INT_I2S_CLOCK_FREQ:
  73. return v4l2_subdev_call(sd, audio, s_i2s_clock_freq, *(u32 *)arg);
  74. case VIDIOC_INT_S_VIDEO_ROUTING:
  75. return v4l2_subdev_call(sd, video, s_routing, arg);
  76. case VIDIOC_INT_S_CRYSTAL_FREQ:
  77. return v4l2_subdev_call(sd, video, s_crystal_freq, arg);
  78. case VIDIOC_INT_DECODE_VBI_LINE:
  79. return v4l2_subdev_call(sd, video, decode_vbi_line, arg);
  80. case VIDIOC_INT_S_VBI_DATA:
  81. return v4l2_subdev_call(sd, video, s_vbi_data, arg);
  82. case VIDIOC_INT_G_VBI_DATA:
  83. return v4l2_subdev_call(sd, video, g_vbi_data, arg);
  84. case VIDIOC_G_SLICED_VBI_CAP:
  85. return v4l2_subdev_call(sd, video, g_sliced_vbi_cap, arg);
  86. case VIDIOC_S_FMT:
  87. return v4l2_subdev_call(sd, video, s_fmt, arg);
  88. case VIDIOC_G_FMT:
  89. return v4l2_subdev_call(sd, video, g_fmt, arg);
  90. case VIDIOC_INT_S_STD_OUTPUT:
  91. return v4l2_subdev_call(sd, video, s_std_output, *(v4l2_std_id *)arg);
  92. case VIDIOC_STREAMON:
  93. return v4l2_subdev_call(sd, video, s_stream, 1);
  94. case VIDIOC_STREAMOFF:
  95. return v4l2_subdev_call(sd, video, s_stream, 0);
  96. default:
  97. return v4l2_subdev_call(sd, core, ioctl, cmd, arg);
  98. }
  99. }
  100. EXPORT_SYMBOL_GPL(v4l2_subdev_command);