Lines Matching refs:solo_dev

104 	struct solo_dev *solo_dev = solo_enc->solo_dev;  in solo_is_motion_on()  local
106 return (solo_dev->motion_mask >> solo_enc->ch) & 1; in solo_is_motion_on()
111 struct solo_dev *solo_dev = solo_enc->solo_dev; in solo_motion_detected() local
117 if (solo_reg_read(solo_dev, SOLO_VI_MOT_STATUS) & ch_mask) { in solo_motion_detected()
118 solo_reg_write(solo_dev, SOLO_VI_MOT_CLEAR, ch_mask); in solo_motion_detected()
128 struct solo_dev *solo_dev = solo_enc->solo_dev; in solo_motion_toggle() local
135 solo_dev->motion_mask |= mask; in solo_motion_toggle()
137 solo_dev->motion_mask &= ~mask; in solo_motion_toggle()
139 solo_reg_write(solo_dev, SOLO_VI_MOT_CLEAR, mask); in solo_motion_toggle()
141 solo_reg_write(solo_dev, SOLO_VI_MOT_ADR, in solo_motion_toggle()
142 SOLO_VI_MOTION_EN(solo_dev->motion_mask) | in solo_motion_toggle()
143 (SOLO_MOTION_EXT_ADDR(solo_dev) >> 16)); in solo_motion_toggle()
150 struct solo_dev *solo_dev = solo_enc->solo_dev; in solo_update_mode() local
155 solo_enc->bw_weight = max(solo_dev->fps / solo_enc->interval, 1); in solo_update_mode()
158 solo_enc->width = solo_dev->video_hsize >> 1; in solo_update_mode()
159 solo_enc->height = solo_dev->video_vsize; in solo_update_mode()
160 if (solo_dev->type == SOLO_DEV_6110) { in solo_update_mode()
161 if (solo_dev->video_type == SOLO_VO_FMT_TYPE_NTSC) { in solo_update_mode()
169 if (solo_dev->video_type == SOLO_VO_FMT_TYPE_NTSC) { in solo_update_mode()
178 solo_enc->width = solo_dev->video_hsize; in solo_update_mode()
179 solo_enc->height = solo_dev->video_vsize << 1; in solo_update_mode()
181 if (solo_dev->type == SOLO_DEV_6110) { in solo_update_mode()
182 if (solo_dev->video_type == SOLO_VO_FMT_TYPE_NTSC) { in solo_update_mode()
190 if (solo_dev->video_type == SOLO_VO_FMT_TYPE_NTSC) { in solo_update_mode()
203 if (solo_dev->type == SOLO_DEV_6010) { in solo_update_mode()
204 u16 fps = solo_dev->fps * 1000; in solo_update_mode()
227 jpeg_dqt[solo_g_jpeg_qp(solo_dev, solo_enc->ch)], DQT_LEN); in solo_update_mode()
233 struct solo_dev *solo_dev = solo_enc->solo_dev; in solo_enc_on() local
239 if (solo_enc->bw_weight > solo_dev->enc_bw_remain) in solo_enc_on()
242 solo_dev->enc_bw_remain -= solo_enc->bw_weight; in solo_enc_on()
245 solo_reg_write(solo_dev, SOLO_CAP_CH_COMP_ENA_E(ch), 1); in solo_enc_on()
248 solo_reg_write(solo_dev, SOLO_CAP_CH_SCALE(ch), 0); in solo_enc_on()
251 solo_reg_write(solo_dev, SOLO_VE_CH_INTL(ch), in solo_enc_on()
260 solo_reg_write(solo_dev, SOLO_VE_CH_GOP(ch), solo_enc->gop); in solo_enc_on()
261 solo_reg_write(solo_dev, SOLO_VE_CH_QP(ch), solo_enc->qp); in solo_enc_on()
262 solo_reg_write(solo_dev, SOLO_CAP_CH_INTV(ch), interval); in solo_enc_on()
265 solo_reg_write(solo_dev, SOLO_VE_CH_GOP_E(ch), solo_enc->gop); in solo_enc_on()
266 solo_reg_write(solo_dev, SOLO_VE_CH_QP_E(ch), solo_enc->qp); in solo_enc_on()
267 solo_reg_write(solo_dev, SOLO_CAP_CH_INTV_E(ch), interval); in solo_enc_on()
270 solo_reg_write(solo_dev, SOLO_CAP_CH_SCALE(ch), solo_enc->mode); in solo_enc_on()
277 struct solo_dev *solo_dev = solo_enc->solo_dev; in solo_enc_off() local
279 solo_dev->enc_bw_remain += solo_enc->bw_weight; in solo_enc_off()
281 solo_reg_write(solo_dev, SOLO_CAP_CH_SCALE(solo_enc->ch), 0); in solo_enc_off()
282 solo_reg_write(solo_dev, SOLO_CAP_CH_COMP_ENA_E(solo_enc->ch), 0); in solo_enc_off()
285 static int enc_get_mpeg_dma(struct solo_dev *solo_dev, dma_addr_t dma, in enc_get_mpeg_dma() argument
290 if (off > SOLO_MP4E_EXT_SIZE(solo_dev)) in enc_get_mpeg_dma()
294 if (off + size <= SOLO_MP4E_EXT_SIZE(solo_dev)) { in enc_get_mpeg_dma()
295 return solo_p2m_dma_t(solo_dev, 0, dma, in enc_get_mpeg_dma()
296 SOLO_MP4E_EXT_ADDR(solo_dev) + off, size, in enc_get_mpeg_dma()
301 ret = solo_p2m_dma_t(solo_dev, 0, dma, in enc_get_mpeg_dma()
302 SOLO_MP4E_EXT_ADDR(solo_dev) + off, in enc_get_mpeg_dma()
303 SOLO_MP4E_EXT_SIZE(solo_dev) - off, 0, 0); in enc_get_mpeg_dma()
306 ret = solo_p2m_dma_t(solo_dev, 0, in enc_get_mpeg_dma()
307 dma + SOLO_MP4E_EXT_SIZE(solo_dev) - off, in enc_get_mpeg_dma()
308 SOLO_MP4E_EXT_ADDR(solo_dev), in enc_get_mpeg_dma()
309 size + off - SOLO_MP4E_EXT_SIZE(solo_dev), 0, 0); in enc_get_mpeg_dma()
321 struct solo_dev *solo_dev = solo_enc->solo_dev; in solo_send_desc() local
363 ret = solo_p2m_dma_t(solo_dev, 0, dma, base + off, in solo_send_desc()
368 ret = solo_p2m_dma_t(solo_dev, 0, dma + left, base, in solo_send_desc()
386 ret = solo_p2m_dma_desc(solo_dev, solo_enc->desc_items, in solo_send_desc()
398 return solo_p2m_dma_desc(solo_dev, solo_enc->desc_items, in solo_send_desc()
462 struct solo_dev *solo_dev = solo_enc->solo_dev; in solo_fill_jpeg() local
475 vop_jpeg_offset(vh) - SOLO_JPEG_EXT_ADDR(solo_dev), in solo_fill_jpeg()
476 frame_size, SOLO_JPEG_EXT_ADDR(solo_dev), in solo_fill_jpeg()
477 SOLO_JPEG_EXT_SIZE(solo_dev)); in solo_fill_jpeg()
484 struct solo_dev *solo_dev = solo_enc->solo_dev; in solo_fill_mpeg() local
506 frame_off = (vop_mpeg_offset(vh) - SOLO_MP4E_EXT_ADDR(solo_dev) + in solo_fill_mpeg()
507 sizeof(*vh)) % SOLO_MP4E_EXT_SIZE(solo_dev); in solo_fill_mpeg()
511 SOLO_MP4E_EXT_ADDR(solo_dev), in solo_fill_mpeg()
512 SOLO_MP4E_EXT_SIZE(solo_dev)); in solo_fill_mpeg()
583 void solo_enc_v4l2_isr(struct solo_dev *solo_dev) in solo_enc_v4l2_isr() argument
585 wake_up_interruptible_all(&solo_dev->ring_thread_wait); in solo_enc_v4l2_isr()
588 static void solo_handle_ring(struct solo_dev *solo_dev) in solo_handle_ring() argument
598 cur_q = solo_reg_read(solo_dev, SOLO_VE_STATE(11)) & 0xff; in solo_handle_ring()
599 if (cur_q == solo_dev->enc_idx) in solo_handle_ring()
602 mpeg_current = solo_reg_read(solo_dev, in solo_handle_ring()
603 SOLO_VE_MPEG4_QUE(solo_dev->enc_idx)); in solo_handle_ring()
604 solo_dev->enc_idx = (solo_dev->enc_idx + 1) % MP4_QS; in solo_handle_ring()
615 solo_enc = solo_dev->v4l2_enc[ch]; in solo_handle_ring()
617 dev_err(&solo_dev->pdev->dev, in solo_handle_ring()
623 if (enc_get_mpeg_dma(solo_dev, solo_dev->vh_dma, off, in solo_handle_ring()
627 enc_buf.vh = solo_dev->vh_buf; in solo_handle_ring()
631 SOLO_MP4E_EXT_ADDR(solo_dev) + off) in solo_handle_ring()
645 struct solo_dev *solo_dev = data; in solo_ring_thread() local
649 add_wait_queue(&solo_dev->ring_thread_wait, &wait); in solo_ring_thread()
656 solo_handle_ring(solo_dev); in solo_ring_thread()
660 remove_wait_queue(&solo_dev->ring_thread_wait, &wait); in solo_ring_thread()
696 static int solo_ring_start(struct solo_dev *solo_dev) in solo_ring_start() argument
698 solo_dev->ring_thread = kthread_run(solo_ring_thread, solo_dev, in solo_ring_start()
700 if (IS_ERR(solo_dev->ring_thread)) { in solo_ring_start()
701 int err = PTR_ERR(solo_dev->ring_thread); in solo_ring_start()
703 solo_dev->ring_thread = NULL; in solo_ring_start()
707 solo_irq_on(solo_dev, SOLO_IRQ_ENCODER); in solo_ring_start()
712 static void solo_ring_stop(struct solo_dev *solo_dev) in solo_ring_stop() argument
714 if (solo_dev->ring_thread) { in solo_ring_stop()
715 kthread_stop(solo_dev->ring_thread); in solo_ring_stop()
716 solo_dev->ring_thread = NULL; in solo_ring_stop()
719 solo_irq_off(solo_dev, SOLO_IRQ_ENCODER); in solo_ring_stop()
781 struct solo_dev *solo_dev = solo_enc->solo_dev; in solo_enc_querycap() local
787 pci_name(solo_dev->pdev)); in solo_enc_querycap()
798 struct solo_dev *solo_dev = solo_enc->solo_dev; in solo_enc_enum_input() local
808 if (!tw28_get_video_status(solo_dev, solo_enc->ch)) in solo_enc_enum_input()
835 int dev_type = solo_enc->solo_dev->type; in solo_enc_enum_fmt_cap()
874 struct solo_dev *solo_dev = solo_enc->solo_dev; in solo_enc_try_fmt_cap() local
877 if (solo_valid_pixfmt(pix->pixelformat, solo_dev->type)) in solo_enc_try_fmt_cap()
880 if (pix->width < solo_dev->video_hsize || in solo_enc_try_fmt_cap()
881 pix->height < solo_dev->video_vsize << 1) { in solo_enc_try_fmt_cap()
883 pix->width = solo_dev->video_hsize >> 1; in solo_enc_try_fmt_cap()
884 pix->height = solo_dev->video_vsize; in solo_enc_try_fmt_cap()
887 pix->width = solo_dev->video_hsize; in solo_enc_try_fmt_cap()
888 pix->height = solo_dev->video_vsize << 1; in solo_enc_try_fmt_cap()
914 struct solo_dev *solo_dev = solo_enc->solo_dev; in solo_enc_set_fmt_cap() local
925 if (pix->width == solo_dev->video_hsize) in solo_enc_set_fmt_cap()
968 struct solo_dev *solo_dev = solo_enc->solo_dev; in solo_enc_g_std() local
970 if (solo_dev->video_type == SOLO_VO_FMT_TYPE_NTSC) in solo_enc_g_std()
981 return solo_set_video_type(solo_enc->solo_dev, std & V4L2_STD_625_50); in solo_enc_s_std()
988 struct solo_dev *solo_dev = solo_enc->solo_dev; in solo_enum_framesizes() local
990 if (solo_valid_pixfmt(fsize->pixel_format, solo_dev->type)) in solo_enum_framesizes()
995 fsize->discrete.width = solo_dev->video_hsize >> 1; in solo_enum_framesizes()
996 fsize->discrete.height = solo_dev->video_vsize; in solo_enum_framesizes()
999 fsize->discrete.width = solo_dev->video_hsize; in solo_enum_framesizes()
1000 fsize->discrete.height = solo_dev->video_vsize << 1; in solo_enum_framesizes()
1015 struct solo_dev *solo_dev = solo_enc->solo_dev; in solo_enum_frameintervals() local
1017 if (solo_valid_pixfmt(fintv->pixel_format, solo_dev->type)) in solo_enum_frameintervals()
1021 if ((fintv->width != solo_dev->video_hsize >> 1 || in solo_enum_frameintervals()
1022 fintv->height != solo_dev->video_vsize) && in solo_enum_frameintervals()
1023 (fintv->width != solo_dev->video_hsize || in solo_enum_frameintervals()
1024 fintv->height != solo_dev->video_vsize << 1)) in solo_enum_frameintervals()
1030 fintv->stepwise.min.denominator = solo_dev->fps; in solo_enum_frameintervals()
1033 fintv->stepwise.max.denominator = solo_dev->fps; in solo_enum_frameintervals()
1036 fintv->stepwise.step.denominator = solo_dev->fps; in solo_enum_frameintervals()
1049 cp->timeperframe.denominator = solo_enc->solo_dev->fps; in solo_g_parm()
1072 u8 fps = solo_enc->solo_dev->fps; in solo_s_parm()
1086 struct solo_dev *solo_dev = solo_enc->solo_dev; in solo_s_ctrl() local
1095 return tw28_set_ctrl_val(solo_dev, ctrl->id, solo_enc->ch, in solo_s_ctrl()
1099 solo_reg_write(solo_dev, SOLO_VE_CH_GOP(solo_enc->ch), solo_enc->gop); in solo_s_ctrl()
1100 solo_reg_write(solo_dev, SOLO_VE_CH_GOP_E(solo_enc->ch), solo_enc->gop); in solo_s_ctrl()
1104 solo_reg_write(solo_dev, SOLO_VE_CH_QP(solo_enc->ch), solo_enc->qp); in solo_s_ctrl()
1105 solo_reg_write(solo_dev, SOLO_VE_CH_QP_E(solo_enc->ch), solo_enc->qp); in solo_s_ctrl()
1111 return solo_set_motion_threshold(solo_dev, solo_enc->ch, in solo_s_ctrl()
1118 err = solo_set_motion_threshold(solo_dev, solo_enc->ch, in solo_s_ctrl()
1121 err = solo_set_motion_block(solo_dev, solo_enc->ch, in solo_s_ctrl()
1130 return solo_set_motion_block(solo_dev, solo_enc->ch, in solo_s_ctrl()
1232 static struct solo_enc_dev *solo_enc_alloc(struct solo_dev *solo_dev, in solo_enc_alloc() argument
1244 solo_enc->alloc_ctx = vb2_dma_sg_init_ctx(&solo_dev->pdev->dev); in solo_enc_alloc()
1258 if (tw28_has_sharpness(solo_dev, ch)) in solo_enc_alloc()
1262 V4L2_CID_MPEG_VIDEO_GOP_SIZE, 1, 255, 1, solo_dev->fps); in solo_enc_alloc()
1280 solo_enc->solo_dev = solo_dev; in solo_enc_alloc()
1285 solo_enc->fmt = (solo_dev->type == SOLO_DEV_6010) ? in solo_enc_alloc()
1290 solo_enc->gop = solo_dev->fps; in solo_enc_alloc()
1316 solo_enc->desc_items = pci_alloc_consistent(solo_dev->pdev, in solo_enc_alloc()
1329 solo_enc->vfd->v4l2_dev = &solo_dev->v4l2_dev; in solo_enc_alloc()
1339 "%s-enc (%i/%i)", SOLO6X10_NAME, solo_dev->vfd->num, in solo_enc_alloc()
1347 pci_free_consistent(solo_enc->solo_dev->pdev, in solo_enc_alloc()
1362 pci_free_consistent(solo_enc->solo_dev->pdev, in solo_enc_free()
1371 int solo_enc_v4l2_init(struct solo_dev *solo_dev, unsigned nr) in solo_enc_v4l2_init() argument
1375 init_waitqueue_head(&solo_dev->ring_thread_wait); in solo_enc_v4l2_init()
1377 solo_dev->vh_size = sizeof(vop_header); in solo_enc_v4l2_init()
1378 solo_dev->vh_buf = pci_alloc_consistent(solo_dev->pdev, in solo_enc_v4l2_init()
1379 solo_dev->vh_size, in solo_enc_v4l2_init()
1380 &solo_dev->vh_dma); in solo_enc_v4l2_init()
1381 if (solo_dev->vh_buf == NULL) in solo_enc_v4l2_init()
1384 for (i = 0; i < solo_dev->nr_chans; i++) { in solo_enc_v4l2_init()
1385 solo_dev->v4l2_enc[i] = solo_enc_alloc(solo_dev, i, nr); in solo_enc_v4l2_init()
1386 if (IS_ERR(solo_dev->v4l2_enc[i])) in solo_enc_v4l2_init()
1390 if (i != solo_dev->nr_chans) { in solo_enc_v4l2_init()
1391 int ret = PTR_ERR(solo_dev->v4l2_enc[i]); in solo_enc_v4l2_init()
1394 solo_enc_free(solo_dev->v4l2_enc[i]); in solo_enc_v4l2_init()
1395 pci_free_consistent(solo_dev->pdev, solo_dev->vh_size, in solo_enc_v4l2_init()
1396 solo_dev->vh_buf, solo_dev->vh_dma); in solo_enc_v4l2_init()
1397 solo_dev->vh_buf = NULL; in solo_enc_v4l2_init()
1401 if (solo_dev->type == SOLO_DEV_6010) in solo_enc_v4l2_init()
1402 solo_dev->enc_bw_remain = solo_dev->fps * 4 * 4; in solo_enc_v4l2_init()
1404 solo_dev->enc_bw_remain = solo_dev->fps * 4 * 5; in solo_enc_v4l2_init()
1406 dev_info(&solo_dev->pdev->dev, "Encoders as /dev/video%d-%d\n", in solo_enc_v4l2_init()
1407 solo_dev->v4l2_enc[0]->vfd->num, in solo_enc_v4l2_init()
1408 solo_dev->v4l2_enc[solo_dev->nr_chans - 1]->vfd->num); in solo_enc_v4l2_init()
1410 return solo_ring_start(solo_dev); in solo_enc_v4l2_init()
1413 void solo_enc_v4l2_exit(struct solo_dev *solo_dev) in solo_enc_v4l2_exit() argument
1417 solo_ring_stop(solo_dev); in solo_enc_v4l2_exit()
1419 for (i = 0; i < solo_dev->nr_chans; i++) in solo_enc_v4l2_exit()
1420 solo_enc_free(solo_dev->v4l2_enc[i]); in solo_enc_v4l2_exit()
1422 if (solo_dev->vh_buf) in solo_enc_v4l2_exit()
1423 pci_free_consistent(solo_dev->pdev, solo_dev->vh_size, in solo_enc_v4l2_exit()
1424 solo_dev->vh_buf, solo_dev->vh_dma); in solo_enc_v4l2_exit()