Lines Matching refs:go

298 static int mjpeg_frame_header(struct go7007 *go, unsigned char *buf, int q)
318 buf[p++] = go->height >> 8;
319 buf[p++] = go->height & 0xff;
320 buf[p++] = go->width >> 8;
321 buf[p++] = go->width & 0xff;
373 static int gen_mjpeghdr_to_package(struct go7007 *go, __le16 *code, int space)
385 mjpeg_frame_header(go, buf + size, i);
388 chunk = mjpeg_frame_header(go, buf + size, 1);
424 static int mpeg1_frame_header(struct go7007 *go, unsigned char *buf,
428 int rows = go->interlace_coding ? go->height / 32 : go->height / 16;
455 CODE_ADD(c, go->format == V4L2_PIX_FMT_MPEG2 ? 0x7 : 0x4, 4);
457 CODE_ADD(c, go->format == V4L2_PIX_FMT_MPEG2 ? 0x7 : 0x4, 4);
466 if (go->format == V4L2_PIX_FMT_MPEG2) {
471 if (go->interlace_coding) {
473 if (go->dvd_mode)
493 if (go->interlace_coding) {
499 if (go->interlace_coding)
503 for (j = (go->width >> 4) - 2; j >= 33; j -= 33)
507 if (go->interlace_coding) {
513 if (go->interlace_coding)
532 static int mpeg1_sequence_header(struct go7007 *go, unsigned char *buf, int ext)
537 if (go->format == V4L2_PIX_FMT_MPEG1) {
538 switch (go->aspect_ratio) {
540 aspect_ratio = go->standard == GO7007_STD_NTSC ? 3 : 2;
543 aspect_ratio = go->standard == GO7007_STD_NTSC ? 5 : 4;
550 switch (go->aspect_ratio) {
562 switch (go->sensor_framerate) {
570 picture_rate = go->interlace_coding ? 6 : 3;
573 picture_rate = go->interlace_coding ? 7 : 4;
576 picture_rate = go->interlace_coding ? 8 : 5;
583 CODE_ADD(c, go->width, 12);
584 CODE_ADD(c, go->height, 12);
587 CODE_ADD(c, go->format == V4L2_PIX_FMT_MPEG2 ? 20000 : 0x3ffff, 18);
589 CODE_ADD(c, go->format == V4L2_PIX_FMT_MPEG2 ? 112 : 20, 10);
597 if (go->format == V4L2_PIX_FMT_MPEG2) {
601 if (go->interlace_coding)
615 CODE_ADD(c, go->standard == GO7007_STD_NTSC ? 2 : 1, 3);
618 CODE_ADD(c, go->width, 14);
620 CODE_ADD(c, go->height, 14);
639 static int gen_mpeg1hdr_to_package(struct go7007 *go,
651 framelen[0] = mpeg1_frame_header(go, buf, 0, 1, PFRAME);
652 if (go->interlace_coding)
653 framelen[0] += mpeg1_frame_header(go, buf + framelen[0] / 8,
658 framelen[1] = mpeg1_frame_header(go, buf + i, 0, 1, BFRAME_PRE);
659 if (go->interlace_coding)
660 framelen[1] += mpeg1_frame_header(go, buf + i + framelen[1] / 8,
665 framelen[2] = mpeg1_frame_header(go, buf + i, 0, 1, BFRAME_POST);
666 if (go->interlace_coding)
667 framelen[2] += mpeg1_frame_header(go, buf + i + framelen[2] / 8,
672 framelen[3] = mpeg1_frame_header(go, buf + i, 0, 1, BFRAME_BIDIR);
673 if (go->interlace_coding)
674 framelen[3] += mpeg1_frame_header(go, buf + i + framelen[3] / 8,
679 mpeg1_sequence_header(go, buf + i, 0);
716 static int vti_bitlen(struct go7007 *go)
718 unsigned int i, max_time_incr = go->sensor_framerate / go->fps_scale;
725 static int mpeg4_frame_header(struct go7007 *go, unsigned char *buf,
730 int mb_count = (go->width >> 4) * (go->height >> 4);
736 CODE_ADD(c, 0, vti_bitlen(go));
779 static int mpeg4_sequence_header(struct go7007 *go, unsigned char *buf, int ext)
781 const unsigned char head[] = { 0x00, 0x00, 0x01, 0xb0, go->pali,
786 int fps = go->sensor_framerate / go->fps_scale;
789 switch (go->aspect_ratio) {
791 aspect_ratio = go->standard == GO7007_STD_NTSC ? 3 : 2;
794 aspect_ratio = go->standard == GO7007_STD_NTSC ? 5 : 4;
807 CODE_ADD(c, 1001, vti_bitlen(go));
809 CODE_ADD(c, go->width, 13);
811 CODE_ADD(c, go->height, 13);
825 static int gen_mpeg4hdr_to_package(struct go7007 *go,
837 framelen[0] = mpeg4_frame_header(go, buf, 0, PFRAME);
839 framelen[1] = mpeg4_frame_header(go, buf + i, 0, BFRAME_PRE);
841 framelen[2] = mpeg4_frame_header(go, buf + i, 0, BFRAME_POST);
843 framelen[3] = mpeg4_frame_header(go, buf + i, 0, BFRAME_BIDIR);
845 mpeg4_frame_header(go, buf + i, 0, BFRAME_EMPTY);
847 mpeg4_sequence_header(go, buf + i, 0);
880 addr = go->ipb ? 0x14f9 : 0x0af9;
882 framelen[4] = mpeg4_frame_header(go, buf, 1, PFRAME);
884 framelen[5] = mpeg4_frame_header(go, buf + i, 1, BFRAME_PRE);
886 framelen[6] = mpeg4_frame_header(go, buf + i, 1, BFRAME_POST);
888 framelen[7] = mpeg4_frame_header(go, buf + i, 1, BFRAME_BIDIR);
890 mpeg4_frame_header(go, buf + i, 1, BFRAME_EMPTY);
927 static int brctrl_to_package(struct go7007 *go,
931 int lambda = (go->format == V4L2_PIX_FMT_MJPEG || go->dvd_mode) ?
933 int peak_rate = 6 * go->bitrate / 5;
934 int vbv_buffer = go->format == V4L2_PIX_FMT_MJPEG ?
935 go->bitrate :
936 (go->dvd_mode ? 900000 : peak_rate);
937 int fps = go->sensor_framerate / go->fps_scale;
940 u32 sgop_expt_addr = go->bitrate / 32 * (go->ipb ? 3 : 1) * 1001 / fps;
942 u32 total_expt_addr = go->bitrate / 32 * 1000 / fps * (fps / 1000);
946 2 * go->width * go->height * (go->ipb ? 6 : 4) / 32,
948 2 * go->width * go->height * (go->ipb ? 6 : 4) / 32,
950 2 * go->width * go->height * (go->ipb ? 6 : 4) / 32,
952 2 * go->width * go->height * (go->ipb ? 6 : 4) / 32,
957 0xBF20, go->ipb ? converge_speed_ipb[converge_speed]
959 0xBF21, go->ipb ? 2 : 0,
960 0xBF22, go->ipb ? LAMBDA_table[0][lambda / 2 + 50]
962 0xBF23, go->ipb ? LAMBDA_table[1][lambda] : 32767,
1016 0xBF46, (go->width >> 4) * (go->height >> 4),
1084 static int config_package(struct go7007 *go, __le16 *code, int space)
1086 int fps = go->sensor_framerate / go->fps_scale / 1000;
1087 int rows = go->interlace_coding ? go->height / 32 : go->height / 16;
1097 0xc6c3, go->format == V4L2_PIX_FMT_MPEG4 ? 0 :
1098 (go->format == V4L2_PIX_FMT_H263 ? 0 : 1),
1099 0xc680, go->format == V4L2_PIX_FMT_MPEG4 ? 0xf1 :
1100 (go->format == V4L2_PIX_FMT_H263 ? 0x61 :
1115 0xd472, (go->board_info->sensor_flags &
1117 (!go->interlace_coding) ?
1119 0xd475, (go->board_info->sensor_flags &
1121 (!go->interlace_coding) ?
1123 0xc404, go->interlace_coding ? 0x44 :
1124 (go->format == V4L2_PIX_FMT_MPEG4 ? 0x11 :
1125 (go->format == V4L2_PIX_FMT_MPEG1 ? 0x02 :
1126 (go->format == V4L2_PIX_FMT_MPEG2 ? 0x04 :
1127 (go->format == V4L2_PIX_FMT_H263 ? 0x08 :
1129 0xbf0a, (go->format == V4L2_PIX_FMT_MPEG4 ? 8 :
1130 (go->format == V4L2_PIX_FMT_MPEG1 ? 1 :
1131 (go->format == V4L2_PIX_FMT_MPEG2 ? 2 :
1132 (go->format == V4L2_PIX_FMT_H263 ? 4 : 16)))) |
1133 ((go->repeat_seqhead ? 1 : 0) << 6) |
1134 ((go->dvd_mode ? 1 : 0) << 9) |
1135 ((go->gop_header_enable ? 1 : 0) << 10),
1137 0xdd5a, go->ipb ? 0x14 : 0x0a,
1141 0xc40a, (go->width << 4) | rows,
1142 0xe01a, go->board_info->hpi_buffer_cap,
1171 0xbfe3, go->ipb ? 3 : 1,
1172 0xc031, go->board_info->sensor_flags &
1177 0xdd88, go->ipb ? 0x1401 : 0x0a01,
1178 0xdd90, go->ipb ? 0x1401 : 0x0a01,
1190 0xbfec, (go->interlace_coding ? 1 << 15 : 0) |
1191 (go->modet_enable ? 0xa : 0) |
1192 (go->board_info->sensor_flags &
1197 0xbff0, go->board_info->sensor_flags &
1206 static int seqhead_to_package(struct go7007 *go, __le16 *code, int space,
1207 int (*sequence_header_func)(struct go7007 *go,
1210 int vop_time_increment_bitlength = vti_bitlen(go);
1211 int fps = go->sensor_framerate / go->fps_scale *
1212 (go->interlace_coding ? 2 : 1);
1214 int len = sequence_header_func(go, buf, 1);
1285 static int avsync_to_package(struct go7007 *go, __le16 *code, int space)
1287 int arate = go->board_info->audio_rate * 1001 * go->fps_scale;
1288 int ratio = arate / go->sensor_framerate;
1290 int rprime = relative_prime(go->sensor_framerate,
1291 arate % go->sensor_framerate);
1292 int f1 = (arate % go->sensor_framerate) / rprime;
1293 int f2 = (go->sensor_framerate - arate % go->sensor_framerate) / rprime;
1316 static int final_package(struct go7007 *go, __le16 *code, int space)
1318 int rows = go->interlace_coding ? go->height / 32 : go->height / 16;
1328 ((go->board_info->sensor_flags & GO7007_SENSOR_TV) &&
1329 (!go->interlace_coding) ?
1331 ((go->encoder_subsample ? 1 : 0) << 8) |
1332 (go->board_info->sensor_flags &
1334 ((go->encoder_v_halve ? 1 : 0) << 14) |
1335 (go->encoder_v_halve ? rows << 9 : rows << 8) |
1336 (go->encoder_h_halve ? 1 << 6 : 0) |
1337 (go->encoder_h_halve ? go->width >> 3 : go->width >> 4),
1338 (1 << 15) | (go->encoder_v_offset << 6) |
1339 (1 << 7) | (go->encoder_h_offset >> 2),
1343 ((go->fps_scale - 1) << 8) |
1344 (go->board_info->sensor_flags & GO7007_SENSOR_TV ?
1347 go->ipb ? 0xd4c : 0x36b,
1348 (rows << 8) | (go->width >> 4),
1349 go->format == V4L2_PIX_FMT_MPEG4 ? 0x0404 : 0,
1350 (1 << 15) | ((go->interlace_coding ? 1 : 0) << 13) |
1351 ((go->closed_gop ? 1 : 0) << 12) |
1352 ((go->format == V4L2_PIX_FMT_MPEG4 ? 1 : 0) << 11) |
1354 ((go->ipb ? 3 : 0) << 7) |
1355 ((go->modet_enable ? 1 : 0) << 2) |
1356 ((go->dvd_mode ? 1 : 0) << 1) | 1,
1357 (go->format == V4L2_PIX_FMT_MPEG1 ? 0x89a0 :
1358 (go->format == V4L2_PIX_FMT_MPEG2 ? 0x89a0 :
1359 (go->format == V4L2_PIX_FMT_MJPEG ? 0x89a0 :
1360 (go->format == V4L2_PIX_FMT_MPEG4 ? 0x8920 :
1361 (go->format == V4L2_PIX_FMT_H263 ? 0x8920 : 0))))),
1362 go->ipb ? 0x1f15 : 0x1f0b,
1363 go->ipb ? 0x0015 : 0x000b,
1364 go->ipb ? 0xa800 : 0x5800,
1372 go->ipb ? (go->gop_size / 3) : go->gop_size,
1373 (go->height >> 4) * (go->width >> 4) * 110 / 100,
1379 static int audio_to_package(struct go7007 *go, __le16 *code, int space)
1381 int clock_config = ((go->board_info->audio_flags &
1383 ((go->board_info->audio_flags &
1385 (((go->board_info->audio_bclk_div / 4) - 1) << 4) |
1386 (go->board_info->audio_main_div - 1);
1400 0x9001, (go->board_info->audio_flags & 0xffff) |
1402 0x9000, ((go->board_info->audio_flags &
1429 static int modet_to_package(struct go7007 *go, __le16 *code, int space)
1431 bool has_modet0 = go->modet[0].enable;
1432 bool has_modet1 = go->modet[1].enable;
1433 bool has_modet2 = go->modet[2].enable;
1434 bool has_modet3 = go->modet[3].enable;
1439 0xbf82, has_modet0 ? go->modet[0].pixel_threshold : 32767,
1440 0xbf83, has_modet1 ? go->modet[1].pixel_threshold : 32767,
1441 0xbf84, has_modet2 ? go->modet[2].pixel_threshold : 32767,
1442 0xbf85, has_modet3 ? go->modet[3].pixel_threshold : 32767,
1443 0xbf86, has_modet0 ? go->modet[0].motion_threshold : 32767,
1444 0xbf87, has_modet1 ? go->modet[1].motion_threshold : 32767,
1445 0xbf88, has_modet2 ? go->modet[2].motion_threshold : 32767,
1446 0xbf89, has_modet3 ? go->modet[3].motion_threshold : 32767,
1447 0xbf8a, has_modet0 ? go->modet[0].mb_threshold : 32767,
1448 0xbf8b, has_modet1 ? go->modet[1].mb_threshold : 32767,
1449 0xbf8c, has_modet2 ? go->modet[2].mb_threshold : 32767,
1450 0xbf8d, has_modet3 ? go->modet[3].mb_threshold : 32767,
1466 pack[i * 2 + 3] |= go->modet_map[mb];
1502 static int do_special(struct go7007 *go, u16 type, __le16 *code, int space,
1507 switch (go->format) {
1509 return gen_mjpeghdr_to_package(go, code, space);
1512 return gen_mpeg1hdr_to_package(go, code, space,
1515 return gen_mpeg4hdr_to_package(go, code, space,
1519 return brctrl_to_package(go, code, space, framelen);
1521 return config_package(go, code, space);
1523 switch (go->format) {
1526 return seqhead_to_package(go, code, space,
1529 return seqhead_to_package(go, code, space,
1535 return avsync_to_package(go, code, space);
1537 return final_package(go, code, space);
1539 return audio_to_package(go, code, space);
1541 return modet_to_package(go, code, space);
1543 dev_err(go->dev,
1548 int go7007_construct_fw_image(struct go7007 *go, u8 **fw, int *fwlen)
1557 switch (go->format) {
1573 if (request_firmware(&fw_entry, GO7007_FW_NAME, go->dev)) {
1574 dev_err(go->dev,
1589 dev_err(go->dev,
1596 ret = do_special(go, __le16_to_cpu(src[2]),
1599 dev_err(go->dev,
1606 dev_err(go->dev,