Lines Matching defs:go

290 static int mjpeg_frame_header(struct go7007 *go, unsigned char *buf, int q)
310 buf[p++] = go->height >> 8;
311 buf[p++] = go->height & 0xff;
312 buf[p++] = go->width >> 8;
313 buf[p++] = go->width & 0xff;
365 static int gen_mjpeghdr_to_package(struct go7007 *go, __le16 *code, int space)
377 mjpeg_frame_header(go, buf + size, i);
380 chunk = mjpeg_frame_header(go, buf + size, 1);
416 static int mpeg1_frame_header(struct go7007 *go, unsigned char *buf,
420 int rows = go->interlace_coding ? go->height / 32 : go->height / 16;
447 CODE_ADD(c, go->format == V4L2_PIX_FMT_MPEG2 ? 0x7 : 0x4, 4);
449 CODE_ADD(c, go->format == V4L2_PIX_FMT_MPEG2 ? 0x7 : 0x4, 4);
458 if (go->format == V4L2_PIX_FMT_MPEG2) {
463 if (go->interlace_coding) {
465 if (go->dvd_mode)
485 if (go->interlace_coding) {
491 if (go->interlace_coding)
495 for (j = (go->width >> 4) - 2; j >= 33; j -= 33)
499 if (go->interlace_coding) {
505 if (go->interlace_coding)
524 static int mpeg1_sequence_header(struct go7007 *go, unsigned char *buf, int ext)
529 if (go->format == V4L2_PIX_FMT_MPEG1) {
530 switch (go->aspect_ratio) {
532 aspect_ratio = go->standard == GO7007_STD_NTSC ? 3 : 2;
535 aspect_ratio = go->standard == GO7007_STD_NTSC ? 5 : 4;
542 switch (go->aspect_ratio) {
554 switch (go->sensor_framerate) {
562 picture_rate = go->interlace_coding ? 6 : 3;
565 picture_rate = go->interlace_coding ? 7 : 4;
568 picture_rate = go->interlace_coding ? 8 : 5;
575 CODE_ADD(c, go->width, 12);
576 CODE_ADD(c, go->height, 12);
579 CODE_ADD(c, go->format == V4L2_PIX_FMT_MPEG2 ? 20000 : 0x3ffff, 18);
581 CODE_ADD(c, go->format == V4L2_PIX_FMT_MPEG2 ? 112 : 20, 10);
589 if (go->format == V4L2_PIX_FMT_MPEG2) {
593 if (go->interlace_coding)
607 CODE_ADD(c, go->standard == GO7007_STD_NTSC ? 2 : 1, 3);
610 CODE_ADD(c, go->width, 14);
612 CODE_ADD(c, go->height, 14);
631 static int gen_mpeg1hdr_to_package(struct go7007 *go,
643 framelen[0] = mpeg1_frame_header(go, buf, 0, 1, PFRAME);
644 if (go->interlace_coding)
645 framelen[0] += mpeg1_frame_header(go, buf + framelen[0] / 8,
650 framelen[1] = mpeg1_frame_header(go, buf + i, 0, 1, BFRAME_PRE);
651 if (go->interlace_coding)
652 framelen[1] += mpeg1_frame_header(go, buf + i + framelen[1] / 8,
657 framelen[2] = mpeg1_frame_header(go, buf + i, 0, 1, BFRAME_POST);
658 if (go->interlace_coding)
659 framelen[2] += mpeg1_frame_header(go, buf + i + framelen[2] / 8,
664 framelen[3] = mpeg1_frame_header(go, buf + i, 0, 1, BFRAME_BIDIR);
665 if (go->interlace_coding)
666 framelen[3] += mpeg1_frame_header(go, buf + i + framelen[3] / 8,
671 mpeg1_sequence_header(go, buf + i, 0);
708 static int vti_bitlen(struct go7007 *go)
710 unsigned int i, max_time_incr = go->sensor_framerate / go->fps_scale;
717 static int mpeg4_frame_header(struct go7007 *go, unsigned char *buf,
722 int mb_count = (go->width >> 4) * (go->height >> 4);
728 CODE_ADD(c, 0, vti_bitlen(go));
771 static int mpeg4_sequence_header(struct go7007 *go, unsigned char *buf, int ext)
773 const unsigned char head[] = { 0x00, 0x00, 0x01, 0xb0, go->pali,
778 int fps = go->sensor_framerate / go->fps_scale;
781 switch (go->aspect_ratio) {
783 aspect_ratio = go->standard == GO7007_STD_NTSC ? 3 : 2;
786 aspect_ratio = go->standard == GO7007_STD_NTSC ? 5 : 4;
799 CODE_ADD(c, 1001, vti_bitlen(go));
801 CODE_ADD(c, go->width, 13);
803 CODE_ADD(c, go->height, 13);
817 static int gen_mpeg4hdr_to_package(struct go7007 *go,
829 framelen[0] = mpeg4_frame_header(go, buf, 0, PFRAME);
831 framelen[1] = mpeg4_frame_header(go, buf + i, 0, BFRAME_PRE);
833 framelen[2] = mpeg4_frame_header(go, buf + i, 0, BFRAME_POST);
835 framelen[3] = mpeg4_frame_header(go, buf + i, 0, BFRAME_BIDIR);
837 mpeg4_frame_header(go, buf + i, 0, BFRAME_EMPTY);
839 mpeg4_sequence_header(go, buf + i, 0);
872 addr = go->ipb ? 0x14f9 : 0x0af9;
874 framelen[4] = mpeg4_frame_header(go, buf, 1, PFRAME);
876 framelen[5] = mpeg4_frame_header(go, buf + i, 1, BFRAME_PRE);
878 framelen[6] = mpeg4_frame_header(go, buf + i, 1, BFRAME_POST);
880 framelen[7] = mpeg4_frame_header(go, buf + i, 1, BFRAME_BIDIR);
882 mpeg4_frame_header(go, buf + i, 1, BFRAME_EMPTY);
919 static int brctrl_to_package(struct go7007 *go,
923 int lambda = (go->format == V4L2_PIX_FMT_MJPEG || go->dvd_mode) ?
925 int peak_rate = 6 * go->bitrate / 5;
926 int vbv_buffer = go->format == V4L2_PIX_FMT_MJPEG ?
927 go->bitrate :
928 (go->dvd_mode ? 900000 : peak_rate);
929 int fps = go->sensor_framerate / go->fps_scale;
932 u32 sgop_expt_addr = go->bitrate / 32 * (go->ipb ? 3 : 1) * 1001 / fps;
934 u32 total_expt_addr = go->bitrate / 32 * 1000 / fps * (fps / 1000);
938 2 * go->width * go->height * (go->ipb ? 6 : 4) / 32,
940 2 * go->width * go->height * (go->ipb ? 6 : 4) / 32,
942 2 * go->width * go->height * (go->ipb ? 6 : 4) / 32,
944 2 * go->width * go->height * (go->ipb ? 6 : 4) / 32,
949 0xBF20, go->ipb ? converge_speed_ipb[converge_speed]
951 0xBF21, go->ipb ? 2 : 0,
952 0xBF22, go->ipb ? LAMBDA_table[0][lambda / 2 + 50]
954 0xBF23, go->ipb ? LAMBDA_table[1][lambda] : 32767,
1008 0xBF46, (go->width >> 4) * (go->height >> 4),
1076 static int config_package(struct go7007 *go, __le16 *code, int space)
1078 int fps = go->sensor_framerate / go->fps_scale / 1000;
1079 int rows = go->interlace_coding ? go->height / 32 : go->height / 16;
1089 0xc6c3, go->format == V4L2_PIX_FMT_MPEG4 ? 0 :
1090 (go->format == V4L2_PIX_FMT_H263 ? 0 : 1),
1091 0xc680, go->format == V4L2_PIX_FMT_MPEG4 ? 0xf1 :
1092 (go->format == V4L2_PIX_FMT_H263 ? 0x61 :
1107 0xd472, (go->board_info->sensor_flags &
1109 (!go->interlace_coding) ?
1111 0xd475, (go->board_info->sensor_flags &
1113 (!go->interlace_coding) ?
1115 0xc404, go->interlace_coding ? 0x44 :
1116 (go->format == V4L2_PIX_FMT_MPEG4 ? 0x11 :
1117 (go->format == V4L2_PIX_FMT_MPEG1 ? 0x02 :
1118 (go->format == V4L2_PIX_FMT_MPEG2 ? 0x04 :
1119 (go->format == V4L2_PIX_FMT_H263 ? 0x08 :
1121 0xbf0a, (go->format == V4L2_PIX_FMT_MPEG4 ? 8 :
1122 (go->format == V4L2_PIX_FMT_MPEG1 ? 1 :
1123 (go->format == V4L2_PIX_FMT_MPEG2 ? 2 :
1124 (go->format == V4L2_PIX_FMT_H263 ? 4 : 16)))) |
1125 ((go->repeat_seqhead ? 1 : 0) << 6) |
1126 ((go->dvd_mode ? 1 : 0) << 9) |
1127 ((go->gop_header_enable ? 1 : 0) << 10),
1129 0xdd5a, go->ipb ? 0x14 : 0x0a,
1133 0xc40a, (go->width << 4) | rows,
1134 0xe01a, go->board_info->hpi_buffer_cap,
1163 0xbfe3, go->ipb ? 3 : 1,
1164 0xc031, go->board_info->sensor_flags &
1169 0xdd88, go->ipb ? 0x1401 : 0x0a01,
1170 0xdd90, go->ipb ? 0x1401 : 0x0a01,
1182 0xbfec, (go->interlace_coding ? 1 << 15 : 0) |
1183 (go->modet_enable ? 0xa : 0) |
1184 (go->board_info->sensor_flags &
1189 0xbff0, go->board_info->sensor_flags &
1198 static int seqhead_to_package(struct go7007 *go, __le16 *code, int space,
1199 int (*sequence_header_func)(struct go7007 *go,
1202 int vop_time_increment_bitlength = vti_bitlen(go);
1203 int fps = go->sensor_framerate / go->fps_scale *
1204 (go->interlace_coding ? 2 : 1);
1206 int len = sequence_header_func(go, buf, 1);
1277 static int avsync_to_package(struct go7007 *go, __le16 *code, int space)
1279 int arate = go->board_info->audio_rate * 1001 * go->fps_scale;
1280 int ratio = arate / go->sensor_framerate;
1282 int rprime = relative_prime(go->sensor_framerate,
1283 arate % go->sensor_framerate);
1284 int f1 = (arate % go->sensor_framerate) / rprime;
1285 int f2 = (go->sensor_framerate - arate % go->sensor_framerate) / rprime;
1308 static int final_package(struct go7007 *go, __le16 *code, int space)
1310 int rows = go->interlace_coding ? go->height / 32 : go->height / 16;
1320 ((go->board_info->sensor_flags & GO7007_SENSOR_TV) &&
1321 (!go->interlace_coding) ?
1323 ((go->encoder_subsample ? 1 : 0) << 8) |
1324 (go->board_info->sensor_flags &
1326 ((go->encoder_v_halve ? 1 : 0) << 14) |
1327 (go->encoder_v_halve ? rows << 9 : rows << 8) |
1328 (go->encoder_h_halve ? 1 << 6 : 0) |
1329 (go->encoder_h_halve ? go->width >> 3 : go->width >> 4),
1330 (1 << 15) | (go->encoder_v_offset << 6) |
1331 (1 << 7) | (go->encoder_h_offset >> 2),
1335 ((go->fps_scale - 1) << 8) |
1336 (go->board_info->sensor_flags & GO7007_SENSOR_TV ?
1339 go->ipb ? 0xd4c : 0x36b,
1340 (rows << 8) | (go->width >> 4),
1341 go->format == V4L2_PIX_FMT_MPEG4 ? 0x0404 : 0,
1342 (1 << 15) | ((go->interlace_coding ? 1 : 0) << 13) |
1343 ((go->closed_gop ? 1 : 0) << 12) |
1344 ((go->format == V4L2_PIX_FMT_MPEG4 ? 1 : 0) << 11) |
1346 ((go->ipb ? 3 : 0) << 7) |
1347 ((go->modet_enable ? 1 : 0) << 2) |
1348 ((go->dvd_mode ? 1 : 0) << 1) | 1,
1349 (go->format == V4L2_PIX_FMT_MPEG1 ? 0x89a0 :
1350 (go->format == V4L2_PIX_FMT_MPEG2 ? 0x89a0 :
1351 (go->format == V4L2_PIX_FMT_MJPEG ? 0x89a0 :
1352 (go->format == V4L2_PIX_FMT_MPEG4 ? 0x8920 :
1353 (go->format == V4L2_PIX_FMT_H263 ? 0x8920 : 0))))),
1354 go->ipb ? 0x1f15 : 0x1f0b,
1355 go->ipb ? 0x0015 : 0x000b,
1356 go->ipb ? 0xa800 : 0x5800,
1364 go->ipb ? (go->gop_size / 3) : go->gop_size,
1365 (go->height >> 4) * (go->width >> 4) * 110 / 100,
1371 static int audio_to_package(struct go7007 *go, __le16 *code, int space)
1373 int clock_config = ((go->board_info->audio_flags &
1375 ((go->board_info->audio_flags &
1377 (((go->board_info->audio_bclk_div / 4) - 1) << 4) |
1378 (go->board_info->audio_main_div - 1);
1392 0x9001, (go->board_info->audio_flags & 0xffff) |
1394 0x9000, ((go->board_info->audio_flags &
1421 static int modet_to_package(struct go7007 *go, __le16 *code, int space)
1423 bool has_modet0 = go->modet[0].enable;
1424 bool has_modet1 = go->modet[1].enable;
1425 bool has_modet2 = go->modet[2].enable;
1426 bool has_modet3 = go->modet[3].enable;
1431 0xbf82, has_modet0 ? go->modet[0].pixel_threshold : 32767,
1432 0xbf83, has_modet1 ? go->modet[1].pixel_threshold : 32767,
1433 0xbf84, has_modet2 ? go->modet[2].pixel_threshold : 32767,
1434 0xbf85, has_modet3 ? go->modet[3].pixel_threshold : 32767,
1435 0xbf86, has_modet0 ? go->modet[0].motion_threshold : 32767,
1436 0xbf87, has_modet1 ? go->modet[1].motion_threshold : 32767,
1437 0xbf88, has_modet2 ? go->modet[2].motion_threshold : 32767,
1438 0xbf89, has_modet3 ? go->modet[3].motion_threshold : 32767,
1439 0xbf8a, has_modet0 ? go->modet[0].mb_threshold : 32767,
1440 0xbf8b, has_modet1 ? go->modet[1].mb_threshold : 32767,
1441 0xbf8c, has_modet2 ? go->modet[2].mb_threshold : 32767,
1442 0xbf8d, has_modet3 ? go->modet[3].mb_threshold : 32767,
1458 pack[i * 2 + 3] |= go->modet_map[mb];
1494 static noinline_for_stack int do_special(struct go7007 *go, u16 type,
1499 switch (go->format) {
1501 return gen_mjpeghdr_to_package(go, code, space);
1504 return gen_mpeg1hdr_to_package(go, code, space,
1507 return gen_mpeg4hdr_to_package(go, code, space,
1514 return brctrl_to_package(go, code, space, framelen);
1516 return config_package(go, code, space);
1518 switch (go->format) {
1521 return seqhead_to_package(go, code, space,
1524 return seqhead_to_package(go, code, space,
1530 return avsync_to_package(go, code, space);
1532 return final_package(go, code, space);
1534 return audio_to_package(go, code, space);
1536 return modet_to_package(go, code, space);
1538 dev_err(go->dev,
1543 int go7007_construct_fw_image(struct go7007 *go, u8 **fw, int *fwlen)
1552 switch (go->format) {
1568 if (request_firmware(&fw_entry, GO7007_FW_NAME, go->dev)) {
1569 dev_err(go->dev,
1584 dev_err(go->dev,
1591 ret = do_special(go, __le16_to_cpu(src[2]),
1594 dev_err(go->dev,
1601 dev_err(go->dev,