• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/drivers/staging/dream/camera/

Lines Matching refs:sync

64 #define MSM_DRAIN_QUEUE_NOSYNC(sync, name) do {			\
67 while (!list_empty(&(sync)->name)) { \
68 qcmd = list_first_entry(&(sync)->name, \
75 #define MSM_DRAIN_QUEUE(sync, name) do { \
77 spin_lock_irqsave(&(sync)->name##_lock, flags); \
78 MSM_DRAIN_QUEUE_NOSYNC(sync, name); \
79 spin_unlock_irqrestore(&(sync)->name##_lock, flags); \
177 static unsigned long msm_pmem_frame_ptov_lookup(struct msm_sync *sync,
185 hlist_for_each_entry_safe(region, node, n, &sync->frame, list) {
204 static unsigned long msm_pmem_stats_ptov_lookup(struct msm_sync *sync,
210 hlist_for_each_entry_safe(region, node, n, &sync->stats, list) {
223 static unsigned long msm_pmem_frame_vtop_lookup(struct msm_sync *sync,
231 node, n, &sync->frame, list) {
247 struct msm_sync *sync,
254 hlist_for_each_entry_safe(region, node, n, &sync->stats, list) {
265 static int __msm_pmem_table_del(struct msm_sync *sync,
279 &sync->frame, list) {
294 &sync->stats, list) {
314 static int msm_pmem_table_del(struct msm_sync *sync, void __user *arg)
323 return __msm_pmem_table_del(sync, &info);
326 static int __msm_get_frame(struct msm_sync *sync,
335 spin_lock_irqsave(&sync->prev_frame_q_lock, flags);
336 if (!list_empty(&sync->prev_frame_q)) {
337 qcmd = list_first_entry(&sync->prev_frame_q,
341 spin_unlock_irqrestore(&sync->prev_frame_q_lock, flags);
351 msm_pmem_frame_ptov_lookup(sync,
372 static int msm_get_frame(struct msm_sync *sync, void __user *arg)
384 rc = __msm_get_frame(sync, &frame);
388 if (sync->croplen) {
389 if (frame.croplen > sync->croplen) {
396 sync->cropinfo,
397 sync->croplen)) {
414 static int msm_enable_vfe(struct msm_sync *sync, void __user *arg)
426 if (sync->vfefn.vfe_enable)
427 rc = sync->vfefn.vfe_enable(&cfg);
433 static int msm_disable_vfe(struct msm_sync *sync, void __user *arg)
445 if (sync->vfefn.vfe_disable)
446 rc = sync->vfefn.vfe_disable(&cfg, NULL);
452 static struct msm_queue_cmd *__msm_control(struct msm_sync *sync,
460 spin_lock_irqsave(&sync->msg_event_q_lock, flags);
461 list_add_tail(&qcmd->list, &sync->msg_event_q);
463 wake_up(&sync->msg_event_wait);
464 spin_unlock_irqrestore(&sync->msg_event_q_lock, flags);
500 struct msm_sync *sync = ctrl_pmsm->pmsm->sync;
535 qcmd = __msm_control(sync, NULL, qcmd, 0);
539 qcmd_temp = __msm_control(sync,
583 static int msm_get_stats(struct msm_sync *sync, void __user *arg)
606 sync->msg_event_wait,
607 !list_empty_careful(&sync->msg_event_q),
609 if (list_empty_careful(&sync->msg_event_q)) {
619 spin_lock_irqsave(&sync->msg_event_q_lock, flags);
620 BUG_ON(list_empty(&sync->msg_event_q));
621 qcmd = list_first_entry(&sync->msg_event_q,
624 spin_unlock_irqrestore(&sync->msg_event_q_lock, flags);
649 msm_pmem_stats_ptov_lookup(sync,
682 } else if (data->type == VFE_MSG_SNAPSHOT && sync->pict_pp) {
685 buf.fmnum = msm_pmem_region_lookup(&sync->frame,
694 buf.fmnum = msm_pmem_region_lookup(&sync->frame,
836 static int msm_config_vfe(struct msm_sync *sync, void __user *arg)
854 msm_pmem_region_lookup(&sync->stats,
866 msm_pmem_region_lookup(&sync->stats,
886 if (sync->vfefn.vfe_config)
887 rc = sync->vfefn.vfe_config(&cfgcmd, data);
892 static int msm_frame_axi_cfg(struct msm_sync *sync,
907 msm_pmem_region_lookup(&sync->frame, pmem_type,
918 msm_pmem_region_lookup(&sync->frame, pmem_type,
929 msm_pmem_region_lookup(&sync->frame, pmem_type,
938 msm_pmem_region_lookup(&sync->frame, pmem_type,
949 msm_pmem_region_lookup(&sync->frame, pmem_type,
970 if (sync->vfefn.vfe_config)
971 rc = sync->vfefn.vfe_config(cfgcmd, data);
976 static int msm_get_sensor_info(struct msm_sync *sync, void __user *arg)
989 sdata = sync->pdev->dev.platform_data;
1008 static int __msm_put_frame_buf(struct msm_sync *sync,
1016 pphy = msm_pmem_frame_vtop_lookup(sync,
1025 if (sync->vfefn.vfe_config)
1026 rc = sync->vfefn.vfe_config(&cfgcmd, &pphy);
1036 static int msm_put_frame_buffer(struct msm_sync *sync, void __user *arg)
1047 return __msm_put_frame_buf(sync, &buf_t);
1050 static int __msm_register_pmem(struct msm_sync *sync,
1061 rc = msm_pmem_table_add(&sync->frame, pinfo);
1066 rc = msm_pmem_table_add(&sync->stats, pinfo);
1077 static int msm_register_pmem(struct msm_sync *sync, void __user *arg)
1086 return __msm_register_pmem(sync, &info);
1089 static int msm_stats_axi_cfg(struct msm_sync *sync,
1119 msm_pmem_region_lookup(&sync->stats, pmem_type,
1129 if (sync->vfefn.vfe_config)
1130 rc = sync->vfefn.vfe_config(cfgcmd, &axi_data);
1135 static int msm_put_stats_buffer(struct msm_sync *sync, void __user *arg)
1150 pphy = msm_pmem_stats_vtop_lookup(sync, buf.buffer, buf.fd);
1167 if (sync->vfefn.vfe_config) {
1168 rc = sync->vfefn.vfe_config(&cfgcmd, &pphy);
1183 static int msm_axi_config(struct msm_sync *sync, void __user *arg)
1197 return msm_frame_axi_cfg(sync, &cfgcmd);
1201 return msm_stats_axi_cfg(sync, &cfgcmd);
1213 static int __msm_get_pic(struct msm_sync *sync, struct msm_ctrl_cmd *ctrl)
1224 sync->pict_frame_wait,
1225 !list_empty_careful(&sync->pict_frame_q),
1227 if (list_empty_careful(&sync->pict_frame_q)) {
1236 spin_lock_irqsave(&sync->pict_frame_q_lock, flags);
1237 BUG_ON(list_empty(&sync->pict_frame_q));
1238 qcmd = list_first_entry(&sync->pict_frame_q,
1241 spin_unlock_irqrestore(&sync->pict_frame_q_lock, flags);
1257 static int msm_get_pic(struct msm_sync *sync, void __user *arg)
1269 rc = __msm_get_pic(sync, &ctrlcmd_t);
1273 if (sync->croplen) {
1274 if (ctrlcmd_t.length < sync->croplen) {
1280 sync->cropinfo,
1281 sync->croplen)) {
1296 static int msm_set_crop(struct msm_sync *sync, void __user *arg)
1307 if (!sync->croplen) {
1308 sync->cropinfo = kmalloc(crop.len, GFP_KERNEL);
1309 if (!sync->cropinfo)
1311 } else if (sync->croplen < crop.len)
1314 if (copy_from_user(sync->cropinfo,
1318 kfree(sync->cropinfo);
1322 sync->croplen = crop.len;
1327 static int msm_pict_pp_done(struct msm_sync *sync, void __user *arg)
1335 if (!sync->pict_pp)
1358 spin_lock_irqsave(&sync->pict_frame_q_lock, flags);
1359 list_add_tail(&qcmd->list, &sync->pict_frame_q);
1360 spin_unlock_irqrestore(&sync->pict_frame_q_lock, flags);
1361 wake_up(&sync->pict_frame_wait);
1374 return msm_register_pmem(pmsm->sync, argp);
1376 return msm_pmem_table_del(pmsm->sync, argp);
1393 rc = msm_get_sensor_info(pmsm->sync, argp);
1398 rc = msm_config_vfe(pmsm->sync, argp);
1404 rc = msm_get_stats(pmsm->sync, argp);
1410 rc = msm_enable_vfe(pmsm->sync, argp);
1416 rc = msm_disable_vfe(pmsm->sync, argp);
1425 rc = msm_put_stats_buffer(pmsm->sync, argp);
1429 rc = msm_axi_config(pmsm->sync, argp);
1433 rc = msm_set_crop(pmsm->sync, argp);
1442 pmsm->sync->pict_pp = enable;
1449 rc = msm_pict_pp_done(pmsm->sync, argp);
1453 rc = pmsm->sync->sctrl.s_config(argp);
1489 rc = msm_get_frame(pmsm->sync, argp);
1492 rc = msm_put_frame_buffer(pmsm->sync, argp);
1495 rc = msm_unblock_poll_frame(pmsm->sync);
1530 rc = msm_get_pic(pmsm->sync, argp);
1540 static int __msm_release(struct msm_sync *sync)
1546 mutex_lock(&sync->lock);
1547 if (sync->opencnt)
1548 sync->opencnt--;
1550 if (!sync->opencnt) {
1552 if (sync->vfefn.vfe_release)
1553 sync->vfefn.vfe_release(sync->pdev);
1555 if (sync->cropinfo) {
1556 kfree(sync->cropinfo);
1557 sync->cropinfo = NULL;
1558 sync->croplen = 0;
1562 &sync->frame, list) {
1569 &sync->stats, list) {
1575 MSM_DRAIN_QUEUE(sync, msg_event_q);
1576 MSM_DRAIN_QUEUE(sync, prev_frame_q);
1577 MSM_DRAIN_QUEUE(sync, pict_frame_q);
1579 sync->sctrl.s_release();
1581 sync->apps_id = NULL;
1584 mutex_unlock(&sync->lock);
1594 rc = __msm_release(pmsm->sync);
1606 rc = __msm_release(pmsm->sync);
1609 MSM_DRAIN_QUEUE(pmsm->sync, pict_frame_q);
1621 rc = __msm_release(pmsm->sync);
1623 MSM_DRAIN_QUEUE(pmsm->sync, prev_frame_q);
1629 static int msm_unblock_poll_frame(struct msm_sync *sync)
1633 spin_lock_irqsave(&sync->prev_frame_q_lock, flags);
1634 sync->unblock_poll_frame = 1;
1635 wake_up(&sync->prev_frame_wait);
1636 spin_unlock_irqrestore(&sync->prev_frame_q_lock, flags);
1640 static unsigned int __msm_poll_frame(struct msm_sync *sync,
1647 poll_wait(filep, &sync->prev_frame_wait, pll_table);
1649 spin_lock_irqsave(&sync->prev_frame_q_lock, flags);
1650 if (!list_empty_careful(&sync->prev_frame_q))
1653 if (sync->unblock_poll_frame) {
1654 CDBG("%s: sync->unblock_poll_frame is true\n", __func__);
1656 sync->unblock_poll_frame = 0;
1658 spin_unlock_irqrestore(&sync->prev_frame_q_lock, flags);
1667 return __msm_poll_frame(pmsm->sync, filep, pll_table);
1694 struct msm_sync *sync = (struct msm_sync *)syncdata;
1695 if (!sync) {
1722 spin_lock_irqsave(&sync->prev_frame_q_lock, flags);
1723 list_add_tail(&qcmd_frame->list, &sync->prev_frame_q);
1724 wake_up(&sync->prev_frame_wait);
1725 spin_unlock_irqrestore(&sync->prev_frame_q_lock, flags);
1729 if (sync->pict_pp)
1732 CDBG("snapshot pp = %d\n", sync->pict_pp);
1740 spin_lock_irqsave(&sync->pict_frame_q_lock,
1742 list_add_tail(&qcmd_frame->list, &sync->pict_frame_q);
1743 wake_up(&sync->pict_frame_wait);
1744 spin_unlock_irqrestore(&sync->pict_frame_q_lock, flags);
1757 spin_lock_irqsave(&sync->msg_event_q_lock, flags);
1758 list_add_tail(&qcmd->list, &sync->msg_event_q);
1759 wake_up(&sync->msg_event_wait);
1760 spin_unlock_irqrestore(&sync->msg_event_q_lock, flags);
1773 static int __msm_open(struct msm_sync *sync, const char *const apps_id)
1777 mutex_lock(&sync->lock);
1778 if (sync->apps_id && strcmp(sync->apps_id, apps_id)) {
1781 sync->sdata->sensor_name,
1782 sync->apps_id);
1787 sync->apps_id = apps_id;
1789 if (!sync->opencnt) {
1791 msm_camvfe_fn_init(&sync->vfefn, sync);
1792 if (sync->vfefn.vfe_init) {
1793 rc = sync->vfefn.vfe_init(&msm_vfe_s,
1794 sync->pdev);
1799 rc = sync->sctrl.s_init(sync->sdata);
1811 INIT_HLIST_HEAD(&sync->frame);
1812 INIT_HLIST_HEAD(&sync->stats);
1813 sync->unblock_poll_frame = 0;
1816 sync->opencnt++;
1819 mutex_unlock(&sync->lock);
1844 rc = __msm_open(pmsm->sync, MSM_APPS_ID_PROP);
1884 static int __msm_v4l2_control(struct msm_sync *sync,
1903 rcmd = __msm_control(sync, &FIXME, qcmd, out->timeout_ms);
1985 drv->sync = list_first_entry(&msm_sensors, struct msm_sync, list);
2001 drv->sync = NULL;
2006 static int msm_sync_init(struct msm_sync *sync,
2013 sync->sdata = pdev->dev.platform_data;
2015 spin_lock_init(&sync->msg_event_q_lock);
2016 INIT_LIST_HEAD(&sync->msg_event_q);
2017 init_waitqueue_head(&sync->msg_event_wait);
2019 spin_lock_init(&sync->prev_frame_q_lock);
2020 INIT_LIST_HEAD(&sync->prev_frame_q);
2021 init_waitqueue_head(&sync->prev_frame_wait);
2023 spin_lock_init(&sync->pict_frame_q_lock);
2024 INIT_LIST_HEAD(&sync->pict_frame_q);
2025 init_waitqueue_head(&sync->pict_frame_wait);
2030 rc = sensor_probe(sync->sdata, &sctrl);
2032 sync->pdev = pdev;
2033 sync->sctrl = sctrl;
2038 sync->sdata->sensor_name);
2042 sync->opencnt = 0;
2043 mutex_init(&sync->lock);
2044 CDBG("initialized %s\n", sync->sdata->sensor_name);
2048 static int msm_sync_destroy(struct msm_sync *sync)
2054 struct msm_sync *sync,
2092 pmsm[0].sync = sync;
2093 pmsm[1].sync = sync;
2094 pmsm[2].sync = sync;
2104 struct msm_sync *sync;
2137 sync = (struct msm_sync *)(pmsm + 3);
2139 rc = msm_sync_init(sync, dev, sensor_probe);
2146 rc = msm_device_init(pmsm, sync, camera_node);
2148 msm_sync_destroy(sync);
2154 list_add(&sync->list, &msm_sensors);