Lines Matching defs:vip

204 static inline void reg_write(struct sta2x11_vip *vip, unsigned int reg, u32 val)
206 iowrite32((val), (vip->iomem)+(reg));
209 static inline u32 reg_read(struct sta2x11_vip *vip, unsigned int reg)
211 return ioread32((vip->iomem)+(reg));
214 static void start_dma(struct sta2x11_vip *vip, struct vip_buffer *vip_buf)
218 if (vip->format.field == V4L2_FIELD_INTERLACED)
219 offset = vip->format.width * 2;
221 spin_lock_irq(&vip->slock);
223 reg_write(vip, DVP_CTL, reg_read(vip, DVP_CTL) | DVP_CTL_ENA);
225 reg_write(vip, DVP_VTP, (u32)vip_buf->dma);
226 reg_write(vip, DVP_VBP, (u32)vip_buf->dma + offset);
227 spin_unlock_irq(&vip->slock);
231 static void vip_active_buf_next(struct sta2x11_vip *vip)
234 spin_lock(&vip->lock);
235 if (list_empty(&vip->buffer_list)) {/* No available buffer */
236 spin_unlock(&vip->lock);
239 vip->active = list_first_entry(&vip->buffer_list,
243 vip->tcount = 0;
244 vip->bcount = 0;
245 spin_unlock(&vip->lock);
246 if (vb2_is_streaming(&vip->vb_vidq)) { /* streaming is on */
247 start_dma(vip, vip->active); /* start dma capture */
257 struct sta2x11_vip *vip = vb2_get_drv_priv(vq);
263 sizes[0] = vip->format.sizeimage;
265 vip->sequence = 0;
266 vip->active = NULL;
267 vip->tcount = 0;
268 vip->bcount = 0;
285 struct sta2x11_vip *vip = vb2_get_drv_priv(vb->vb2_queue);
289 size = vip->format.sizeimage;
291 v4l2_err(&vip->v4l2_dev, "buffer too small (%lu < %lu)\n",
303 struct sta2x11_vip *vip = vb2_get_drv_priv(vb->vb2_queue);
306 spin_lock(&vip->lock);
307 list_add_tail(&vip_buf->list, &vip->buffer_list);
308 if (!vip->active) { /* No active buffer, active the first one */
309 vip->active = list_first_entry(&vip->buffer_list,
312 if (vb2_is_streaming(&vip->vb_vidq)) /* streaming is on */
313 start_dma(vip, vip_buf); /* start dma capture */
315 spin_unlock(&vip->lock);
320 struct sta2x11_vip *vip = vb2_get_drv_priv(vb->vb2_queue);
324 spin_lock(&vip->lock);
326 spin_unlock(&vip->lock);
329 vip_active_buf_next(vip);
334 struct sta2x11_vip *vip = vb2_get_drv_priv(vq);
336 spin_lock_irq(&vip->slock);
338 reg_write(vip, DVP_ITM, DVP_IT_VSB | DVP_IT_VST);
339 spin_unlock_irq(&vip->slock);
342 start_dma(vip, vip->active);
350 struct sta2x11_vip *vip = vb2_get_drv_priv(vq);
354 reg_write(vip, DVP_CTL, reg_read(vip, DVP_CTL) & ~DVP_CTL_ENA);
356 reg_write(vip, DVP_ITM, 0);
359 spin_lock(&vip->lock);
360 list_for_each_entry_safe(vip_buf, node, &vip->buffer_list, list) {
364 spin_unlock(&vip->lock);
426 struct sta2x11_vip *vip = video_drvdata(file);
433 v4l2_subdev_call(vip->decoder, video, querystd, &std);
438 if (vip->std != std) {
439 vip->std = std;
441 vip->format = formats_60[0];
443 vip->format = formats_50[0];
446 return v4l2_subdev_call(vip->decoder, video, s_std, std);
461 struct sta2x11_vip *vip = video_drvdata(file);
463 *std = vip->std;
479 struct sta2x11_vip *vip = video_drvdata(file);
481 return v4l2_subdev_call(vip->decoder, video, querystd, std);
511 struct sta2x11_vip *vip = video_drvdata(file);
516 ret = v4l2_subdev_call(vip->decoder, video, s_routing, i, 0, 0);
519 vip->input = i;
536 struct sta2x11_vip *vip = video_drvdata(file);
538 *i = vip->input;
583 struct sta2x11_vip *vip = video_drvdata(file);
587 v4l2_warn(&vip->v4l2_dev, "Invalid format, only UYVY supported\n");
591 if (V4L2_STD_525_60 & vip->std)
641 struct sta2x11_vip *vip = video_drvdata(file);
649 if (vb2_is_busy(&vip->vb_vidq)) {
651 v4l2_err(&vip->v4l2_dev, "device busy\n");
654 vip->format = f->fmt.pix;
655 switch (vip->format.field) {
657 t_stop = ((vip->format.height / 2 - 1) << 16) |
658 (2 * vip->format.width - 1);
660 pitch = 4 * vip->format.width;
663 t_stop = ((vip->format.height - 1) << 16) |
664 (2 * vip->format.width - 1);
665 b_stop = (0 << 16) | (2 * vip->format.width - 1);
666 pitch = 2 * vip->format.width;
669 t_stop = (0 << 16) | (2 * vip->format.width - 1);
670 b_stop = (vip->format.height << 16) |
671 (2 * vip->format.width - 1);
672 pitch = 2 * vip->format.width;
675 v4l2_err(&vip->v4l2_dev, "unknown field format\n");
679 spin_lock_irq(&vip->slock);
681 reg_write(vip, DVP_TFO, 0);
683 reg_write(vip, DVP_BFO, 0);
685 reg_write(vip, DVP_TFS, t_stop);
687 reg_write(vip, DVP_BFS, b_stop);
689 reg_write(vip, DVP_VMP, pitch);
690 spin_unlock_irq(&vip->slock);
708 struct sta2x11_vip *vip = video_drvdata(file);
710 f->fmt.pix = vip->format;
772 struct sta2x11_vip *vip = data;
775 status = reg_read(vip, DVP_ITS);
781 if (vip->overflow++ > 5)
791 if ((++vip->tcount) < 2)
794 vip->bcount++;
798 if (vip->active) { /* Acquisition is over on this buffer */
800 reg_write(vip, DVP_CTL, reg_read(vip, DVP_CTL) & ~DVP_CTL_ENA);
802 vip->active->vb.vb2_buf.timestamp = ktime_get_ns();
803 vip->active->vb.sequence = vip->sequence++;
804 vb2_buffer_done(&vip->active->vb.vb2_buf, VB2_BUF_STATE_DONE);
810 static void sta2x11_vip_init_register(struct sta2x11_vip *vip)
813 spin_lock_irq(&vip->slock);
815 reg_read(vip, DVP_ITS);
817 reg_write(vip, DVP_HLFLN, DVP_HLFLN_SD);
819 reg_write(vip, DVP_CTL, DVP_CTL_RST);
821 reg_write(vip, DVP_CTL, 0);
822 spin_unlock_irq(&vip->slock);
824 static void sta2x11_vip_clear_register(struct sta2x11_vip *vip)
826 spin_lock_irq(&vip->slock);
828 reg_write(vip, DVP_ITM, 0);
830 reg_write(vip, DVP_CTL, DVP_CTL_RST);
832 reg_write(vip, DVP_CTL, 0);
834 reg_read(vip, DVP_ITS);
835 spin_unlock_irq(&vip->slock);
837 static int sta2x11_vip_init_buffer(struct sta2x11_vip *vip)
841 err = dma_set_coherent_mask(&vip->pdev->dev, DMA_BIT_MASK(29));
843 v4l2_err(&vip->v4l2_dev, "Cannot configure coherent mask");
846 memset(&vip->vb_vidq, 0, sizeof(struct vb2_queue));
847 vip->vb_vidq.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
848 vip->vb_vidq.io_modes = VB2_MMAP | VB2_READ;
849 vip->vb_vidq.drv_priv = vip;
850 vip->vb_vidq.buf_struct_size = sizeof(struct vip_buffer);
851 vip->vb_vidq.ops = &vip_video_qops;
852 vip->vb_vidq.mem_ops = &vb2_dma_contig_memops;
853 vip->vb_vidq.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
854 vip->vb_vidq.dev = &vip->pdev->dev;
855 vip->vb_vidq.lock = &vip->v4l_lock;
856 err = vb2_queue_init(&vip->vb_vidq);
859 INIT_LIST_HEAD(&vip->buffer_list);
860 spin_lock_init(&vip->lock);
864 static int sta2x11_vip_init_controls(struct sta2x11_vip *vip)
870 v4l2_ctrl_handler_init(&vip->ctrl_hdl, 0);
872 vip->v4l2_dev.ctrl_handler = &vip->ctrl_hdl;
873 if (vip->ctrl_hdl.error) {
874 int err = vip->ctrl_hdl.error;
876 v4l2_ctrl_handler_free(&vip->ctrl_hdl);
965 struct sta2x11_vip *vip;
1014 vip = kzalloc(sizeof(struct sta2x11_vip), GFP_KERNEL);
1015 if (!vip) {
1019 vip->pdev = pdev;
1020 vip->std = V4L2_STD_PAL;
1021 vip->format = formats_50[0];
1022 vip->config = config;
1023 mutex_init(&vip->v4l_lock);
1025 ret = sta2x11_vip_init_controls(vip);
1028 ret = v4l2_device_register(&pdev->dev, &vip->v4l2_dev);
1042 vip->iomem = pci_iomap(pdev, 0, 0x100);
1043 if (!vip->iomem) {
1051 ret = sta2x11_vip_init_buffer(vip);
1055 spin_lock_init(&vip->slock);
1057 ret = request_irq(pdev->irq, vip_irq, IRQF_SHARED, KBUILD_MODNAME, vip);
1065 vip->video_dev = video_dev_template;
1066 vip->video_dev.v4l2_dev = &vip->v4l2_dev;
1067 vip->video_dev.queue = &vip->vb_vidq;
1068 vip->video_dev.lock = &vip->v4l_lock;
1069 video_set_drvdata(&vip->video_dev, vip);
1071 ret = video_register_device(&vip->video_dev, VFL_TYPE_VIDEO, -1);
1076 vip->adapter = i2c_get_adapter(vip->config->i2c_id);
1077 if (!vip->adapter) {
1083 vip->decoder = v4l2_i2c_new_subdev(&vip->v4l2_dev, vip->adapter,
1084 "adv7180", vip->config->i2c_addr,
1086 if (!vip->decoder) {
1092 i2c_put_adapter(vip->adapter);
1093 v4l2_subdev_call(vip->decoder, core, init, 0);
1095 sta2x11_vip_init_register(vip);
1101 video_set_drvdata(&vip->video_dev, NULL);
1103 vb2_video_unregister_device(&vip->video_dev);
1104 free_irq(pdev->irq, vip);
1108 pci_iounmap(pdev, vip->iomem);
1112 v4l2_device_unregister(&vip->v4l2_dev);
1114 kfree(vip);
1141 struct sta2x11_vip *vip =
1144 sta2x11_vip_clear_register(vip);
1146 video_set_drvdata(&vip->video_dev, NULL);
1147 vb2_video_unregister_device(&vip->video_dev);
1148 free_irq(pdev->irq, vip);
1150 pci_iounmap(pdev, vip->iomem);
1153 v4l2_device_unregister(&vip->v4l2_dev);
1155 vip_gpio_release(&pdev->dev, vip->config->pwr_pin,
1156 vip->config->pwr_name);
1157 vip_gpio_release(&pdev->dev, vip->config->reset_pin,
1158 vip->config->reset_name);
1160 kfree(vip);
1179 struct sta2x11_vip *vip =
1184 spin_lock_irqsave(&vip->slock, flags);
1185 vip->register_save_area[0] = reg_read(vip, DVP_CTL);
1186 reg_write(vip, DVP_CTL, vip->register_save_area[0] & DVP_CTL_DIS);
1187 vip->register_save_area[SAVE_COUNT] = reg_read(vip, DVP_ITM);
1188 reg_write(vip, DVP_ITM, 0);
1190 vip->register_save_area[i] = reg_read(vip, 4 * i);
1192 vip->register_save_area[SAVE_COUNT + IRQ_COUNT + i] =
1193 reg_read(vip, registers_to_save[i]);
1194 spin_unlock_irqrestore(&vip->slock, flags);
1196 vip->disabled = 1;
1213 struct sta2x11_vip *vip =
1220 vip->disabled = 0;
1222 spin_lock_irqsave(&vip->slock, flags);
1224 reg_write(vip, 4 * i, vip->register_save_area[i]);
1226 reg_write(vip, registers_to_save[i],
1227 vip->register_save_area[SAVE_COUNT + IRQ_COUNT + i]);
1228 reg_write(vip, DVP_CTL, vip->register_save_area[0]);
1229 reg_write(vip, DVP_ITM, vip->register_save_area[SAVE_COUNT]);
1230 spin_unlock_irqrestore(&vip->slock, flags);