Skip to content

Commit

Permalink
[media] davinci: vpif: add check for genuine interrupts in the isr
Browse files Browse the repository at this point in the history
As the same interrupt is shared between capture and display devices,
sometimes we get isr calls where the interrupt might not genuinely belong
to capture or display. Hence, add a condition in the isr to check for
interrupt ownership and channel number to make sure we do not
service wrong interrupts.

Signed-off-by: Manjunath Hadli <manjunath.hadli@ti.com>
Signed-off-by: Lad, Prabhakar <prabhakar.lad@ti.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Manjunath Hadli authored and Mauro Carvalho Chehab committed Jul 30, 2012
1 parent 4099040 commit b1fc423
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 0 deletions.
15 changes: 15 additions & 0 deletions drivers/media/video/davinci/vpif.h
Original file line number Diff line number Diff line change
Expand Up @@ -569,6 +569,21 @@ static inline void ch3_set_vbi_addr(unsigned long top_strt_luma,
regw(btm_strt_luma, VPIF_CH3_BTM_STRT_ADD_VANC);
}

static inline int vpif_intr_status(int channel)
{
int status = 0;
int mask;

if (channel < 0 || channel > 3)
return 0;

mask = 1 << channel;
status = regr(VPIF_STATUS) & mask;
regw(status, VPIF_STATUS_CLR);

return status;
}

#define VPIF_MAX_NAME (30)

/* This structure will store size parameters as per the mode selected by user */
Expand Down
3 changes: 3 additions & 0 deletions drivers/media/video/davinci/vpif_capture.c
Original file line number Diff line number Diff line change
Expand Up @@ -341,6 +341,9 @@ static irqreturn_t vpif_channel_isr(int irq, void *dev_id)
int fid = -1, i;

channel_id = *(int *)(dev_id);
if (!vpif_intr_status(channel_id))
return IRQ_NONE;

ch = dev->dev[channel_id];

field = ch->common[VPIF_VIDEO_INDEX].fmt.fmt.pix.field;
Expand Down
3 changes: 3 additions & 0 deletions drivers/media/video/davinci/vpif_display.c
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,9 @@ static irqreturn_t vpif_channel_isr(int irq, void *dev_id)
int channel_id = 0;

channel_id = *(int *)(dev_id);
if (!vpif_intr_status(channel_id + 2))
return IRQ_NONE;

ch = dev->dev[channel_id];
field = ch->common[VPIF_VIDEO_INDEX].fmt.fmt.pix.field;
for (i = 0; i < VPIF_NUMOBJECTS; i++) {
Expand Down

0 comments on commit b1fc423

Please sign in to comment.