Exemplo n.º 1
0
int __init Si4709_driver_init(void)
{
    int ret = 0;

    debug("Si4709_driver_init called");  

    /*Initilize the Si4709 dev mutex*/
    Si4709_dev_mutex_init();

	  
    /*misc device registration*/
    if( (ret = misc_register(&Si4709_misc_device)) < 0 )
    {
        error("Si4709_driver_init misc_register failed");
        return ret; 	  	
    }
    
    s3c_gpio_cfgpin(GPIO_FM_INT, S3C_GPIO_SFN(GPIO_FM_INT_AF));
	s3c_gpio_setpull(GPIO_FM_INT, S3C_GPIO_PULL_NONE);

	set_irq_type(Si4709_IRQ, IRQ_TYPE_EDGE_BOTH);

	if( (ret = request_irq(Si4709_IRQ, Si4709_isr, IRQF_DISABLED, "Si4709", (void *)NULL)) < 0 ) 
	{
        error("Si4709_driver_init request_irq failed %d", Si4709_IRQ);
        goto MISC_DREG;
	} 

	if (gpio_is_valid(GPIO_FM_nRST)) {
		if (gpio_request(GPIO_FM_nRST, S3C_GPIO_LAVEL(GPIO_FM_nRST))) 
			printk(KERN_ERR "Failed to request GPIO_FM_nRST!\n");
		gpio_direction_output(GPIO_FM_nRST, GPIO_LEVEL_LOW);
	}
	s3c_gpio_setpull(GPIO_FM_INT, S3C_GPIO_PULL_DOWN); 

    /****Resetting the device****/
	gpio_set_value(GPIO_FM_nRST, GPIO_LEVEL_LOW);	
	gpio_set_value(GPIO_FM_nRST, GPIO_LEVEL_HIGH);	

    /*Add the i2c driver*/
    if ( (ret = Si4709_i2c_drv_init() < 0) ) 
    {
         goto MISC_IRQ_DREG;
    }

    init_waitqueue_head(&Si4709_waitq);

    debug("Si4709_driver_init successful");  

    return ret;

MISC_IRQ_DREG:
    free_irq(Si4709_IRQ, (void *)NULL);

MISC_DREG:
    misc_deregister(&Si4709_misc_device);
		
    return ret; 
}
Exemplo n.º 2
0
int Si4709_driver_init(void)
{
	int ret = 0;

	printk("[diony]%s:\n", __func__);

	/*Initialize the Si4709 dev mutex*/
	Si4709_dev_mutex_init();

	/*misc device registration*/
	ret = misc_register(&Si4709_misc_device);
	if (ret < 0) {
		pr_err("%s: misc_register failed\n", __func__);
		return ret;
	}
#if 0
	s3c_gpio_cfgpin(GPIO_FM_INT, S3C_GPIO_SFN(0xF));
	s3c_gpio_setpull(GPIO_FM_INT, S3C_GPIO_PULL_NONE);
#endif
if (gpio_tlmm_config(GPIO_CFG(GPIO_FM_INT, 0, GPIO_CFG_INPUT,
				  GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE))
		pr_err("%s: gpio_tlmm_config (gpio=%d) failed\n",
		       __func__, GPIO_FM_INT);

	set_irq_type(FM_IRQ_INT, IRQ_TYPE_EDGE_FALLING);

	ret = request_irq(FM_IRQ_INT, Si4709_isr, IRQF_DISABLED, "Si4709",
		NULL);
	if (ret) {
		pr_err("%s: request_irq failed %d\n", __func__, GPIO_FM_INT);
		goto MISC_DREG;
	}

	if (gpio_is_valid(FM_RESET)) {
		if (gpio_request(FM_RESET, "GPJ2"))
			printk(KERN_ERR "Failed to request FM_RESET!\n");
		gpio_direction_output(FM_RESET, 0);
	}

	/* VNVS: 13-OCT'09---- Initially Pulling the interrupt pin HIGH
	 * as the FM Radio device gives 5ms low pulse
	 */
#if 0
	s3c_gpio_setpull(GPIO_FM_INT, S3C_GPIO_PULL_UP);
#endif
if (gpio_tlmm_config(GPIO_CFG(GPIO_FM_INT, 0, GPIO_CFG_INPUT,
				  GPIO_CFG_PULL_UP, GPIO_CFG_2MA), GPIO_CFG_ENABLE))
		pr_err("%s: gpio_tlmm_config (gpio=%d) failed\n",
		       __func__, GPIO_FM_INT);
	/* Resetting the device */
	gpio_set_value(FM_RESET, 0);
	gpio_set_value(FM_RESET, 1);
	/* Freeing the FM_RESET pin */
	gpio_free(FM_RESET);

	/* Add the i2c driver */
	ret = Si4709_i2c_drv_init();
	if (ret < 0)
		goto MISC_IRQ_DREG;

	init_waitqueue_head(&Si4709_waitq);

	printk("Si4709_driver_init successful");

	return ret;

MISC_IRQ_DREG:
	free_irq(FM_IRQ_INT, NULL);
MISC_DREG:
	misc_deregister(&Si4709_misc_device);

    return ret;
}
Exemplo n.º 3
0
 int __init Si4709_driver_init(void)
{
    int ret = 0;
	
		
    debug("Si4709_driver_init called");  

    /*Initialize the Si4709 dev mutex*/
    Si4709_dev_mutex_init();

	  
    /*misc device registration*/
    if( (ret = misc_register(&Si4709_misc_device)) < 0 )
    {
        error("Si4709_driver_init misc_register failed");
        return ret; 	  	
    }
    
	set_irq_type(Si4709_IRQ, IRQ_TYPE_EDGE_FALLING);

	if( (ret = request_irq(Si4709_IRQ, Si4709_isr, IRQF_DISABLED, "Si4709", (void *)NULL)) < 0 ) 
	{
		error("Si4709_driver_init request_irq failed %d", OMAP_GPIO_FM_INT);
		goto MISC_DREG;
	} 
	else
	{
		debug("Si4709_driver_init request_irq success %d", OMAP_GPIO_FM_INT);
		//enable_irq(Si4709_IRQ);
	}

	
    /****Resetting the device****/
	gpio_set_value(OMAP_GPIO_FM_nRST, GPIO_LEVEL_LOW);	
	mdelay(5);
	gpio_set_value(OMAP_GPIO_FM_nRST, GPIO_LEVEL_HIGH);
	/*VNVS: 13-OCT'09---- Freeing the FM_RESET pin*/
	//gpio_free(OMAP_GPIO_FM_nRST);	//changoh.heo 2010.11.12 delete code
    /*Add the i2c driver*/
    if ( (ret = Si4709_i2c_drv_init() < 0) ) 
    {
         goto MISC_IRQ_DREG;
    }

    init_waitqueue_head(&Si4709_waitq);

	debug_ioctls();
	disable_irq(Si4709_IRQ);
    debug("Si4709_driver_init successful");  
	mdelay(5);
	gpio_set_value(OMAP_GPIO_FM_nRST, GPIO_LEVEL_LOW);//changoh.heo 2010.11.12 delete code

    return ret;

MISC_IRQ_DREG:
    free_irq(Si4709_IRQ, (void *)NULL);

MISC_DREG:
    misc_deregister(&Si4709_misc_device);
		
    return ret; 
}
Exemplo n.º 4
0
int __init Si4709_driver_init(void)
{
	int ret = 0;
	unsigned int gpio_fm_rst = GPIO_FM_RST;

	debug("Si4709_driver_init called\n");

#if defined(CONFIG_MACH_T0)
	if (system_rev >= 3)
		gpio_fm_rst = GPIO_FM_RST_REV03;
#endif
	/*Initialize the Si4709 dev mutex */
	Si4709_dev_mutex_init();

	/*misc device registration */
	ret = misc_register(&Si4709_misc_device);
	if (ret < 0) {
		error("Si4709_driver_init misc_register failed\n");
		return ret;
	}

#if defined(CONFIG_MACH_M0)
	if (system_rev >= 15)
		Si4709_int = GPIO_FM_INT_REV15;
	else
#endif
		Si4709_int = GPIO_FM_INT;

	Si4709_irq = gpio_to_irq(Si4709_int);

	irq_set_irq_type(Si4709_irq, IRQ_TYPE_EDGE_FALLING);
	/*KGVS: Configuring the GPIO_FM_INT in mach-jupiter.c */
	ret = request_irq(Si4709_irq, Si4709_isr,
		IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING, "Si4709", NULL);
	if (ret) {
		error("Si4709_driver_init request_irq "
			"failed %d", Si4709_int);
		goto MISC_DREG;
	} else
		debug("Si4709_driver_init request_irq "
		"success %d", Si4709_int);

	if (gpio_is_valid(gpio_fm_rst)) {
		if (gpio_request(gpio_fm_rst, "FM_RST"))
			debug(KERN_ERR "Failed to request "
			"FM_RESET!\n\n");
		gpio_direction_output(gpio_fm_rst, GPIO_LEVEL_LOW);
	}

#if defined(CONFIG_MACH_M0) || defined(CONFIG_MACH_M0_CTC)
	if (gpio_is_valid(GPIO_FM_MIC_SW)) {
		if (gpio_request(GPIO_FM_MIC_SW, "FM_MIC_SW"))
			debug(KERN_ERR "Failed to request "
			"FM_MIC_SW!\n\n");
		gpio_direction_output(GPIO_FM_MIC_SW, GPIO_LEVEL_LOW);
	}
#endif

	/*VNVS: 13-OCT'09----
	Initially Pulling the interrupt pin HIGH
	as the FM Radio device gives 5ms low pulse*/
	s3c_gpio_setpull(Si4709_int, S3C_GPIO_PULL_UP);
	/****Resetting the device****/
	gpio_set_value(gpio_fm_rst, GPIO_LEVEL_LOW);
	s3c_gpio_cfgpin(Si4709_int, S3C_GPIO_OUTPUT);
	s3c_gpio_setpull(Si4709_int, S3C_GPIO_PULL_DOWN);
	gpio_set_value(gpio_fm_rst, GPIO_LEVEL_HIGH);
	usleep_range(10, 15);
	s3c_gpio_cfgpin(Si4709_int, S3C_GPIO_SFN(0xF));
	s3c_gpio_setpull(Si4709_int, S3C_GPIO_PULL_UP);

	gpio_free(gpio_fm_rst);

	/*Add the i2c driver */
	ret = Si4709_i2c_drv_init();
	if (ret < 0)
		goto MISC_IRQ_DREG;

	init_waitqueue_head(&Si4709_waitq);

	debug("Si4709_driver_init successful\n");

	return ret;

MISC_IRQ_DREG:
	free_irq(Si4709_irq, NULL);
MISC_DREG:
	misc_deregister(&Si4709_misc_device);

	Si4709_dev_mutex_destroy();

	return ret;
}
Exemplo n.º 5
0
 int __init Si4709_driver_init(void)
{
    int ret = 0;
	
		
    debug("Si4709_driver_init called");  

    /*Initialize the Si4709 dev mutex*/
    Si4709_dev_mutex_init();

	  
    /*misc device registration*/
    if( (ret = misc_register(&Si4709_misc_device)) < 0 )
    {
        error("Si4709_driver_init misc_register failed");
        return ret; 	  	
    }

   s3c_gpio_cfgpin(GPIO_FM_INT, S3C_GPIO_SFN(0xF));
   s3c_gpio_setpull(GPIO_FM_INT, S3C_GPIO_PULL_NONE);

	set_irq_type(FM_IRQ_INT, IRQ_TYPE_EDGE_FALLING);    
	
   /*KGVS: Configuring the GPIO_FM_INT in mach-jupiter.c*/
	if( (ret = request_irq(FM_IRQ_INT, Si4709_isr, IRQF_DISABLED , "Si4709", NULL )) )
	{
        error("Si4709_driver_init request_irq failed %d", GPIO_FM_INT);
        goto MISC_DREG;
	} 
	else
		debug("Si4709_driver_init request_irq success %d", GPIO_FM_INT);						

	if (gpio_is_valid(FM_RESET)) {
		if (gpio_request(FM_RESET, "GPJ2")) 
			printk(KERN_ERR "Failed to request FM_RESET!\n");
		gpio_direction_output(FM_RESET, GPIO_LEVEL_LOW);
	}
	
	/*VNVS: 13-OCT'09---- Initially Pulling the interrupt pin HIGH as the FM Radio device gives 5ms low pulse*/
	s3c_gpio_setpull(GPIO_FM_INT, S3C_GPIO_PULL_UP);
	
    /****Resetting the device****/
	gpio_set_value(FM_RESET, GPIO_LEVEL_LOW);	
	gpio_set_value(FM_RESET, GPIO_LEVEL_HIGH);	
	/*VNVS: 13-OCT'09---- Freeing the FM_RESET pin*/
	gpio_free(FM_RESET);	

    /*Add the i2c driver*/
    if ( (ret = Si4709_i2c_drv_init() < 0) ) 
    {
         goto MISC_IRQ_DREG;
    }

    init_waitqueue_head(&Si4709_waitq);

    debug("Si4709_driver_init successful");  
	
    return ret;

MISC_IRQ_DREG:
    free_irq(FM_IRQ_INT, NULL);  
MISC_DREG:
    misc_deregister(&Si4709_misc_device);
		
    return ret; 
}