Lines Matching refs:itv
129 printk(KERN_INFO "ivtvfb%d " type ": " fmt, itv->instance , ## args); \
135 #define IVTVFB_ERR(fmt, args...) printk(KERN_ERR "ivtvfb%d: " fmt, itv->instance , ## args)
136 #define IVTVFB_WARN(fmt, args...) printk(KERN_WARNING "ivtvfb%d: " fmt, itv->instance , ## args)
137 #define IVTVFB_INFO(fmt, args...) printk(KERN_INFO "ivtvfb%d: " fmt, itv->instance , ## args)
204 static int ivtvfb_get_framebuffer(struct ivtv *itv, u32 *fbbase, in ivtvfb_get_framebuffer() argument
210 ivtv_firmware_check(itv, "ivtvfb_get_framebuffer"); in ivtvfb_get_framebuffer()
211 rc = ivtv_vapi_result(itv, data, CX2341X_OSD_GET_FRAMEBUFFER, 0); in ivtvfb_get_framebuffer()
217 static int ivtvfb_get_osd_coords(struct ivtv *itv, in ivtvfb_get_osd_coords() argument
220 struct osd_info *oi = itv->osd_info; in ivtvfb_get_osd_coords()
223 ivtv_vapi_result(itv, data, CX2341X_OSD_GET_OSD_COORDS, 0); in ivtvfb_get_osd_coords()
234 static int ivtvfb_set_osd_coords(struct ivtv *itv, const struct ivtv_osd_coords *osd) in ivtvfb_set_osd_coords() argument
236 struct osd_info *oi = itv->osd_info; in ivtvfb_set_osd_coords()
243 return ivtv_vapi(itv, CX2341X_OSD_SET_OSD_COORDS, 5, in ivtvfb_set_osd_coords()
249 static int ivtvfb_set_display_window(struct ivtv *itv, struct v4l2_rect *ivtv_window) in ivtvfb_set_display_window() argument
251 int osd_height_limit = itv->is_out_50hz ? 576 : 480; in ivtvfb_set_display_window()
277 itv->yuv_info.osd_vis_w = ivtv_window->width; in ivtvfb_set_display_window()
278 itv->yuv_info.osd_vis_h = ivtv_window->height; in ivtvfb_set_display_window()
279 itv->yuv_info.osd_x_offset = ivtv_window->left; in ivtvfb_set_display_window()
280 itv->yuv_info.osd_y_offset = ivtv_window->top; in ivtvfb_set_display_window()
285 static int ivtvfb_prep_dec_dma_to_device(struct ivtv *itv, in ivtvfb_prep_dec_dma_to_device() argument
292 mutex_lock(&itv->udma.lock); in ivtvfb_prep_dec_dma_to_device()
294 if (ivtv_udma_setup(itv, ivtv_dest_addr, userbuf, size_in_bytes) <= 0) { in ivtvfb_prep_dec_dma_to_device()
295 mutex_unlock(&itv->udma.lock); in ivtvfb_prep_dec_dma_to_device()
298 size_in_bytes, itv->udma.page_count); in ivtvfb_prep_dec_dma_to_device()
305 size_in_bytes, itv->udma.page_count); in ivtvfb_prep_dec_dma_to_device()
307 ivtv_udma_prepare(itv); in ivtvfb_prep_dec_dma_to_device()
308 prepare_to_wait(&itv->dma_waitq, &wait, TASK_INTERRUPTIBLE); in ivtvfb_prep_dec_dma_to_device()
311 while (test_bit(IVTV_F_I_UDMA_PENDING, &itv->i_flags) || in ivtvfb_prep_dec_dma_to_device()
312 test_bit(IVTV_F_I_UDMA, &itv->i_flags)) { in ivtvfb_prep_dec_dma_to_device()
316 if (got_sig && test_and_clear_bit(IVTV_F_I_UDMA_PENDING, &itv->i_flags)) in ivtvfb_prep_dec_dma_to_device()
321 finish_wait(&itv->dma_waitq, &wait); in ivtvfb_prep_dec_dma_to_device()
324 ivtv_udma_unmap(itv); in ivtvfb_prep_dec_dma_to_device()
325 mutex_unlock(&itv->udma.lock); in ivtvfb_prep_dec_dma_to_device()
334 static int ivtvfb_prep_frame(struct ivtv *itv, int cmd, void __user *source, in ivtvfb_prep_frame() argument
338 struct osd_info *oi = itv->osd_info; in ivtvfb_prep_frame()
379 return ivtvfb_prep_dec_dma_to_device(itv, dest_offset, source, count); in ivtvfb_prep_frame()
390 struct ivtv *itv = (struct ivtv *) info->par; in ivtvfb_write() local
392 IVTV_DECODER_OFFSET + itv->osd_info->video_rbase; in ivtvfb_write()
440 dma_err = ivtvfb_prep_dec_dma_to_device(itv, in ivtvfb_write()
462 struct ivtv *itv = (struct ivtv *)info->par; in ivtvfb_ioctl() local
475 if (itv->is_out_50hz && trace > 312) in ivtvfb_ioctl()
477 else if (itv->is_out_60hz && trace > 262) in ivtvfb_ioctl()
481 vblank.count = itv->last_vsync_field; in ivtvfb_ioctl()
490 prepare_to_wait(&itv->vsync_waitq, &wait, TASK_INTERRUPTIBLE); in ivtvfb_ioctl()
493 finish_wait(&itv->vsync_waitq, &wait); in ivtvfb_ioctl()
503 return ivtvfb_prep_frame(itv, cmd, args.source, args.dest_offset, args.count); in ivtvfb_ioctl()
515 static int ivtvfb_set_var(struct ivtv *itv, struct fb_var_screeninfo *var) in ivtvfb_set_var() argument
517 struct osd_info *oi = itv->osd_info; in ivtvfb_set_var()
560 ivtv_vapi(itv, CX2341X_OSD_SET_PIXEL_FORMAT, 1, 0); in ivtvfb_set_var()
561 ivtv_vapi(itv, CX2341X_OSD_SET_PIXEL_FORMAT, 1, osd_mode); in ivtvfb_set_var()
570 ivtv_vapi(itv, CX2341X_OSD_SET_FLICKER_STATE, 1, 1); in ivtvfb_set_var()
573 ivtv_vapi(itv, CX2341X_OSD_SET_FLICKER_STATE, 1, 0); in ivtvfb_set_var()
580 ivtvfb_get_osd_coords(itv, &ivtv_osd); in ivtvfb_set_var()
587 ivtvfb_set_osd_coords(itv, &ivtv_osd); in ivtvfb_set_var()
602 ivtvfb_set_display_window(itv, &ivtv_window); in ivtvfb_set_var()
605 itv->yuv_info.osd_full_w = ivtv_osd.pixel_stride; in ivtvfb_set_var()
606 itv->yuv_info.osd_full_h = ivtv_osd.lines; in ivtvfb_set_var()
609 itv->yuv_info.yuv_forced_update = 1; in ivtvfb_set_var()
629 static int ivtvfb_get_fix(struct ivtv *itv, struct fb_fix_screeninfo *fix) in ivtvfb_get_fix() argument
631 struct osd_info *oi = itv->osd_info; in ivtvfb_get_fix()
651 static int _ivtvfb_check_var(struct fb_var_screeninfo *var, struct ivtv *itv) in _ivtvfb_check_var() argument
653 struct osd_info *oi = itv->osd_info; in _ivtvfb_check_var()
660 if (itv->is_out_50hz) { in _ivtvfb_check_var()
791 if (var->upper_margin + var->yres > (itv->is_out_50hz ? 577 : 481)) in _ivtvfb_check_var()
792 var->upper_margin = 1 + (((itv->is_out_50hz ? 576 : 480) - in _ivtvfb_check_var()
811 itv->osd_rect.width = var->xres; in _ivtvfb_check_var()
812 itv->osd_rect.height = var->yres; in _ivtvfb_check_var()
830 struct ivtv *itv = (struct ivtv *) info->par; in ivtvfb_check_var() local
832 return _ivtvfb_check_var(var, itv); in ivtvfb_check_var()
838 struct ivtv *itv = (struct ivtv *) info->par; in ivtvfb_pan_display() local
849 itv->yuv_info.osd_x_pan = var->xoffset; in ivtvfb_pan_display()
850 itv->yuv_info.osd_y_pan = var->yoffset; in ivtvfb_pan_display()
852 itv->yuv_info.yuv_forced_update = 1; in ivtvfb_pan_display()
854 itv->osd_info->pan_cur = osd_pan_index; in ivtvfb_pan_display()
861 struct ivtv *itv = (struct ivtv *) info->par; in ivtvfb_set_par() local
865 rc = ivtvfb_set_var(itv, &info->var); in ivtvfb_set_par()
867 ivtvfb_get_fix(itv, &info->fix); in ivtvfb_set_par()
868 ivtv_firmware_check(itv, "ivtvfb_set_par"); in ivtvfb_set_par()
877 struct ivtv *itv = (struct ivtv *)info->par; in ivtvfb_setcolreg() local
886 itv->osd_info->palette_cur[regno] = color; in ivtvfb_setcolreg()
920 struct ivtv *itv = (struct ivtv *)info->par; in ivtvfb_blank() local
925 ivtv_vapi(itv, CX2341X_OSD_SET_STATE, 1, 1); in ivtvfb_blank()
926 ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_stream, 1); in ivtvfb_blank()
931 ivtv_vapi(itv, CX2341X_OSD_SET_STATE, 1, 0); in ivtvfb_blank()
932 ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_stream, 1); in ivtvfb_blank()
935 ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_stream, 0); in ivtvfb_blank()
936 ivtv_vapi(itv, CX2341X_OSD_SET_STATE, 1, 0); in ivtvfb_blank()
939 itv->osd_info->blank_cur = blank_mode; in ivtvfb_blank()
959 static void ivtvfb_restore(struct ivtv *itv) in ivtvfb_restore() argument
961 struct osd_info *oi = itv->osd_info; in ivtvfb_restore()
964 ivtvfb_set_var(itv, &oi->fbvar_cur); in ivtvfb_restore()
977 static int ivtvfb_init_vidmode(struct ivtv *itv) in ivtvfb_init_vidmode() argument
979 struct osd_info *oi = itv->osd_info; in ivtvfb_init_vidmode()
1020 max_height = itv->is_out_50hz ? 576 : 480; in ivtvfb_init_vidmode()
1026 osd_yres : itv->is_out_50hz ? 480 : 400; in ivtvfb_init_vidmode()
1057 _ivtvfb_check_var(&oi->ivtvfb_defined, itv); in ivtvfb_init_vidmode()
1061 ivtvfb_get_fix(itv, &oi->ivtvfb_fix); in ivtvfb_init_vidmode()
1068 oi->ivtvfb_info.par = itv; in ivtvfb_init_vidmode()
1100 static int ivtvfb_init_io(struct ivtv *itv) in ivtvfb_init_io() argument
1102 struct osd_info *oi = itv->osd_info; in ivtvfb_init_io()
1106 mutex_lock(&itv->serialize_lock); in ivtvfb_init_io()
1107 if (ivtv_init_on_first_open(itv)) { in ivtvfb_init_io()
1108 mutex_unlock(&itv->serialize_lock); in ivtvfb_init_io()
1112 mutex_unlock(&itv->serialize_lock); in ivtvfb_init_io()
1114 if (ivtvfb_get_framebuffer(itv, &oi->video_rbase, in ivtvfb_init_io()
1125 oi->video_pbase = itv->base_addr + IVTV_DECODER_OFFSET + oi->video_rbase; in ivtvfb_init_io()
1126 oi->video_vbase = itv->dec_mem + oi->video_rbase; in ivtvfb_init_io()
1155 static void ivtvfb_release_buffers (struct ivtv *itv) in ivtvfb_release_buffers() argument
1157 struct osd_info *oi = itv->osd_info; in ivtvfb_release_buffers()
1167 itv->osd_info = NULL; in ivtvfb_release_buffers()
1172 static int ivtvfb_init_card(struct ivtv *itv) in ivtvfb_init_card() argument
1183 if (itv->osd_info) { in ivtvfb_init_card()
1188 itv->osd_info = kzalloc(sizeof(struct osd_info), in ivtvfb_init_card()
1190 if (itv->osd_info == NULL) { in ivtvfb_init_card()
1196 rc = ivtvfb_init_io(itv); in ivtvfb_init_card()
1198 ivtvfb_release_buffers(itv); in ivtvfb_init_card()
1203 if ((rc = ivtvfb_init_vidmode(itv))) { in ivtvfb_init_card()
1204 ivtvfb_release_buffers(itv); in ivtvfb_init_card()
1209 if (register_framebuffer(&itv->osd_info->ivtvfb_info) < 0) { in ivtvfb_init_card()
1210 ivtvfb_release_buffers(itv); in ivtvfb_init_card()
1214 itv->osd_video_pbase = itv->osd_info->video_pbase; in ivtvfb_init_card()
1217 ivtvfb_set_par(&itv->osd_info->ivtvfb_info); in ivtvfb_init_card()
1224 ivtvfb_blank(FB_BLANK_UNBLANK, &itv->osd_info->ivtvfb_info); in ivtvfb_init_card()
1227 itv->ivtvfb_restore = ivtvfb_restore; in ivtvfb_init_card()
1230 ivtv_udma_alloc(itv); in ivtvfb_init_card()
1238 struct ivtv *itv = container_of(v4l2_dev, struct ivtv, v4l2_dev); in ivtvfb_callback_init() local
1240 if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) { in ivtvfb_callback_init()
1241 if (ivtvfb_init_card(itv) == 0) { in ivtvfb_callback_init()
1243 itv->v4l2_dev.name); in ivtvfb_callback_init()
1253 struct ivtv *itv = container_of(v4l2_dev, struct ivtv, v4l2_dev); in ivtvfb_callback_cleanup() local
1254 struct osd_info *oi = itv->osd_info; in ivtvfb_callback_cleanup()
1256 if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) { in ivtvfb_callback_cleanup()
1257 if (unregister_framebuffer(&itv->osd_info->ivtvfb_info)) { in ivtvfb_callback_cleanup()
1259 itv->instance); in ivtvfb_callback_cleanup()
1262 IVTVFB_INFO("Unregister framebuffer %d\n", itv->instance); in ivtvfb_callback_cleanup()
1263 itv->ivtvfb_restore = NULL; in ivtvfb_callback_cleanup()
1265 ivtvfb_release_buffers(itv); in ivtvfb_callback_cleanup()
1266 itv->osd_video_pbase = 0; in ivtvfb_callback_cleanup()