Lines Matching refs:vpfe

192 __vpfe_get_format(struct vpfe_device *vpfe,
224 mbus_to_pix(struct vpfe_device *vpfe, in mbus_to_pix() argument
228 struct vpfe_subdev_info *sdinfo = vpfe->current_subdev; in mbus_to_pix()
249 static void pix_to_mbus(struct vpfe_device *vpfe, in pix_to_mbus() argument
258 vpfe_dbg(3, vpfe, "Invalid pixel code: %x, default used instead\n", in pix_to_mbus()
385 struct vpfe_device *vpfe = to_vpfe(ccdc); in vpfe_reg_dump() local
387 vpfe_dbg(3, vpfe, "ALAW: 0x%x\n", vpfe_reg_read(ccdc, VPFE_ALAW)); in vpfe_reg_dump()
388 vpfe_dbg(3, vpfe, "CLAMP: 0x%x\n", vpfe_reg_read(ccdc, VPFE_CLAMP)); in vpfe_reg_dump()
389 vpfe_dbg(3, vpfe, "DCSUB: 0x%x\n", vpfe_reg_read(ccdc, VPFE_DCSUB)); in vpfe_reg_dump()
390 vpfe_dbg(3, vpfe, "BLKCMP: 0x%x\n", vpfe_reg_read(ccdc, VPFE_BLKCMP)); in vpfe_reg_dump()
391 vpfe_dbg(3, vpfe, "COLPTN: 0x%x\n", vpfe_reg_read(ccdc, VPFE_COLPTN)); in vpfe_reg_dump()
392 vpfe_dbg(3, vpfe, "SDOFST: 0x%x\n", vpfe_reg_read(ccdc, VPFE_SDOFST)); in vpfe_reg_dump()
393 vpfe_dbg(3, vpfe, "SYN_MODE: 0x%x\n", in vpfe_reg_dump()
395 vpfe_dbg(3, vpfe, "HSIZE_OFF: 0x%x\n", in vpfe_reg_dump()
397 vpfe_dbg(3, vpfe, "HORZ_INFO: 0x%x\n", in vpfe_reg_dump()
399 vpfe_dbg(3, vpfe, "VERT_START: 0x%x\n", in vpfe_reg_dump()
401 vpfe_dbg(3, vpfe, "VERT_LINES: 0x%x\n", in vpfe_reg_dump()
409 struct vpfe_device *vpfe = to_vpfe(ccdc); in vpfe_ccdc_validate_param() local
421 vpfe_dbg(1, vpfe, "Invalid data line select\n"); in vpfe_ccdc_validate_param()
498 struct vpfe_device *vpfe = container_of(ccdc, struct vpfe_device, ccdc); in vpfe_ccdc_set_params() local
507 vpfe_dbg(1, vpfe, in vpfe_ccdc_set_params()
527 struct vpfe_device *vpfe = container_of(ccdc, struct vpfe_device, ccdc); in vpfe_ccdc_config_ycbcr() local
531 vpfe_dbg(3, vpfe, "vpfe_ccdc_config_ycbcr:\n"); in vpfe_ccdc_config_ycbcr()
656 struct vpfe_device *vpfe = container_of(ccdc, struct vpfe_device, ccdc); in vpfe_ccdc_config_raw() local
663 vpfe_dbg(3, vpfe, "vpfe_ccdc_config_raw:\n"); in vpfe_ccdc_config_raw()
693 vpfe_dbg(3, vpfe, "\nWriting 0x%x to ALAW...\n", val); in vpfe_ccdc_config_raw()
717 vpfe_dbg(3, vpfe, "Writing %d (%x) to HSIZE_OFF\n", in vpfe_ccdc_config_raw()
763 struct vpfe_device *vpfe = container_of(ccdc, struct vpfe_device, ccdc); in vpfe_ccdc_set_pixel_format() local
765 vpfe_dbg(1, vpfe, "vpfe_ccdc_set_pixel_format: if_type: %d, pixfmt:%s\n", in vpfe_ccdc_set_pixel_format()
895 struct vpfe_device *vpfe = container_of(ccdc, struct vpfe_device, ccdc); in vpfe_ccdc_set_hw_if_params() local
917 vpfe_dbg(1, vpfe, "params.bus_width: %d\n", in vpfe_ccdc_set_hw_if_params()
919 vpfe_dbg(1, vpfe, "config_params.data_sz: %d\n", in vpfe_ccdc_set_hw_if_params()
1010 static int vpfe_get_ccdc_image_format(struct vpfe_device *vpfe, in vpfe_get_ccdc_image_format() argument
1019 vpfe_ccdc_get_image_window(&vpfe->ccdc, &image_win); in vpfe_get_ccdc_image_format()
1022 f->fmt.pix.bytesperline = vpfe_ccdc_get_line_length(&vpfe->ccdc); in vpfe_get_ccdc_image_format()
1025 buf_type = vpfe_ccdc_get_buftype(&vpfe->ccdc); in vpfe_get_ccdc_image_format()
1026 f->fmt.pix.pixelformat = vpfe_ccdc_get_pixel_format(&vpfe->ccdc); in vpfe_get_ccdc_image_format()
1027 frm_fmt = vpfe_ccdc_get_frame_format(&vpfe->ccdc); in vpfe_get_ccdc_image_format()
1037 vpfe_err(vpfe, "Invalid buf_type\n"); in vpfe_get_ccdc_image_format()
1041 vpfe_err(vpfe, "Invalid frm_fmt\n"); in vpfe_get_ccdc_image_format()
1047 static int vpfe_config_ccdc_image_format(struct vpfe_device *vpfe) in vpfe_config_ccdc_image_format() argument
1052 vpfe_dbg(2, vpfe, "vpfe_config_ccdc_image_format\n"); in vpfe_config_ccdc_image_format()
1054 vpfe_dbg(1, vpfe, "pixelformat: %s\n", in vpfe_config_ccdc_image_format()
1055 print_fourcc(vpfe->fmt.fmt.pix.pixelformat)); in vpfe_config_ccdc_image_format()
1057 if (vpfe_ccdc_set_pixel_format(&vpfe->ccdc, in vpfe_config_ccdc_image_format()
1058 vpfe->fmt.fmt.pix.pixelformat) < 0) { in vpfe_config_ccdc_image_format()
1059 vpfe_err(vpfe, "couldn't set pix format in ccdc\n"); in vpfe_config_ccdc_image_format()
1064 vpfe_ccdc_set_image_window(&vpfe->ccdc, &vpfe->crop, vpfe->bpp); in vpfe_config_ccdc_image_format()
1066 switch (vpfe->fmt.fmt.pix.field) { in vpfe_config_ccdc_image_format()
1070 &vpfe->ccdc, in vpfe_config_ccdc_image_format()
1081 &vpfe->ccdc, in vpfe_config_ccdc_image_format()
1092 return vpfe_ccdc_set_frame_format(&vpfe->ccdc, frm_fmt); in vpfe_config_ccdc_image_format()
1105 static int vpfe_config_image_format(struct vpfe_device *vpfe, in vpfe_config_image_format() argument
1108 struct v4l2_pix_format *pix = &vpfe->fmt.fmt.pix; in vpfe_config_image_format()
1113 vpfe->std_info.active_pixels = in vpfe_config_image_format()
1115 vpfe->std_info.active_lines = in vpfe_config_image_format()
1117 vpfe->std_info.frame_format = in vpfe_config_image_format()
1119 vpfe->std_index = i; in vpfe_config_image_format()
1126 vpfe_err(vpfe, "standard not supported\n"); in vpfe_config_image_format()
1130 vpfe->crop.top = vpfe->crop.left = 0; in vpfe_config_image_format()
1131 vpfe->crop.width = vpfe->std_info.active_pixels; in vpfe_config_image_format()
1132 vpfe->crop.height = vpfe->std_info.active_lines; in vpfe_config_image_format()
1133 pix->width = vpfe->crop.width; in vpfe_config_image_format()
1134 pix->height = vpfe->crop.height; in vpfe_config_image_format()
1138 if (vpfe->std_info.frame_format) in vpfe_config_image_format()
1143 ret = __vpfe_get_format(vpfe, &vpfe->fmt, &vpfe->bpp); in vpfe_config_image_format()
1148 vpfe->crop.width = pix->width; in vpfe_config_image_format()
1149 vpfe->crop.height = pix->height; in vpfe_config_image_format()
1151 return vpfe_config_ccdc_image_format(vpfe); in vpfe_config_image_format()
1154 static int vpfe_initialize_device(struct vpfe_device *vpfe) in vpfe_initialize_device() argument
1159 sdinfo = &vpfe->cfg->sub_devs[0]; in vpfe_initialize_device()
1160 sdinfo->sd = vpfe->sd[0]; in vpfe_initialize_device()
1161 vpfe->current_input = 0; in vpfe_initialize_device()
1162 vpfe->std_index = 0; in vpfe_initialize_device()
1164 ret = vpfe_config_image_format(vpfe, in vpfe_initialize_device()
1165 vpfe_standards[vpfe->std_index].std_id); in vpfe_initialize_device()
1169 pm_runtime_get_sync(vpfe->pdev); in vpfe_initialize_device()
1171 vpfe_config_enable(&vpfe->ccdc, 1); in vpfe_initialize_device()
1173 vpfe_ccdc_restore_defaults(&vpfe->ccdc); in vpfe_initialize_device()
1176 vpfe_clear_intr(&vpfe->ccdc, -1); in vpfe_initialize_device()
1189 struct vpfe_device *vpfe = video_drvdata(file); in vpfe_release() local
1193 mutex_lock(&vpfe->lock); in vpfe_release()
1206 vpfe_ccdc_close(&vpfe->ccdc, vpfe->pdev); in vpfe_release()
1208 mutex_unlock(&vpfe->lock); in vpfe_release()
1220 struct vpfe_device *vpfe = video_drvdata(file); in vpfe_open() local
1223 mutex_lock(&vpfe->lock); in vpfe_open()
1227 vpfe_err(vpfe, "v4l2_fh_open failed\n"); in vpfe_open()
1234 if (vpfe_initialize_device(vpfe)) { in vpfe_open()
1240 mutex_unlock(&vpfe->lock); in vpfe_open()
1254 static inline void vpfe_schedule_next_buffer(struct vpfe_device *vpfe) in vpfe_schedule_next_buffer() argument
1256 vpfe->next_frm = list_entry(vpfe->dma_queue.next, in vpfe_schedule_next_buffer()
1258 list_del(&vpfe->next_frm->list); in vpfe_schedule_next_buffer()
1260 vpfe_set_sdr_addr(&vpfe->ccdc, in vpfe_schedule_next_buffer()
1261 vb2_dma_contig_plane_dma_addr(&vpfe->next_frm->vb.vb2_buf, 0)); in vpfe_schedule_next_buffer()
1264 static inline void vpfe_schedule_bottom_field(struct vpfe_device *vpfe) in vpfe_schedule_bottom_field() argument
1268 addr = vb2_dma_contig_plane_dma_addr(&vpfe->next_frm->vb.vb2_buf, 0) + in vpfe_schedule_bottom_field()
1269 vpfe->field_off; in vpfe_schedule_bottom_field()
1271 vpfe_set_sdr_addr(&vpfe->ccdc, addr); in vpfe_schedule_bottom_field()
1282 static inline void vpfe_process_buffer_complete(struct vpfe_device *vpfe) in vpfe_process_buffer_complete() argument
1284 v4l2_get_timestamp(&vpfe->cur_frm->vb.timestamp); in vpfe_process_buffer_complete()
1285 vpfe->cur_frm->vb.field = vpfe->fmt.fmt.pix.field; in vpfe_process_buffer_complete()
1286 vpfe->cur_frm->vb.sequence = vpfe->sequence++; in vpfe_process_buffer_complete()
1287 vb2_buffer_done(&vpfe->cur_frm->vb.vb2_buf, VB2_BUF_STATE_DONE); in vpfe_process_buffer_complete()
1288 vpfe->cur_frm = vpfe->next_frm; in vpfe_process_buffer_complete()
1301 struct vpfe_device *vpfe = (struct vpfe_device *)dev; in vpfe_isr() local
1306 intr_status = vpfe_reg_read(&vpfe->ccdc, VPFE_IRQ_STS); in vpfe_isr()
1309 field = vpfe->fmt.fmt.pix.field; in vpfe_isr()
1313 if (vpfe->cur_frm != vpfe->next_frm) in vpfe_isr()
1314 vpfe_process_buffer_complete(vpfe); in vpfe_isr()
1320 fid = vpfe_ccdc_getfid(&vpfe->ccdc); in vpfe_isr()
1323 vpfe->field ^= 1; in vpfe_isr()
1324 if (fid == vpfe->field) { in vpfe_isr()
1332 if (vpfe->cur_frm != vpfe->next_frm) in vpfe_isr()
1333 vpfe_process_buffer_complete(vpfe); in vpfe_isr()
1340 vpfe_schedule_bottom_field(vpfe); in vpfe_isr()
1350 spin_lock(&vpfe->dma_queue_lock); in vpfe_isr()
1351 if (!list_empty(&vpfe->dma_queue) && in vpfe_isr()
1352 vpfe->cur_frm == vpfe->next_frm) in vpfe_isr()
1353 vpfe_schedule_next_buffer(vpfe); in vpfe_isr()
1354 spin_unlock(&vpfe->dma_queue_lock); in vpfe_isr()
1360 vpfe->field = fid; in vpfe_isr()
1366 spin_lock(&vpfe->dma_queue_lock); in vpfe_isr()
1367 if (vpfe->fmt.fmt.pix.field == V4L2_FIELD_NONE && in vpfe_isr()
1368 !list_empty(&vpfe->dma_queue) && in vpfe_isr()
1369 vpfe->cur_frm == vpfe->next_frm) in vpfe_isr()
1370 vpfe_schedule_next_buffer(vpfe); in vpfe_isr()
1371 spin_unlock(&vpfe->dma_queue_lock); in vpfe_isr()
1374 vpfe_clear_intr(&vpfe->ccdc, intr_status); in vpfe_isr()
1379 static inline void vpfe_detach_irq(struct vpfe_device *vpfe) in vpfe_detach_irq() argument
1384 frame_format = vpfe_ccdc_get_frame_format(&vpfe->ccdc); in vpfe_detach_irq()
1388 vpfe_reg_write(&vpfe->ccdc, intr, VPFE_IRQ_EN_CLR); in vpfe_detach_irq()
1391 static inline void vpfe_attach_irq(struct vpfe_device *vpfe) in vpfe_attach_irq() argument
1396 frame_format = vpfe_ccdc_get_frame_format(&vpfe->ccdc); in vpfe_attach_irq()
1400 vpfe_reg_write(&vpfe->ccdc, intr, VPFE_IRQ_EN_SET); in vpfe_attach_irq()
1406 struct vpfe_device *vpfe = video_drvdata(file); in vpfe_querycap() local
1408 vpfe_dbg(2, vpfe, "vpfe_querycap\n"); in vpfe_querycap()
1413 "platform:%s", vpfe->v4l2_dev.name); in vpfe_querycap()
1422 static int __vpfe_get_format(struct vpfe_device *vpfe, in __vpfe_get_format() argument
1430 sdinfo = vpfe->current_subdev; in __vpfe_get_format()
1443 mbus_to_pix(vpfe, &fmt.format, &format->fmt.pix, bpp); in __vpfe_get_format()
1445 ret = v4l2_device_call_until_err(&vpfe->v4l2_dev, in __vpfe_get_format()
1452 mbus_to_pix(vpfe, &mbus_fmt, &format->fmt.pix, bpp); in __vpfe_get_format()
1455 format->type = vpfe->fmt.type; in __vpfe_get_format()
1457 vpfe_dbg(1, vpfe, in __vpfe_get_format()
1467 static int __vpfe_set_format(struct vpfe_device *vpfe, in __vpfe_set_format() argument
1474 vpfe_dbg(2, vpfe, "__vpfe_set_format\n"); in __vpfe_set_format()
1476 sdinfo = vpfe->current_subdev; in __vpfe_set_format()
1483 pix_to_mbus(vpfe, &format->fmt.pix, &fmt.format); in __vpfe_set_format()
1490 mbus_to_pix(vpfe, &fmt.format, &format->fmt.pix, bpp); in __vpfe_set_format()
1492 format->type = vpfe->fmt.type; in __vpfe_set_format()
1494 vpfe_dbg(1, vpfe, in __vpfe_set_format()
1506 struct vpfe_device *vpfe = video_drvdata(file); in vpfe_g_fmt() local
1508 vpfe_dbg(2, vpfe, "vpfe_g_fmt\n"); in vpfe_g_fmt()
1510 *fmt = vpfe->fmt; in vpfe_g_fmt()
1518 struct vpfe_device *vpfe = video_drvdata(file); in vpfe_enum_fmt() local
1523 vpfe_dbg(2, vpfe, "vpfe_enum_format index:%d\n", in vpfe_enum_fmt()
1526 sdinfo = vpfe->current_subdev; in vpfe_enum_fmt()
1544 f->type = vpfe->fmt.type; in vpfe_enum_fmt()
1546 vpfe_dbg(1, vpfe, "vpfe_enum_format: mbus index: %d code: %x pixelformat: %s [%s]\n", in vpfe_enum_fmt()
1555 struct vpfe_device *vpfe = video_drvdata(file); in vpfe_try_fmt() local
1558 vpfe_dbg(2, vpfe, "vpfe_try_fmt\n"); in vpfe_try_fmt()
1560 return __vpfe_get_format(vpfe, fmt, &bpp); in vpfe_try_fmt()
1566 struct vpfe_device *vpfe = video_drvdata(file); in vpfe_s_fmt() local
1571 vpfe_dbg(2, vpfe, "vpfe_s_fmt\n"); in vpfe_s_fmt()
1574 if (vb2_is_busy(&vpfe->buffer_queue)) { in vpfe_s_fmt()
1575 vpfe_err(vpfe, "%s device busy\n", __func__); in vpfe_s_fmt()
1588 ret = __vpfe_set_format(vpfe, fmt, &bpp); in vpfe_s_fmt()
1595 vpfe_detach_irq(vpfe); in vpfe_s_fmt()
1596 vpfe->fmt = *fmt; in vpfe_s_fmt()
1597 vpfe->bpp = bpp; in vpfe_s_fmt()
1600 vpfe->crop.width = fmt->fmt.pix.width; in vpfe_s_fmt()
1601 vpfe->crop.height = fmt->fmt.pix.height; in vpfe_s_fmt()
1604 return vpfe_config_ccdc_image_format(vpfe); in vpfe_s_fmt()
1610 struct vpfe_device *vpfe = video_drvdata(file); in vpfe_enum_size() local
1618 vpfe_dbg(2, vpfe, "vpfe_enum_size\n"); in vpfe_enum_size()
1623 vpfe_dbg(3, vpfe, "Invalid pixel code: %x, default used instead\n", in vpfe_enum_size()
1630 sdinfo = vpfe->current_subdev; in vpfe_enum_size()
1641 pix_to_mbus(vpfe, &pix, &mbus); in vpfe_enum_size()
1652 vpfe_dbg(1, vpfe, "vpfe_enum_size: index: %d code: %x W:[%d,%d] H:[%d,%d]\n", in vpfe_enum_size()
1660 vpfe_dbg(1, vpfe, "vpfe_enum_size: index: %d pixformat: %s size: %dx%d\n", in vpfe_enum_size()
1672 vpfe_get_subdev_input_index(struct vpfe_device *vpfe, in vpfe_get_subdev_input_index() argument
1679 for (i = 0; i < ARRAY_SIZE(vpfe->cfg->asd); i++) { in vpfe_get_subdev_input_index()
1695 static int vpfe_get_app_input_index(struct vpfe_device *vpfe, in vpfe_get_app_input_index() argument
1698 struct vpfe_config *cfg = vpfe->cfg; in vpfe_get_app_input_index()
1704 curr_client = v4l2_get_subdevdata(vpfe->current_subdev->sd); in vpfe_get_app_input_index()
1705 for (i = 0; i < ARRAY_SIZE(vpfe->cfg->asd); i++) { in vpfe_get_app_input_index()
1710 if (vpfe->current_input >= 1) in vpfe_get_app_input_index()
1712 *app_input_index = j + vpfe->current_input; in vpfe_get_app_input_index()
1723 struct vpfe_device *vpfe = video_drvdata(file); in vpfe_enum_input() local
1727 vpfe_dbg(2, vpfe, "vpfe_enum_input\n"); in vpfe_enum_input()
1729 if (vpfe_get_subdev_input_index(vpfe, &subdev, &index, in vpfe_enum_input()
1731 vpfe_dbg(1, vpfe, in vpfe_enum_input()
1735 sdinfo = &vpfe->cfg->sub_devs[subdev]; in vpfe_enum_input()
1743 struct vpfe_device *vpfe = video_drvdata(file); in vpfe_g_input() local
1745 vpfe_dbg(2, vpfe, "vpfe_g_input\n"); in vpfe_g_input()
1747 return vpfe_get_app_input_index(vpfe, index); in vpfe_g_input()
1751 static int vpfe_set_input(struct vpfe_device *vpfe, unsigned int index) in vpfe_set_input() argument
1759 vpfe_dbg(2, vpfe, "vpfe_set_input: index: %d\n", index); in vpfe_set_input()
1762 if (vb2_is_busy(&vpfe->buffer_queue)) { in vpfe_set_input()
1763 vpfe_err(vpfe, "%s device busy\n", __func__); in vpfe_set_input()
1766 ret = vpfe_get_subdev_input_index(vpfe, in vpfe_set_input()
1771 vpfe_err(vpfe, "invalid input index: %d\n", index); in vpfe_set_input()
1775 sdinfo = &vpfe->cfg->sub_devs[subdev_index]; in vpfe_set_input()
1776 sdinfo->sd = vpfe->sd[subdev_index]; in vpfe_set_input()
1785 vpfe_err(vpfe, "s_routing failed\n"); in vpfe_set_input()
1793 vpfe->current_subdev = sdinfo; in vpfe_set_input()
1795 vpfe->v4l2_dev.ctrl_handler = sdinfo->sd->ctrl_handler; in vpfe_set_input()
1796 vpfe->current_input = index; in vpfe_set_input()
1797 vpfe->std_index = 0; in vpfe_set_input()
1800 ret = vpfe_ccdc_set_hw_if_params(&vpfe->ccdc, &sdinfo->vpfe_param); in vpfe_set_input()
1805 return vpfe_config_image_format(vpfe, in vpfe_set_input()
1806 vpfe_standards[vpfe->std_index].std_id); in vpfe_set_input()
1814 struct vpfe_device *vpfe = video_drvdata(file); in vpfe_s_input() local
1816 vpfe_dbg(2, vpfe, in vpfe_s_input()
1819 return vpfe_set_input(vpfe, index); in vpfe_s_input()
1824 struct vpfe_device *vpfe = video_drvdata(file); in vpfe_querystd() local
1827 vpfe_dbg(2, vpfe, "vpfe_querystd\n"); in vpfe_querystd()
1829 sdinfo = vpfe->current_subdev; in vpfe_querystd()
1834 return v4l2_device_call_until_err(&vpfe->v4l2_dev, sdinfo->grp_id, in vpfe_querystd()
1840 struct vpfe_device *vpfe = video_drvdata(file); in vpfe_s_std() local
1844 vpfe_dbg(2, vpfe, "vpfe_s_std\n"); in vpfe_s_std()
1846 sdinfo = vpfe->current_subdev; in vpfe_s_std()
1851 if (vb2_is_busy(&vpfe->buffer_queue)) { in vpfe_s_std()
1852 vpfe_err(vpfe, "%s device busy\n", __func__); in vpfe_s_std()
1857 ret = v4l2_device_call_until_err(&vpfe->v4l2_dev, sdinfo->grp_id, in vpfe_s_std()
1860 vpfe_err(vpfe, "Failed to set standard\n"); in vpfe_s_std()
1863 ret = vpfe_config_image_format(vpfe, std_id); in vpfe_s_std()
1870 struct vpfe_device *vpfe = video_drvdata(file); in vpfe_g_std() local
1873 vpfe_dbg(2, vpfe, "vpfe_g_std\n"); in vpfe_g_std()
1875 sdinfo = vpfe->current_subdev; in vpfe_g_std()
1879 *std_id = vpfe_standards[vpfe->std_index].std_id; in vpfe_g_std()
1888 static void vpfe_calculate_offsets(struct vpfe_device *vpfe) in vpfe_calculate_offsets() argument
1892 vpfe_dbg(2, vpfe, "vpfe_calculate_offsets\n"); in vpfe_calculate_offsets()
1894 vpfe_ccdc_get_image_window(&vpfe->ccdc, &image_win); in vpfe_calculate_offsets()
1895 vpfe->field_off = image_win.height * image_win.width; in vpfe_calculate_offsets()
1916 struct vpfe_device *vpfe = vb2_get_drv_priv(vq); in vpfe_queue_setup() local
1918 if (fmt && fmt->fmt.pix.sizeimage < vpfe->fmt.fmt.pix.sizeimage) in vpfe_queue_setup()
1925 sizes[0] = fmt ? fmt->fmt.pix.sizeimage : vpfe->fmt.fmt.pix.sizeimage; in vpfe_queue_setup()
1926 alloc_ctxs[0] = vpfe->alloc_ctx; in vpfe_queue_setup()
1928 vpfe_dbg(1, vpfe, in vpfe_queue_setup()
1932 vpfe_calculate_offsets(vpfe); in vpfe_queue_setup()
1948 struct vpfe_device *vpfe = vb2_get_drv_priv(vb->vb2_queue); in vpfe_buffer_prepare() local
1950 vb2_set_plane_payload(vb, 0, vpfe->fmt.fmt.pix.sizeimage); in vpfe_buffer_prepare()
1955 vbuf->field = vpfe->fmt.fmt.pix.field; in vpfe_buffer_prepare()
1967 struct vpfe_device *vpfe = vb2_get_drv_priv(vb->vb2_queue); in vpfe_buffer_queue() local
1972 spin_lock_irqsave(&vpfe->dma_queue_lock, flags); in vpfe_buffer_queue()
1973 list_add_tail(&buf->list, &vpfe->dma_queue); in vpfe_buffer_queue()
1974 spin_unlock_irqrestore(&vpfe->dma_queue_lock, flags); in vpfe_buffer_queue()
1984 struct vpfe_device *vpfe = vb2_get_drv_priv(vq); in vpfe_start_streaming() local
1991 spin_lock_irqsave(&vpfe->dma_queue_lock, flags); in vpfe_start_streaming()
1993 vpfe->field = 0; in vpfe_start_streaming()
1994 vpfe->sequence = 0; in vpfe_start_streaming()
1996 sdinfo = vpfe->current_subdev; in vpfe_start_streaming()
1998 vpfe_attach_irq(vpfe); in vpfe_start_streaming()
2000 if (vpfe->ccdc.ccdc_cfg.if_type == VPFE_RAW_BAYER) in vpfe_start_streaming()
2001 vpfe_ccdc_config_raw(&vpfe->ccdc); in vpfe_start_streaming()
2003 vpfe_ccdc_config_ycbcr(&vpfe->ccdc); in vpfe_start_streaming()
2006 vpfe->next_frm = list_entry(vpfe->dma_queue.next, in vpfe_start_streaming()
2008 vpfe->cur_frm = vpfe->next_frm; in vpfe_start_streaming()
2010 list_del(&vpfe->cur_frm->list); in vpfe_start_streaming()
2011 spin_unlock_irqrestore(&vpfe->dma_queue_lock, flags); in vpfe_start_streaming()
2013 addr = vb2_dma_contig_plane_dma_addr(&vpfe->cur_frm->vb.vb2_buf, 0); in vpfe_start_streaming()
2015 vpfe_set_sdr_addr(&vpfe->ccdc, (unsigned long)(addr)); in vpfe_start_streaming()
2017 vpfe_pcr_enable(&vpfe->ccdc, 1); in vpfe_start_streaming()
2021 vpfe_err(vpfe, "Error in attaching interrupt handle\n"); in vpfe_start_streaming()
2028 list_for_each_entry_safe(buf, tmp, &vpfe->dma_queue, list) { in vpfe_start_streaming()
2045 struct vpfe_device *vpfe = vb2_get_drv_priv(vq); in vpfe_stop_streaming() local
2050 vpfe_pcr_enable(&vpfe->ccdc, 0); in vpfe_stop_streaming()
2052 vpfe_detach_irq(vpfe); in vpfe_stop_streaming()
2054 sdinfo = vpfe->current_subdev; in vpfe_stop_streaming()
2057 vpfe_dbg(1, vpfe, "stream off failed in subdev\n"); in vpfe_stop_streaming()
2060 spin_lock_irqsave(&vpfe->dma_queue_lock, flags); in vpfe_stop_streaming()
2061 if (vpfe->cur_frm == vpfe->next_frm) { in vpfe_stop_streaming()
2062 vb2_buffer_done(&vpfe->cur_frm->vb.vb2_buf, in vpfe_stop_streaming()
2065 if (vpfe->cur_frm != NULL) in vpfe_stop_streaming()
2066 vb2_buffer_done(&vpfe->cur_frm->vb.vb2_buf, in vpfe_stop_streaming()
2068 if (vpfe->next_frm != NULL) in vpfe_stop_streaming()
2069 vb2_buffer_done(&vpfe->next_frm->vb.vb2_buf, in vpfe_stop_streaming()
2073 while (!list_empty(&vpfe->dma_queue)) { in vpfe_stop_streaming()
2074 vpfe->next_frm = list_entry(vpfe->dma_queue.next, in vpfe_stop_streaming()
2076 list_del(&vpfe->next_frm->list); in vpfe_stop_streaming()
2077 vb2_buffer_done(&vpfe->next_frm->vb.vb2_buf, in vpfe_stop_streaming()
2080 spin_unlock_irqrestore(&vpfe->dma_queue_lock, flags); in vpfe_stop_streaming()
2086 struct vpfe_device *vpfe = video_drvdata(file); in vpfe_cropcap() local
2088 vpfe_dbg(2, vpfe, "vpfe_cropcap\n"); in vpfe_cropcap()
2090 if (vpfe->std_index >= ARRAY_SIZE(vpfe_standards)) in vpfe_cropcap()
2096 crop->defrect.width = vpfe_standards[vpfe->std_index].width; in vpfe_cropcap()
2098 crop->defrect.height = vpfe_standards[vpfe->std_index].height; in vpfe_cropcap()
2100 crop->pixelaspect = vpfe_standards[vpfe->std_index].pixelaspect; in vpfe_cropcap()
2108 struct vpfe_device *vpfe = video_drvdata(file); in vpfe_g_selection() local
2114 s->r.width = vpfe->crop.width; in vpfe_g_selection()
2115 s->r.height = vpfe->crop.height; in vpfe_g_selection()
2119 s->r = vpfe->crop; in vpfe_g_selection()
2146 struct vpfe_device *vpfe = video_drvdata(file); in vpfe_s_selection() local
2147 struct v4l2_rect cr = vpfe->crop; in vpfe_s_selection()
2151 if (vb2_is_busy(&vpfe->buffer_queue)) { in vpfe_s_selection()
2152 vpfe_err(vpfe, "%s device busy\n", __func__); in vpfe_s_selection()
2172 s->r = vpfe->crop = r; in vpfe_s_selection()
2174 vpfe_ccdc_set_image_window(&vpfe->ccdc, &r, vpfe->bpp); in vpfe_s_selection()
2175 vpfe->fmt.fmt.pix.width = r.width; in vpfe_s_selection()
2176 vpfe->fmt.fmt.pix.height = r.height; in vpfe_s_selection()
2177 vpfe->fmt.fmt.pix.bytesperline = vpfe_ccdc_get_line_length(&vpfe->ccdc); in vpfe_s_selection()
2178 vpfe->fmt.fmt.pix.sizeimage = vpfe->fmt.fmt.pix.bytesperline * in vpfe_s_selection()
2179 vpfe->fmt.fmt.pix.height; in vpfe_s_selection()
2181 vpfe_dbg(1, vpfe, "cropped (%d,%d)/%dx%d of %dx%d\n", in vpfe_s_selection()
2190 struct vpfe_device *vpfe = video_drvdata(file); in vpfe_ioctl_default() local
2193 vpfe_dbg(2, vpfe, "vpfe_ioctl_default\n"); in vpfe_ioctl_default()
2196 vpfe_err(vpfe, "%s device busy\n", __func__); in vpfe_ioctl_default()
2201 if (vb2_is_busy(&vpfe->buffer_queue)) { in vpfe_ioctl_default()
2202 vpfe_err(vpfe, "%s device busy\n", __func__); in vpfe_ioctl_default()
2208 ret = vpfe_ccdc_set_params(&vpfe->ccdc, (void __user *)param); in vpfe_ioctl_default()
2210 vpfe_dbg(2, vpfe, in vpfe_ioctl_default()
2214 ret = vpfe_get_ccdc_image_format(vpfe, in vpfe_ioctl_default()
2215 &vpfe->fmt); in vpfe_ioctl_default()
2217 vpfe_dbg(2, vpfe, in vpfe_ioctl_default()
2296 struct vpfe_device *vpfe = container_of(notifier->v4l2_dev, in vpfe_async_bound() local
2303 vpfe_dbg(1, vpfe, "vpfe_async_bound\n"); in vpfe_async_bound()
2305 for (i = 0; i < ARRAY_SIZE(vpfe->cfg->asd); i++) { in vpfe_async_bound()
2306 if (vpfe->cfg->asd[i]->match.of.node == asd[i].match.of.node) { in vpfe_async_bound()
2307 sdinfo = &vpfe->cfg->sub_devs[i]; in vpfe_async_bound()
2308 vpfe->sd[i] = subdev; in vpfe_async_bound()
2309 vpfe->sd[i]->grp_id = sdinfo->grp_id; in vpfe_async_bound()
2316 vpfe_info(vpfe, "sub device (%s) not matched\n", subdev->name); in vpfe_async_bound()
2320 vpfe->video_dev.tvnorms |= sdinfo->inputs[0].std; in vpfe_async_bound()
2346 static int vpfe_probe_complete(struct vpfe_device *vpfe) in vpfe_probe_complete() argument
2352 spin_lock_init(&vpfe->dma_queue_lock); in vpfe_probe_complete()
2353 mutex_init(&vpfe->lock); in vpfe_probe_complete()
2355 vpfe->fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; in vpfe_probe_complete()
2358 vpfe->current_subdev = &vpfe->cfg->sub_devs[0]; in vpfe_probe_complete()
2359 vpfe->v4l2_dev.ctrl_handler = vpfe->sd[0]->ctrl_handler; in vpfe_probe_complete()
2361 err = vpfe_set_input(vpfe, 0); in vpfe_probe_complete()
2366 vpfe->alloc_ctx = vb2_dma_contig_init_ctx(vpfe->pdev); in vpfe_probe_complete()
2367 if (IS_ERR(vpfe->alloc_ctx)) { in vpfe_probe_complete()
2368 vpfe_err(vpfe, "Failed to get the context\n"); in vpfe_probe_complete()
2369 err = PTR_ERR(vpfe->alloc_ctx); in vpfe_probe_complete()
2373 q = &vpfe->buffer_queue; in vpfe_probe_complete()
2376 q->drv_priv = vpfe; in vpfe_probe_complete()
2381 q->lock = &vpfe->lock; in vpfe_probe_complete()
2386 vpfe_err(vpfe, "vb2_queue_init() failed\n"); in vpfe_probe_complete()
2387 vb2_dma_contig_cleanup_ctx(vpfe->alloc_ctx); in vpfe_probe_complete()
2391 INIT_LIST_HEAD(&vpfe->dma_queue); in vpfe_probe_complete()
2393 vdev = &vpfe->video_dev; in vpfe_probe_complete()
2398 vdev->v4l2_dev = &vpfe->v4l2_dev; in vpfe_probe_complete()
2401 vdev->lock = &vpfe->lock; in vpfe_probe_complete()
2402 video_set_drvdata(vdev, vpfe); in vpfe_probe_complete()
2403 err = video_register_device(&vpfe->video_dev, VFL_TYPE_GRABBER, -1); in vpfe_probe_complete()
2405 vpfe_err(vpfe, in vpfe_probe_complete()
2413 v4l2_device_unregister(&vpfe->v4l2_dev); in vpfe_probe_complete()
2419 struct vpfe_device *vpfe = container_of(notifier->v4l2_dev, in vpfe_async_complete() local
2422 return vpfe_probe_complete(vpfe); in vpfe_async_complete()
2532 struct vpfe_device *vpfe; in vpfe_probe() local
2542 vpfe = devm_kzalloc(&pdev->dev, sizeof(*vpfe), GFP_KERNEL); in vpfe_probe()
2543 if (!vpfe) in vpfe_probe()
2546 vpfe->pdev = &pdev->dev; in vpfe_probe()
2547 vpfe->cfg = vpfe_cfg; in vpfe_probe()
2548 ccdc = &vpfe->ccdc; in vpfe_probe()
2560 vpfe->irq = ret; in vpfe_probe()
2562 ret = devm_request_irq(vpfe->pdev, vpfe->irq, vpfe_isr, 0, in vpfe_probe()
2563 "vpfe_capture0", vpfe); in vpfe_probe()
2569 ret = v4l2_device_register(&pdev->dev, &vpfe->v4l2_dev); in vpfe_probe()
2571 vpfe_err(vpfe, in vpfe_probe()
2577 platform_set_drvdata(pdev, vpfe); in vpfe_probe()
2588 vpfe->sd = devm_kzalloc(&pdev->dev, sizeof(struct v4l2_subdev *) * in vpfe_probe()
2589 ARRAY_SIZE(vpfe->cfg->asd), GFP_KERNEL); in vpfe_probe()
2590 if (!vpfe->sd) { in vpfe_probe()
2595 vpfe->notifier.subdevs = vpfe->cfg->asd; in vpfe_probe()
2596 vpfe->notifier.num_subdevs = ARRAY_SIZE(vpfe->cfg->asd); in vpfe_probe()
2597 vpfe->notifier.bound = vpfe_async_bound; in vpfe_probe()
2598 vpfe->notifier.complete = vpfe_async_complete; in vpfe_probe()
2599 ret = v4l2_async_notifier_register(&vpfe->v4l2_dev, in vpfe_probe()
2600 &vpfe->notifier); in vpfe_probe()
2602 vpfe_err(vpfe, "Error registering async notifier\n"); in vpfe_probe()
2610 v4l2_device_unregister(&vpfe->v4l2_dev); in vpfe_probe()
2619 struct vpfe_device *vpfe = platform_get_drvdata(pdev); in vpfe_remove() local
2621 vpfe_dbg(2, vpfe, "vpfe_remove\n"); in vpfe_remove()
2625 v4l2_async_notifier_unregister(&vpfe->notifier); in vpfe_remove()
2626 v4l2_device_unregister(&vpfe->v4l2_dev); in vpfe_remove()
2627 video_unregister_device(&vpfe->video_dev); in vpfe_remove()
2666 struct vpfe_device *vpfe = platform_get_drvdata(pdev); in vpfe_suspend() local
2667 struct vpfe_ccdc *ccdc = &vpfe->ccdc; in vpfe_suspend()
2670 if (!vb2_start_streaming_called(&vpfe->buffer_queue)) in vpfe_suspend()
2724 struct vpfe_device *vpfe = platform_get_drvdata(pdev); in vpfe_resume() local
2725 struct vpfe_ccdc *ccdc = &vpfe->ccdc; in vpfe_resume()
2728 if (!vb2_start_streaming_called(&vpfe->buffer_queue)) in vpfe_resume()