static __init int register_proc(void) { unsigned char i; unsigned int flag = 0; char proc_name[64]; int gpiocount = MAXGPIO; /* create directory gpio */ gpio_dir = proc_mkdir("gpio", NULL); if (gpio_dir == NULL) goto fault; for (i = 0; i < gpiocount * 3; i++) //create for every GPIO "x_in"," x_out" and "x_dir" { if (i / gpiocount == 0) { flag = GPIO_IN; sprintf(proc_name, "%i_in", i); } if (i / gpiocount == 1) { flag = GPIO_OUT; sprintf(proc_name, "%i_out", i % gpiocount); } if (i / gpiocount == 2) { flag = GPIO_DIR; sprintf(proc_name, "%i_dir", i % gpiocount); } proc_gpio = create_proc_entry(proc_name, S_IRUGO, gpio_dir); if (proc_gpio) { proc_gpio->read_proc = gpio_proc_read; proc_gpio->write_proc = gpio_proc_write; //proc_gpio->owner = THIS_MODULE; proc_gpio->data = (void *)((i % gpiocount) | flag); } else goto fault; } printk(KERN_NOTICE "gpio_proc: module loaded and /proc/gpio/ created\n"); return 0; fault: cleanup_proc(); return -EFAULT; }
static __init int register_proc(void) { unsigned char i, flag = 0; char proc_name[32]; int gpiocount = 32; /* create directory gpio */ gpio_dir = proc_mkdir("gpio", NULL); if (gpio_dir == NULL) goto fault; // gpio_dir->owner = THIS_MODULE; for (i = 0; i < gpiocount * 3; i++) //create for every GPIO "x_in"," x_out" and "x_dir" { if (i / gpiocount == 0) { flag = GPIO_IN; sprintf(proc_name, "%i_in", i); } if (i / gpiocount == 1) { flag = GPIO_OUT; sprintf(proc_name, "%i_out", i % gpiocount); } if (i / gpiocount == 2) { flag = GPIO_DIR; sprintf(proc_name, "%i_dir", i % gpiocount); } proc_gpio = proc_create_data(proc_name, S_IRUGO, gpio_dir, &fops_data, ((i % gpiocount) | flag)); } proc_gpio = proc_create("info", S_IRUGO, gpio_dir, &fops_info); printk(KERN_NOTICE "gpio_proc: module loaded and /proc/gpio/ created\n"); ar71xx_gpio_init(); return 0; fault: cleanup_proc(); return -EFAULT; }
static void __exit keypad_qxdm_exit(void) { printk(KERN_INFO "%s: keypad_qxdm driver has been unloaded.\n", __func__); cleanup_proc(); return; }