Lines Matching refs:meye
72 static struct meye meye; variable
122 memset(meye.mchip_ptable, 0, sizeof(meye.mchip_ptable)); in ptable_alloc()
125 if (dma_set_mask(&meye.mchip_dev->dev, DMA_BIT_MASK(32))) in ptable_alloc()
128 meye.mchip_ptable_toc = dma_alloc_coherent(&meye.mchip_dev->dev, in ptable_alloc()
130 &meye.mchip_dmahandle, in ptable_alloc()
132 if (!meye.mchip_ptable_toc) { in ptable_alloc()
133 meye.mchip_dmahandle = 0; in ptable_alloc()
137 pt = meye.mchip_ptable_toc; in ptable_alloc()
140 meye.mchip_ptable[i] = dma_alloc_coherent(&meye.mchip_dev->dev, in ptable_alloc()
144 if (!meye.mchip_ptable[i]) { in ptable_alloc()
146 pt = meye.mchip_ptable_toc; in ptable_alloc()
149 dma_free_coherent(&meye.mchip_dev->dev, in ptable_alloc()
151 meye.mchip_ptable[j], dma); in ptable_alloc()
154 dma_free_coherent(&meye.mchip_dev->dev, in ptable_alloc()
156 meye.mchip_ptable_toc, in ptable_alloc()
157 meye.mchip_dmahandle); in ptable_alloc()
158 meye.mchip_ptable_toc = NULL; in ptable_alloc()
159 meye.mchip_dmahandle = 0; in ptable_alloc()
173 pt = meye.mchip_ptable_toc; in ptable_free()
176 if (meye.mchip_ptable[i]) in ptable_free()
177 dma_free_coherent(&meye.mchip_dev->dev, in ptable_free()
179 meye.mchip_ptable[i], dma); in ptable_free()
183 if (meye.mchip_ptable_toc) in ptable_free()
184 dma_free_coherent(&meye.mchip_dev->dev, in ptable_free()
186 meye.mchip_ptable_toc, in ptable_free()
187 meye.mchip_dmahandle); in ptable_free()
189 memset(meye.mchip_ptable, 0, sizeof(meye.mchip_ptable)); in ptable_free()
190 meye.mchip_ptable_toc = NULL; in ptable_free()
191 meye.mchip_dmahandle = 0; in ptable_free()
200 memcpy(buf + i, meye.mchip_ptable[start++], PAGE_SIZE); in ptable_copy()
204 memcpy(buf + i, meye.mchip_ptable[start], size % PAGE_SIZE); in ptable_copy()
404 return meye.params.subsample ? 320 : 640; in mchip_hsize()
410 return meye.params.subsample ? 240 : 480; in mchip_vsize()
421 status = readl(meye.mchip_mmregs + in mchip_sync()
435 status = readl(meye.mchip_mmregs + MCHIP_HIC_STATUS); in mchip_sync()
451 writel(v, meye.mchip_mmregs + reg); in mchip_set()
458 return readl(meye.mchip_mmregs + reg); in mchip_read()
473 mchip_set(MCHIP_MCC_R_SAMPLING, meye.params.subsample); in mchip_subsample()
484 mchip_set(MCHIP_HIC_S_RATE, meye.params.framerate); in mchip_set_framerate()
497 writel(tables[i], meye.mchip_mmregs + MCHIP_VRJ_TABLE_DATA); in mchip_load_tables()
499 tables = jpeg_quantisation_tables(&length, meye.params.quality); in mchip_load_tables()
501 writel(tables[i], meye.mchip_mmregs + MCHIP_VRJ_TABLE_DATA); in mchip_load_tables()
536 meye.mchip_fnum = 0; in mchip_dma_setup()
542 if (!meye.mchip_dmahandle) in mchip_dma_alloc()
551 if (meye.mchip_dmahandle) { in mchip_dma_free()
563 meye.mchip_mode = MCHIP_HIC_MODE_NOOP; in mchip_hic_stop()
592 v = mchip_read(MCHIP_MM_FIR(meye.mchip_fnum)); in mchip_get_frame()
599 mchip_set(MCHIP_MM_FIR(meye.mchip_fnum), 0); in mchip_free_frame()
600 meye.mchip_fnum++; in mchip_free_frame()
601 meye.mchip_fnum %= 4; in mchip_free_frame()
667 mchip_dma_setup(meye.mchip_dmahandle); in mchip_take_picture()
712 mchip_dma_setup(meye.mchip_dmahandle); in mchip_continuous_start()
714 meye.mchip_mode = MCHIP_HIC_MODE_CONT_OUT; in mchip_continuous_start()
775 mchip_dma_setup(meye.mchip_dmahandle); in mchip_cont_compression_start()
777 meye.mchip_mode = MCHIP_HIC_MODE_CONT_COMP; in mchip_cont_compression_start()
797 if (meye.mchip_mode != MCHIP_HIC_MODE_CONT_OUT && in meye_irq()
798 meye.mchip_mode != MCHIP_HIC_MODE_CONT_COMP) in meye_irq()
806 if (meye.mchip_mode == MCHIP_HIC_MODE_CONT_OUT) { in meye_irq()
807 if (kfifo_out_locked(&meye.grabq, (unsigned char *)&reqnr, in meye_irq()
808 sizeof(int), &meye.grabq_lock) != sizeof(int)) { in meye_irq()
812 mchip_cont_read_frame(v, meye.grab_fbuffer + gbufsize * reqnr, in meye_irq()
814 meye.grab_buffer[reqnr].size = mchip_hsize() * mchip_vsize() * 2; in meye_irq()
815 meye.grab_buffer[reqnr].state = MEYE_BUF_DONE; in meye_irq()
816 v4l2_get_timestamp(&meye.grab_buffer[reqnr].timestamp); in meye_irq()
817 meye.grab_buffer[reqnr].sequence = sequence++; in meye_irq()
818 kfifo_in_locked(&meye.doneq, (unsigned char *)&reqnr, in meye_irq()
819 sizeof(int), &meye.doneq_lock); in meye_irq()
820 wake_up_interruptible(&meye.proc_list); in meye_irq()
823 size = mchip_comp_read_frame(v, meye.grab_temp, gbufsize); in meye_irq()
828 if (kfifo_out_locked(&meye.grabq, (unsigned char *)&reqnr, in meye_irq()
829 sizeof(int), &meye.grabq_lock) != sizeof(int)) { in meye_irq()
833 memcpy(meye.grab_fbuffer + gbufsize * reqnr, meye.grab_temp, in meye_irq()
835 meye.grab_buffer[reqnr].size = size; in meye_irq()
836 meye.grab_buffer[reqnr].state = MEYE_BUF_DONE; in meye_irq()
837 v4l2_get_timestamp(&meye.grab_buffer[reqnr].timestamp); in meye_irq()
838 meye.grab_buffer[reqnr].sequence = sequence++; in meye_irq()
839 kfifo_in_locked(&meye.doneq, (unsigned char *)&reqnr, in meye_irq()
840 sizeof(int), &meye.doneq_lock); in meye_irq()
841 wake_up_interruptible(&meye.proc_list); in meye_irq()
855 if (test_and_set_bit(0, &meye.in_use)) in meye_open()
862 clear_bit(0, &meye.in_use); in meye_open()
867 meye.grab_buffer[i].state = MEYE_BUF_UNUSED; in meye_open()
868 kfifo_reset(&meye.grabq); in meye_open()
869 kfifo_reset(&meye.doneq); in meye_open()
877 clear_bit(0, &meye.in_use); in meye_release()
883 *p = meye.params; in meyeioc_g_params()
901 mutex_lock(&meye.lock); in meyeioc_s_params()
903 if (meye.params.subsample != jp->subsample || in meyeioc_s_params()
904 meye.params.quality != jp->quality) in meyeioc_s_params()
907 meye.params = *jp; in meyeioc_s_params()
909 meye.params.sharpness); in meyeioc_s_params()
911 meye.params.agc); in meyeioc_s_params()
913 meye.params.picture); in meyeioc_s_params()
914 mutex_unlock(&meye.lock); in meyeioc_s_params()
921 if (!meye.grab_fbuffer) in meyeioc_qbuf_capt()
933 if (meye.grab_buffer[*nb].state != MEYE_BUF_UNUSED) in meyeioc_qbuf_capt()
936 mutex_lock(&meye.lock); in meyeioc_qbuf_capt()
938 if (meye.mchip_mode != MCHIP_HIC_MODE_CONT_COMP) in meyeioc_qbuf_capt()
941 meye.grab_buffer[*nb].state = MEYE_BUF_USING; in meyeioc_qbuf_capt()
942 kfifo_in_locked(&meye.grabq, (unsigned char *)nb, sizeof(int), in meyeioc_qbuf_capt()
943 &meye.grabq_lock); in meyeioc_qbuf_capt()
944 mutex_unlock(&meye.lock); in meyeioc_qbuf_capt()
956 mutex_lock(&meye.lock); in meyeioc_sync()
957 switch (meye.grab_buffer[*i].state) { in meyeioc_sync()
960 mutex_unlock(&meye.lock); in meyeioc_sync()
964 mutex_unlock(&meye.lock); in meyeioc_sync()
967 if (wait_event_interruptible(meye.proc_list, in meyeioc_sync()
968 (meye.grab_buffer[*i].state != MEYE_BUF_USING))) { in meyeioc_sync()
969 mutex_unlock(&meye.lock); in meyeioc_sync()
974 meye.grab_buffer[*i].state = MEYE_BUF_UNUSED; in meyeioc_sync()
975 if (kfifo_out_locked(&meye.doneq, (unsigned char *)&unused, in meyeioc_sync()
976 sizeof(int), &meye.doneq_lock) != sizeof(int)) in meyeioc_sync()
979 *i = meye.grab_buffer[*i].size; in meyeioc_sync()
980 mutex_unlock(&meye.lock); in meyeioc_sync()
986 if (!meye.grab_fbuffer) in meyeioc_stillcapt()
989 if (meye.grab_buffer[0].state != MEYE_BUF_UNUSED) in meyeioc_stillcapt()
992 mutex_lock(&meye.lock); in meyeioc_stillcapt()
993 meye.grab_buffer[0].state = MEYE_BUF_USING; in meyeioc_stillcapt()
996 mchip_get_picture(meye.grab_fbuffer, in meyeioc_stillcapt()
999 meye.grab_buffer[0].state = MEYE_BUF_DONE; in meyeioc_stillcapt()
1000 mutex_unlock(&meye.lock); in meyeioc_stillcapt()
1007 if (!meye.grab_fbuffer) in meyeioc_stilljcapt()
1010 if (meye.grab_buffer[0].state != MEYE_BUF_UNUSED) in meyeioc_stilljcapt()
1013 mutex_lock(&meye.lock); in meyeioc_stilljcapt()
1014 meye.grab_buffer[0].state = MEYE_BUF_USING; in meyeioc_stilljcapt()
1019 *len = mchip_compress_frame(meye.grab_fbuffer, gbufsize); in meyeioc_stilljcapt()
1022 meye.grab_buffer[0].state = MEYE_BUF_DONE; in meyeioc_stilljcapt()
1023 mutex_unlock(&meye.lock); in meyeioc_stilljcapt()
1032 sprintf(cap->bus_info, "PCI:%s", pci_name(meye.mchip_dev)); in vidioc_querycap()
1068 mutex_lock(&meye.lock); in meye_s_ctrl()
1073 meye.brightness = ctrl->val << 10; in meye_s_ctrl()
1078 meye.hue = ctrl->val << 10; in meye_s_ctrl()
1083 meye.contrast = ctrl->val << 10; in meye_s_ctrl()
1088 meye.colour = ctrl->val << 10; in meye_s_ctrl()
1093 meye.params.agc = ctrl->val; in meye_s_ctrl()
1098 meye.params.sharpness = ctrl->val; in meye_s_ctrl()
1103 meye.params.picture = ctrl->val; in meye_s_ctrl()
1106 meye.params.quality = ctrl->val; in meye_s_ctrl()
1109 meye.params.framerate = ctrl->val; in meye_s_ctrl()
1112 mutex_unlock(&meye.lock); in meye_s_ctrl()
1115 mutex_unlock(&meye.lock); in meye_s_ctrl()
1173 switch (meye.mchip_mode) { in vidioc_g_fmt_vid_cap()
1205 mutex_lock(&meye.lock); in vidioc_s_fmt_vid_cap()
1210 meye.params.subsample = 1; in vidioc_s_fmt_vid_cap()
1214 meye.params.subsample = 0; in vidioc_s_fmt_vid_cap()
1219 meye.mchip_mode = MCHIP_HIC_MODE_CONT_OUT; in vidioc_s_fmt_vid_cap()
1222 meye.mchip_mode = MCHIP_HIC_MODE_CONT_COMP; in vidioc_s_fmt_vid_cap()
1226 mutex_unlock(&meye.lock); in vidioc_s_fmt_vid_cap()
1243 if (meye.grab_fbuffer && req->count == gbuffers) { in vidioc_reqbufs()
1248 mutex_lock(&meye.lock); in vidioc_reqbufs()
1249 if (meye.grab_fbuffer) { in vidioc_reqbufs()
1251 if (meye.vma_use_count[i]) { in vidioc_reqbufs()
1252 mutex_unlock(&meye.lock); in vidioc_reqbufs()
1255 rvfree(meye.grab_fbuffer, gbuffers * gbufsize); in vidioc_reqbufs()
1256 meye.grab_fbuffer = NULL; in vidioc_reqbufs()
1261 meye.grab_fbuffer = rvmalloc(gbuffers * gbufsize); in vidioc_reqbufs()
1263 if (!meye.grab_fbuffer) { in vidioc_reqbufs()
1266 mutex_unlock(&meye.lock); in vidioc_reqbufs()
1271 meye.vma_use_count[i] = 0; in vidioc_reqbufs()
1273 mutex_unlock(&meye.lock); in vidioc_reqbufs()
1285 buf->bytesused = meye.grab_buffer[index].size; in vidioc_querybuf()
1288 if (meye.grab_buffer[index].state == MEYE_BUF_USING) in vidioc_querybuf()
1291 if (meye.grab_buffer[index].state == MEYE_BUF_DONE) in vidioc_querybuf()
1295 buf->timestamp = meye.grab_buffer[index].timestamp; in vidioc_querybuf()
1296 buf->sequence = meye.grab_buffer[index].sequence; in vidioc_querybuf()
1312 if (meye.grab_buffer[buf->index].state != MEYE_BUF_UNUSED) in vidioc_qbuf()
1315 mutex_lock(&meye.lock); in vidioc_qbuf()
1318 meye.grab_buffer[buf->index].state = MEYE_BUF_USING; in vidioc_qbuf()
1319 kfifo_in_locked(&meye.grabq, (unsigned char *)&buf->index, in vidioc_qbuf()
1320 sizeof(int), &meye.grabq_lock); in vidioc_qbuf()
1321 mutex_unlock(&meye.lock); in vidioc_qbuf()
1333 mutex_lock(&meye.lock); in vidioc_dqbuf()
1335 if (kfifo_len(&meye.doneq) == 0 && file->f_flags & O_NONBLOCK) { in vidioc_dqbuf()
1336 mutex_unlock(&meye.lock); in vidioc_dqbuf()
1340 if (wait_event_interruptible(meye.proc_list, in vidioc_dqbuf()
1341 kfifo_len(&meye.doneq) != 0) < 0) { in vidioc_dqbuf()
1342 mutex_unlock(&meye.lock); in vidioc_dqbuf()
1346 if (!kfifo_out_locked(&meye.doneq, (unsigned char *)&reqnr, in vidioc_dqbuf()
1347 sizeof(int), &meye.doneq_lock)) { in vidioc_dqbuf()
1348 mutex_unlock(&meye.lock); in vidioc_dqbuf()
1352 if (meye.grab_buffer[reqnr].state != MEYE_BUF_DONE) { in vidioc_dqbuf()
1353 mutex_unlock(&meye.lock); in vidioc_dqbuf()
1358 buf->bytesused = meye.grab_buffer[reqnr].size; in vidioc_dqbuf()
1361 buf->timestamp = meye.grab_buffer[reqnr].timestamp; in vidioc_dqbuf()
1362 buf->sequence = meye.grab_buffer[reqnr].sequence; in vidioc_dqbuf()
1366 meye.grab_buffer[reqnr].state = MEYE_BUF_UNUSED; in vidioc_dqbuf()
1367 mutex_unlock(&meye.lock); in vidioc_dqbuf()
1374 mutex_lock(&meye.lock); in vidioc_streamon()
1376 switch (meye.mchip_mode) { in vidioc_streamon()
1384 mutex_unlock(&meye.lock); in vidioc_streamon()
1388 mutex_unlock(&meye.lock); in vidioc_streamon()
1395 mutex_lock(&meye.lock); in vidioc_streamoff()
1397 kfifo_reset(&meye.grabq); in vidioc_streamoff()
1398 kfifo_reset(&meye.doneq); in vidioc_streamoff()
1401 meye.grab_buffer[i].state = MEYE_BUF_UNUSED; in vidioc_streamoff()
1403 mutex_unlock(&meye.lock); in vidioc_streamoff()
1439 mutex_lock(&meye.lock); in meye_poll()
1440 poll_wait(file, &meye.proc_list, wait); in meye_poll()
1441 if (kfifo_len(&meye.doneq)) in meye_poll()
1443 mutex_unlock(&meye.lock); in meye_poll()
1450 meye.vma_use_count[idx]++; in meye_vm_open()
1456 meye.vma_use_count[idx]--; in meye_vm_close()
1471 mutex_lock(&meye.lock); in meye_mmap()
1473 mutex_unlock(&meye.lock); in meye_mmap()
1476 if (!meye.grab_fbuffer) { in meye_mmap()
1480 meye.grab_fbuffer = rvmalloc(gbuffers*gbufsize); in meye_mmap()
1481 if (!meye.grab_fbuffer) { in meye_mmap()
1483 mutex_unlock(&meye.lock); in meye_mmap()
1487 meye.vma_use_count[i] = 0; in meye_mmap()
1489 pos = (unsigned long)meye.grab_fbuffer + offset; in meye_mmap()
1494 mutex_unlock(&meye.lock); in meye_mmap()
1511 mutex_unlock(&meye.lock); in meye_mmap()
1560 meye.pm_mchip_mode = meye.mchip_mode; in meye_suspend()
1569 pci_write_config_word(meye.mchip_dev, MCHIP_PCI_SOFTRESET_SET, 1); in meye_resume()
1580 switch (meye.pm_mchip_mode) { in meye_resume()
1620 struct v4l2_device *v4l2_dev = &meye.v4l2_dev; in meye_probe()
1624 if (meye.mchip_dev != NULL) { in meye_probe()
1635 meye.mchip_dev = pcidev; in meye_probe()
1637 meye.grab_temp = vmalloc(MCHIP_NB_PAGES_MJPEG * PAGE_SIZE); in meye_probe()
1638 if (!meye.grab_temp) { in meye_probe()
1643 spin_lock_init(&meye.grabq_lock); in meye_probe()
1644 if (kfifo_alloc(&meye.grabq, sizeof(int) * MEYE_MAX_BUFNBRS, in meye_probe()
1649 spin_lock_init(&meye.doneq_lock); in meye_probe()
1650 if (kfifo_alloc(&meye.doneq, sizeof(int) * MEYE_MAX_BUFNBRS, in meye_probe()
1656 meye.vdev = meye_template; in meye_probe()
1657 meye.vdev.v4l2_dev = &meye.v4l2_dev; in meye_probe()
1667 if ((ret = pci_enable_device(meye.mchip_dev))) { in meye_probe()
1672 mchip_adr = pci_resource_start(meye.mchip_dev,0); in meye_probe()
1677 if (!request_mem_region(pci_resource_start(meye.mchip_dev, 0), in meye_probe()
1678 pci_resource_len(meye.mchip_dev, 0), in meye_probe()
1683 meye.mchip_mmregs = ioremap(mchip_adr, MCHIP_MM_REGS); in meye_probe()
1684 if (!meye.mchip_mmregs) { in meye_probe()
1689 meye.mchip_irq = pcidev->irq; in meye_probe()
1690 if (request_irq(meye.mchip_irq, meye_irq, in meye_probe()
1696 pci_write_config_byte(meye.mchip_dev, PCI_CACHE_LINE_SIZE, 8); in meye_probe()
1697 pci_write_config_byte(meye.mchip_dev, PCI_LATENCY_TIMER, 64); in meye_probe()
1699 pci_set_master(meye.mchip_dev); in meye_probe()
1702 pci_write_config_word(meye.mchip_dev, MCHIP_PCI_SOFTRESET_SET, 1); in meye_probe()
1716 mutex_init(&meye.lock); in meye_probe()
1717 init_waitqueue_head(&meye.proc_list); in meye_probe()
1719 v4l2_ctrl_handler_init(&meye.hdl, 3); in meye_probe()
1720 v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops, in meye_probe()
1722 v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops, in meye_probe()
1724 v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops, in meye_probe()
1726 v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops, in meye_probe()
1728 v4l2_ctrl_new_custom(&meye.hdl, &ctrl_agc, NULL); in meye_probe()
1729 v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops, in meye_probe()
1731 v4l2_ctrl_new_custom(&meye.hdl, &ctrl_picture, NULL); in meye_probe()
1732 v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops, in meye_probe()
1734 v4l2_ctrl_new_custom(&meye.hdl, &ctrl_framerate, NULL); in meye_probe()
1735 if (meye.hdl.error) { in meye_probe()
1740 v4l2_ctrl_handler_setup(&meye.hdl); in meye_probe()
1741 meye.vdev.ctrl_handler = &meye.hdl; in meye_probe()
1743 if (video_register_device(&meye.vdev, VFL_TYPE_GRABBER, in meye_probe()
1752 meye.mchip_dev->revision, mchip_adr, meye.mchip_irq); in meye_probe()
1757 v4l2_ctrl_handler_free(&meye.hdl); in meye_probe()
1758 free_irq(meye.mchip_irq, meye_irq); in meye_probe()
1760 iounmap(meye.mchip_mmregs); in meye_probe()
1762 release_mem_region(pci_resource_start(meye.mchip_dev, 0), in meye_probe()
1763 pci_resource_len(meye.mchip_dev, 0)); in meye_probe()
1765 pci_disable_device(meye.mchip_dev); in meye_probe()
1769 kfifo_free(&meye.doneq); in meye_probe()
1771 kfifo_free(&meye.grabq); in meye_probe()
1773 vfree(meye.grab_temp); in meye_probe()
1780 video_unregister_device(&meye.vdev); in meye_remove()
1789 free_irq(meye.mchip_irq, meye_irq); in meye_remove()
1791 iounmap(meye.mchip_mmregs); in meye_remove()
1793 release_mem_region(pci_resource_start(meye.mchip_dev, 0), in meye_remove()
1794 pci_resource_len(meye.mchip_dev, 0)); in meye_remove()
1796 pci_disable_device(meye.mchip_dev); in meye_remove()
1800 kfifo_free(&meye.doneq); in meye_remove()
1801 kfifo_free(&meye.grabq); in meye_remove()
1803 vfree(meye.grab_temp); in meye_remove()
1805 if (meye.grab_fbuffer) { in meye_remove()
1806 rvfree(meye.grab_fbuffer, gbuffers*gbufsize); in meye_remove()
1807 meye.grab_fbuffer = NULL; in meye_remove()