Lines Matching +full:misc +full:- +full:latch
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (C) 2008-2009 Texas Instruments Inc
146 /* reg_modify() - read, modify and write register */
200 val = (cul->hcpat_even << CULL_PAT_EVEN_LINE_SHIFT) | cul->hcpat_odd; in isif_config_culling()
204 regw(cul->vcpat, CULV); in isif_config_culling()
208 cul->en_lpf << ISIF_LPF_SHIFT, MODESET); in isif_config_culling()
217 val = (!!gain_off_p->gain_sdram_en << GAIN_SDRAM_EN_SHIFT) | in isif_config_gain_offset()
218 (!!gain_off_p->gain_ipipe_en << GAIN_IPIPE_EN_SHIFT) | in isif_config_gain_offset()
219 (!!gain_off_p->gain_h3a_en << GAIN_H3A_EN_SHIFT) | in isif_config_gain_offset()
220 (!!gain_off_p->offset_sdram_en << OFST_SDRAM_EN_SHIFT) | in isif_config_gain_offset()
221 (!!gain_off_p->offset_ipipe_en << OFST_IPIPE_EN_SHIFT) | in isif_config_gain_offset()
222 (!!gain_off_p->offset_h3a_en << OFST_H3A_EN_SHIFT); in isif_config_gain_offset()
226 val = (gain_off_p->gain.r_ye.integer << GAIN_INTEGER_SHIFT) | in isif_config_gain_offset()
227 gain_off_p->gain.r_ye.decimal; in isif_config_gain_offset()
230 val = (gain_off_p->gain.gr_cy.integer << GAIN_INTEGER_SHIFT) | in isif_config_gain_offset()
231 gain_off_p->gain.gr_cy.decimal; in isif_config_gain_offset()
234 val = (gain_off_p->gain.gb_g.integer << GAIN_INTEGER_SHIFT) | in isif_config_gain_offset()
235 gain_off_p->gain.gb_g.decimal; in isif_config_gain_offset()
238 val = (gain_off_p->gain.b_mg.integer << GAIN_INTEGER_SHIFT) | in isif_config_gain_offset()
239 gain_off_p->gain.b_mg.decimal; in isif_config_gain_offset()
242 regw(gain_off_p->offset, COFSTA); in isif_config_gain_offset()
277 * ppc - per pixel count. indicates how many pixels per cell in isif_setwin()
281 horz_start = image_win->left << (ppc - 1); in isif_setwin()
282 horz_nr_pixels = ((image_win->width) << (ppc - 1)) - 1; in isif_setwin()
287 vert_start = image_win->top; in isif_setwin()
290 vert_nr_lines = (image_win->height >> 1) - 1; in isif_setwin()
297 vert_nr_lines = image_win->height - 1; in isif_setwin()
299 mid_img = vert_start + (image_win->height / 2); in isif_setwin()
317 regw(bc->dc_offset, CLDCOFST); in isif_config_bclamp()
319 if (bc->en) { in isif_config_bclamp()
320 val = bc->bc_mode_color << ISIF_BC_MODE_COLOR_SHIFT; in isif_config_bclamp()
323 val = val | 1 | (bc->horz.mode << ISIF_HORZ_BC_MODE_SHIFT); in isif_config_bclamp()
327 if (bc->horz.mode != ISIF_HORZ_BC_DISABLE) { in isif_config_bclamp()
337 val = bc->horz.win_count_calc | in isif_config_bclamp()
338 ((!!bc->horz.base_win_sel_calc) << in isif_config_bclamp()
340 ((!!bc->horz.clamp_pix_limit) << in isif_config_bclamp()
342 (bc->horz.win_h_sz_calc << in isif_config_bclamp()
344 (bc->horz.win_v_sz_calc << in isif_config_bclamp()
348 regw(bc->horz.win_start_h_calc, CLHWIN1); in isif_config_bclamp()
349 regw(bc->horz.win_start_v_calc, CLHWIN2); in isif_config_bclamp()
356 (bc->vert.reset_val_sel << ISIF_VERT_BC_RST_VAL_SEL_SHIFT) | in isif_config_bclamp()
357 (bc->vert.line_ave_coef << ISIF_VERT_BC_LINE_AVE_COEF_SHIFT); in isif_config_bclamp()
361 regw(bc->vert.ob_start_h, CLVWIN1); in isif_config_bclamp()
363 regw(bc->vert.ob_start_v, CLVWIN2); in isif_config_bclamp()
365 regw(bc->vert.ob_v_sz_calc, CLVWIN3); in isif_config_bclamp()
367 regw(bc->vert_start_sub, CLSV); in isif_config_bclamp()
375 if (!linearize->en) { in isif_config_linearization()
381 val = (linearize->corr_shft << ISIF_LIN_CORRSFT_SHIFT) | 1; in isif_config_linearization()
385 val = ((!!linearize->scale_fact.integer) << in isif_config_linearization()
387 linearize->scale_fact.decimal; in isif_config_linearization()
392 regw_lin_tbl(linearize->table[i], ((i >> 1) << 2), 1); in isif_config_linearization()
394 regw_lin_tbl(linearize->table[i], ((i >> 1) << 2), 0); in isif_config_linearization()
404 if (!vdfc->en) in isif_config_dfc()
408 val = (vdfc->corr_mode << ISIF_VDFC_CORR_MOD_SHIFT); in isif_config_dfc()
411 if (vdfc->corr_whole_line) in isif_config_dfc()
415 val |= vdfc->def_level_shift << ISIF_VDFC_LEVEL_SHFT_SHIFT; in isif_config_dfc()
420 regw(vdfc->def_sat_level, VDFSATLV); in isif_config_dfc()
422 regw(vdfc->table[0].pos_vert, DFCMEM0); in isif_config_dfc()
423 regw(vdfc->table[0].pos_horz, DFCMEM1); in isif_config_dfc()
424 if (vdfc->corr_mode == ISIF_VDFC_NORMAL || in isif_config_dfc()
425 vdfc->corr_mode == ISIF_VDFC_HORZ_INTERPOL_IF_SAT) { in isif_config_dfc()
426 regw(vdfc->table[0].level_at_pos, DFCMEM2); in isif_config_dfc()
427 regw(vdfc->table[0].level_up_pixels, DFCMEM3); in isif_config_dfc()
428 regw(vdfc->table[0].level_low_pixels, DFCMEM4); in isif_config_dfc()
437 count--; in isif_config_dfc()
441 return -1; in isif_config_dfc()
444 for (i = 1; i < vdfc->num_vdefects; i++) { in isif_config_dfc()
445 regw(vdfc->table[i].pos_vert, DFCMEM0); in isif_config_dfc()
446 regw(vdfc->table[i].pos_horz, DFCMEM1); in isif_config_dfc()
447 if (vdfc->corr_mode == ISIF_VDFC_NORMAL || in isif_config_dfc()
448 vdfc->corr_mode == ISIF_VDFC_HORZ_INTERPOL_IF_SAT) { in isif_config_dfc()
449 regw(vdfc->table[i].level_at_pos, DFCMEM2); in isif_config_dfc()
450 regw(vdfc->table[i].level_up_pixels, DFCMEM3); in isif_config_dfc()
451 regw(vdfc->table[i].level_low_pixels, DFCMEM4); in isif_config_dfc()
461 count--; in isif_config_dfc()
466 return -1; in isif_config_dfc()
469 if (vdfc->num_vdefects < ISIF_VDFC_TABLE_SIZE) { in isif_config_dfc()
486 if (!df_csc->csc.en) { in isif_config_csc()
492 /* CSCM - LSB */ in isif_config_csc()
493 val1 = (df_csc->csc.coeff[i].integer << in isif_config_csc()
495 df_csc->csc.coeff[i].decimal; in isif_config_csc()
498 /* CSCM - MSB */ in isif_config_csc()
499 val2 = (df_csc->csc.coeff[i].integer << in isif_config_csc()
501 df_csc->csc.coeff[i].decimal; in isif_config_csc()
504 regw(val2, (CSCM0 + ((i - 1) << 1))); in isif_config_csc()
509 regw(df_csc->start_pix, FMTSPH); in isif_config_csc()
512 * pixel - 1 should be configured in this register. So we in isif_config_csc()
516 regw(df_csc->num_pixels, FMTLNH); in isif_config_csc()
517 regw(df_csc->start_line, FMTSLV); in isif_config_csc()
522 regw(df_csc->num_lines, FMTLNV); in isif_config_csc()
540 * Configure CCDCFG register:- in isif_config_raw()
542 * Set FID detection function to Latch at V-Sync in isif_config_raw()
543 * Set WENLOG - isif valid area in isif_config_raw()
567 val = ISIF_VDHDOUT_INPUT | (params->vd_pol << ISIF_VD_POL_SHIFT) | in isif_config_raw()
568 (params->hd_pol << ISIF_HD_POL_SHIFT) | in isif_config_raw()
569 (params->fid_pol << ISIF_FID_POL_SHIFT) | in isif_config_raw()
572 (params->frm_fmt << ISIF_FRM_FMT_SHIFT) | in isif_config_raw()
573 (params->pix_fmt << ISIF_INPUT_SHIFT) | in isif_config_raw()
574 (params->config_params.data_shift << ISIF_DATASFT_SHIFT); in isif_config_raw()
583 val = params->cfa_pat << ISIF_GAMMAWD_CFA_SHIFT; in isif_config_raw()
586 if (module_params->compress.alg == ISIF_ALAW) in isif_config_raw()
589 val |= (params->data_msb << ISIF_ALAW_GAMMA_WD_SHIFT); in isif_config_raw()
593 if (module_params->compress.alg == ISIF_DPCM) { in isif_config_raw()
595 (module_params->compress.pred << in isif_config_raw()
599 regw(val, MISC); in isif_config_raw()
605 val = (params->config_params.col_pat_field0.olop) | in isif_config_raw()
606 (params->config_params.col_pat_field0.olep << 2) | in isif_config_raw()
607 (params->config_params.col_pat_field0.elop << 4) | in isif_config_raw()
608 (params->config_params.col_pat_field0.elep << 6) | in isif_config_raw()
609 (params->config_params.col_pat_field1.olop << 8) | in isif_config_raw()
610 (params->config_params.col_pat_field1.olep << 10) | in isif_config_raw()
611 (params->config_params.col_pat_field1.elop << 12) | in isif_config_raw()
612 (params->config_params.col_pat_field1.elep << 14); in isif_config_raw()
617 val = (!!params->horz_flip_en) << ISIF_HSIZE_FLIP_SHIFT; in isif_config_raw()
621 val |= ((params->win.width + 31) >> 5); in isif_config_raw()
623 val |= (((params->win.width + in isif_config_raw()
624 (params->win.width >> 2)) + 31) >> 5); in isif_config_raw()
626 val |= (((params->win.width * 2) + 31) >> 5); in isif_config_raw()
630 if (params->frm_fmt == CCDC_FRMFMT_INTERLACED) { in isif_config_raw()
631 if (params->image_invert_en) { in isif_config_raw()
640 } else if (params->frm_fmt == CCDC_FRMFMT_PROGRESSIVE) { in isif_config_raw()
641 if (params->image_invert_en) { in isif_config_raw()
653 isif_setwin(¶ms->win, params->frm_fmt, 1); in isif_config_raw()
656 isif_config_bclamp(&module_params->bclamp); in isif_config_raw()
659 if (isif_config_dfc(&module_params->dfc) < 0) in isif_config_raw()
660 return -EFAULT; in isif_config_raw()
662 if (!module_params->df_csc.df_or_csc) in isif_config_raw()
664 isif_config_csc(&module_params->df_csc); in isif_config_raw()
666 isif_config_linearization(&module_params->linearize); in isif_config_raw()
669 isif_config_culling(&module_params->culling); in isif_config_raw()
672 regw(module_params->horz_offset, DATAHOFST); in isif_config_raw()
673 regw(module_params->vert_offset, DATAVOFST); in isif_config_raw()
676 if (params->config_params.test_pat_gen) { in isif_config_raw()
678 sync.ccdpg_hdpol = params->hd_pol; in isif_config_raw()
679 sync.ccdpg_vdpol = params->vd_pol; in isif_config_raw()
711 int ret = -EINVAL; in isif_enum_pix()
737 "Either configure A-Law or DPCM\n"); in isif_set_pixel_format()
738 return -EINVAL; in isif_set_pixel_format()
746 return -EINVAL; in isif_set_pixel_format()
754 return -EINVAL; in isif_set_pixel_format()
782 isif_cfg.bayer.win.top = win->top; in isif_set_image_window()
783 isif_cfg.bayer.win.left = win->left; in isif_set_image_window()
784 isif_cfg.bayer.win.width = win->width; in isif_set_image_window()
785 isif_cfg.bayer.win.height = win->height; in isif_set_image_window()
787 isif_cfg.ycbcr.win.top = win->top; in isif_set_image_window()
788 isif_cfg.ycbcr.win.left = win->left; in isif_set_image_window()
789 isif_cfg.ycbcr.win.width = win->width; in isif_set_image_window()
790 isif_cfg.ycbcr.win.height = win->height; in isif_set_image_window()
840 /* misc operations */
849 isif_cfg.if_type = params->if_type; in isif_set_hw_if_params()
851 switch (params->if_type) { in isif_set_hw_if_params()
868 return -EINVAL; in isif_set_hw_if_params()
883 modeset = modeset | (params->pix_fmt << ISIF_INPUT_SHIFT) | in isif_config_ycbcr()
884 (params->frm_fmt << ISIF_FRM_FMT_SHIFT) | in isif_config_ycbcr()
885 (params->fid_pol << ISIF_FID_POL_SHIFT) | in isif_config_ycbcr()
886 (params->hd_pol << ISIF_HD_POL_SHIFT) | in isif_config_ycbcr()
887 (params->vd_pol << ISIF_VD_POL_SHIFT); in isif_config_ycbcr()
889 /* pack the data to 8-bit ISIFCFG */ in isif_config_ycbcr()
892 if (params->pix_fmt != CCDC_PIXFMT_YCBCR_8BIT) { in isif_config_ycbcr()
894 return -EINVAL; in isif_config_ycbcr()
901 if (params->pix_fmt != CCDC_PIXFMT_YCBCR_8BIT) { in isif_config_ycbcr()
903 return -EINVAL; in isif_config_ycbcr()
912 if (params->pix_fmt != CCDC_PIXFMT_YCBCR_16BIT) { in isif_config_ycbcr()
914 return -EINVAL; in isif_config_ycbcr()
922 if (params->pix_fmt != CCDC_PIXFMT_YCBCR_8BIT) { in isif_config_ycbcr()
924 return -EINVAL; in isif_config_ycbcr()
928 if (params->pix_fmt != CCDC_PIXFMT_YCBCR_16BIT) { in isif_config_ycbcr()
930 return -EINVAL; in isif_config_ycbcr()
936 return -EINVAL; in isif_config_ycbcr()
942 ccdcfg |= params->pix_order << ISIF_PIX_ORDER_SHIFT; in isif_config_ycbcr()
949 isif_setwin(¶ms->win, params->frm_fmt, 1); in isif_config_ycbcr()
951 isif_setwin(¶ms->win, params->frm_fmt, 2); in isif_config_ycbcr()
958 regw(((((params->win.width * 2) + 31) & 0xffffffe0) >> 5), HSIZE); in isif_config_ycbcr()
961 if ((params->frm_fmt == CCDC_FRMFMT_INTERLACED) && in isif_config_ycbcr()
962 (params->buf_type == CCDC_BUFTYPE_FLD_INTERLEAVED)) in isif_config_ycbcr()
1016 if (!pdev->dev.platform_data) in isif_probe()
1017 return -ENODEV; in isif_probe()
1027 setup_pinmux = pdev->dev.platform_data; in isif_probe()
1039 status = -ENODEV; in isif_probe()
1042 res = request_mem_region(res->start, resource_size(res), in isif_probe()
1043 res->name); in isif_probe()
1045 status = -EBUSY; in isif_probe()
1048 addr = ioremap(res->start, resource_size(res)); in isif_probe()
1050 status = -ENOMEM; in isif_probe()
1069 isif_cfg.dev = &pdev->dev; in isif_probe()
1075 release_mem_region(res->start, resource_size(res)); in isif_probe()
1076 i--; in isif_probe()
1086 release_mem_region(res->start, resource_size(res)); in isif_probe()
1087 i--; in isif_probe()
1104 release_mem_region(res->start, resource_size(res)); in isif_remove()