Skip to content

Commit

Permalink
media: atmel: atmel-isc-base: move cropping settings outside start_dma
Browse files Browse the repository at this point in the history
The cropping configuration of the Parallel Front Engine (PFE) can be done
just once when the streaming starts. The ISC configuration is in place and
will not be changed while streaming.
It is not effective to keep rewriting the crop registers configuration
everytime start_dma is called, as this can be called for each queued
buffer.
Thus we can configure the cropping at start_streaming time.
This change moves the code to a dedicated function.

Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
  • Loading branch information
ehristev authored and mchehab committed Jun 20, 2022
1 parent 7e89476 commit 5c2111c
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions drivers/media/platform/atmel/atmel-isc-base.c
Original file line number Diff line number Diff line change
Expand Up @@ -132,12 +132,9 @@ static int isc_buffer_prepare(struct vb2_buffer *vb)
return 0;
}

static void isc_start_dma(struct isc_device *isc)
static void isc_crop_pfe(struct isc_device *isc)
{
struct regmap *regmap = isc->regmap;
u32 sizeimage = isc->fmt.fmt.pix.sizeimage;
u32 dctrl_dview;
dma_addr_t addr0;
u32 h, w;

h = isc->fmt.fmt.pix.height;
Expand Down Expand Up @@ -172,6 +169,14 @@ static void isc_start_dma(struct isc_device *isc)
regmap_update_bits(regmap, ISC_PFE_CFG0,
ISC_PFE_CFG0_COLEN | ISC_PFE_CFG0_ROWEN,
ISC_PFE_CFG0_COLEN | ISC_PFE_CFG0_ROWEN);
}

static void isc_start_dma(struct isc_device *isc)
{
struct regmap *regmap = isc->regmap;
u32 sizeimage = isc->fmt.fmt.pix.sizeimage;
u32 dctrl_dview;
dma_addr_t addr0;

addr0 = vb2_dma_contig_plane_dma_addr(&isc->cur_frm->vb.vb2_buf, 0);
regmap_write(regmap, ISC_DAD0 + isc->offsets.dma, addr0);
Expand Down Expand Up @@ -369,6 +374,7 @@ static int isc_start_streaming(struct vb2_queue *vq, unsigned int count)
struct isc_buffer, list);
list_del(&isc->cur_frm->list);

isc_crop_pfe(isc);
isc_start_dma(isc);

spin_unlock_irqrestore(&isc->dma_queue_lock, flags);
Expand Down

0 comments on commit 5c2111c

Please sign in to comment.