Ejemplo n.º 1
0
static int jpeg_probe(struct platform_device *pdev)
{
    struct class_device;
    
	int ret;
    struct class_device *class_dev = NULL;
    
    printk("jpeg driver probe\n");
	ret = alloc_chrdev_region(&jpeg_devno, 0, 1, JPEG_DEVNAME);

	if(ret)
	{
	    printk("Error: Can't Get Major number for JPEG Device\n");
	}
	else
	{
	    printk("Get JPEG Device Major number (%d)\n", jpeg_devno);
    }

	jpeg_cdev = cdev_alloc();
    jpeg_cdev->owner = THIS_MODULE;
	jpeg_cdev->ops = &jpeg_fops;

	ret = cdev_add(jpeg_cdev, jpeg_devno, 1);

    jpeg_class = class_create(THIS_MODULE, JPEG_DEVNAME);
    class_dev = (struct class_device *)device_create(jpeg_class, NULL, jpeg_devno, NULL, JPEG_DEVNAME);

    spin_lock_init(&jpeg_dec_lock);
    spin_lock_init(&jpeg_enc_lock);

    // initial codec, register codec ISR
    dec_status = 0;
    enc_status = 0;
    _jpeg_dec_int_status = 0;
    _jpeg_enc_int_status = 0;

    init_waitqueue_head(&dec_wait_queue);
    init_waitqueue_head(&enc_wait_queue);  
    
    mt6573_irq_set_sens(MT6573_JPG_CODEC_IRQ_LINE, MT65xx_LEVEL_SENSITIVE);
    mt6573_irq_unmask(MT6573_JPG_CODEC_IRQ_LINE);

    enable_irq(MT6573_JPG_CODEC_IRQ_LINE);
    if(request_irq(MT6573_JPG_CODEC_IRQ_LINE, (irq_handler_t)jpeg_drv_isr, 0, "jpeg_driver" , NULL))
    {
        printk("JPEG Codec Driver request irq failed\n");
    }
  
	printk("JPEG Probe Done\n");

	NOT_REFERENCED(class_dev);
	return 0;
}
Ejemplo n.º 2
0
static __tcmfunc irqreturn_t _TVC_InterruptHandler(int irq, void *dev_id)
{   
    TVC_REG_IRQ_STS status = TVC_REG->IRQ_STATUS;

    mt6573_irq_mask(MT6573_TVC_IRQ_LINE);

    //printk("_TVC_InterruptHandler, status: %x\n", status);
    
    if (1 == status.IRQ2) {
        status.IRQ2 = 0;
        printk("[WARN][TVC] Overrun !!\n");
    }
    if (1 == status.IRQ0) {
        status.IRQ0 = 0;
        //printk("wake up tvc_checkline!!\n");
        wake_up_interruptible(&_tvcContext.tvc_checkline);
    }
    OUTREG32(&TVC_REG->IRQ_STATUS, AS_UINT32(&status));

    mt6573_irq_unmask(MT6573_TVC_IRQ_LINE);

    return IRQ_HANDLED;
}
Ejemplo n.º 3
0
//static irqreturn_t jpeg_drv_isr(int irq, void *dev_id)
static __tcmfunc irqreturn_t jpeg_drv_isr(int irq, void *dev_id)
{
    JPEG_MSG("JPEG Codec Interrupt\n");
    //jpeg_reg_dump();
    
    if(irq == MT6573_JPG_CODEC_IRQ_LINE)
    {
        mt6573_irq_mask(MT6573_JPG_CODEC_IRQ_LINE);
        
        if(jpeg_isr_dec_lisr() == 0)
        {
            wake_up_interruptible(&dec_wait_queue);
        }

        if(jpeg_isr_enc_lisr() == 0)
        {
            wake_up_interruptible(&enc_wait_queue);
        }
         
        mt6573_irq_unmask(MT6573_JPG_CODEC_IRQ_LINE);        
    }
    
    return IRQ_HANDLED;
}