Lines Matching defs:hist
30 static void hist_reset_mem(struct ispstat *hist)
32 struct isp_device *isp = hist->isp;
33 struct omap3isp_hist_config *conf = hist->priv;
56 hist->wait_acc_frames = conf->num_acc_frames;
62 static void hist_setup_regs(struct ispstat *hist, void *priv)
64 struct isp_device *isp = hist->isp;
72 if (!hist->update || hist->state == ISPSTAT_DISABLED ||
73 hist->state == ISPSTAT_DISABLING)
121 hist_reset_mem(hist);
134 hist->update = 0;
135 hist->config_counter += hist->inc_config;
136 hist->inc_config = 0;
137 hist->buf_size = conf->buf_size;
140 static void hist_enable(struct ispstat *hist, int enable)
143 isp_reg_set(hist->isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_PCR,
145 omap3isp_subclk_enable(hist->isp, OMAP3_ISP_SUBCLK_HIST);
147 isp_reg_clr(hist->isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_PCR,
149 omap3isp_subclk_disable(hist->isp, OMAP3_ISP_SUBCLK_HIST);
153 static int hist_busy(struct ispstat *hist)
155 return isp_reg_readl(hist->isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_PCR)
161 struct ispstat *hist = data;
165 isp_reg_clr(hist->isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_CNT,
168 omap3isp_stat_dma_isr(hist);
169 if (hist->state != ISPSTAT_DISABLED)
170 omap3isp_hist_dma_done(hist->isp);
173 static int hist_buf_dma(struct ispstat *hist)
175 dma_addr_t dma_addr = hist->active_buf->dma_addr;
182 dev_dbg(hist->isp->dev, "hist: invalid DMA buffer address\n");
186 isp_reg_writel(hist->isp, 0, OMAP3_ISP_IOMEM_HIST, ISPHIST_ADDR);
187 isp_reg_set(hist->isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_CNT,
189 omap3isp_flush(hist->isp);
192 cfg.src_addr = hist->isp->mmio_hist_base_phys + ISPHIST_DATA;
194 cfg.src_maxburst = hist->buf_size / 4;
196 ret = dmaengine_slave_config(hist->dma_ch, &cfg);
198 dev_dbg(hist->isp->dev,
199 "hist: DMA slave configuration failed\n");
203 tx = dmaengine_prep_slave_single(hist->dma_ch, dma_addr,
204 hist->buf_size, DMA_DEV_TO_MEM,
207 dev_dbg(hist->isp->dev,
208 "hist: DMA slave preparation failed\n");
213 tx->callback_param = hist;
216 dev_dbg(hist->isp->dev, "hist: DMA submission failed\n");
220 dma_async_issue_pending(hist->dma_ch);
225 hist_reset_mem(hist);
229 static int hist_buf_pio(struct ispstat *hist)
231 struct isp_device *isp = hist->isp;
232 u32 *buf = hist->active_buf->virt_addr;
236 dev_dbg(isp->dev, "hist: invalid PIO buffer address\n");
237 hist_reset_mem(hist);
255 for (i = hist->buf_size / 16; i > 0; i--) {
261 isp_reg_clr(hist->isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_CNT,
270 static int hist_buf_process(struct ispstat *hist)
272 struct omap3isp_hist_config *user_cfg = hist->priv;
275 if (atomic_read(&hist->buf_err) || hist->state != ISPSTAT_ENABLED) {
276 hist_reset_mem(hist);
280 if (--(hist->wait_acc_frames))
283 if (hist->dma_ch)
284 ret = hist_buf_dma(hist);
286 ret = hist_buf_pio(hist);
288 hist->wait_acc_frames = user_cfg->num_acc_frames;
304 static int hist_validate_params(struct ispstat *hist, void *new_conf)
360 static int hist_comp_params(struct ispstat *hist,
363 struct omap3isp_hist_config *cur_cfg = hist->priv;
404 static void hist_set_params(struct ispstat *hist, void *new_conf)
407 struct omap3isp_hist_config *cur_cfg = hist->priv;
409 if (!hist->configured || hist_comp_params(hist, user_cfg)) {
413 hist->inc_config++;
414 hist->update = 1;
476 struct ispstat *hist = &isp->isp_hist;
484 hist->isp = isp;
498 hist->dma_ch = dma_request_chan_by_mask(&mask);
499 if (IS_ERR(hist->dma_ch)) {
500 ret = PTR_ERR(hist->dma_ch);
504 hist->dma_ch = NULL;
506 "hist: DMA channel request failed, using PIO\n");
508 dev_dbg(isp->dev, "hist: using DMA channel %s\n",
509 dma_chan_name(hist->dma_ch));
513 hist->ops = &hist_ops;
514 hist->priv = hist_cfg;
515 hist->event_type = V4L2_EVENT_OMAP3ISP_HIST;
517 ret = omap3isp_stat_init(hist, "histogram", &hist_subdev_ops);
521 if (!IS_ERR_OR_NULL(hist->dma_ch))
522 dma_release_channel(hist->dma_ch);
534 struct ispstat *hist = &isp->isp_hist;
536 if (hist->dma_ch)
537 dma_release_channel(hist->dma_ch);
539 omap3isp_stat_cleanup(hist);