Lines Matching refs:meye

47 #include "meye.h"
48 #include <linux/meye.h>
72 static struct meye meye;
114 * NOTE: The meye device expects DMA addresses on 32 bits, we build
122 memset(meye.mchip_ptable, 0, sizeof(meye.mchip_ptable));
125 if (dma_set_mask(&meye.mchip_dev->dev, DMA_BIT_MASK(32)))
128 meye.mchip_ptable_toc = dma_alloc_coherent(&meye.mchip_dev->dev,
130 &meye.mchip_dmahandle,
132 if (!meye.mchip_ptable_toc) {
133 meye.mchip_dmahandle = 0;
137 pt = meye.mchip_ptable_toc;
140 meye.mchip_ptable[i] = dma_alloc_coherent(&meye.mchip_dev->dev,
144 if (!meye.mchip_ptable[i]) {
146 pt = meye.mchip_ptable_toc;
149 dma_free_coherent(&meye.mchip_dev->dev,
151 meye.mchip_ptable[j], dma);
154 dma_free_coherent(&meye.mchip_dev->dev,
156 meye.mchip_ptable_toc,
157 meye.mchip_dmahandle);
158 meye.mchip_ptable_toc = NULL;
159 meye.mchip_dmahandle = 0;
173 pt = meye.mchip_ptable_toc;
176 if (meye.mchip_ptable[i])
177 dma_free_coherent(&meye.mchip_dev->dev,
179 meye.mchip_ptable[i], dma);
183 if (meye.mchip_ptable_toc)
184 dma_free_coherent(&meye.mchip_dev->dev,
186 meye.mchip_ptable_toc,
187 meye.mchip_dmahandle);
189 memset(meye.mchip_ptable, 0, sizeof(meye.mchip_ptable));
190 meye.mchip_ptable_toc = NULL;
191 meye.mchip_dmahandle = 0;
200 memcpy(buf + i, meye.mchip_ptable[start++], PAGE_SIZE);
204 memcpy(buf + i, meye.mchip_ptable[start], size % PAGE_SIZE);
349 "meye: invalid quality level %d - using 8\n", quality);
404 return meye.params.subsample ? 320 : 640;
410 return meye.params.subsample ? 240 : 480;
421 status = readl(meye.mchip_mmregs +
424 printk(KERN_WARNING "meye: fifo not ready\n");
435 status = readl(meye.mchip_mmregs + MCHIP_HIC_STATUS);
443 "meye: mchip_sync() timeout on reg 0x%x status=0x%x\n",
451 writel(v, meye.mchip_mmregs + reg);
458 return readl(meye.mchip_mmregs + reg);
473 mchip_set(MCHIP_MCC_R_SAMPLING, meye.params.subsample);
484 mchip_set(MCHIP_HIC_S_RATE, meye.params.framerate);
497 writel(tables[i], meye.mchip_mmregs + MCHIP_VRJ_TABLE_DATA);
499 tables = jpeg_quantisation_tables(&length, meye.params.quality);
501 writel(tables[i], meye.mchip_mmregs + MCHIP_VRJ_TABLE_DATA);
536 meye.mchip_fnum = 0;
542 if (!meye.mchip_dmahandle)
551 if (meye.mchip_dmahandle) {
563 meye.mchip_mode = MCHIP_HIC_MODE_NOOP;
575 printk(KERN_ERR "meye: need to reset HIC!\n");
580 printk(KERN_ERR "meye: resetting HIC hanged!\n");
592 v = mchip_read(MCHIP_MM_FIR(meye.mchip_fnum));
599 mchip_set(MCHIP_MM_FIR(meye.mchip_fnum), 0);
600 meye.mchip_fnum++;
601 meye.mchip_fnum %= 4;
633 printk(KERN_WARNING "meye: oversized compressed frame %d\n",
667 mchip_dma_setup(meye.mchip_dmahandle);
712 mchip_dma_setup(meye.mchip_dmahandle);
714 meye.mchip_mode = MCHIP_HIC_MODE_CONT_OUT;
775 mchip_dma_setup(meye.mchip_dmahandle);
777 meye.mchip_mode = MCHIP_HIC_MODE_CONT_COMP;
797 if (meye.mchip_mode != MCHIP_HIC_MODE_CONT_OUT &&
798 meye.mchip_mode != MCHIP_HIC_MODE_CONT_COMP)
806 if (meye.mchip_mode == MCHIP_HIC_MODE_CONT_OUT) {
807 if (kfifo_out_locked(&meye.grabq, (unsigned char *)&reqnr,
808 sizeof(int), &meye.grabq_lock) != sizeof(int)) {
812 mchip_cont_read_frame(v, meye.grab_fbuffer + gbufsize * reqnr,
814 meye.grab_buffer[reqnr].size = mchip_hsize() * mchip_vsize() * 2;
815 meye.grab_buffer[reqnr].state = MEYE_BUF_DONE;
816 v4l2_get_timestamp(&meye.grab_buffer[reqnr].timestamp);
817 meye.grab_buffer[reqnr].sequence = sequence++;
818 kfifo_in_locked(&meye.doneq, (unsigned char *)&reqnr,
819 sizeof(int), &meye.doneq_lock);
820 wake_up_interruptible(&meye.proc_list);
823 size = mchip_comp_read_frame(v, meye.grab_temp, gbufsize);
828 if (kfifo_out_locked(&meye.grabq, (unsigned char *)&reqnr,
829 sizeof(int), &meye.grabq_lock) != sizeof(int)) {
833 memcpy(meye.grab_fbuffer + gbufsize * reqnr, meye.grab_temp,
835 meye.grab_buffer[reqnr].size = size;
836 meye.grab_buffer[reqnr].state = MEYE_BUF_DONE;
837 v4l2_get_timestamp(&meye.grab_buffer[reqnr].timestamp);
838 meye.grab_buffer[reqnr].sequence = sequence++;
839 kfifo_in_locked(&meye.doneq, (unsigned char *)&reqnr,
840 sizeof(int), &meye.doneq_lock);
841 wake_up_interruptible(&meye.proc_list);
855 if (test_and_set_bit(0, &meye.in_use))
861 printk(KERN_ERR "meye: mchip framebuffer allocation failed\n");
862 clear_bit(0, &meye.in_use);
867 meye.grab_buffer[i].state = MEYE_BUF_UNUSED;
868 kfifo_reset(&meye.grabq);
869 kfifo_reset(&meye.doneq);
877 clear_bit(0, &meye.in_use);
883 *p = meye.params;
901 mutex_lock(&meye.lock);
903 if (meye.params.subsample != jp->subsample ||
904 meye.params.quality != jp->quality)
907 meye.params = *jp;
909 meye.params.sharpness);
911 meye.params.agc);
913 meye.params.picture);
914 mutex_unlock(&meye.lock);
921 if (!meye.grab_fbuffer)
933 if (meye.grab_buffer[*nb].state != MEYE_BUF_UNUSED)
936 mutex_lock(&meye.lock);
938 if (meye.mchip_mode != MCHIP_HIC_MODE_CONT_COMP)
941 meye.grab_buffer[*nb].state = MEYE_BUF_USING;
942 kfifo_in_locked(&meye.grabq, (unsigned char *)nb, sizeof(int),
943 &meye.grabq_lock);
944 mutex_unlock(&meye.lock);
956 mutex_lock(&meye.lock);
957 switch (meye.grab_buffer[*i].state) {
960 mutex_unlock(&meye.lock);
964 mutex_unlock(&meye.lock);
967 if (wait_event_interruptible(meye.proc_list,
968 (meye.grab_buffer[*i].state != MEYE_BUF_USING))) {
969 mutex_unlock(&meye.lock);
974 meye.grab_buffer[*i].state = MEYE_BUF_UNUSED;
975 if (kfifo_out_locked(&meye.doneq, (unsigned char *)&unused,
976 sizeof(int), &meye.doneq_lock) != sizeof(int))
979 *i = meye.grab_buffer[*i].size;
980 mutex_unlock(&meye.lock);
986 if (!meye.grab_fbuffer)
989 if (meye.grab_buffer[0].state != MEYE_BUF_UNUSED)
992 mutex_lock(&meye.lock);
993 meye.grab_buffer[0].state = MEYE_BUF_USING;
996 mchip_get_picture(meye.grab_fbuffer,
999 meye.grab_buffer[0].state = MEYE_BUF_DONE;
1000 mutex_unlock(&meye.lock);
1007 if (!meye.grab_fbuffer)
1010 if (meye.grab_buffer[0].state != MEYE_BUF_UNUSED)
1013 mutex_lock(&meye.lock);
1014 meye.grab_buffer[0].state = MEYE_BUF_USING;
1019 *len = mchip_compress_frame(meye.grab_fbuffer, gbufsize);
1022 meye.grab_buffer[0].state = MEYE_BUF_DONE;
1023 mutex_unlock(&meye.lock);
1030 strcpy(cap->driver, "meye");
1031 strcpy(cap->card, "meye");
1032 sprintf(cap->bus_info, "PCI:%s", pci_name(meye.mchip_dev));
1071 mutex_lock(&meye.lock);
1076 meye.brightness = ctrl->val << 10;
1081 meye.hue = ctrl->val << 10;
1086 meye.contrast = ctrl->val << 10;
1091 meye.colour = ctrl->val << 10;
1096 meye.params.agc = ctrl->val;
1101 meye.params.sharpness = ctrl->val;
1106 meye.params.picture = ctrl->val;
1109 meye.params.quality = ctrl->val;
1112 meye.params.framerate = ctrl->val;
1115 mutex_unlock(&meye.lock);
1118 mutex_unlock(&meye.lock);
1176 switch (meye.mchip_mode) {
1208 mutex_lock(&meye.lock);
1213 meye.params.subsample = 1;
1217 meye.params.subsample = 0;
1222 meye.mchip_mode = MCHIP_HIC_MODE_CONT_OUT;
1225 meye.mchip_mode = MCHIP_HIC_MODE_CONT_COMP;
1229 mutex_unlock(&meye.lock);
1246 if (meye.grab_fbuffer && req->count == gbuffers) {
1251 mutex_lock(&meye.lock);
1252 if (meye.grab_fbuffer) {
1254 if (meye.vma_use_count[i]) {
1255 mutex_unlock(&meye.lock);
1258 rvfree(meye.grab_fbuffer, gbuffers * gbufsize);
1259 meye.grab_fbuffer = NULL;
1264 meye.grab_fbuffer = rvmalloc(gbuffers * gbufsize);
1266 if (!meye.grab_fbuffer) {
1267 printk(KERN_ERR "meye: v4l framebuffer allocation"
1269 mutex_unlock(&meye.lock);
1274 meye.vma_use_count[i] = 0;
1276 mutex_unlock(&meye.lock);
1288 buf->bytesused = meye.grab_buffer[index].size;
1291 if (meye.grab_buffer[index].state == MEYE_BUF_USING)
1294 if (meye.grab_buffer[index].state == MEYE_BUF_DONE)
1298 buf->timestamp = meye.grab_buffer[index].timestamp;
1299 buf->sequence = meye.grab_buffer[index].sequence;
1315 if (meye.grab_buffer[buf->index].state != MEYE_BUF_UNUSED)
1318 mutex_lock(&meye.lock);
1321 meye.grab_buffer[buf->index].state = MEYE_BUF_USING;
1322 kfifo_in_locked(&meye.grabq, (unsigned char *)&buf->index,
1323 sizeof(int), &meye.grabq_lock);
1324 mutex_unlock(&meye.lock);
1336 mutex_lock(&meye.lock);
1338 if (kfifo_len(&meye.doneq) == 0 && file->f_flags & O_NONBLOCK) {
1339 mutex_unlock(&meye.lock);
1343 if (wait_event_interruptible(meye.proc_list,
1344 kfifo_len(&meye.doneq) != 0) < 0) {
1345 mutex_unlock(&meye.lock);
1349 if (!kfifo_out_locked(&meye.doneq, (unsigned char *)&reqnr,
1350 sizeof(int), &meye.doneq_lock)) {
1351 mutex_unlock(&meye.lock);
1355 if (meye.grab_buffer[reqnr].state != MEYE_BUF_DONE) {
1356 mutex_unlock(&meye.lock);
1361 buf->bytesused = meye.grab_buffer[reqnr].size;
1364 buf->timestamp = meye.grab_buffer[reqnr].timestamp;
1365 buf->sequence = meye.grab_buffer[reqnr].sequence;
1369 meye.grab_buffer[reqnr].state = MEYE_BUF_UNUSED;
1370 mutex_unlock(&meye.lock);
1377 mutex_lock(&meye.lock);
1379 switch (meye.mchip_mode) {
1387 mutex_unlock(&meye.lock);
1391 mutex_unlock(&meye.lock);
1398 mutex_lock(&meye.lock);
1400 kfifo_reset(&meye.grabq);
1401 kfifo_reset(&meye.doneq);
1404 meye.grab_buffer[i].state = MEYE_BUF_UNUSED;
1406 mutex_unlock(&meye.lock);
1442 mutex_lock(&meye.lock);
1443 poll_wait(file, &meye.proc_list, wait);
1444 if (kfifo_len(&meye.doneq))
1446 mutex_unlock(&meye.lock);
1453 meye.vma_use_count[idx]++;
1459 meye.vma_use_count[idx]--;
1474 mutex_lock(&meye.lock);
1476 mutex_unlock(&meye.lock);
1479 if (!meye.grab_fbuffer) {
1483 meye.grab_fbuffer = rvmalloc(gbuffers*gbufsize);
1484 if (!meye.grab_fbuffer) {
1485 printk(KERN_ERR "meye: v4l framebuffer allocation failed\n");
1486 mutex_unlock(&meye.lock);
1490 meye.vma_use_count[i] = 0;
1492 pos = (unsigned long)meye.grab_fbuffer + offset;
1497 mutex_unlock(&meye.lock);
1514 mutex_unlock(&meye.lock);
1549 .name = "meye",
1563 meye.pm_mchip_mode = meye.mchip_mode;
1572 pci_write_config_word(meye.mchip_dev, MCHIP_PCI_SOFTRESET_SET, 1);
1583 switch (meye.pm_mchip_mode) {
1623 struct v4l2_device *v4l2_dev = &meye.v4l2_dev;
1627 if (meye.mchip_dev != NULL) {
1628 printk(KERN_ERR "meye: only one device allowed!\n");
1638 meye.mchip_dev = pcidev;
1639 meye.vdev = video_device_alloc();
1640 if (!meye.vdev) {
1645 meye.grab_temp = vmalloc(MCHIP_NB_PAGES_MJPEG * PAGE_SIZE);
1646 if (!meye.grab_temp) {
1651 spin_lock_init(&meye.grabq_lock);
1652 if (kfifo_alloc(&meye.grabq, sizeof(int) * MEYE_MAX_BUFNBRS,
1657 spin_lock_init(&meye.doneq_lock);
1658 if (kfifo_alloc(&meye.doneq, sizeof(int) * MEYE_MAX_BUFNBRS,
1664 memcpy(meye.vdev, &meye_template, sizeof(meye_template));
1665 meye.vdev->v4l2_dev = &meye.v4l2_dev;
1669 v4l2_err(v4l2_dev, "meye: unable to power on the camera\n");
1670 v4l2_err(v4l2_dev, "meye: did you enable the camera in "
1675 if ((ret = pci_enable_device(meye.mchip_dev))) {
1676 v4l2_err(v4l2_dev, "meye: pci_enable_device failed\n");
1680 mchip_adr = pci_resource_start(meye.mchip_dev,0);
1682 v4l2_err(v4l2_dev, "meye: mchip has no device base address\n");
1685 if (!request_mem_region(pci_resource_start(meye.mchip_dev, 0),
1686 pci_resource_len(meye.mchip_dev, 0),
1687 "meye")) {
1688 v4l2_err(v4l2_dev, "meye: request_mem_region failed\n");
1691 meye.mchip_mmregs = ioremap(mchip_adr, MCHIP_MM_REGS);
1692 if (!meye.mchip_mmregs) {
1693 v4l2_err(v4l2_dev, "meye: ioremap failed\n");
1697 meye.mchip_irq = pcidev->irq;
1698 if (request_irq(meye.mchip_irq, meye_irq,
1699 IRQF_SHARED, "meye", meye_irq)) {
1704 pci_write_config_byte(meye.mchip_dev, PCI_CACHE_LINE_SIZE, 8);
1705 pci_write_config_byte(meye.mchip_dev, PCI_LATENCY_TIMER, 64);
1707 pci_set_master(meye.mchip_dev);
1710 pci_write_config_word(meye.mchip_dev, MCHIP_PCI_SOFTRESET_SET, 1);
1724 mutex_init(&meye.lock);
1725 init_waitqueue_head(&meye.proc_list);
1727 v4l2_ctrl_handler_init(&meye.hdl, 3);
1728 v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops,
1730 v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops,
1732 v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops,
1734 v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops,
1736 v4l2_ctrl_new_custom(&meye.hdl, &ctrl_agc, NULL);
1737 v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops,
1739 v4l2_ctrl_new_custom(&meye.hdl, &ctrl_picture, NULL);
1740 v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops,
1742 v4l2_ctrl_new_custom(&meye.hdl, &ctrl_framerate, NULL);
1743 if (meye.hdl.error) {
1748 v4l2_ctrl_handler_setup(&meye.hdl);
1749 meye.vdev->ctrl_handler = &meye.hdl;
1751 if (video_register_device(meye.vdev, VFL_TYPE_GRABBER,
1760 meye.mchip_dev->revision, mchip_adr, meye.mchip_irq);
1765 v4l2_ctrl_handler_free(&meye.hdl);
1766 free_irq(meye.mchip_irq, meye_irq);
1768 iounmap(meye.mchip_mmregs);
1770 release_mem_region(pci_resource_start(meye.mchip_dev, 0),
1771 pci_resource_len(meye.mchip_dev, 0));
1773 pci_disable_device(meye.mchip_dev);
1777 kfifo_free(&meye.doneq);
1779 kfifo_free(&meye.grabq);
1781 vfree(meye.grab_temp);
1783 video_device_release(meye.vdev);
1790 video_unregister_device(meye.vdev);
1799 free_irq(meye.mchip_irq, meye_irq);
1801 iounmap(meye.mchip_mmregs);
1803 release_mem_region(pci_resource_start(meye.mchip_dev, 0),
1804 pci_resource_len(meye.mchip_dev, 0));
1806 pci_disable_device(meye.mchip_dev);
1810 kfifo_free(&meye.doneq);
1811 kfifo_free(&meye.grabq);
1813 vfree(meye.grab_temp);
1815 if (meye.grab_fbuffer) {
1816 rvfree(meye.grab_fbuffer, gbuffers*gbufsize);
1817 meye.grab_fbuffer = NULL;
1820 printk(KERN_INFO "meye: removed\n");
1831 .name = "meye",
1847 printk(KERN_INFO "meye: using %d buffers with %dk (%dk total) "