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.

Reply via email to