Lines Matching refs:ptr

41 static u8 zr36050_read(struct zr36050 *ptr, u16 reg)  in zr36050_read()  argument
43 struct zoran *zr = videocodec_to_zoran(ptr->codec); in zr36050_read()
47 if (ptr->codec->master_data->readreg) in zr36050_read()
48 value = (ptr->codec->master_data->readreg(ptr->codec, reg)) & 0xFF; in zr36050_read()
50 zrdev_err(zr, "%s: invalid I/O setup, nothing read!\n", ptr->name); in zr36050_read()
52 zrdev_dbg(zr, "%s: reading from 0x%04x: %02x\n", ptr->name, reg, value); in zr36050_read()
57 static void zr36050_write(struct zr36050 *ptr, u16 reg, u8 value) in zr36050_write() argument
59 struct zoran *zr = videocodec_to_zoran(ptr->codec); in zr36050_write()
61 zrdev_dbg(zr, "%s: writing 0x%02x to 0x%04x\n", ptr->name, value, reg); in zr36050_write()
64 if (ptr->codec->master_data->writereg) in zr36050_write()
65 ptr->codec->master_data->writereg(ptr->codec, reg, value); in zr36050_write()
68 ptr->name); in zr36050_write()
72 static u8 zr36050_read_status1(struct zr36050 *ptr) in zr36050_read_status1() argument
74 ptr->status1 = zr36050_read(ptr, ZR050_STATUS_1); in zr36050_read_status1()
76 zr36050_read(ptr, 0); in zr36050_read_status1()
77 return ptr->status1; in zr36050_read_status1()
81 static u16 zr36050_read_scalefactor(struct zr36050 *ptr) in zr36050_read_scalefactor() argument
83 ptr->scalefact = (zr36050_read(ptr, ZR050_SF_HI) << 8) | in zr36050_read_scalefactor()
84 (zr36050_read(ptr, ZR050_SF_LO) & 0xFF); in zr36050_read_scalefactor()
87 zr36050_read(ptr, 0); in zr36050_read_scalefactor()
88 return ptr->scalefact; in zr36050_read_scalefactor()
97 static void zr36050_wait_end(struct zr36050 *ptr) in zr36050_wait_end() argument
99 struct zoran *zr = videocodec_to_zoran(ptr->codec); in zr36050_wait_end()
102 while (!(zr36050_read_status1(ptr) & 0x4)) { in zr36050_wait_end()
107 ptr->name, ptr->status1); in zr36050_wait_end()
118 static int zr36050_basic_test(struct zr36050 *ptr) in zr36050_basic_test() argument
120 struct zoran *zr = videocodec_to_zoran(ptr->codec); in zr36050_basic_test()
122 zr36050_write(ptr, ZR050_SOF_IDX, 0x00); in zr36050_basic_test()
123 zr36050_write(ptr, ZR050_SOF_IDX + 1, 0x00); in zr36050_basic_test()
124 if ((zr36050_read(ptr, ZR050_SOF_IDX) | in zr36050_basic_test()
125 zr36050_read(ptr, ZR050_SOF_IDX + 1)) != 0x0000) { in zr36050_basic_test()
128 ptr->name); in zr36050_basic_test()
131 zr36050_write(ptr, ZR050_SOF_IDX, 0xff); in zr36050_basic_test()
132 zr36050_write(ptr, ZR050_SOF_IDX + 1, 0xc0); in zr36050_basic_test()
133 if (((zr36050_read(ptr, ZR050_SOF_IDX) << 8) | in zr36050_basic_test()
134 zr36050_read(ptr, ZR050_SOF_IDX + 1)) != 0xffc0) { in zr36050_basic_test()
137 ptr->name); in zr36050_basic_test()
141 zr36050_wait_end(ptr); in zr36050_basic_test()
142 if ((ptr->status1 & 0x4) == 0) { in zr36050_basic_test()
145 ptr->name); in zr36050_basic_test()
154 static int zr36050_pushit(struct zr36050 *ptr, u16 startreg, u16 len, const char *data) in zr36050_pushit() argument
156 struct zoran *zr = videocodec_to_zoran(ptr->codec); in zr36050_pushit()
159 zrdev_dbg(zr, "%s: write data block to 0x%04x (len=%d)\n", ptr->name, in zr36050_pushit()
162 zr36050_write(ptr, startreg++, data[i++]); in zr36050_pushit()
282 static int zr36050_set_sof(struct zr36050 *ptr) in zr36050_set_sof() argument
284 struct zoran *zr = videocodec_to_zoran(ptr->codec); in zr36050_set_sof()
288 zrdev_dbg(zr, "%s: write SOF (%dx%d, %d components)\n", ptr->name, in zr36050_set_sof()
289 ptr->width, ptr->height, NO_OF_COMPONENTS); in zr36050_set_sof()
295 sof_data[5] = (ptr->height) >> 8; in zr36050_set_sof()
296 sof_data[6] = (ptr->height) & 0xff; in zr36050_set_sof()
297 sof_data[7] = (ptr->width) >> 8; in zr36050_set_sof()
298 sof_data[8] = (ptr->width) & 0xff; in zr36050_set_sof()
302 sof_data[11 + (i * 3)] = (ptr->h_samp_ratio[i] << 4) | in zr36050_set_sof()
303 (ptr->v_samp_ratio[i]); // sampling ratios in zr36050_set_sof()
306 return zr36050_pushit(ptr, ZR050_SOF_IDX, in zr36050_set_sof()
317 static int zr36050_set_sos(struct zr36050 *ptr) in zr36050_set_sos() argument
319 struct zoran *zr = videocodec_to_zoran(ptr->codec); in zr36050_set_sos()
323 zrdev_dbg(zr, "%s: write SOS\n", ptr->name); in zr36050_set_sos()
336 return zr36050_pushit(ptr, ZR050_SOS1_IDX, in zr36050_set_sos()
345 static int zr36050_set_dri(struct zr36050 *ptr) in zr36050_set_dri() argument
347 struct zoran *zr = videocodec_to_zoran(ptr->codec); in zr36050_set_dri()
350 zrdev_dbg(zr, "%s: write DRI\n", ptr->name); in zr36050_set_dri()
355 dri_data[4] = ptr->dri >> 8; in zr36050_set_dri()
356 dri_data[5] = ptr->dri & 0xff; in zr36050_set_dri()
357 return zr36050_pushit(ptr, ZR050_DRI_IDX, 6, dri_data); in zr36050_set_dri()
368 static void zr36050_init(struct zr36050 *ptr) in zr36050_init() argument
372 struct zoran *zr = videocodec_to_zoran(ptr->codec); in zr36050_init()
374 if (ptr->mode == CODEC_DO_COMPRESSION) { in zr36050_init()
375 zrdev_dbg(zr, "%s: COMPRESSION SETUP\n", ptr->name); in zr36050_init()
378 zr36050_write(ptr, ZR050_HARDWARE, ZR050_HW_MSTR); in zr36050_init()
381 zr36050_write(ptr, ZR050_MODE, in zr36050_init()
383 zr36050_write(ptr, ZR050_OPTIONS, 0); in zr36050_init()
386 zr36050_write(ptr, ZR050_INT_REQ_0, 0); in zr36050_init()
387 zr36050_write(ptr, ZR050_INT_REQ_1, 3); // low 2 bits always 1 in zr36050_init()
391 zr36050_write(ptr, ZR050_SF_HI, ptr->scalefact >> 8); in zr36050_init()
392 zr36050_write(ptr, ZR050_SF_LO, ptr->scalefact & 0xff); in zr36050_init()
394 zr36050_write(ptr, ZR050_AF_HI, 0xff); in zr36050_init()
395 zr36050_write(ptr, ZR050_AF_M, 0xff); in zr36050_init()
396 zr36050_write(ptr, ZR050_AF_LO, 0xff); in zr36050_init()
399 sum += zr36050_set_sof(ptr); in zr36050_init()
400 sum += zr36050_set_sos(ptr); in zr36050_init()
401 sum += zr36050_set_dri(ptr); in zr36050_init()
407 zrdev_dbg(zr, "%s: write DQT, DHT, APP\n", ptr->name); in zr36050_init()
408 sum += zr36050_pushit(ptr, ZR050_DQT_IDX, in zr36050_init()
410 sum += zr36050_pushit(ptr, ZR050_DHT_IDX, in zr36050_init()
412 zr36050_write(ptr, ZR050_APP_IDX, 0xff); in zr36050_init()
413 zr36050_write(ptr, ZR050_APP_IDX + 1, 0xe0 + ptr->app.appn); in zr36050_init()
414 zr36050_write(ptr, ZR050_APP_IDX + 2, 0x00); in zr36050_init()
415 zr36050_write(ptr, ZR050_APP_IDX + 3, ptr->app.len + 2); in zr36050_init()
416 sum += zr36050_pushit(ptr, ZR050_APP_IDX + 4, 60, in zr36050_init()
417 ptr->app.data) + 4; in zr36050_init()
418 zr36050_write(ptr, ZR050_COM_IDX, 0xff); in zr36050_init()
419 zr36050_write(ptr, ZR050_COM_IDX + 1, 0xfe); in zr36050_init()
420 zr36050_write(ptr, ZR050_COM_IDX + 2, 0x00); in zr36050_init()
421 zr36050_write(ptr, ZR050_COM_IDX + 3, ptr->com.len + 2); in zr36050_init()
422 sum += zr36050_pushit(ptr, ZR050_COM_IDX + 4, 60, in zr36050_init()
423 ptr->com.data) + 4; in zr36050_init()
426 zr36050_write(ptr, ZR050_MARKERS_EN, ZR050_ME_DHTI); in zr36050_init()
428 zr36050_write(ptr, ZR050_GO, 1); // launch codec in zr36050_init()
429 zr36050_wait_end(ptr); in zr36050_init()
431 ptr->name, ptr->status1); in zr36050_init()
433 if ((ptr->status1 & 0x4) == 0) { in zr36050_init()
434 zrdev_err(zr, "%s: init aborted!\n", ptr->name); in zr36050_init()
441 sum = ptr->real_code_vol - sum; in zr36050_init()
447 ptr->name, sum, ptr->real_code_vol, bitcnt, tmp); in zr36050_init()
448 zr36050_write(ptr, ZR050_TCV_NET_HI, tmp >> 8); in zr36050_init()
449 zr36050_write(ptr, ZR050_TCV_NET_MH, tmp & 0xff); in zr36050_init()
451 zr36050_write(ptr, ZR050_TCV_NET_ML, tmp >> 8); in zr36050_init()
452 zr36050_write(ptr, ZR050_TCV_NET_LO, tmp & 0xff); in zr36050_init()
459 ptr->name, bitcnt, tmp); in zr36050_init()
460 zr36050_write(ptr, ZR050_TCV_DATA_HI, tmp >> 8); in zr36050_init()
461 zr36050_write(ptr, ZR050_TCV_DATA_MH, tmp & 0xff); in zr36050_init()
463 zr36050_write(ptr, ZR050_TCV_DATA_ML, tmp >> 8); in zr36050_init()
464 zr36050_write(ptr, ZR050_TCV_DATA_LO, tmp & 0xff); in zr36050_init()
467 zr36050_write(ptr, ZR050_MODE, in zr36050_init()
469 (ptr->bitrate_ctrl ? ZR050_MO_BRC : 0)); in zr36050_init()
472 zr36050_write(ptr, ZR050_MARKERS_EN, in zr36050_init()
474 ((ptr->app.len > 0) ? ZR050_ME_APP : 0) | in zr36050_init()
475 ((ptr->com.len > 0) ? ZR050_ME_COM : 0)); in zr36050_init()
477 zrdev_dbg(zr, "%s: EXPANSION SETUP\n", ptr->name); in zr36050_init()
480 zr36050_write(ptr, ZR050_HARDWARE, in zr36050_init()
484 zr36050_write(ptr, ZR050_MODE, ZR050_MO_TLM); in zr36050_init()
487 zr36050_write(ptr, ZR050_INT_REQ_0, 0); in zr36050_init()
488 zr36050_write(ptr, ZR050_INT_REQ_1, 3); // low 2 bits always 1 in zr36050_init()
490 zrdev_dbg(zr, "%s: write DHT\n", ptr->name); in zr36050_init()
491 zr36050_pushit(ptr, ZR050_DHT_IDX, sizeof(zr36050_dht), in zr36050_init()
495 zr36050_write(ptr, ZR050_MARKERS_EN, ZR050_ME_DHTI); in zr36050_init()
497 zr36050_write(ptr, ZR050_GO, 1); // launch codec in zr36050_init()
498 zr36050_wait_end(ptr); in zr36050_init()
500 ptr->name, ptr->status1); in zr36050_init()
502 if ((ptr->status1 & 0x4) == 0) { in zr36050_init()
503 zrdev_err(zr, "%s: init aborted!\n", ptr->name); in zr36050_init()
508 zr36050_write(ptr, ZR050_MODE, 0); in zr36050_init()
509 zr36050_write(ptr, ZR050_MARKERS_EN, 0); in zr36050_init()
513 zr36050_read(ptr, 0); in zr36050_init()
528 struct zr36050 *ptr = (struct zr36050 *)codec->data; in zr36050_set_mode() local
531 zrdev_dbg(zr, "%s: set_mode %d call\n", ptr->name, mode); in zr36050_set_mode()
536 ptr->mode = mode; in zr36050_set_mode()
537 zr36050_init(ptr); in zr36050_set_mode()
546 struct zr36050 *ptr = (struct zr36050 *)codec->data; in zr36050_set_video() local
551 ptr->name, norm->h_start, norm->v_start, in zr36050_set_video()
558 ptr->width = cap->width / (cap->decimation & 0xff); in zr36050_set_video()
559 ptr->height = cap->height / ((cap->decimation >> 8) & 0xff); in zr36050_set_video()
562 size = ptr->width * ptr->height; in zr36050_set_video()
571 if (size > ptr->total_code_vol * 7) in zr36050_set_video()
572 size = ptr->total_code_vol * 7; in zr36050_set_video()
574 ptr->real_code_vol = size >> 3; /* in bytes */ in zr36050_set_video()
580 zr36050_write(ptr, ZR050_MBCV, ptr->max_block_vol); in zr36050_set_video()
588 struct zr36050 *ptr = (struct zr36050 *)codec->data; in zr36050_control() local
592 zrdev_dbg(zr, "%s: control %d call with %d byte\n", ptr->name, type, in zr36050_control()
599 zr36050_read_status1(ptr); in zr36050_control()
600 *ival = ptr->status1; in zr36050_control()
629 *ival = ptr->total_code_vol; in zr36050_control()
635 ptr->total_code_vol = *ival; in zr36050_control()
636 ptr->real_code_vol = (ptr->total_code_vol * 6) >> 3; in zr36050_control()
642 *ival = zr36050_read_scalefactor(ptr); in zr36050_control()
648 ptr->scalefact = *ival; in zr36050_control()
657 *app = ptr->app; in zr36050_control()
667 ptr->app = *app; in zr36050_control()
677 *com = ptr->com; in zr36050_control()
687 ptr->com = *com; in zr36050_control()
702 struct zr36050 *ptr = codec->data; in zr36050_unset() local
705 if (ptr) { in zr36050_unset()
708 zrdev_dbg(zr, "%s: finished codec #%d\n", ptr->name, in zr36050_unset()
709 ptr->num); in zr36050_unset()
710 kfree(ptr); in zr36050_unset()
731 struct zr36050 *ptr; in zr36050_setup() local
744 ptr = kzalloc(sizeof(*ptr), GFP_KERNEL); in zr36050_setup()
745 codec->data = ptr; in zr36050_setup()
746 if (!ptr) in zr36050_setup()
749 snprintf(ptr->name, sizeof(ptr->name), "zr36050[%d]", in zr36050_setup()
751 ptr->num = zr36050_codecs++; in zr36050_setup()
752 ptr->codec = codec; in zr36050_setup()
755 res = zr36050_basic_test(ptr); in zr36050_setup()
761 memcpy(ptr->h_samp_ratio, zr36050_decimation_h, 8); in zr36050_setup()
762 memcpy(ptr->v_samp_ratio, zr36050_decimation_v, 8); in zr36050_setup()
765 ptr->bitrate_ctrl = 0; in zr36050_setup()
766 ptr->mode = CODEC_DO_COMPRESSION; in zr36050_setup()
767 ptr->width = 384; in zr36050_setup()
768 ptr->height = 288; in zr36050_setup()
769 ptr->total_code_vol = 16000; in zr36050_setup()
770 ptr->max_block_vol = 240; in zr36050_setup()
771 ptr->scalefact = 0x100; in zr36050_setup()
772 ptr->dri = 1; in zr36050_setup()
775 ptr->app.appn = 0; in zr36050_setup()
776 ptr->app.len = 0; in zr36050_setup()
777 ptr->com.len = 0; in zr36050_setup()
779 zr36050_init(ptr); in zr36050_setup()
782 ptr->name); in zr36050_setup()