Lines Matching refs:ptr

41 static u8 zr36060_read(struct zr36060 *ptr, u16 reg)  in zr36060_read()  argument
44 struct zoran *zr = videocodec_to_zoran(ptr->codec); in zr36060_read()
47 if (ptr->codec->master_data->readreg) in zr36060_read()
48 value = (ptr->codec->master_data->readreg(ptr->codec, reg)) & 0xff; in zr36060_read()
50 zrdev_err(zr, "%s: invalid I/O setup, nothing read!\n", ptr->name); in zr36060_read()
55 static void zr36060_write(struct zr36060 *ptr, u16 reg, u8 value) in zr36060_write() argument
57 struct zoran *zr = videocodec_to_zoran(ptr->codec); in zr36060_write()
62 if (ptr->codec->master_data->writereg) in zr36060_write()
63 ptr->codec->master_data->writereg(ptr->codec, reg, value); in zr36060_write()
65 zrdev_err(zr, "%s: invalid I/O setup, nothing written!\n", ptr->name); in zr36060_write()
75 static u8 zr36060_read_status(struct zr36060 *ptr) in zr36060_read_status() argument
77 ptr->status = zr36060_read(ptr, ZR060_CFSR); in zr36060_read_status()
79 zr36060_read(ptr, 0); in zr36060_read_status()
80 return ptr->status; in zr36060_read_status()
84 static u16 zr36060_read_scalefactor(struct zr36060 *ptr) in zr36060_read_scalefactor() argument
86 ptr->scalefact = (zr36060_read(ptr, ZR060_SF_HI) << 8) | in zr36060_read_scalefactor()
87 (zr36060_read(ptr, ZR060_SF_LO) & 0xFF); in zr36060_read_scalefactor()
90 zr36060_read(ptr, 0); in zr36060_read_scalefactor()
91 return ptr->scalefact; in zr36060_read_scalefactor()
95 static void zr36060_wait_end(struct zr36060 *ptr) in zr36060_wait_end() argument
97 struct zoran *zr = videocodec_to_zoran(ptr->codec); in zr36060_wait_end()
100 while (zr36060_read_status(ptr) & ZR060_CFSR_BUSY) { in zr36060_wait_end()
105 ptr->name, ptr->status); in zr36060_wait_end()
112 static int zr36060_basic_test(struct zr36060 *ptr) in zr36060_basic_test() argument
114 struct zoran *zr = videocodec_to_zoran(ptr->codec); in zr36060_basic_test()
116 if ((zr36060_read(ptr, ZR060_IDR_DEV) != 0x33) && in zr36060_basic_test()
117 (zr36060_read(ptr, ZR060_IDR_REV) != 0x01)) { in zr36060_basic_test()
118 zrdev_err(zr, "%s: attach failed, can't connect to jpeg processor!\n", ptr->name); in zr36060_basic_test()
122 zr36060_wait_end(ptr); in zr36060_basic_test()
123 if (ptr->status & ZR060_CFSR_BUSY) { in zr36060_basic_test()
124 zrdev_err(zr, "%s: attach failed, jpeg processor failed (end flag)!\n", ptr->name); in zr36060_basic_test()
132 static int zr36060_pushit(struct zr36060 *ptr, u16 startreg, u16 len, const char *data) in zr36060_pushit() argument
134 struct zoran *zr = videocodec_to_zoran(ptr->codec); in zr36060_pushit()
137 zrdev_dbg(zr, "%s: write data block to 0x%04x (len=%d)\n", ptr->name, in zr36060_pushit()
140 zr36060_write(ptr, startreg++, data[i++]); in zr36060_pushit()
250 static int zr36060_set_sof(struct zr36060 *ptr) in zr36060_set_sof() argument
252 struct zoran *zr = videocodec_to_zoran(ptr->codec); in zr36060_set_sof()
256 zrdev_dbg(zr, "%s: write SOF (%dx%d, %d components)\n", ptr->name, in zr36060_set_sof()
257 ptr->width, ptr->height, NO_OF_COMPONENTS); in zr36060_set_sof()
263 sof_data[5] = (ptr->height) >> 8; in zr36060_set_sof()
264 sof_data[6] = (ptr->height) & 0xff; in zr36060_set_sof()
265 sof_data[7] = (ptr->width) >> 8; in zr36060_set_sof()
266 sof_data[8] = (ptr->width) & 0xff; in zr36060_set_sof()
270 sof_data[11 + (i * 3)] = (ptr->h_samp_ratio[i] << 4) | in zr36060_set_sof()
271 (ptr->v_samp_ratio[i]); // sampling ratios in zr36060_set_sof()
274 return zr36060_pushit(ptr, ZR060_SOF_IDX, in zr36060_set_sof()
279 static int zr36060_set_sos(struct zr36060 *ptr) in zr36060_set_sos() argument
281 struct zoran *zr = videocodec_to_zoran(ptr->codec); in zr36060_set_sos()
285 zrdev_dbg(zr, "%s: write SOS\n", ptr->name); in zr36060_set_sos()
299 return zr36060_pushit(ptr, ZR060_SOS_IDX, in zr36060_set_sos()
305 static int zr36060_set_dri(struct zr36060 *ptr) in zr36060_set_dri() argument
307 struct zoran *zr = videocodec_to_zoran(ptr->codec); in zr36060_set_dri()
310 zrdev_dbg(zr, "%s: write DRI\n", ptr->name); in zr36060_set_dri()
315 dri_data[4] = (ptr->dri) >> 8; in zr36060_set_dri()
316 dri_data[5] = (ptr->dri) & 0xff; in zr36060_set_dri()
317 return zr36060_pushit(ptr, ZR060_DRI_IDX, 6, dri_data); in zr36060_set_dri()
323 static void zr36060_init(struct zr36060 *ptr) in zr36060_init() argument
327 struct zoran *zr = videocodec_to_zoran(ptr->codec); in zr36060_init()
329 if (ptr->mode == CODEC_DO_COMPRESSION) { in zr36060_init()
330 zrdev_dbg(zr, "%s: COMPRESSION SETUP\n", ptr->name); in zr36060_init()
332 zr36060_write(ptr, ZR060_LOAD, ZR060_LOAD_SYNC_RST); in zr36060_init()
335 zr36060_write(ptr, ZR060_CIR, ZR060_CIR_CODE_MSTR); in zr36060_init()
339 zr36060_write(ptr, ZR060_CMR, ZR060_CMR_COMP | ZR060_CMR_PASS2 | ZR060_CMR_BRB); in zr36060_init()
342 zr36060_write(ptr, ZR060_MBZ, 0x00); in zr36060_init()
343 zr36060_write(ptr, ZR060_TCR_HI, 0x00); in zr36060_init()
344 zr36060_write(ptr, ZR060_TCR_LO, 0x00); in zr36060_init()
347 zr36060_write(ptr, ZR060_IMR, 0); in zr36060_init()
350 zr36060_write(ptr, ZR060_SF_HI, ptr->scalefact >> 8); in zr36060_init()
351 zr36060_write(ptr, ZR060_SF_LO, ptr->scalefact & 0xff); in zr36060_init()
353 zr36060_write(ptr, ZR060_AF_HI, 0xff); in zr36060_init()
354 zr36060_write(ptr, ZR060_AF_M, 0xff); in zr36060_init()
355 zr36060_write(ptr, ZR060_AF_LO, 0xff); in zr36060_init()
358 sum += zr36060_set_sof(ptr); in zr36060_init()
359 sum += zr36060_set_sos(ptr); in zr36060_init()
360 sum += zr36060_set_dri(ptr); in zr36060_init()
363 sum += zr36060_pushit(ptr, ZR060_DQT_IDX, sizeof(zr36060_dqt), zr36060_dqt); in zr36060_init()
364 sum += zr36060_pushit(ptr, ZR060_DHT_IDX, sizeof(zr36060_dht), zr36060_dht); in zr36060_init()
365 zr36060_write(ptr, ZR060_APP_IDX, 0xff); in zr36060_init()
366 zr36060_write(ptr, ZR060_APP_IDX + 1, 0xe0 + ptr->app.appn); in zr36060_init()
367 zr36060_write(ptr, ZR060_APP_IDX + 2, 0x00); in zr36060_init()
368 zr36060_write(ptr, ZR060_APP_IDX + 3, ptr->app.len + 2); in zr36060_init()
369 sum += zr36060_pushit(ptr, ZR060_APP_IDX + 4, 60, ptr->app.data) + 4; in zr36060_init()
370 zr36060_write(ptr, ZR060_COM_IDX, 0xff); in zr36060_init()
371 zr36060_write(ptr, ZR060_COM_IDX + 1, 0xfe); in zr36060_init()
372 zr36060_write(ptr, ZR060_COM_IDX + 2, 0x00); in zr36060_init()
373 zr36060_write(ptr, ZR060_COM_IDX + 3, ptr->com.len + 2); in zr36060_init()
374 sum += zr36060_pushit(ptr, ZR060_COM_IDX + 4, 60, ptr->com.data) + 4; in zr36060_init()
379 sum = ptr->real_code_vol - sum; in zr36060_init()
385 ptr->name, sum, ptr->real_code_vol, bitcnt, tmp); in zr36060_init()
386 zr36060_write(ptr, ZR060_TCV_NET_HI, tmp >> 8); in zr36060_init()
387 zr36060_write(ptr, ZR060_TCV_NET_MH, tmp & 0xff); in zr36060_init()
389 zr36060_write(ptr, ZR060_TCV_NET_ML, tmp >> 8); in zr36060_init()
390 zr36060_write(ptr, ZR060_TCV_NET_LO, tmp & 0xff); in zr36060_init()
397 ptr->name, bitcnt, tmp); in zr36060_init()
398 zr36060_write(ptr, ZR060_TCV_DATA_HI, tmp >> 8); in zr36060_init()
399 zr36060_write(ptr, ZR060_TCV_DATA_MH, tmp & 0xff); in zr36060_init()
401 zr36060_write(ptr, ZR060_TCV_DATA_ML, tmp >> 8); in zr36060_init()
402 zr36060_write(ptr, ZR060_TCV_DATA_LO, tmp & 0xff); in zr36060_init()
405 zr36060_write(ptr, ZR060_MER, in zr36060_init()
407 ((ptr->com.len > 0) ? ZR060_MER_COM : 0) | in zr36060_init()
408 ((ptr->app.len > 0) ? ZR060_MER_APP : 0)); in zr36060_init()
412 zr36060_write(ptr, ZR060_VCR, ZR060_VCR_RANGE); in zr36060_init()
415 zrdev_dbg(zr, "%s: EXPANSION SETUP\n", ptr->name); in zr36060_init()
417 zr36060_write(ptr, ZR060_LOAD, ZR060_LOAD_SYNC_RST); in zr36060_init()
420 zr36060_write(ptr, ZR060_CIR, ZR060_CIR_CODE_MSTR); in zr36060_init()
423 zr36060_write(ptr, ZR060_CMR, 0); in zr36060_init()
426 zr36060_write(ptr, ZR060_MBZ, 0x00); in zr36060_init()
427 zr36060_write(ptr, ZR060_TCR_HI, 0x00); in zr36060_init()
428 zr36060_write(ptr, ZR060_TCR_LO, 0x00); in zr36060_init()
431 zr36060_write(ptr, ZR060_IMR, 0); in zr36060_init()
434 zr36060_write(ptr, ZR060_MER, 0); in zr36060_init()
437 zr36060_pushit(ptr, ZR060_DHT_IDX, sizeof(zr36060_dht), zr36060_dht); in zr36060_init()
442 zr36060_write(ptr, ZR060_VCR, ZR060_VCR_RANGE); in zr36060_init()
446 zr36060_write(ptr, ZR060_LOAD, ZR060_LOAD_SYNC_RST | ZR060_LOAD_LOAD); in zr36060_init()
447 zr36060_wait_end(ptr); in zr36060_init()
449 ptr->name, ptr->status); in zr36060_init()
451 if (ptr->status & ZR060_CFSR_BUSY) { in zr36060_init()
452 zrdev_err(zr, "%s: init aborted!\n", ptr->name); in zr36060_init()
468 struct zr36060 *ptr = (struct zr36060 *)codec->data; in zr36060_set_mode() local
471 zrdev_dbg(zr, "%s: set_mode %d call\n", ptr->name, mode); in zr36060_set_mode()
476 ptr->mode = mode; in zr36060_set_mode()
477 zr36060_init(ptr); in zr36060_set_mode()
486 struct zr36060 *ptr = (struct zr36060 *)codec->data; in zr36060_set_video() local
491 zrdev_dbg(zr, "%s: set_video %d/%d-%dx%d (%%%d) call\n", ptr->name, in zr36060_set_video()
498 ptr->width = cap->width / (cap->decimation & 0xff); in zr36060_set_video()
499 ptr->height = cap->height / (cap->decimation >> 8); in zr36060_set_video()
501 zr36060_write(ptr, ZR060_LOAD, ZR060_LOAD_SYNC_RST); in zr36060_set_video()
516 zr36060_write(ptr, ZR060_VPR, reg); in zr36060_set_video()
542 zr36060_write(ptr, ZR060_SR, reg); in zr36060_set_video()
544 zr36060_write(ptr, ZR060_BCR_Y, 0x00); in zr36060_set_video()
545 zr36060_write(ptr, ZR060_BCR_U, 0x80); in zr36060_set_video()
546 zr36060_write(ptr, ZR060_BCR_V, 0x80); in zr36060_set_video()
551 zr36060_write(ptr, ZR060_SGR_VTOTAL_HI, (reg >> 8) & 0xff); in zr36060_set_video()
552 zr36060_write(ptr, ZR060_SGR_VTOTAL_LO, (reg >> 0) & 0xff); in zr36060_set_video()
555 zr36060_write(ptr, ZR060_SGR_HTOTAL_HI, (reg >> 8) & 0xff); in zr36060_set_video()
556 zr36060_write(ptr, ZR060_SGR_HTOTAL_LO, (reg >> 0) & 0xff); in zr36060_set_video()
559 zr36060_write(ptr, ZR060_SGR_VSYNC, reg); in zr36060_set_video()
562 zr36060_write(ptr, ZR060_SGR_HSYNC, reg); in zr36060_set_video()
565 zr36060_write(ptr, ZR060_SGR_BVSTART, reg); in zr36060_set_video()
568 zr36060_write(ptr, ZR060_SGR_BVEND_HI, (reg >> 8) & 0xff); in zr36060_set_video()
569 zr36060_write(ptr, ZR060_SGR_BVEND_LO, (reg >> 0) & 0xff); in zr36060_set_video()
572 zr36060_write(ptr, ZR060_SGR_BHSTART, reg); in zr36060_set_video()
575 zr36060_write(ptr, ZR060_SGR_BHEND_HI, (reg >> 8) & 0xff); in zr36060_set_video()
576 zr36060_write(ptr, ZR060_SGR_BHEND_LO, (reg >> 0) & 0xff); in zr36060_set_video()
580 zr36060_write(ptr, ZR060_AAR_VSTART_HI, (reg >> 8) & 0xff); in zr36060_set_video()
581 zr36060_write(ptr, ZR060_AAR_VSTART_LO, (reg >> 0) & 0xff); in zr36060_set_video()
584 zr36060_write(ptr, ZR060_AAR_VEND_HI, (reg >> 8) & 0xff); in zr36060_set_video()
585 zr36060_write(ptr, ZR060_AAR_VEND_LO, (reg >> 0) & 0xff); in zr36060_set_video()
588 zr36060_write(ptr, ZR060_AAR_HSTART_HI, (reg >> 8) & 0xff); in zr36060_set_video()
589 zr36060_write(ptr, ZR060_AAR_HSTART_LO, (reg >> 0) & 0xff); in zr36060_set_video()
592 zr36060_write(ptr, ZR060_AAR_HEND_HI, (reg >> 8) & 0xff); in zr36060_set_video()
593 zr36060_write(ptr, ZR060_AAR_HEND_LO, (reg >> 0) & 0xff); in zr36060_set_video()
597 zr36060_write(ptr, ZR060_SWR_VSTART_HI, (reg >> 8) & 0xff); in zr36060_set_video()
598 zr36060_write(ptr, ZR060_SWR_VSTART_LO, (reg >> 0) & 0xff); in zr36060_set_video()
601 zr36060_write(ptr, ZR060_SWR_VEND_HI, (reg >> 8) & 0xff); in zr36060_set_video()
602 zr36060_write(ptr, ZR060_SWR_VEND_LO, (reg >> 0) & 0xff); in zr36060_set_video()
605 zr36060_write(ptr, ZR060_SWR_HSTART_HI, (reg >> 8) & 0xff); in zr36060_set_video()
606 zr36060_write(ptr, ZR060_SWR_HSTART_LO, (reg >> 0) & 0xff); in zr36060_set_video()
609 zr36060_write(ptr, ZR060_SWR_HEND_HI, (reg >> 8) & 0xff); in zr36060_set_video()
610 zr36060_write(ptr, ZR060_SWR_HEND_LO, (reg >> 0) & 0xff); in zr36060_set_video()
612 size = ptr->width * ptr->height; in zr36060_set_video()
626 if (size > ptr->total_code_vol * 7) in zr36060_set_video()
627 size = ptr->total_code_vol * 7; in zr36060_set_video()
629 ptr->real_code_vol = size >> 3; /* in bytes */ in zr36060_set_video()
635 reg = ptr->max_block_vol; in zr36060_set_video()
636 zr36060_write(ptr, ZR060_MBCVR, reg); in zr36060_set_video()
644 struct zr36060 *ptr = (struct zr36060 *)codec->data; in zr36060_control() local
648 zrdev_dbg(zr, "%s: control %d call with %d byte\n", ptr->name, type, in zr36060_control()
655 zr36060_read_status(ptr); in zr36060_control()
656 *ival = ptr->status; in zr36060_control()
685 *ival = ptr->total_code_vol; in zr36060_control()
691 ptr->total_code_vol = *ival; in zr36060_control()
692 ptr->real_code_vol = (ptr->total_code_vol * 6) >> 3; in zr36060_control()
698 *ival = zr36060_read_scalefactor(ptr); in zr36060_control()
704 ptr->scalefact = *ival; in zr36060_control()
713 *app = ptr->app; in zr36060_control()
723 ptr->app = *app; in zr36060_control()
733 *com = ptr->com; in zr36060_control()
743 ptr->com = *com; in zr36060_control()
761 struct zr36060 *ptr = codec->data; in zr36060_unset() local
764 if (ptr) { in zr36060_unset()
767 zrdev_dbg(zr, "%s: finished codec #%d\n", ptr->name, ptr->num); in zr36060_unset()
768 kfree(ptr); in zr36060_unset()
787 struct zr36060 *ptr; in zr36060_setup() local
799 ptr = kzalloc(sizeof(*ptr), GFP_KERNEL); in zr36060_setup()
800 codec->data = ptr; in zr36060_setup()
801 if (!ptr) in zr36060_setup()
804 snprintf(ptr->name, sizeof(ptr->name), "zr36060[%d]", zr36060_codecs); in zr36060_setup()
805 ptr->num = zr36060_codecs++; in zr36060_setup()
806 ptr->codec = codec; in zr36060_setup()
809 res = zr36060_basic_test(ptr); in zr36060_setup()
815 memcpy(ptr->h_samp_ratio, zr36060_decimation_h, 8); in zr36060_setup()
816 memcpy(ptr->v_samp_ratio, zr36060_decimation_v, 8); in zr36060_setup()
818 ptr->bitrate_ctrl = 0; /* 0 or 1 - fixed file size flag (what is the difference?) */ in zr36060_setup()
819 ptr->mode = CODEC_DO_COMPRESSION; in zr36060_setup()
820 ptr->width = 384; in zr36060_setup()
821 ptr->height = 288; in zr36060_setup()
822 ptr->total_code_vol = 16000; /* CHECKME */ in zr36060_setup()
823 ptr->real_code_vol = (ptr->total_code_vol * 6) >> 3; in zr36060_setup()
824 ptr->max_block_vol = 240; /* CHECKME, was 120 is 240 */ in zr36060_setup()
825 ptr->scalefact = 0x100; in zr36060_setup()
826 ptr->dri = 1; /* CHECKME, was 8 is 1 */ in zr36060_setup()
829 ptr->com.len = 0; in zr36060_setup()
830 ptr->app.appn = 0; in zr36060_setup()
831 ptr->app.len = 0; in zr36060_setup()
833 zr36060_init(ptr); in zr36060_setup()
835 zrdev_info(zr, "%s: codec attached and running\n", ptr->name); in zr36060_setup()