Lines Matching refs:itv

117 			printk(KERN_INFO "ivtvfb%d " type ": " fmt, itv->instance , ## args); \
123 #define IVTVFB_ERR(fmt, args...) printk(KERN_ERR "ivtvfb%d: " fmt, itv->instance , ## args)
124 #define IVTVFB_WARN(fmt, args...) printk(KERN_WARNING "ivtvfb%d: " fmt, itv->instance , ## args)
125 #define IVTVFB_INFO(fmt, args...) printk(KERN_INFO "ivtvfb%d: " fmt, itv->instance , ## args)
192 static int ivtvfb_get_framebuffer(struct ivtv *itv, u32 *fbbase, in ivtvfb_get_framebuffer() argument
198 ivtv_firmware_check(itv, "ivtvfb_get_framebuffer"); in ivtvfb_get_framebuffer()
199 rc = ivtv_vapi_result(itv, data, CX2341X_OSD_GET_FRAMEBUFFER, 0); in ivtvfb_get_framebuffer()
205 static int ivtvfb_get_osd_coords(struct ivtv *itv, in ivtvfb_get_osd_coords() argument
208 struct osd_info *oi = itv->osd_info; in ivtvfb_get_osd_coords()
211 ivtv_vapi_result(itv, data, CX2341X_OSD_GET_OSD_COORDS, 0); in ivtvfb_get_osd_coords()
222 static int ivtvfb_set_osd_coords(struct ivtv *itv, const struct ivtv_osd_coords *osd) in ivtvfb_set_osd_coords() argument
224 struct osd_info *oi = itv->osd_info; in ivtvfb_set_osd_coords()
231 return ivtv_vapi(itv, CX2341X_OSD_SET_OSD_COORDS, 5, in ivtvfb_set_osd_coords()
237 static int ivtvfb_set_display_window(struct ivtv *itv, struct v4l2_rect *ivtv_window) in ivtvfb_set_display_window() argument
239 int osd_height_limit = itv->is_out_50hz ? 576 : 480; in ivtvfb_set_display_window()
265 itv->yuv_info.osd_vis_w = ivtv_window->width; in ivtvfb_set_display_window()
266 itv->yuv_info.osd_vis_h = ivtv_window->height; in ivtvfb_set_display_window()
267 itv->yuv_info.osd_x_offset = ivtv_window->left; in ivtvfb_set_display_window()
268 itv->yuv_info.osd_y_offset = ivtv_window->top; in ivtvfb_set_display_window()
273 static int ivtvfb_prep_dec_dma_to_device(struct ivtv *itv, in ivtvfb_prep_dec_dma_to_device() argument
280 mutex_lock(&itv->udma.lock); in ivtvfb_prep_dec_dma_to_device()
282 if (ivtv_udma_setup(itv, ivtv_dest_addr, userbuf, size_in_bytes) <= 0) { in ivtvfb_prep_dec_dma_to_device()
283 mutex_unlock(&itv->udma.lock); in ivtvfb_prep_dec_dma_to_device()
285 size_in_bytes, itv->udma.page_count); in ivtvfb_prep_dec_dma_to_device()
292 size_in_bytes, itv->udma.page_count); in ivtvfb_prep_dec_dma_to_device()
294 ivtv_udma_prepare(itv); in ivtvfb_prep_dec_dma_to_device()
295 prepare_to_wait(&itv->dma_waitq, &wait, TASK_INTERRUPTIBLE); in ivtvfb_prep_dec_dma_to_device()
298 while (test_bit(IVTV_F_I_UDMA_PENDING, &itv->i_flags) || in ivtvfb_prep_dec_dma_to_device()
299 test_bit(IVTV_F_I_UDMA, &itv->i_flags)) { in ivtvfb_prep_dec_dma_to_device()
303 if (got_sig && test_and_clear_bit(IVTV_F_I_UDMA_PENDING, &itv->i_flags)) in ivtvfb_prep_dec_dma_to_device()
308 finish_wait(&itv->dma_waitq, &wait); in ivtvfb_prep_dec_dma_to_device()
311 ivtv_udma_unmap(itv); in ivtvfb_prep_dec_dma_to_device()
312 mutex_unlock(&itv->udma.lock); in ivtvfb_prep_dec_dma_to_device()
321 static int ivtvfb_prep_frame(struct ivtv *itv, int cmd, void __user *source, in ivtvfb_prep_frame() argument
325 struct osd_info *oi = itv->osd_info; in ivtvfb_prep_frame()
364 return ivtvfb_prep_dec_dma_to_device(itv, dest_offset, source, count); in ivtvfb_prep_frame()
375 struct ivtv *itv = (struct ivtv *) info->par; in ivtvfb_write() local
377 IVTV_DECODER_OFFSET + itv->osd_info->video_rbase; in ivtvfb_write()
425 dma_err = ivtvfb_prep_dec_dma_to_device(itv, in ivtvfb_write()
447 struct ivtv *itv = (struct ivtv *)info->par; in ivtvfb_ioctl() local
460 if (itv->is_out_50hz && trace > 312) in ivtvfb_ioctl()
462 else if (itv->is_out_60hz && trace > 262) in ivtvfb_ioctl()
466 vblank.count = itv->last_vsync_field; in ivtvfb_ioctl()
475 prepare_to_wait(&itv->vsync_waitq, &wait, TASK_INTERRUPTIBLE); in ivtvfb_ioctl()
478 finish_wait(&itv->vsync_waitq, &wait); in ivtvfb_ioctl()
488 return ivtvfb_prep_frame(itv, cmd, args.source, args.dest_offset, args.count); in ivtvfb_ioctl()
500 static int ivtvfb_set_var(struct ivtv *itv, struct fb_var_screeninfo *var) in ivtvfb_set_var() argument
502 struct osd_info *oi = itv->osd_info; in ivtvfb_set_var()
545 ivtv_vapi(itv, CX2341X_OSD_SET_PIXEL_FORMAT, 1, 0); in ivtvfb_set_var()
546 ivtv_vapi(itv, CX2341X_OSD_SET_PIXEL_FORMAT, 1, osd_mode); in ivtvfb_set_var()
555 ivtv_vapi(itv, CX2341X_OSD_SET_FLICKER_STATE, 1, 1); in ivtvfb_set_var()
558 ivtv_vapi(itv, CX2341X_OSD_SET_FLICKER_STATE, 1, 0); in ivtvfb_set_var()
565 ivtvfb_get_osd_coords(itv, &ivtv_osd); in ivtvfb_set_var()
572 ivtvfb_set_osd_coords(itv, &ivtv_osd); in ivtvfb_set_var()
587 ivtvfb_set_display_window(itv, &ivtv_window); in ivtvfb_set_var()
590 itv->yuv_info.osd_full_w = ivtv_osd.pixel_stride; in ivtvfb_set_var()
591 itv->yuv_info.osd_full_h = ivtv_osd.lines; in ivtvfb_set_var()
594 itv->yuv_info.yuv_forced_update = 1; in ivtvfb_set_var()
614 static int ivtvfb_get_fix(struct ivtv *itv, struct fb_fix_screeninfo *fix) in ivtvfb_get_fix() argument
616 struct osd_info *oi = itv->osd_info; in ivtvfb_get_fix()
636 static int _ivtvfb_check_var(struct fb_var_screeninfo *var, struct ivtv *itv) in _ivtvfb_check_var() argument
638 struct osd_info *oi = itv->osd_info; in _ivtvfb_check_var()
645 if (itv->is_out_50hz) { in _ivtvfb_check_var()
776 if (var->upper_margin + var->yres > (itv->is_out_50hz ? 577 : 481)) in _ivtvfb_check_var()
777 var->upper_margin = 1 + (((itv->is_out_50hz ? 576 : 480) - in _ivtvfb_check_var()
796 itv->osd_rect.width = var->xres; in _ivtvfb_check_var()
797 itv->osd_rect.height = var->yres; in _ivtvfb_check_var()
815 struct ivtv *itv = (struct ivtv *) info->par; in ivtvfb_check_var() local
817 return _ivtvfb_check_var(var, itv); in ivtvfb_check_var()
823 struct ivtv *itv = (struct ivtv *) info->par; in ivtvfb_pan_display() local
834 itv->yuv_info.osd_x_pan = var->xoffset; in ivtvfb_pan_display()
835 itv->yuv_info.osd_y_pan = var->yoffset; in ivtvfb_pan_display()
837 itv->yuv_info.yuv_forced_update = 1; in ivtvfb_pan_display()
839 itv->osd_info->pan_cur = osd_pan_index; in ivtvfb_pan_display()
846 struct ivtv *itv = (struct ivtv *) info->par; in ivtvfb_set_par() local
850 rc = ivtvfb_set_var(itv, &info->var); in ivtvfb_set_par()
852 ivtvfb_get_fix(itv, &info->fix); in ivtvfb_set_par()
853 ivtv_firmware_check(itv, "ivtvfb_set_par"); in ivtvfb_set_par()
862 struct ivtv *itv = (struct ivtv *)info->par; in ivtvfb_setcolreg() local
871 itv->osd_info->palette_cur[regno] = color; in ivtvfb_setcolreg()
905 struct ivtv *itv = (struct ivtv *)info->par; in ivtvfb_blank() local
910 ivtv_vapi(itv, CX2341X_OSD_SET_STATE, 1, 1); in ivtvfb_blank()
911 ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_stream, 1); in ivtvfb_blank()
916 ivtv_vapi(itv, CX2341X_OSD_SET_STATE, 1, 0); in ivtvfb_blank()
917 ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_stream, 1); in ivtvfb_blank()
920 ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_stream, 0); in ivtvfb_blank()
921 ivtv_vapi(itv, CX2341X_OSD_SET_STATE, 1, 0); in ivtvfb_blank()
924 itv->osd_info->blank_cur = blank_mode; in ivtvfb_blank()
944 static void ivtvfb_restore(struct ivtv *itv) in ivtvfb_restore() argument
946 struct osd_info *oi = itv->osd_info; in ivtvfb_restore()
949 ivtvfb_set_var(itv, &oi->fbvar_cur); in ivtvfb_restore()
962 static int ivtvfb_init_vidmode(struct ivtv *itv) in ivtvfb_init_vidmode() argument
964 struct osd_info *oi = itv->osd_info; in ivtvfb_init_vidmode()
1005 max_height = itv->is_out_50hz ? 576 : 480; in ivtvfb_init_vidmode()
1011 osd_yres : itv->is_out_50hz ? 480 : 400; in ivtvfb_init_vidmode()
1042 _ivtvfb_check_var(&oi->ivtvfb_defined, itv); in ivtvfb_init_vidmode()
1046 ivtvfb_get_fix(itv, &oi->ivtvfb_fix); in ivtvfb_init_vidmode()
1052 oi->ivtvfb_info.par = itv; in ivtvfb_init_vidmode()
1084 static int ivtvfb_init_io(struct ivtv *itv) in ivtvfb_init_io() argument
1086 struct osd_info *oi = itv->osd_info; in ivtvfb_init_io()
1090 mutex_lock(&itv->serialize_lock); in ivtvfb_init_io()
1091 if (ivtv_init_on_first_open(itv)) { in ivtvfb_init_io()
1092 mutex_unlock(&itv->serialize_lock); in ivtvfb_init_io()
1096 mutex_unlock(&itv->serialize_lock); in ivtvfb_init_io()
1098 if (ivtvfb_get_framebuffer(itv, &oi->video_rbase, in ivtvfb_init_io()
1109 oi->video_pbase = itv->base_addr + IVTV_DECODER_OFFSET + oi->video_rbase; in ivtvfb_init_io()
1110 oi->video_vbase = itv->dec_mem + oi->video_rbase; in ivtvfb_init_io()
1139 static void ivtvfb_release_buffers (struct ivtv *itv) in ivtvfb_release_buffers() argument
1141 struct osd_info *oi = itv->osd_info; in ivtvfb_release_buffers()
1151 itv->osd_info = NULL; in ivtvfb_release_buffers()
1156 static int ivtvfb_init_card(struct ivtv *itv) in ivtvfb_init_card() argument
1174 if (itv->osd_info) { in ivtvfb_init_card()
1179 itv->osd_info = kzalloc(sizeof(struct osd_info), in ivtvfb_init_card()
1181 if (itv->osd_info == NULL) { in ivtvfb_init_card()
1187 rc = ivtvfb_init_io(itv); in ivtvfb_init_card()
1189 ivtvfb_release_buffers(itv); in ivtvfb_init_card()
1194 if ((rc = ivtvfb_init_vidmode(itv))) { in ivtvfb_init_card()
1195 ivtvfb_release_buffers(itv); in ivtvfb_init_card()
1200 if (register_framebuffer(&itv->osd_info->ivtvfb_info) < 0) { in ivtvfb_init_card()
1201 ivtvfb_release_buffers(itv); in ivtvfb_init_card()
1205 itv->osd_video_pbase = itv->osd_info->video_pbase; in ivtvfb_init_card()
1208 ivtvfb_set_par(&itv->osd_info->ivtvfb_info); in ivtvfb_init_card()
1215 ivtvfb_blank(FB_BLANK_UNBLANK, &itv->osd_info->ivtvfb_info); in ivtvfb_init_card()
1218 itv->ivtvfb_restore = ivtvfb_restore; in ivtvfb_init_card()
1221 ivtv_udma_alloc(itv); in ivtvfb_init_card()
1222 itv->streams[IVTV_DEC_STREAM_TYPE_YUV].vdev.device_caps |= in ivtvfb_init_card()
1224 itv->streams[IVTV_DEC_STREAM_TYPE_MPG].vdev.device_caps |= in ivtvfb_init_card()
1226 itv->v4l2_cap |= V4L2_CAP_VIDEO_OUTPUT_OVERLAY; in ivtvfb_init_card()
1234 struct ivtv *itv = container_of(v4l2_dev, struct ivtv, v4l2_dev); in ivtvfb_callback_init() local
1236 if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) { in ivtvfb_callback_init()
1237 if (ivtvfb_init_card(itv) == 0) { in ivtvfb_callback_init()
1239 itv->v4l2_dev.name); in ivtvfb_callback_init()
1249 struct ivtv *itv = container_of(v4l2_dev, struct ivtv, v4l2_dev); in ivtvfb_callback_cleanup() local
1250 struct osd_info *oi = itv->osd_info; in ivtvfb_callback_cleanup()
1252 if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) { in ivtvfb_callback_cleanup()
1253 itv->streams[IVTV_DEC_STREAM_TYPE_YUV].vdev.device_caps &= in ivtvfb_callback_cleanup()
1255 itv->streams[IVTV_DEC_STREAM_TYPE_MPG].vdev.device_caps &= in ivtvfb_callback_cleanup()
1257 itv->v4l2_cap &= ~V4L2_CAP_VIDEO_OUTPUT_OVERLAY; in ivtvfb_callback_cleanup()
1258 unregister_framebuffer(&itv->osd_info->ivtvfb_info); in ivtvfb_callback_cleanup()
1259 IVTVFB_INFO("Unregister framebuffer %d\n", itv->instance); in ivtvfb_callback_cleanup()
1260 itv->ivtvfb_restore = NULL; in ivtvfb_callback_cleanup()
1262 ivtvfb_release_buffers(itv); in ivtvfb_callback_cleanup()
1263 itv->osd_video_pbase = 0; in ivtvfb_callback_cleanup()