Lines Matching refs:itv
127 printk(KERN_INFO "ivtvfb%d " type ": " fmt, itv->instance , ## args); \
133 #define IVTVFB_ERR(fmt, args...) printk(KERN_ERR "ivtvfb%d: " fmt, itv->instance , ## args)
134 #define IVTVFB_WARN(fmt, args...) printk(KERN_WARNING "ivtvfb%d: " fmt, itv->instance , ## args)
135 #define IVTVFB_INFO(fmt, args...) printk(KERN_INFO "ivtvfb%d: " fmt, itv->instance , ## args)
203 static int ivtvfb_get_framebuffer(struct ivtv *itv, u32 *fbbase, in ivtvfb_get_framebuffer() argument
209 ivtv_firmware_check(itv, "ivtvfb_get_framebuffer"); in ivtvfb_get_framebuffer()
210 rc = ivtv_vapi_result(itv, data, CX2341X_OSD_GET_FRAMEBUFFER, 0); in ivtvfb_get_framebuffer()
216 static int ivtvfb_get_osd_coords(struct ivtv *itv, in ivtvfb_get_osd_coords() argument
219 struct osd_info *oi = itv->osd_info; in ivtvfb_get_osd_coords()
222 ivtv_vapi_result(itv, data, CX2341X_OSD_GET_OSD_COORDS, 0); in ivtvfb_get_osd_coords()
233 static int ivtvfb_set_osd_coords(struct ivtv *itv, const struct ivtv_osd_coords *osd) in ivtvfb_set_osd_coords() argument
235 struct osd_info *oi = itv->osd_info; in ivtvfb_set_osd_coords()
242 return ivtv_vapi(itv, CX2341X_OSD_SET_OSD_COORDS, 5, in ivtvfb_set_osd_coords()
248 static int ivtvfb_set_display_window(struct ivtv *itv, struct v4l2_rect *ivtv_window) in ivtvfb_set_display_window() argument
250 int osd_height_limit = itv->is_out_50hz ? 576 : 480; in ivtvfb_set_display_window()
276 itv->yuv_info.osd_vis_w = ivtv_window->width; in ivtvfb_set_display_window()
277 itv->yuv_info.osd_vis_h = ivtv_window->height; in ivtvfb_set_display_window()
278 itv->yuv_info.osd_x_offset = ivtv_window->left; in ivtvfb_set_display_window()
279 itv->yuv_info.osd_y_offset = ivtv_window->top; in ivtvfb_set_display_window()
284 static int ivtvfb_prep_dec_dma_to_device(struct ivtv *itv, in ivtvfb_prep_dec_dma_to_device() argument
291 mutex_lock(&itv->udma.lock); in ivtvfb_prep_dec_dma_to_device()
293 if (ivtv_udma_setup(itv, ivtv_dest_addr, userbuf, size_in_bytes) <= 0) { in ivtvfb_prep_dec_dma_to_device()
294 mutex_unlock(&itv->udma.lock); in ivtvfb_prep_dec_dma_to_device()
297 size_in_bytes, itv->udma.page_count); in ivtvfb_prep_dec_dma_to_device()
304 size_in_bytes, itv->udma.page_count); in ivtvfb_prep_dec_dma_to_device()
306 ivtv_udma_prepare(itv); in ivtvfb_prep_dec_dma_to_device()
307 prepare_to_wait(&itv->dma_waitq, &wait, TASK_INTERRUPTIBLE); in ivtvfb_prep_dec_dma_to_device()
310 while (test_bit(IVTV_F_I_UDMA_PENDING, &itv->i_flags) || in ivtvfb_prep_dec_dma_to_device()
311 test_bit(IVTV_F_I_UDMA, &itv->i_flags)) { in ivtvfb_prep_dec_dma_to_device()
315 if (got_sig && test_and_clear_bit(IVTV_F_I_UDMA_PENDING, &itv->i_flags)) in ivtvfb_prep_dec_dma_to_device()
320 finish_wait(&itv->dma_waitq, &wait); in ivtvfb_prep_dec_dma_to_device()
323 ivtv_udma_unmap(itv); in ivtvfb_prep_dec_dma_to_device()
324 mutex_unlock(&itv->udma.lock); in ivtvfb_prep_dec_dma_to_device()
333 static int ivtvfb_prep_frame(struct ivtv *itv, int cmd, void __user *source, in ivtvfb_prep_frame() argument
337 struct osd_info *oi = itv->osd_info; in ivtvfb_prep_frame()
378 return ivtvfb_prep_dec_dma_to_device(itv, dest_offset, source, count); in ivtvfb_prep_frame()
389 struct ivtv *itv = (struct ivtv *) info->par; in ivtvfb_write() local
391 IVTV_DECODER_OFFSET + itv->osd_info->video_rbase; in ivtvfb_write()
439 dma_err = ivtvfb_prep_dec_dma_to_device(itv, in ivtvfb_write()
461 struct ivtv *itv = (struct ivtv *)info->par; in ivtvfb_ioctl() local
474 if (itv->is_out_50hz && trace > 312) in ivtvfb_ioctl()
476 else if (itv->is_out_60hz && trace > 262) in ivtvfb_ioctl()
480 vblank.count = itv->last_vsync_field; in ivtvfb_ioctl()
489 prepare_to_wait(&itv->vsync_waitq, &wait, TASK_INTERRUPTIBLE); in ivtvfb_ioctl()
492 finish_wait(&itv->vsync_waitq, &wait); in ivtvfb_ioctl()
502 return ivtvfb_prep_frame(itv, cmd, args.source, args.dest_offset, args.count); in ivtvfb_ioctl()
514 static int ivtvfb_set_var(struct ivtv *itv, struct fb_var_screeninfo *var) in ivtvfb_set_var() argument
516 struct osd_info *oi = itv->osd_info; in ivtvfb_set_var()
559 ivtv_vapi(itv, CX2341X_OSD_SET_PIXEL_FORMAT, 1, 0); in ivtvfb_set_var()
560 ivtv_vapi(itv, CX2341X_OSD_SET_PIXEL_FORMAT, 1, osd_mode); in ivtvfb_set_var()
569 ivtv_vapi(itv, CX2341X_OSD_SET_FLICKER_STATE, 1, 1); in ivtvfb_set_var()
572 ivtv_vapi(itv, CX2341X_OSD_SET_FLICKER_STATE, 1, 0); in ivtvfb_set_var()
579 ivtvfb_get_osd_coords(itv, &ivtv_osd); in ivtvfb_set_var()
586 ivtvfb_set_osd_coords(itv, &ivtv_osd); in ivtvfb_set_var()
601 ivtvfb_set_display_window(itv, &ivtv_window); in ivtvfb_set_var()
604 itv->yuv_info.osd_full_w = ivtv_osd.pixel_stride; in ivtvfb_set_var()
605 itv->yuv_info.osd_full_h = ivtv_osd.lines; in ivtvfb_set_var()
608 itv->yuv_info.yuv_forced_update = 1; in ivtvfb_set_var()
628 static int ivtvfb_get_fix(struct ivtv *itv, struct fb_fix_screeninfo *fix) in ivtvfb_get_fix() argument
630 struct osd_info *oi = itv->osd_info; in ivtvfb_get_fix()
650 static int _ivtvfb_check_var(struct fb_var_screeninfo *var, struct ivtv *itv) in _ivtvfb_check_var() argument
652 struct osd_info *oi = itv->osd_info; in _ivtvfb_check_var()
659 if (itv->is_out_50hz) { in _ivtvfb_check_var()
790 if (var->upper_margin + var->yres > (itv->is_out_50hz ? 577 : 481)) in _ivtvfb_check_var()
791 var->upper_margin = 1 + (((itv->is_out_50hz ? 576 : 480) - in _ivtvfb_check_var()
810 itv->osd_rect.width = var->xres; in _ivtvfb_check_var()
811 itv->osd_rect.height = var->yres; in _ivtvfb_check_var()
829 struct ivtv *itv = (struct ivtv *) info->par; in ivtvfb_check_var() local
831 return _ivtvfb_check_var(var, itv); in ivtvfb_check_var()
837 struct ivtv *itv = (struct ivtv *) info->par; in ivtvfb_pan_display() local
848 itv->yuv_info.osd_x_pan = var->xoffset; in ivtvfb_pan_display()
849 itv->yuv_info.osd_y_pan = var->yoffset; in ivtvfb_pan_display()
851 itv->yuv_info.yuv_forced_update = 1; in ivtvfb_pan_display()
853 itv->osd_info->pan_cur = osd_pan_index; in ivtvfb_pan_display()
860 struct ivtv *itv = (struct ivtv *) info->par; in ivtvfb_set_par() local
864 rc = ivtvfb_set_var(itv, &info->var); in ivtvfb_set_par()
866 ivtvfb_get_fix(itv, &info->fix); in ivtvfb_set_par()
867 ivtv_firmware_check(itv, "ivtvfb_set_par"); in ivtvfb_set_par()
876 struct ivtv *itv = (struct ivtv *)info->par; in ivtvfb_setcolreg() local
885 itv->osd_info->palette_cur[regno] = color; in ivtvfb_setcolreg()
919 struct ivtv *itv = (struct ivtv *)info->par; in ivtvfb_blank() local
924 ivtv_vapi(itv, CX2341X_OSD_SET_STATE, 1, 1); in ivtvfb_blank()
925 ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_stream, 1); in ivtvfb_blank()
930 ivtv_vapi(itv, CX2341X_OSD_SET_STATE, 1, 0); in ivtvfb_blank()
931 ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_stream, 1); in ivtvfb_blank()
934 ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_stream, 0); in ivtvfb_blank()
935 ivtv_vapi(itv, CX2341X_OSD_SET_STATE, 1, 0); in ivtvfb_blank()
938 itv->osd_info->blank_cur = blank_mode; in ivtvfb_blank()
958 static void ivtvfb_restore(struct ivtv *itv) in ivtvfb_restore() argument
960 struct osd_info *oi = itv->osd_info; in ivtvfb_restore()
963 ivtvfb_set_var(itv, &oi->fbvar_cur); in ivtvfb_restore()
976 static int ivtvfb_init_vidmode(struct ivtv *itv) in ivtvfb_init_vidmode() argument
978 struct osd_info *oi = itv->osd_info; in ivtvfb_init_vidmode()
1019 max_height = itv->is_out_50hz ? 576 : 480; in ivtvfb_init_vidmode()
1025 osd_yres : itv->is_out_50hz ? 480 : 400; in ivtvfb_init_vidmode()
1056 _ivtvfb_check_var(&oi->ivtvfb_defined, itv); in ivtvfb_init_vidmode()
1060 ivtvfb_get_fix(itv, &oi->ivtvfb_fix); in ivtvfb_init_vidmode()
1067 oi->ivtvfb_info.par = itv; in ivtvfb_init_vidmode()
1099 static int ivtvfb_init_io(struct ivtv *itv) in ivtvfb_init_io() argument
1101 struct osd_info *oi = itv->osd_info; in ivtvfb_init_io()
1103 mutex_lock(&itv->serialize_lock); in ivtvfb_init_io()
1104 if (ivtv_init_on_first_open(itv)) { in ivtvfb_init_io()
1105 mutex_unlock(&itv->serialize_lock); in ivtvfb_init_io()
1109 mutex_unlock(&itv->serialize_lock); in ivtvfb_init_io()
1111 if (ivtvfb_get_framebuffer(itv, &oi->video_rbase, in ivtvfb_init_io()
1122 oi->video_pbase = itv->base_addr + IVTV_DECODER_OFFSET + oi->video_rbase; in ivtvfb_init_io()
1123 oi->video_vbase = itv->dec_mem + oi->video_rbase; in ivtvfb_init_io()
1165 static void ivtvfb_release_buffers (struct ivtv *itv) in ivtvfb_release_buffers() argument
1167 struct osd_info *oi = itv->osd_info; in ivtvfb_release_buffers()
1184 itv->osd_info = NULL; in ivtvfb_release_buffers()
1189 static int ivtvfb_init_card(struct ivtv *itv) in ivtvfb_init_card() argument
1193 if (itv->osd_info) { in ivtvfb_init_card()
1198 itv->osd_info = kzalloc(sizeof(struct osd_info), in ivtvfb_init_card()
1200 if (itv->osd_info == NULL) { in ivtvfb_init_card()
1206 rc = ivtvfb_init_io(itv); in ivtvfb_init_card()
1208 ivtvfb_release_buffers(itv); in ivtvfb_init_card()
1213 if ((rc = ivtvfb_init_vidmode(itv))) { in ivtvfb_init_card()
1214 ivtvfb_release_buffers(itv); in ivtvfb_init_card()
1219 if (register_framebuffer(&itv->osd_info->ivtvfb_info) < 0) { in ivtvfb_init_card()
1220 ivtvfb_release_buffers(itv); in ivtvfb_init_card()
1224 itv->osd_video_pbase = itv->osd_info->video_pbase; in ivtvfb_init_card()
1227 ivtvfb_set_par(&itv->osd_info->ivtvfb_info); in ivtvfb_init_card()
1234 ivtvfb_blank(FB_BLANK_UNBLANK, &itv->osd_info->ivtvfb_info); in ivtvfb_init_card()
1237 itv->ivtvfb_restore = ivtvfb_restore; in ivtvfb_init_card()
1240 ivtv_udma_alloc(itv); in ivtvfb_init_card()
1248 struct ivtv *itv = container_of(v4l2_dev, struct ivtv, v4l2_dev); in ivtvfb_callback_init() local
1250 if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) { in ivtvfb_callback_init()
1251 if (ivtvfb_init_card(itv) == 0) { in ivtvfb_callback_init()
1253 itv->v4l2_dev.name); in ivtvfb_callback_init()
1263 struct ivtv *itv = container_of(v4l2_dev, struct ivtv, v4l2_dev); in ivtvfb_callback_cleanup() local
1264 struct osd_info *oi = itv->osd_info; in ivtvfb_callback_cleanup()
1266 if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) { in ivtvfb_callback_cleanup()
1267 if (unregister_framebuffer(&itv->osd_info->ivtvfb_info)) { in ivtvfb_callback_cleanup()
1269 itv->instance); in ivtvfb_callback_cleanup()
1272 IVTVFB_INFO("Unregister framebuffer %d\n", itv->instance); in ivtvfb_callback_cleanup()
1273 itv->ivtvfb_restore = NULL; in ivtvfb_callback_cleanup()
1275 ivtvfb_release_buffers(itv); in ivtvfb_callback_cleanup()
1276 itv->osd_video_pbase = 0; in ivtvfb_callback_cleanup()