Lines Matching defs:meye

34 #include "meye.h"
35 #include <linux/meye.h>
58 static struct meye meye;
100 * NOTE: The meye device expects DMA addresses on 32 bits, we build
108 memset(meye.mchip_ptable, 0, sizeof(meye.mchip_ptable));
111 if (dma_set_mask(&meye.mchip_dev->dev, DMA_BIT_MASK(32)))
114 meye.mchip_ptable_toc = dma_alloc_coherent(&meye.mchip_dev->dev,
116 &meye.mchip_dmahandle,
118 if (!meye.mchip_ptable_toc) {
119 meye.mchip_dmahandle = 0;
123 pt = meye.mchip_ptable_toc;
126 meye.mchip_ptable[i] = dma_alloc_coherent(&meye.mchip_dev->dev,
130 if (!meye.mchip_ptable[i]) {
132 pt = meye.mchip_ptable_toc;
135 dma_free_coherent(&meye.mchip_dev->dev,
137 meye.mchip_ptable[j], dma);
140 dma_free_coherent(&meye.mchip_dev->dev,
142 meye.mchip_ptable_toc,
143 meye.mchip_dmahandle);
144 meye.mchip_ptable_toc = NULL;
145 meye.mchip_dmahandle = 0;
159 pt = meye.mchip_ptable_toc;
162 if (meye.mchip_ptable[i])
163 dma_free_coherent(&meye.mchip_dev->dev,
165 meye.mchip_ptable[i], dma);
169 if (meye.mchip_ptable_toc)
170 dma_free_coherent(&meye.mchip_dev->dev,
172 meye.mchip_ptable_toc,
173 meye.mchip_dmahandle);
175 memset(meye.mchip_ptable, 0, sizeof(meye.mchip_ptable));
176 meye.mchip_ptable_toc = NULL;
177 meye.mchip_dmahandle = 0;
186 memcpy(buf + i, meye.mchip_ptable[start++], PAGE_SIZE);
190 memcpy(buf + i, meye.mchip_ptable[start], size % PAGE_SIZE);
335 "meye: invalid quality level %d - using 8\n", quality);
390 return meye.params.subsample ? 320 : 640;
396 return meye.params.subsample ? 240 : 480;
407 status = readl(meye.mchip_mmregs +
410 printk(KERN_WARNING "meye: fifo not ready\n");
421 status = readl(meye.mchip_mmregs + MCHIP_HIC_STATUS);
429 "meye: mchip_sync() timeout on reg 0x%x status=0x%x\n",
437 writel(v, meye.mchip_mmregs + reg);
444 return readl(meye.mchip_mmregs + reg);
459 mchip_set(MCHIP_MCC_R_SAMPLING, meye.params.subsample);
470 mchip_set(MCHIP_HIC_S_RATE, meye.params.framerate);
483 writel(tables[i], meye.mchip_mmregs + MCHIP_VRJ_TABLE_DATA);
485 tables = jpeg_quantisation_tables(&length, meye.params.quality);
487 writel(tables[i], meye.mchip_mmregs + MCHIP_VRJ_TABLE_DATA);
522 meye.mchip_fnum = 0;
528 if (!meye.mchip_dmahandle)
537 if (meye.mchip_dmahandle) {
549 meye.mchip_mode = MCHIP_HIC_MODE_NOOP;
561 printk(KERN_ERR "meye: need to reset HIC!\n");
566 printk(KERN_ERR "meye: resetting HIC hanged!\n");
576 return mchip_read(MCHIP_MM_FIR(meye.mchip_fnum));
582 mchip_set(MCHIP_MM_FIR(meye.mchip_fnum), 0);
583 meye.mchip_fnum++;
584 meye.mchip_fnum %= 4;
616 printk(KERN_WARNING "meye: oversized compressed frame %d\n",
650 mchip_dma_setup(meye.mchip_dmahandle);
695 mchip_dma_setup(meye.mchip_dmahandle);
697 meye.mchip_mode = MCHIP_HIC_MODE_CONT_OUT;
758 mchip_dma_setup(meye.mchip_dmahandle);
760 meye.mchip_mode = MCHIP_HIC_MODE_CONT_COMP;
780 if (meye.mchip_mode != MCHIP_HIC_MODE_CONT_OUT &&
781 meye.mchip_mode != MCHIP_HIC_MODE_CONT_COMP)
789 if (meye.mchip_mode == MCHIP_HIC_MODE_CONT_OUT) {
790 if (kfifo_out_locked(&meye.grabq, (unsigned char *)&reqnr,
791 sizeof(int), &meye.grabq_lock) != sizeof(int)) {
795 mchip_cont_read_frame(v, meye.grab_fbuffer + gbufsize * reqnr,
797 meye.grab_buffer[reqnr].size = mchip_hsize() * mchip_vsize() * 2;
798 meye.grab_buffer[reqnr].state = MEYE_BUF_DONE;
799 meye.grab_buffer[reqnr].ts = ktime_get_ns();
800 meye.grab_buffer[reqnr].sequence = sequence++;
801 kfifo_in_locked(&meye.doneq, (unsigned char *)&reqnr,
802 sizeof(int), &meye.doneq_lock);
803 wake_up_interruptible(&meye.proc_list);
806 size = mchip_comp_read_frame(v, meye.grab_temp, gbufsize);
811 if (kfifo_out_locked(&meye.grabq, (unsigned char *)&reqnr,
812 sizeof(int), &meye.grabq_lock) != sizeof(int)) {
816 memcpy(meye.grab_fbuffer + gbufsize * reqnr, meye.grab_temp,
818 meye.grab_buffer[reqnr].size = size;
819 meye.grab_buffer[reqnr].state = MEYE_BUF_DONE;
820 meye.grab_buffer[reqnr].ts = ktime_get_ns();
821 meye.grab_buffer[reqnr].sequence = sequence++;
822 kfifo_in_locked(&meye.doneq, (unsigned char *)&reqnr,
823 sizeof(int), &meye.doneq_lock);
824 wake_up_interruptible(&meye.proc_list);
838 if (test_and_set_bit(0, &meye.in_use))
844 printk(KERN_ERR "meye: mchip framebuffer allocation failed\n");
845 clear_bit(0, &meye.in_use);
850 meye.grab_buffer[i].state = MEYE_BUF_UNUSED;
851 kfifo_reset(&meye.grabq);
852 kfifo_reset(&meye.doneq);
860 clear_bit(0, &meye.in_use);
866 *p = meye.params;
884 mutex_lock(&meye.lock);
886 if (meye.params.subsample != jp->subsample ||
887 meye.params.quality != jp->quality)
890 meye.params = *jp;
892 meye.params.sharpness);
894 meye.params.agc);
896 meye.params.picture);
897 mutex_unlock(&meye.lock);
904 if (!meye.grab_fbuffer)
916 if (meye.grab_buffer[*nb].state != MEYE_BUF_UNUSED)
919 mutex_lock(&meye.lock);
921 if (meye.mchip_mode != MCHIP_HIC_MODE_CONT_COMP)
924 meye.grab_buffer[*nb].state = MEYE_BUF_USING;
925 kfifo_in_locked(&meye.grabq, (unsigned char *)nb, sizeof(int),
926 &meye.grabq_lock);
927 mutex_unlock(&meye.lock);
939 mutex_lock(&meye.lock);
940 switch (meye.grab_buffer[*i].state) {
943 mutex_unlock(&meye.lock);
947 mutex_unlock(&meye.lock);
950 if (wait_event_interruptible(meye.proc_list,
951 (meye.grab_buffer[*i].state != MEYE_BUF_USING))) {
952 mutex_unlock(&meye.lock);
957 meye.grab_buffer[*i].state = MEYE_BUF_UNUSED;
958 if (kfifo_out_locked(&meye.doneq, (unsigned char *)&unused,
959 sizeof(int), &meye.doneq_lock) != sizeof(int))
962 *i = meye.grab_buffer[*i].size;
963 mutex_unlock(&meye.lock);
969 if (!meye.grab_fbuffer)
972 if (meye.grab_buffer[0].state != MEYE_BUF_UNUSED)
975 mutex_lock(&meye.lock);
976 meye.grab_buffer[0].state = MEYE_BUF_USING;
979 mchip_get_picture(meye.grab_fbuffer,
982 meye.grab_buffer[0].state = MEYE_BUF_DONE;
983 mutex_unlock(&meye.lock);
990 if (!meye.grab_fbuffer)
993 if (meye.grab_buffer[0].state != MEYE_BUF_UNUSED)
996 mutex_lock(&meye.lock);
997 meye.grab_buffer[0].state = MEYE_BUF_USING;
1002 *len = mchip_compress_frame(meye.grab_fbuffer, gbufsize);
1005 meye.grab_buffer[0].state = MEYE_BUF_DONE;
1006 mutex_unlock(&meye.lock);
1013 strscpy(cap->driver, "meye", sizeof(cap->driver));
1014 strscpy(cap->card, "meye", sizeof(cap->card));
1015 sprintf(cap->bus_info, "PCI:%s", pci_name(meye.mchip_dev));
1046 mutex_lock(&meye.lock);
1051 meye.brightness = ctrl->val << 10;
1056 meye.hue = ctrl->val << 10;
1061 meye.contrast = ctrl->val << 10;
1066 meye.colour = ctrl->val << 10;
1071 meye.params.agc = ctrl->val;
1076 meye.params.sharpness = ctrl->val;
1081 meye.params.picture = ctrl->val;
1084 meye.params.quality = ctrl->val;
1087 meye.params.framerate = ctrl->val;
1090 mutex_unlock(&meye.lock);
1093 mutex_unlock(&meye.lock);
1148 switch (meye.mchip_mode) {
1180 mutex_lock(&meye.lock);
1185 meye.params.subsample = 1;
1189 meye.params.subsample = 0;
1194 meye.mchip_mode = MCHIP_HIC_MODE_CONT_OUT;
1197 meye.mchip_mode = MCHIP_HIC_MODE_CONT_COMP;
1201 mutex_unlock(&meye.lock);
1218 if (meye.grab_fbuffer && req->count == gbuffers) {
1223 mutex_lock(&meye.lock);
1224 if (meye.grab_fbuffer) {
1226 if (meye.vma_use_count[i]) {
1227 mutex_unlock(&meye.lock);
1230 rvfree(meye.grab_fbuffer, gbuffers * gbufsize);
1231 meye.grab_fbuffer = NULL;
1236 meye.grab_fbuffer = rvmalloc(gbuffers * gbufsize);
1238 if (!meye.grab_fbuffer) {
1239 printk(KERN_ERR "meye: v4l framebuffer allocation failed\n");
1240 mutex_unlock(&meye.lock);
1245 meye.vma_use_count[i] = 0;
1247 mutex_unlock(&meye.lock);
1259 buf->bytesused = meye.grab_buffer[index].size;
1262 if (meye.grab_buffer[index].state == MEYE_BUF_USING)
1265 if (meye.grab_buffer[index].state == MEYE_BUF_DONE)
1269 v4l2_buffer_set_timestamp(buf, meye.grab_buffer[index].ts);
1270 buf->sequence = meye.grab_buffer[index].sequence;
1286 if (meye.grab_buffer[buf->index].state != MEYE_BUF_UNUSED)
1289 mutex_lock(&meye.lock);
1292 meye.grab_buffer[buf->index].state = MEYE_BUF_USING;
1293 kfifo_in_locked(&meye.grabq, (unsigned char *)&buf->index,
1294 sizeof(int), &meye.grabq_lock);
1295 mutex_unlock(&meye.lock);
1307 mutex_lock(&meye.lock);
1309 if (kfifo_len(&meye.doneq) == 0 && file->f_flags & O_NONBLOCK) {
1310 mutex_unlock(&meye.lock);
1314 if (wait_event_interruptible(meye.proc_list,
1315 kfifo_len(&meye.doneq) != 0) < 0) {
1316 mutex_unlock(&meye.lock);
1320 if (!kfifo_out_locked(&meye.doneq, (unsigned char *)&reqnr,
1321 sizeof(int), &meye.doneq_lock)) {
1322 mutex_unlock(&meye.lock);
1326 if (meye.grab_buffer[reqnr].state != MEYE_BUF_DONE) {
1327 mutex_unlock(&meye.lock);
1332 buf->bytesused = meye.grab_buffer[reqnr].size;
1335 v4l2_buffer_set_timestamp(buf, meye.grab_buffer[reqnr].ts);
1336 buf->sequence = meye.grab_buffer[reqnr].sequence;
1340 meye.grab_buffer[reqnr].state = MEYE_BUF_UNUSED;
1341 mutex_unlock(&meye.lock);
1348 mutex_lock(&meye.lock);
1350 switch (meye.mchip_mode) {
1358 mutex_unlock(&meye.lock);
1362 mutex_unlock(&meye.lock);
1369 mutex_lock(&meye.lock);
1371 kfifo_reset(&meye.grabq);
1372 kfifo_reset(&meye.doneq);
1375 meye.grab_buffer[i].state = MEYE_BUF_UNUSED;
1377 mutex_unlock(&meye.lock);
1413 mutex_lock(&meye.lock);
1414 poll_wait(file, &meye.proc_list, wait);
1415 if (kfifo_len(&meye.doneq))
1417 mutex_unlock(&meye.lock);
1424 meye.vma_use_count[idx]++;
1430 meye.vma_use_count[idx]--;
1445 mutex_lock(&meye.lock);
1447 mutex_unlock(&meye.lock);
1450 if (!meye.grab_fbuffer) {
1454 meye.grab_fbuffer = rvmalloc(gbuffers*gbufsize);
1455 if (!meye.grab_fbuffer) {
1456 printk(KERN_ERR "meye: v4l framebuffer allocation failed\n");
1457 mutex_unlock(&meye.lock);
1461 meye.vma_use_count[i] = 0;
1463 pos = (unsigned long)meye.grab_fbuffer + offset;
1468 mutex_unlock(&meye.lock);
1485 mutex_unlock(&meye.lock);
1520 .name = "meye",
1533 meye.pm_mchip_mode = meye.mchip_mode;
1541 pci_write_config_word(meye.mchip_dev, MCHIP_PCI_SOFTRESET_SET, 1);
1552 switch (meye.pm_mchip_mode) {
1591 struct v4l2_device *v4l2_dev = &meye.v4l2_dev;
1595 if (meye.mchip_dev != NULL) {
1596 printk(KERN_ERR "meye: only one device allowed!\n");
1606 meye.mchip_dev = pcidev;
1608 meye.grab_temp = vmalloc(array_size(PAGE_SIZE, MCHIP_NB_PAGES_MJPEG));
1609 if (!meye.grab_temp)
1612 spin_lock_init(&meye.grabq_lock);
1613 if (kfifo_alloc(&meye.grabq, sizeof(int) * MEYE_MAX_BUFNBRS,
1617 spin_lock_init(&meye.doneq_lock);
1618 if (kfifo_alloc(&meye.doneq, sizeof(int) * MEYE_MAX_BUFNBRS,
1622 meye.vdev = meye_template;
1623 meye.vdev.v4l2_dev = &meye.v4l2_dev;
1627 v4l2_err(v4l2_dev, "meye: unable to power on the camera\n");
1628 v4l2_err(v4l2_dev, "meye: did you enable the camera in sonypi using the module options ?\n");
1632 ret = pci_enable_device(meye.mchip_dev);
1634 v4l2_err(v4l2_dev, "meye: pci_enable_device failed\n");
1639 mchip_adr = pci_resource_start(meye.mchip_dev,0);
1641 v4l2_err(v4l2_dev, "meye: mchip has no device base address\n");
1644 if (!request_mem_region(pci_resource_start(meye.mchip_dev, 0),
1645 pci_resource_len(meye.mchip_dev, 0),
1646 "meye")) {
1647 v4l2_err(v4l2_dev, "meye: request_mem_region failed\n");
1650 meye.mchip_mmregs = ioremap(mchip_adr, MCHIP_MM_REGS);
1651 if (!meye.mchip_mmregs) {
1652 v4l2_err(v4l2_dev, "meye: ioremap failed\n");
1656 meye.mchip_irq = pcidev->irq;
1657 if (request_irq(meye.mchip_irq, meye_irq,
1658 IRQF_SHARED, "meye", meye_irq)) {
1663 pci_write_config_byte(meye.mchip_dev, PCI_CACHE_LINE_SIZE, 8);
1664 pci_write_config_byte(meye.mchip_dev, PCI_LATENCY_TIMER, 64);
1666 pci_set_master(meye.mchip_dev);
1669 pci_write_config_word(meye.mchip_dev, MCHIP_PCI_SOFTRESET_SET, 1);
1683 mutex_init(&meye.lock);
1684 init_waitqueue_head(&meye.proc_list);
1686 v4l2_ctrl_handler_init(&meye.hdl, 3);
1687 v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops,
1689 v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops,
1691 v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops,
1693 v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops,
1695 v4l2_ctrl_new_custom(&meye.hdl, &ctrl_agc, NULL);
1696 v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops,
1698 v4l2_ctrl_new_custom(&meye.hdl, &ctrl_picture, NULL);
1699 v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops,
1701 v4l2_ctrl_new_custom(&meye.hdl, &ctrl_framerate, NULL);
1702 if (meye.hdl.error) {
1707 v4l2_ctrl_handler_setup(&meye.hdl);
1708 meye.vdev.ctrl_handler = &meye.hdl;
1710 if (video_register_device(&meye.vdev, VFL_TYPE_VIDEO,
1719 meye.mchip_dev->revision, mchip_adr, meye.mchip_irq);
1724 v4l2_ctrl_handler_free(&meye.hdl);
1725 free_irq(meye.mchip_irq, meye_irq);
1727 iounmap(meye.mchip_mmregs);
1729 release_mem_region(pci_resource_start(meye.mchip_dev, 0),
1730 pci_resource_len(meye.mchip_dev, 0));
1732 pci_disable_device(meye.mchip_dev);
1736 kfifo_free(&meye.doneq);
1738 kfifo_free(&meye.grabq);
1740 vfree(meye.grab_temp);
1747 video_unregister_device(&meye.vdev);
1756 free_irq(meye.mchip_irq, meye_irq);
1758 iounmap(meye.mchip_mmregs);
1760 release_mem_region(pci_resource_start(meye.mchip_dev, 0),
1761 pci_resource_len(meye.mchip_dev, 0));
1763 pci_disable_device(meye.mchip_dev);
1767 kfifo_free(&meye.doneq);
1768 kfifo_free(&meye.grabq);
1770 vfree(meye.grab_temp);
1772 if (meye.grab_fbuffer) {
1773 rvfree(meye.grab_fbuffer, gbuffers*gbufsize);
1774 meye.grab_fbuffer = NULL;
1777 printk(KERN_INFO "meye: removed\n");
1790 .name = "meye",
1803 printk(KERN_INFO "meye: using %d buffers with %dk (%dk total) for capture\n",