Hi Philip and Russel,
I have applied the patches provided by Philips for the VIDC
audio driver for CLPS7500. However,
when the module reaches the follwoing line in vidc.c:
if (request_irq(hw_config->irq, vidc_sound_dma_irq, 0,
hw_config->name, &dma_start))...
the system hangs again.
I think the problem arises because when there is an interrupt,
the do_IRQ() function is called
(in linux/arch/arm/kernel/irq.c), and desc->mask(irq) calls the
following function:
static void cl7500_mask_irq_dma(unsigned int irq)
{
unsigned int val, mask;
static int done=0;
mask = 1 << (irq & 7);
val = iomd_readb(IOMD_DMAMASK);
iomd_writeb(val & ~mask, IOMD_DMAMASK);
}
This function call causes the hardware to regenerate interrupt.
I looked up the user manual of CLPS7500, and I found that to
disable the IRQ from DMA, I need
to write 0x10 to register DMAMASK and I modified the above funtion
to the following:
static void cl7500_mask_irq_dma(unsigned int irq)
{
unsigned int val, mask;
static int done=0;
iomd_writeb(0x10 /*DMA_SOUND*/, IOMD_DMAMASK);
}
The system now boots succcessfully. I can even successfully cat
something to the /dev/dsp device.
However,I hear no sound from the speaker. I try to do a printk in the
interrupt service routine, and I can see
only one occurrence of interrupt rather than a lot of inteerupts as I
expected.
Can you please kindly tell me where did I do wrong ??
Yick
Hong Kong, China.
_______________________________________________
http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm
Please visit the above address for information on this list.