Lines Matching +full:video +full:- +full:firmware

1 // SPDX-License-Identifier: GPL-2.0-only
8 #include <linux/device.h> // for linux/firmware.h
9 #include <linux/firmware.h>
10 #include "pvrusb2-util.h"
11 #include "pvrusb2-encoder.h"
12 #include "pvrusb2-hdw-internal.h"
13 #include "pvrusb2-debug.h"
14 #include "pvrusb2-fx2-cmd.h"
18 /* Firmware mailbox flags - definitions found from ivtv */
48 memset(hdw->cmd_buffer,0,sizeof(hdw->cmd_buffer)); in pvr2_encoder_write_words()
50 hdw->cmd_buffer[bAddr++] = FX2CMD_MEM_WRITE_DWORD; in pvr2_encoder_write_words()
53 hdw->cmd_buffer[bAddr+6] = (addr & 0xffu); in pvr2_encoder_write_words()
54 hdw->cmd_buffer[bAddr+5] = ((addr>>8) & 0xffu); in pvr2_encoder_write_words()
55 hdw->cmd_buffer[bAddr+4] = ((addr>>16) & 0xffu); in pvr2_encoder_write_words()
56 PVR2_DECOMPOSE_LE(hdw->cmd_buffer, bAddr,data[idx]); in pvr2_encoder_write_words()
60 hdw->cmd_buffer,1+(chunkCnt*7), in pvr2_encoder_write_words()
64 dlen -= chunkCnt; in pvr2_encoder_write_words()
94 hdw->cmd_buffer[0] = in pvr2_encoder_read_words()
97 hdw->cmd_buffer[1] = 0; in pvr2_encoder_read_words()
98 hdw->cmd_buffer[2] = 0; in pvr2_encoder_read_words()
99 hdw->cmd_buffer[3] = 0; in pvr2_encoder_read_words()
100 hdw->cmd_buffer[4] = 0; in pvr2_encoder_read_words()
101 hdw->cmd_buffer[5] = ((offs>>16) & 0xffu); in pvr2_encoder_read_words()
102 hdw->cmd_buffer[6] = ((offs>>8) & 0xffu); in pvr2_encoder_read_words()
103 hdw->cmd_buffer[7] = (offs & 0xffu); in pvr2_encoder_read_words()
105 hdw->cmd_buffer,8, in pvr2_encoder_read_words()
106 hdw->cmd_buffer, in pvr2_encoder_read_words()
111 data[idx] = PVR2_COMPOSE_LE(hdw->cmd_buffer,idx*4); in pvr2_encoder_read_words()
114 dlen -= chunkCnt; in pvr2_encoder_read_words()
138 /* These sizes look to be limited by the FX2 firmware implementation */ in pvr2_encoder_cmd()
174 if (arg_cnt_send > (ARRAY_SIZE(wrData) - 4)) { in pvr2_encoder_cmd()
177 "Failed to write cx23416 command - too many input arguments (was given %u limit %lu)", in pvr2_encoder_cmd()
178 arg_cnt_send, (long unsigned) ARRAY_SIZE(wrData) - 4); in pvr2_encoder_cmd()
179 return -EINVAL; in pvr2_encoder_cmd()
182 if (arg_cnt_recv > (ARRAY_SIZE(rdData) - 4)) { in pvr2_encoder_cmd()
185 "Failed to write cx23416 command - too many return arguments (was given %u limit %lu)", in pvr2_encoder_cmd()
186 arg_cnt_recv, (long unsigned) ARRAY_SIZE(rdData) - 4); in pvr2_encoder_cmd()
187 return -EINVAL; in pvr2_encoder_cmd()
191 LOCK_TAKE(hdw->ctl_lock); in pvr2_encoder_cmd()
193 if (!hdw->state_encoder_ok) { in pvr2_encoder_cmd()
194 ret = -EIO; in pvr2_encoder_cmd()
208 for (; idx < ARRAY_SIZE(wrData) - 4; idx++) { in pvr2_encoder_cmd()
247 idx-3,wrData[idx]); in pvr2_encoder_cmd()
249 ret = -EBUSY; in pvr2_encoder_cmd()
257 ret = -EBUSY; in pvr2_encoder_cmd()
260 timer_delete_sync(&hdw->encoder_run_timer); in pvr2_encoder_cmd()
261 hdw->state_encoder_ok = 0; in pvr2_encoder_cmd()
263 "State bit %s <-- %s", in pvr2_encoder_cmd()
265 (hdw->state_encoder_ok ? "true" : "false")); in pvr2_encoder_cmd()
266 if (hdw->state_encoder_runok) { in pvr2_encoder_cmd()
267 hdw->state_encoder_runok = 0; in pvr2_encoder_cmd()
269 "State bit %s <-- %s", in pvr2_encoder_cmd()
271 (hdw->state_encoder_runok ? in pvr2_encoder_cmd()
276 …"Giving up on command. This is normally recovered via a firmware reload and re-initialization; co… in pvr2_encoder_cmd()
288 LOCK_GIVE(hdw->ctl_lock); in pvr2_encoder_cmd()
304 "Failed to write cx23416 command - too many arguments (was given %u limit %lu)", in pvr2_encoder_vcmd()
306 return -EINVAL; in pvr2_encoder_vcmd()
332 LOCK_TAKE(hdw->ctl_lock); do { in pvr2_encoder_prep_config()
337 } while(0); LOCK_GIVE(hdw->ctl_lock); in pvr2_encoder_prep_config()
340 /* Mike Isely <isely@pobox.com> 26-Jan-2006 The windows driver in pvr2_encoder_prep_config()
344 random perpetual video corruption whenever the video input in pvr2_encoder_prep_config()
355 /* This ENC_MISC(3,encMisc3Arg) command is critical - without in pvr2_encoder_prep_config()
356 it there will eventually be video corruption. Also, the in pvr2_encoder_prep_config()
357 saa7115 case is strange - the Windows driver is passing 1 in pvr2_encoder_prep_config()
359 devices the video turns sluggish. */ in pvr2_encoder_prep_config()
360 if (hdw->hdw_desc->flag_has_cx25840) { in pvr2_encoder_prep_config()
375 with stuttering video. */ in pvr2_encoder_prep_config()
393 (hdw->enc_cur_valid ? &hdw->enc_cur_state : NULL), in pvr2_encoder_adjust()
394 &hdw->enc_ctl_state); in pvr2_encoder_adjust()
399 hdw->enc_cur_state = hdw->enc_ctl_state; in pvr2_encoder_adjust()
400 hdw->enc_cur_valid = !0; in pvr2_encoder_adjust()
411 hdw->enc_ctl_state.port = CX2341X_PORT_STREAMING; in pvr2_encoder_configure()
412 hdw->enc_ctl_state.width = hdw->res_hor_val; in pvr2_encoder_configure()
413 hdw->enc_ctl_state.height = hdw->res_ver_val; in pvr2_encoder_configure()
414 hdw->enc_ctl_state.is_50hz = ((hdw->std_mask_cur & V4L2_STD_525_60) ? in pvr2_encoder_configure()
423 if (hdw->hdw_desc->flag_has_cx25840) { in pvr2_encoder_configure()
432 /* setup firmware to notify us about some events (don't know why...) */ in pvr2_encoder_configure()
455 "Failed to initialize cx23416 video input"); in pvr2_encoder_configure()
471 hdw->input_val == PVR2_CVAL_INPUT_RADIO ? 1 : 0); in pvr2_encoder_start()
473 switch (hdw->active_stream_type) { in pvr2_encoder_start()
497 switch (hdw->active_stream_type) { in pvr2_encoder_stop()