Lines Matching refs:hist

39 #define HIST_USING_DMA(hist) ((hist)->dma_ch >= 0)  argument
44 static void hist_reset_mem(struct ispstat *hist) in hist_reset_mem() argument
46 struct isp_device *isp = hist->isp; in hist_reset_mem()
47 struct omap3isp_hist_config *conf = hist->priv; in hist_reset_mem()
70 hist->wait_acc_frames = conf->num_acc_frames; in hist_reset_mem()
73 static void hist_dma_config(struct ispstat *hist) in hist_dma_config() argument
75 hist->dma_config.data_type = OMAP_DMA_DATA_TYPE_S32; in hist_dma_config()
76 hist->dma_config.sync_mode = OMAP_DMA_SYNC_ELEMENT; in hist_dma_config()
77 hist->dma_config.frame_count = 1; in hist_dma_config()
78 hist->dma_config.src_amode = OMAP_DMA_AMODE_CONSTANT; in hist_dma_config()
79 hist->dma_config.src_start = OMAP3ISP_HIST_REG_BASE + ISPHIST_DATA; in hist_dma_config()
80 hist->dma_config.dst_amode = OMAP_DMA_AMODE_POST_INC; in hist_dma_config()
81 hist->dma_config.src_or_dst_synch = OMAP_DMA_SRC_SYNC; in hist_dma_config()
87 static void hist_setup_regs(struct ispstat *hist, void *priv) in hist_setup_regs() argument
89 struct isp_device *isp = hist->isp; in hist_setup_regs()
97 if (!hist->update || hist->state == ISPSTAT_DISABLED || in hist_setup_regs()
98 hist->state == ISPSTAT_DISABLING) in hist_setup_regs()
146 hist_reset_mem(hist); in hist_setup_regs()
159 hist->update = 0; in hist_setup_regs()
160 hist->config_counter += hist->inc_config; in hist_setup_regs()
161 hist->inc_config = 0; in hist_setup_regs()
162 hist->buf_size = conf->buf_size; in hist_setup_regs()
165 static void hist_enable(struct ispstat *hist, int enable) in hist_enable() argument
168 isp_reg_set(hist->isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_PCR, in hist_enable()
170 isp_reg_set(hist->isp, OMAP3_ISP_IOMEM_MAIN, ISP_CTRL, in hist_enable()
173 isp_reg_clr(hist->isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_PCR, in hist_enable()
175 isp_reg_clr(hist->isp, OMAP3_ISP_IOMEM_MAIN, ISP_CTRL, in hist_enable()
180 static int hist_busy(struct ispstat *hist) in hist_busy() argument
182 return isp_reg_readl(hist->isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_PCR) in hist_busy()
188 struct ispstat *hist = data; in hist_dma_cb() local
191 dev_dbg(hist->isp->dev, "hist: DMA error. status = 0x%04x\n", in hist_dma_cb()
194 hist_reset_mem(hist); in hist_dma_cb()
195 atomic_set(&hist->buf_err, 1); in hist_dma_cb()
197 isp_reg_clr(hist->isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_CNT, in hist_dma_cb()
200 omap3isp_stat_dma_isr(hist); in hist_dma_cb()
201 if (hist->state != ISPSTAT_DISABLED) in hist_dma_cb()
202 omap3isp_hist_dma_done(hist->isp); in hist_dma_cb()
205 static int hist_buf_dma(struct ispstat *hist) in hist_buf_dma() argument
207 dma_addr_t dma_addr = hist->active_buf->dma_addr; in hist_buf_dma()
210 dev_dbg(hist->isp->dev, "hist: invalid DMA buffer address\n"); in hist_buf_dma()
211 hist_reset_mem(hist); in hist_buf_dma()
215 isp_reg_writel(hist->isp, 0, OMAP3_ISP_IOMEM_HIST, ISPHIST_ADDR); in hist_buf_dma()
216 isp_reg_set(hist->isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_CNT, in hist_buf_dma()
218 omap3isp_flush(hist->isp); in hist_buf_dma()
219 hist->dma_config.dst_start = dma_addr; in hist_buf_dma()
220 hist->dma_config.elem_count = hist->buf_size / sizeof(u32); in hist_buf_dma()
221 omap_set_dma_params(hist->dma_ch, &hist->dma_config); in hist_buf_dma()
223 omap_start_dma(hist->dma_ch); in hist_buf_dma()
228 static int hist_buf_pio(struct ispstat *hist) in hist_buf_pio() argument
230 struct isp_device *isp = hist->isp; in hist_buf_pio()
231 u32 *buf = hist->active_buf->virt_addr; in hist_buf_pio()
236 hist_reset_mem(hist); in hist_buf_pio()
254 for (i = hist->buf_size / 16; i > 0; i--) { in hist_buf_pio()
260 isp_reg_clr(hist->isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_CNT, in hist_buf_pio()
269 static int hist_buf_process(struct ispstat *hist) in hist_buf_process() argument
271 struct omap3isp_hist_config *user_cfg = hist->priv; in hist_buf_process()
274 if (atomic_read(&hist->buf_err) || hist->state != ISPSTAT_ENABLED) { in hist_buf_process()
275 hist_reset_mem(hist); in hist_buf_process()
279 if (--(hist->wait_acc_frames)) in hist_buf_process()
282 if (HIST_USING_DMA(hist)) in hist_buf_process()
283 ret = hist_buf_dma(hist); in hist_buf_process()
285 ret = hist_buf_pio(hist); in hist_buf_process()
287 hist->wait_acc_frames = user_cfg->num_acc_frames; in hist_buf_process()
303 static int hist_validate_params(struct ispstat *hist, void *new_conf) in hist_validate_params() argument
359 static int hist_comp_params(struct ispstat *hist, in hist_comp_params() argument
362 struct omap3isp_hist_config *cur_cfg = hist->priv; in hist_comp_params()
403 static void hist_set_params(struct ispstat *hist, void *new_conf) in hist_set_params() argument
406 struct omap3isp_hist_config *cur_cfg = hist->priv; in hist_set_params()
408 if (!hist->configured || hist_comp_params(hist, user_cfg)) { in hist_set_params()
412 hist->inc_config++; in hist_set_params()
413 hist->update = 1; in hist_set_params()
473 struct ispstat *hist = &isp->isp_hist; in omap3isp_hist_init() local
481 memset(hist, 0, sizeof(*hist)); in omap3isp_hist_init()
484 hist_dma_cb, hist, &hist->dma_ch); in omap3isp_hist_init()
489 hist->dma_ch = -1; in omap3isp_hist_init()
491 dev_dbg(isp->dev, "hist: DMA channel = %d\n", hist->dma_ch); in omap3isp_hist_init()
492 hist_dma_config(hist); in omap3isp_hist_init()
493 omap_enable_dma_irq(hist->dma_ch, OMAP_DMA_BLOCK_IRQ); in omap3isp_hist_init()
496 hist->ops = &hist_ops; in omap3isp_hist_init()
497 hist->priv = hist_cfg; in omap3isp_hist_init()
498 hist->event_type = V4L2_EVENT_OMAP3ISP_HIST; in omap3isp_hist_init()
499 hist->isp = isp; in omap3isp_hist_init()
501 ret = omap3isp_stat_init(hist, "histogram", &hist_subdev_ops); in omap3isp_hist_init()
504 if (HIST_USING_DMA(hist)) in omap3isp_hist_init()
505 omap_free_dma(hist->dma_ch); in omap3isp_hist_init()