Пример #1
0
int gpio_init(void)
{
	verify_gpio_map();

	int fd = open("/dev/mem", O_RDWR);
	int status = 0;
	int ret;

	if (fd == -1) {
		fprintf(stderr, "failed to open /dev/mem: %s\n", strerror(errno));
		return errno;
	}

	ret = gpio_mmap(fd);
	if (ret) {
		fprintf(stderr, "failed to mmap gpio banks: %s\n", strerror(errno));
		status = errno;
		goto ret_close;
	}

	ret = gpio_clock_enable(fd);
	if (ret) {
		fprintf(stderr, "failed to enable gpio clocks: %s\n", strerror(errno));
		status = errno;
		goto ret_close;
	}

ret_close:
	close(fd);
	return status;
}
Пример #2
0
static void gp_gpio_resume_set( void )
{
	int* ptr; 
	if( g_gpio_regSave != 0 ) 
	{
		gpio_clock_enable(1);
		ptr = (int *)g_gpio_regSave;
		gpHalGpioRegRestore( ptr );
		kfree( ptr );
		g_gpio_regSave = 0;	
	}
}
Пример #3
0
static void gp_gpio_suspend_set( void )
{
	int* ptr; 
	if( g_gpio_regSave == 0 ) 
	{
		ptr = kmalloc( 260, GFP_KERNEL);
		gpHalGpioRegSave( ptr );
		g_gpio_regSave = (int)ptr;
		if( ptr == NULL ) 
		{
			printk("[%s][%d]Suspend Error, it allocates memory fail\n", __FUNCTION__, __LINE__);
		}
		gpio_clock_enable(0);
	}
}
Пример #4
0
/**
 * @brief   Gpio driver exit function
 */
static void __exit gpio_exit(void)
{
	misc_deregister(&gpio->dev);
	//gpHalGpioClkEnable(0);
	gpio_clock_enable(0);
	free_irq(gpio_irqs[4], gpio);
	free_irq(gpio_irqs[3], gpio);
	free_irq(gpio_irqs[2], gpio);
	free_irq(gpio_irqs[1], gpio);
	free_irq(gpio_irqs[0], gpio);
	kfree(gpio);
	gpio = NULL;

	platform_device_unregister(&gp_gpio_device);
	platform_driver_unregister(&gp_gpio_driver);
}
Пример #5
0
/**
 * @brief   Gpio driver init function
 */
static int __init gpio_init(void)
{
	int ret = -ENXIO;

	gpio = (gpio_info_t *)kzalloc(sizeof(gpio_info_t),  GFP_KERNEL);
	if (gpio == NULL) 
	{
		ret = -ENOMEM;
		DIAG_ERROR("gpio kmalloc fail\n");
		goto fail_kmalloc;
	}

	/* request irq */
	ret = request_irq(gpio_irqs[0], gpio_irq_handler, 0, "GPIO_0", gpio);
	if (ret < 0) 
	{
		DIAG_ERROR("request irq GPIO_0 fail\n");
		goto fail_request_irq_gpio_0;
	}
	ret = request_irq(gpio_irqs[1], gpio_irq_handler, 0, "GPIO_1", gpio);
	if (ret < 0) 
	{
		DIAG_ERROR("request irq GPIO_1 fail\n");
		goto fail_request_irq_gpio_1;
	}
	ret = request_irq(gpio_irqs[2], gpio_irq_handler, 0, "GPIO_2", gpio);
	if (ret < 0) 
	{
		DIAG_ERROR("request irq GPIO_2 fail\n");
		goto fail_request_irq_gpio_2;
	}
	ret = request_irq(gpio_irqs[3], gpio_irq_handler, 0, "GPIO_3", gpio);
	if (ret < 0) 
	{
		DIAG_ERROR("request irq GPIO_3 fail\n");
		goto fail_request_irq_gpio_3;
	}
	ret = request_irq(gpio_irqs[4], gpio_irq_handler, 0, "GPIO_4", gpio);
	if (ret < 0) 
	{
		DIAG_ERROR("request irq GPIO_4 fail\n");
		goto fail_request_irq_gpio_4;
	}

	/* initliaze */
	init_MUTEX(&gpio->sem);
	//gpHalGpioClkEnable(1);
	gpio_clock_enable(1);

	/* register device */
	gpio->dev.name  = "gpio";
	gpio->dev.minor = MISC_DYNAMIC_MINOR;
	gpio->dev.fops  = &gpio_fops;
	ret = misc_register(&gpio->dev);
	if (ret != 0) 
	{
		DIAG_ERROR("gpio device register fail\n");
		goto fail_device_register;
	}

	platform_device_register(&gp_gpio_device);
	return platform_driver_register(&gp_gpio_driver);

	/* error rollback */
fail_device_register:
	gpio_clock_enable(0);
	free_irq(gpio_irqs[4], gpio);
fail_request_irq_gpio_4:
	free_irq(gpio_irqs[3], gpio);
fail_request_irq_gpio_3:
	free_irq(gpio_irqs[2], gpio);
fail_request_irq_gpio_2:
	free_irq(gpio_irqs[1], gpio);
fail_request_irq_gpio_1:
	free_irq(gpio_irqs[0], gpio);
fail_request_irq_gpio_0:
	kfree(gpio);
	gpio = NULL;
fail_kmalloc:
	return ret;
}