^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) cx23415/6/8 header containing common defines.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #ifndef CX2341X_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #define CX2341X_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <media/v4l2-ctrls.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) enum cx2341x_port {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) CX2341X_PORT_MEMORY = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) CX2341X_PORT_STREAMING = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) CX2341X_PORT_SERIAL = 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) enum cx2341x_cap {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) CX2341X_CAP_HAS_SLICED_VBI = 1 << 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) CX2341X_CAP_HAS_TS = 1 << 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) CX2341X_CAP_HAS_AC3 = 1 << 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) struct cx2341x_mpeg_params {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) /* misc */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) u32 capabilities;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) enum cx2341x_port port;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) u16 width;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) u16 height;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) u16 is_50hz;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) /* stream */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) enum v4l2_mpeg_stream_type stream_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) enum v4l2_mpeg_stream_vbi_fmt stream_vbi_fmt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) u16 stream_insert_nav_packets;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) /* audio */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) enum v4l2_mpeg_audio_sampling_freq audio_sampling_freq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) enum v4l2_mpeg_audio_encoding audio_encoding;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) enum v4l2_mpeg_audio_l2_bitrate audio_l2_bitrate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) enum v4l2_mpeg_audio_ac3_bitrate audio_ac3_bitrate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) enum v4l2_mpeg_audio_mode audio_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) enum v4l2_mpeg_audio_mode_extension audio_mode_extension;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) enum v4l2_mpeg_audio_emphasis audio_emphasis;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) enum v4l2_mpeg_audio_crc audio_crc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) u32 audio_properties;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) u16 audio_mute;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) /* video */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) enum v4l2_mpeg_video_encoding video_encoding;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) enum v4l2_mpeg_video_aspect video_aspect;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) u16 video_b_frames;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) u16 video_gop_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) u16 video_gop_closure;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) enum v4l2_mpeg_video_bitrate_mode video_bitrate_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) u32 video_bitrate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) u32 video_bitrate_peak;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) u16 video_temporal_decimation;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) u16 video_mute;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) u32 video_mute_yuv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) /* encoding filters */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) enum v4l2_mpeg_cx2341x_video_spatial_filter_mode video_spatial_filter_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) u16 video_spatial_filter;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type video_luma_spatial_filter_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) enum v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type video_chroma_spatial_filter_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) enum v4l2_mpeg_cx2341x_video_temporal_filter_mode video_temporal_filter_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) u16 video_temporal_filter;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) enum v4l2_mpeg_cx2341x_video_median_filter_type video_median_filter_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) u16 video_luma_median_filter_top;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) u16 video_luma_median_filter_bottom;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) u16 video_chroma_median_filter_top;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) u16 video_chroma_median_filter_bottom;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) #define CX2341X_MBOX_MAX_DATA 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) extern const u32 cx2341x_mpeg_ctrls[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) typedef int (*cx2341x_mbox_func)(void *priv, u32 cmd, int in, int out,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) u32 data[CX2341X_MBOX_MAX_DATA]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) int cx2341x_update(void *priv, cx2341x_mbox_func func,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) const struct cx2341x_mpeg_params *old,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) const struct cx2341x_mpeg_params *new);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) int cx2341x_ctrl_query(const struct cx2341x_mpeg_params *params,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) struct v4l2_queryctrl *qctrl);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) const char * const *cx2341x_ctrl_get_menu(const struct cx2341x_mpeg_params *p, u32 id);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) int cx2341x_ext_ctrls(struct cx2341x_mpeg_params *params, int busy,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) struct v4l2_ext_controls *ctrls, unsigned int cmd);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) void cx2341x_fill_defaults(struct cx2341x_mpeg_params *p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) void cx2341x_log_status(const struct cx2341x_mpeg_params *p, const char *prefix);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) struct cx2341x_handler;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) struct cx2341x_handler_ops {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) /* needed for the video clock freq */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) int (*s_audio_sampling_freq)(struct cx2341x_handler *hdl, u32 val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) /* needed for dualwatch */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) int (*s_audio_mode)(struct cx2341x_handler *hdl, u32 val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) /* needed for setting up the video resolution */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) int (*s_video_encoding)(struct cx2341x_handler *hdl, u32 val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) /* needed for setting up the sliced vbi insertion data structures */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) int (*s_stream_vbi_fmt)(struct cx2341x_handler *hdl, u32 val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) struct cx2341x_handler {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) u32 capabilities;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) enum cx2341x_port port;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) u16 width;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) u16 height;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) u16 is_50hz;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) u32 audio_properties;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) struct v4l2_ctrl_handler hdl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) void *priv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) cx2341x_mbox_func func;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) const struct cx2341x_handler_ops *ops;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) struct v4l2_ctrl *stream_vbi_fmt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) /* audio cluster */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) struct v4l2_ctrl *audio_sampling_freq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) struct v4l2_ctrl *audio_encoding;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) struct v4l2_ctrl *audio_l2_bitrate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) struct v4l2_ctrl *audio_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) struct v4l2_ctrl *audio_mode_extension;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) struct v4l2_ctrl *audio_emphasis;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) struct v4l2_ctrl *audio_crc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) struct v4l2_ctrl *audio_ac3_bitrate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) /* video gop cluster */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) struct v4l2_ctrl *video_b_frames;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) struct v4l2_ctrl *video_gop_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) /* stream type cluster */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) struct v4l2_ctrl *stream_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) struct v4l2_ctrl *video_encoding;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) struct v4l2_ctrl *video_bitrate_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) struct v4l2_ctrl *video_bitrate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) struct v4l2_ctrl *video_bitrate_peak;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) /* video mute cluster */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) struct v4l2_ctrl *video_mute;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) struct v4l2_ctrl *video_mute_yuv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) /* video filter mode cluster */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) struct v4l2_ctrl *video_spatial_filter_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) struct v4l2_ctrl *video_temporal_filter_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) struct v4l2_ctrl *video_median_filter_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) /* video filter type cluster */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) struct v4l2_ctrl *video_luma_spatial_filter_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) struct v4l2_ctrl *video_chroma_spatial_filter_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) /* video filter cluster */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) struct v4l2_ctrl *video_spatial_filter;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) struct v4l2_ctrl *video_temporal_filter;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) /* video median cluster */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) struct v4l2_ctrl *video_luma_median_filter_top;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) struct v4l2_ctrl *video_luma_median_filter_bottom;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) struct v4l2_ctrl *video_chroma_median_filter_top;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) struct v4l2_ctrl *video_chroma_median_filter_bottom;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) int cx2341x_handler_init(struct cx2341x_handler *cxhdl,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) unsigned nr_of_controls_hint);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) void cx2341x_handler_set_50hz(struct cx2341x_handler *cxhdl, int is_50hz);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) int cx2341x_handler_setup(struct cx2341x_handler *cxhdl);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) void cx2341x_handler_set_busy(struct cx2341x_handler *cxhdl, int busy);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) /* Firmware names */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) #define CX2341X_FIRM_ENC_FILENAME "v4l-cx2341x-enc.fw"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) /* Decoder firmware for the cx23415 only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) #define CX2341X_FIRM_DEC_FILENAME "v4l-cx2341x-dec.fw"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) /* Firmware API commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) /* MPEG decoder API, specific to the cx23415 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) #define CX2341X_DEC_PING_FW 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) #define CX2341X_DEC_START_PLAYBACK 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) #define CX2341X_DEC_STOP_PLAYBACK 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) #define CX2341X_DEC_SET_PLAYBACK_SPEED 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) #define CX2341X_DEC_STEP_VIDEO 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) #define CX2341X_DEC_SET_DMA_BLOCK_SIZE 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) #define CX2341X_DEC_GET_XFER_INFO 0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) #define CX2341X_DEC_GET_DMA_STATUS 0x0a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) #define CX2341X_DEC_SCHED_DMA_FROM_HOST 0x0b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) #define CX2341X_DEC_PAUSE_PLAYBACK 0x0d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) #define CX2341X_DEC_HALT_FW 0x0e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) #define CX2341X_DEC_SET_STANDARD 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) #define CX2341X_DEC_GET_VERSION 0x11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) #define CX2341X_DEC_SET_STREAM_INPUT 0x14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) #define CX2341X_DEC_GET_TIMING_INFO 0x15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) #define CX2341X_DEC_SET_AUDIO_MODE 0x16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) #define CX2341X_DEC_SET_EVENT_NOTIFICATION 0x17
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) #define CX2341X_DEC_SET_DISPLAY_BUFFERS 0x18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) #define CX2341X_DEC_EXTRACT_VBI 0x19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) #define CX2341X_DEC_SET_DECODER_SOURCE 0x1a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) #define CX2341X_DEC_SET_PREBUFFERING 0x1e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) /* MPEG encoder API */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) #define CX2341X_ENC_PING_FW 0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) #define CX2341X_ENC_START_CAPTURE 0x81
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) #define CX2341X_ENC_STOP_CAPTURE 0x82
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) #define CX2341X_ENC_SET_AUDIO_ID 0x89
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) #define CX2341X_ENC_SET_VIDEO_ID 0x8b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) #define CX2341X_ENC_SET_PCR_ID 0x8d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) #define CX2341X_ENC_SET_FRAME_RATE 0x8f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) #define CX2341X_ENC_SET_FRAME_SIZE 0x91
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) #define CX2341X_ENC_SET_BIT_RATE 0x95
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) #define CX2341X_ENC_SET_GOP_PROPERTIES 0x97
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) #define CX2341X_ENC_SET_ASPECT_RATIO 0x99
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) #define CX2341X_ENC_SET_DNR_FILTER_MODE 0x9b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) #define CX2341X_ENC_SET_DNR_FILTER_PROPS 0x9d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) #define CX2341X_ENC_SET_CORING_LEVELS 0x9f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) #define CX2341X_ENC_SET_SPATIAL_FILTER_TYPE 0xa1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) #define CX2341X_ENC_SET_VBI_LINE 0xb7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) #define CX2341X_ENC_SET_STREAM_TYPE 0xb9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) #define CX2341X_ENC_SET_OUTPUT_PORT 0xbb
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) #define CX2341X_ENC_SET_AUDIO_PROPERTIES 0xbd
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) #define CX2341X_ENC_HALT_FW 0xc3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) #define CX2341X_ENC_GET_VERSION 0xc4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) #define CX2341X_ENC_SET_GOP_CLOSURE 0xc5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) #define CX2341X_ENC_GET_SEQ_END 0xc6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) #define CX2341X_ENC_SET_PGM_INDEX_INFO 0xc7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) #define CX2341X_ENC_SET_VBI_CONFIG 0xc8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) #define CX2341X_ENC_SET_DMA_BLOCK_SIZE 0xc9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) #define CX2341X_ENC_GET_PREV_DMA_INFO_MB_10 0xca
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) #define CX2341X_ENC_GET_PREV_DMA_INFO_MB_9 0xcb
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) #define CX2341X_ENC_SCHED_DMA_TO_HOST 0xcc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) #define CX2341X_ENC_INITIALIZE_INPUT 0xcd
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) #define CX2341X_ENC_SET_FRAME_DROP_RATE 0xd0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) #define CX2341X_ENC_PAUSE_ENCODER 0xd2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) #define CX2341X_ENC_REFRESH_INPUT 0xd3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) #define CX2341X_ENC_SET_COPYRIGHT 0xd4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) #define CX2341X_ENC_SET_EVENT_NOTIFICATION 0xd5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) #define CX2341X_ENC_SET_NUM_VSYNC_LINES 0xd6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) #define CX2341X_ENC_SET_PLACEHOLDER 0xd7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) #define CX2341X_ENC_MUTE_VIDEO 0xd9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) #define CX2341X_ENC_MUTE_AUDIO 0xda
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) #define CX2341X_ENC_SET_VERT_CROP_LINE 0xdb
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) #define CX2341X_ENC_MISC 0xdc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) /* OSD API, specific to the cx23415 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) #define CX2341X_OSD_GET_FRAMEBUFFER 0x41
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) #define CX2341X_OSD_GET_PIXEL_FORMAT 0x42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) #define CX2341X_OSD_SET_PIXEL_FORMAT 0x43
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) #define CX2341X_OSD_GET_STATE 0x44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) #define CX2341X_OSD_SET_STATE 0x45
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) #define CX2341X_OSD_GET_OSD_COORDS 0x46
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) #define CX2341X_OSD_SET_OSD_COORDS 0x47
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) #define CX2341X_OSD_GET_SCREEN_COORDS 0x48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) #define CX2341X_OSD_SET_SCREEN_COORDS 0x49
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) #define CX2341X_OSD_GET_GLOBAL_ALPHA 0x4a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) #define CX2341X_OSD_SET_GLOBAL_ALPHA 0x4b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) #define CX2341X_OSD_SET_BLEND_COORDS 0x4c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) #define CX2341X_OSD_GET_FLICKER_STATE 0x4f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) #define CX2341X_OSD_SET_FLICKER_STATE 0x50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) #define CX2341X_OSD_BLT_COPY 0x52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) #define CX2341X_OSD_BLT_FILL 0x53
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) #define CX2341X_OSD_BLT_TEXT 0x54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) #define CX2341X_OSD_SET_FRAMEBUFFER_WINDOW 0x56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) #define CX2341X_OSD_SET_CHROMA_KEY 0x60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) #define CX2341X_OSD_GET_ALPHA_CONTENT_INDEX 0x61
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) #define CX2341X_OSD_SET_ALPHA_CONTENT_INDEX 0x62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) #endif /* CX2341X_H */