大家好:
static void _omap_dispc_set_irqs(void)
{
u32 mask; u32 old_mask; int i; struct omap_dispc_isr_data *isr_data;
mask = dispc.irq_error_mask;
for (i = 0; i < DISPC_MAX_NR_ISRS; i++) { isr_data = &dispc.registered_isr[i];
if (isr_data->isr == NULL)
continue;
mask |= isr_data->mask;
}
enable_clocks(1);
old_mask = dispc_read_reg(DISPC_IRQENABLE); /* clear the irqstatus for newly enabled irqs */ dispc_write_reg(DISPC_IRQSTATUS, (mask ^ old_mask) & mask);
dispc_write_reg(DISPC_IRQENABLE, mask);
enable_clocks(0);
}
这里我能理解为:设置中断相关寄存器,使能clock然后在关闭clock。但是问题是这个函数调用者omap_dispc_wait_for_irq_interruptible_timeout,是等待DISPC的中断,如果enable_clock(0)把dispc相关的clock给关闭了,dispc怎么还会再产生中断?那这个wait函数岂不是要timeout了?
谢谢