static int __init eddy_gpio_init(void) { int ret = 0; productID = get_productID(); ret = platform_driver_register(&eddy_gpio_driver); return ret; }
static int __init eddy_gpio_init(void) { int ret = 0; ret = platform_driver_register(&eddy_gpio_driver); #if 1 eddy_gpio_l.value[0] = 0x00400131; eddy_gpio_l.value[1] = 0xFFFFFFFF; eddy_gpio_l.value[2] = 0x0457F71F; eddy_gpio_l.mode[0] = 0x00400131; eddy_gpio_l.mode[1] = 0xFFFFFFFF; eddy_gpio_l.mode[2] = 0x0457F71F; eddy_gpio_l.pullup[0] = 0x00400131; eddy_gpio_l.pullup[1] = 0xFFFFFFFF; eddy_gpio_l.pullup[2] = 0x0457F71F; eddy_gpio_l.en_gpio[0] = 0x00400131; eddy_gpio_l.en_gpio[1] = 0xFFFFFFFF; eddy_gpio_l.en_gpio[2] = 0x0457F71F; tmp_gpio_l.value[0] = 0x00400131; tmp_gpio_l.value[1] = 0xFFFFFFFF; tmp_gpio_l.value[2] = 0x0457F71F; tmp_gpio_l.mode[0] = 0x00400131; tmp_gpio_l.mode[1] = 0xFFFFFFFF; tmp_gpio_l.mode[2] = 0x0457F71F; tmp_gpio_l.pullup[0] = 0x00400131; tmp_gpio_l.pullup[1] = 0xFFFFFFFF; tmp_gpio_l.pullup[2] = 0x0457F71F; tmp_gpio_l.en_gpio[0] = 0x00400131; tmp_gpio_l.en_gpio[1] = 0xFFFFFFFF; tmp_gpio_l.en_gpio[2] = 0x0457F71F; set_lowlevel_gpio_info(PIOM,SETGPIOMOD); set_lowlevel_gpio_info(PIOM,PIO_SODR); #endif productID = get_productID(); return ret; }
int eddy_gpio_ioctl(struct inode *inode, struct file *flip, unsigned int command, unsigned long arg) { int ret=0; int tmp = 0; int copy_size =0; void __user *argp = (void __user *)arg; switch (command) { case INIT_PRODUCT: productID = get_productID(); /* all common setting */ /* ready led set mode out */ at91_set_gpio_output(AT91_PIN_PC4,GPIO_HIGH); /* reset swith read */ at91_set_gpio_input(AT91_PIN_PC16,PULLUP_ENABLE); /* hardware reset */ /* each product dependent setting */ init_product(); break; case GET_PRODUCTID: if(productID == 0x00) { productID = get_productID(); } return productID; break; case COMRXON: /* receive enable */ at91_set_gpio_value(AT91_PIN_PC16,GPIO_HIGH); /* transmit disable */ at91_set_gpio_value(AT91_PIN_PC17,GPIO_HIGH); break; case COMTXON: /* receive disable */ at91_set_gpio_value(AT91_PIN_PC16,GPIO_LOW); /* transmit enable */ at91_set_gpio_value(AT91_PIN_PC17,GPIO_LOW); break; case RDY_LED_ON: /* ready LED on */ // printk("ready led on\n"); at91_set_gpio_value(AT91_PIN_PC4,GPIO_HIGH); break; case RDY_LED_OFF: // printk("ready led off\n"); /* ready LED off */ at91_set_gpio_value(AT91_PIN_PC4,GPIO_LOW); break; case RESET_READ: /* reset switch read */ // ret = at91_get_gpio_value(AT91_PIN_PC16); ret = 1; break; case HW_RESET: /* Hardware reset */ at91_set_gpio_value(AT91_PIN_PB19,GPIO_HIGH); udelay(100); at91_set_gpio_value(AT91_PIN_PB19,GPIO_HIGH); udelay(100); at91_set_gpio_value(AT91_PIN_PB19,GPIO_HIGH); udelay(100); break; case SETGPIOMODEIN: if(copy_from_user(&tmp, (void *) arg, sizeof(int))) { return -EFAULT; } else { if(productID == EDDY_CPU) { tmp += AT91_PIN_PC16 ; } if(productID == EDDY_S1_PIN || productID == EDDY_S1_PIN_C || productID == EDDY_S2_M || productID == EDDY_S2_M_C) { tmp += AT91_PIN_PC28 ; } if(productID == EDDY_DK_C) { tmp += AT91_PIN_PC20 ; } } ret = check_gpio_num(tmp); //printk("set gpio mode in ret = %d, tmp = %d \n",ret,tmp); if(ret < 0) { break; } else { ret = at91_set_gpio_input(tmp,PULLUP_ENABLE); break; } case SETGPIOMODEOUT: if(copy_from_user(&tmp, (void *) arg, sizeof(int))) { return -EFAULT; } else { if(productID == EDDY_CPU) { //printk("set gpio mode out Eddy_CPU\n"); tmp += AT91_PIN_PC16 ; } if(productID == EDDY_S1_PIN || productID == EDDY_S1_PIN_C || productID == EDDY_S2_M || productID == EDDY_S2_M_C) { //printk("set gpio mode out Eddy_S1_PIN\n"); tmp += AT91_PIN_PC28 ; } if(productID == EDDY_DK_C) { tmp += AT91_PIN_PC20 ; } } ret = check_gpio_num(tmp); if(ret < 0) { break; } else { ret = at91_set_gpio_output(tmp,GPIO_HIGH); break; } case GETGPIOMODE: if(copy_from_user(&tmp, (void *) arg, sizeof(int))) { return -EFAULT; } else { if(productID == EDDY_CPU) { tmp += AT91_PIN_PC16 ; } if(productID == EDDY_S1_PIN || productID == EDDY_S1_PIN_C || productID == EDDY_S2_M || productID == EDDY_S2_M_C) { tmp += AT91_PIN_PC28 ; } if(productID == EDDY_DK_C) { tmp += AT91_PIN_PC20 ; } } ret = check_gpio_num(tmp); //printk("get gpio mode ret = %d, tmp = %d \n",ret,tmp); if(ret < 0) { break; } else { ret = at91_get_gpio_mode(tmp); break; } case SETGPIOVALUEHIGH: if(copy_from_user(&tmp, (void *) arg, sizeof(int))) { return -EFAULT; } else { if(productID == EDDY_CPU) { tmp += AT91_PIN_PC16 ; } if(productID == EDDY_S1_PIN || productID == EDDY_S1_PIN_C || productID == EDDY_S2_M || productID == EDDY_S2_M_C) { tmp += AT91_PIN_PC28 ; } if(productID == EDDY_DK_C) { tmp += AT91_PIN_PC20 ; } } ret = check_gpio_num(tmp); if(ret < 0) { break; } else { ret = at91_set_gpio_value(tmp,GPIO_HIGH); // printk("set gpio value high = %d \n",tmp); break; } case SETGPIOVALUELOW: //printk("\n"); if(copy_from_user(&tmp, (void *) arg, sizeof(int))) { return -EFAULT; } else { // printk("set gpio value low 1 = %d \n",tmp); if(productID == EDDY_CPU) { tmp += AT91_PIN_PC16 ; } if(productID == EDDY_S1_PIN || productID == EDDY_S1_PIN_C || productID == EDDY_S2_M || productID == EDDY_S2_M_C) { tmp += AT91_PIN_PC28 ; } if(productID == EDDY_DK_C) { tmp += AT91_PIN_PC20 ; } } ret = check_gpio_num(tmp); // printk("set gpio value low 2 = %d \n",tmp); if(ret < 0) { break; } else { ret = at91_set_gpio_value(tmp,GPIO_LOW); // printk("set gpio value low 3 = %d \n",tmp); break; } case GETGPIOVALUE: //printk("\n"); if(copy_from_user(&tmp, (void *) arg, sizeof(int))) { return -EFAULT; } else { if(productID == EDDY_CPU) { tmp += AT91_PIN_PC16 ; } if(productID == EDDY_S1_PIN || productID == EDDY_S1_PIN_C || productID == EDDY_S2_M || productID == EDDY_S2_M_C) { tmp += AT91_PIN_PC28 ; } if(productID == EDDY_DK_C) { tmp += AT91_PIN_PC20 ; } } ret = check_gpio_num(tmp); if(ret < 0) { break; } else { ret = at91_get_gpio_value(tmp); // printk("get gpio value = %d \n",tmp); break; } case GPIO_CHIP: // printk("gpio chip check\n"); ret = system_process(); break; } switch (tmp) { case SETGPIOINIT_LM : copy_size = sizeof(tmp_gpio_l); if (copy_from_user(&tmp_gpio_l, argp, copy_size)) { return -EFAULT; } set_lowlevel_gpio_info(PIOM,SETGPIOMOD); set_lowlevel_gpio_info(PIOM,PIO_SODR); return ret; case SETGPIOMOD_LM : copy_size = sizeof(unsigned int); copy_size *= 3; if (copy_from_user(&tmp_gpio_l.mode[0], argp, copy_size)) { return -EFAULT; } ret = set_lowlevel_gpio_info(PIOM,SETGPIOMOD); return ret; case GETGPIOMOD_LM : ret = get_lowlevel_gpio_info(PIOM, PIO_OSR); copy_size = sizeof(unsigned int); copy_size *= 3; if (copy_to_user(argp, &tmp_gpio_l.mode[0],copy_size)) { return -EFAULT; } return ret; case SETGPIOVAL_LM : copy_size = sizeof(unsigned int); copy_size *= 3; if (copy_from_user(&tmp_gpio_l.value[0], argp, copy_size)) { return -EFAULT; } ret = set_lowlevel_gpio_info(PIOM,PIO_SODR); return ret; case GETGPIOVAL_LM : ret = 0; ret = get_lowlevel_gpio_info(PIOM, PIO_ODSR); copy_size = sizeof(unsigned int); copy_size *= 3; if (copy_to_user(argp, &tmp_gpio_l.value[0],copy_size)) { return -EFAULT; } return 0; case SETGPIOPUL_LM : copy_size = sizeof(unsigned int); copy_size *= 3; if (copy_from_user(&tmp_gpio_l.pullup[0], argp, copy_size)) { return -EFAULT; } ret = set_lowlevel_gpio_info(PIOM,SETGPIOPUL); return ret; case GETGPIOPUL_LM : ret = get_lowlevel_gpio_info(PIOM, PIO_PUSR); copy_size = sizeof(unsigned int); copy_size *= 3; if (copy_to_user(argp, &tmp_gpio_l.pullup[0],copy_size)) { return -EFAULT; } return ret; case SETGPIOMOD_LA : copy_size = sizeof(unsigned int); if (copy_from_user(&tmp_gpio_l.mode[0], argp, copy_size)) { return -EFAULT; } ret = set_lowlevel_gpio_info(PIOA,SETGPIOMOD); return ret; case GETGPIOMOD_LA : ret = get_lowlevel_gpio_info(PIOA, PIO_OSR); copy_size = sizeof(unsigned int); if (copy_to_user(argp, &tmp_gpio_l.mode[0],copy_size)) { return -EFAULT; } return ret; case SETGPIOVAL_LA : copy_size = sizeof(unsigned int); if (copy_from_user(&tmp_gpio_l.value[0], argp, copy_size)) { return -EFAULT; } iowrite32(tmp_gpio_l.value[0], gpio_membase + PIO_SODR); tmp_gpio_l.value[0] = ~(tmp_gpio_l.value[0]) & eddy_gpio_l.en_gpio[0]; iowrite32(tmp_gpio_l.value[0], gpio_membase + PIO_SODR); return 0; case GETGPIOVAL_LA : ret = get_lowlevel_gpio_info(PIOA, PIO_ODSR); copy_size = sizeof(unsigned int); if (copy_to_user(argp, &tmp_gpio_l.value[0],copy_size)) { return -EFAULT; } return ret; case SETGPIOPUL_LA : copy_size = sizeof(unsigned int); if (copy_from_user(&tmp_gpio_l.pullup[0], argp, copy_size)) { return -EFAULT; } ret = set_lowlevel_gpio_info(PIOA,SETGPIOPUL); return ret; case GETGPIOPUL_LA : ret = 0; ret = get_lowlevel_gpio_info(PIOA, PIO_PUSR); copy_size = sizeof(unsigned int); copy_size *= 3; if (copy_to_user(argp, &tmp_gpio_l.pullup[0],copy_size)) { return -EFAULT; } return ret; case SETGPIOMOD_LB : copy_size = sizeof(unsigned int); if (copy_from_user(&tmp_gpio_l.mode[1], argp, copy_size)) { return -EFAULT; } ret = set_lowlevel_gpio_info(PIOB,SETGPIOMOD); return ret; case GETGPIOMOD_LB : ret = get_lowlevel_gpio_info(PIOB, PIO_OSR); copy_size = sizeof(unsigned int); if (copy_to_user(argp, &tmp_gpio_l.mode[1],copy_size)) { return -EFAULT; } return ret; case SETGPIOVAL_LB : copy_size = sizeof(unsigned int); if (copy_from_user(&tmp_gpio_l.value[1], argp, copy_size)) { return -EFAULT; } iowrite32(tmp_gpio_l.value[1], gpio_membase + pio[1] + PIO_SODR); tmp_gpio_l.value[1] = ~(tmp_gpio_l.value[1]) & eddy_gpio_l.en_gpio[1]; iowrite32(tmp_gpio_l.value[1], gpio_membase + pio[1] + PIO_SODR); return 0; case GETGPIOVAL_LB : ret = get_lowlevel_gpio_info(PIOB, PIO_ODSR); copy_size = sizeof(unsigned int); if (copy_to_user(argp, &tmp_gpio_l.value[1],copy_size)) { return -EFAULT; } return ret; case SETGPIOPUL_LB : copy_size = sizeof(unsigned int); if (copy_from_user(&tmp_gpio_l.pullup[1], argp, copy_size)) { return -EFAULT; } ret = set_lowlevel_gpio_info(PIOB,SETGPIOPUL); return ret; case GETGPIOPUL_LB : ret = get_lowlevel_gpio_info(PIOB, PIO_PUSR); copy_size = sizeof(unsigned int); if (copy_to_user(argp, &tmp_gpio_l.pullup[1],copy_size)) { return -EFAULT; } return ret; case SETGPIOMOD_LC : copy_size = sizeof(unsigned int); if (copy_from_user(&tmp_gpio_l.mode[2], argp, copy_size)) { return -EFAULT; } ret = set_lowlevel_gpio_info(PIOC,SETGPIOMOD); return ret; case GETGPIOMOD_LC : ret = get_lowlevel_gpio_info(PIOC, PIO_OSR); copy_size = sizeof(unsigned int); if (copy_to_user(argp, &tmp_gpio_l.mode[2],copy_size)) { return -EFAULT; } return ret; case SETGPIOVAL_LC : copy_size = sizeof(unsigned int); if (copy_from_user(&tmp_gpio_l.value[2], argp, copy_size)) { return -EFAULT; } iowrite32(tmp_gpio_l.value[2], gpio_membase + pio[2] + PIO_SODR); tmp_gpio_l.value[2] = ~(tmp_gpio_l.value[2]) & eddy_gpio_l.en_gpio[2]; iowrite32(tmp_gpio_l.value[2], gpio_membase + pio[2] + PIO_SODR); return 0; case GETGPIOVAL_LC : ret = get_lowlevel_gpio_info(PIOC, PIO_ODSR); copy_size = sizeof(unsigned int); if (copy_to_user(argp, &tmp_gpio_l.value[2],copy_size)) { return -EFAULT; } return ret; case SETGPIOPUL_LC : copy_size = sizeof(unsigned int); if (copy_from_user(&tmp_gpio_l.pullup[2], argp, copy_size)) { return -EFAULT; } ret = set_lowlevel_gpio_info(PIOC,SETGPIOPUL); return ret; case GETGPIOPUL_LC : ret = get_lowlevel_gpio_info(PIOC, PIO_PUSR); copy_size = sizeof(unsigned int); if (copy_to_user(argp, &tmp_gpio_l.pullup[2],copy_size)) { return -EFAULT; } return ret; case SETGPIOMOD : case GETGPIOMOD : case SETGPIOVAL : case GETGPIOVAL : case SETGPIOPUL : case GETGPIOPUL : case SETGPIOMOD_M : case GETGPIOMOD_M : case SETGPIOVAL_M : case GETGPIOVAL_M : case SETGPIOPUL_M : case GETGPIOPUL_M : default : return 0; } return ret; }
int eddy_gpio_ioctl(struct inode *inode, struct file *flip, unsigned int command, unsigned long arg) { int ret=0; int copy_size =0; void __user *argp = (void __user *)arg; switch (command) { case INIT_PRODUCT: /* ready led set mode out */ at91_set_gpio_output(AT91_PIN_PC4,GPIO_HIGH); /* reset swith read */ at91_set_gpio_input(AT91_PIN_PC16,PULLUP_ENABLE); break; case GET_PRODUCTID: productID = get_productID(); return productID; break; case RDY_LED_ON: /* ready LED on */ at91_set_gpio_value(AT91_PIN_PC4,GPIO_HIGH); break; case RDY_LED_OFF: /* ready LED off */ at91_set_gpio_value(AT91_PIN_PC4,GPIO_LOW); break; case RESET_READ: /* reset switch read */ ret = at91_get_gpio_value(AT91_PIN_PC16); break; case SETGPIOINIT: copy_size = sizeof(tmp_gpio_l); if (copy_from_user(&tmp_gpio_l, argp, copy_size)) { return -EFAULT; } memcpy(&eddy_gpio_l,&tmp_gpio_l,copy_size); set_lowlevel_gpio_info(PIOM,SETGPIOENABLE); set_lowlevel_gpio_info(PIOM,SETGPIOMOD); set_lowlevel_gpio_info(PIOM,SETGPIOPUL); set_lowlevel_gpio_info(PIOM,SETGPIOVAL); return ret; case SETGPIOMOD_LM : copy_size = sizeof(unsigned int); copy_size *= 3; if (copy_from_user(&tmp_gpio_l.mode[0], argp, copy_size)) { return -EFAULT; } ret = set_lowlevel_gpio_info(PIOM,SETGPIOMOD); return ret; case GETGPIOMOD_LM : ret = get_lowlevel_gpio_info(PIOM, PIO_OSR); copy_size = sizeof(unsigned int); copy_size *= 3; if (copy_to_user(argp, &tmp_gpio_l.mode[0],copy_size)) { return -EFAULT; } return ret; case SETGPIOVAL_LM : copy_size = sizeof(unsigned int); copy_size *= 3; if (copy_from_user(&tmp_gpio_l.value[0], argp, copy_size)) { return -EFAULT; } ret = set_lowlevel_gpio_info(PIOM,SETGPIOVAL); return ret; case GETGPIOVAL_LM : ret = 0; ret = get_lowlevel_gpio_info(PIOM, PIO_PDSR); copy_size = sizeof(unsigned int); copy_size *= 3; if (copy_to_user(argp, &tmp_gpio_l.value[0],copy_size)) { return -EFAULT; } return 0; case SETGPIOPUL_LM : copy_size = sizeof(unsigned int); copy_size *= 3; if (copy_from_user(&tmp_gpio_l.pullup[0], argp, copy_size)) { return -EFAULT; } ret = set_lowlevel_gpio_info(PIOM,SETGPIOPUL); return ret; case GETGPIOPUL_LM : ret = get_lowlevel_gpio_info(PIOM, PIO_PUSR); copy_size = sizeof(unsigned int); copy_size *= 3; if (copy_to_user(argp, &tmp_gpio_l.pullup[0],copy_size)) { return -EFAULT; } return ret; case SETGPIOMOD_LA : copy_size = sizeof(unsigned int); if (copy_from_user(&tmp_gpio_l.mode[0], argp, copy_size)) { return -EFAULT; } ret = set_lowlevel_gpio_info(PIOA,SETGPIOMOD); return ret; case GETGPIOMOD_LA : ret = get_lowlevel_gpio_info(PIOA, PIO_OSR); copy_size = sizeof(unsigned int); if (copy_to_user(argp, &tmp_gpio_l.mode[0],copy_size)) { return -EFAULT; } return ret; case SETGPIOVAL_LA : copy_size = sizeof(unsigned int); if (copy_from_user(&tmp_gpio_l.value[0], argp, copy_size)) { return -EFAULT; } eddy_gpio_l.value[0] = tmp_gpio_l.value[0]; __raw_writel(tmp_gpio_l.value[0], gpio_membase + PIO_SODR); tmp_gpio_l.value[0] = ~(tmp_gpio_l.value[0]) & eddy_gpio_l.en_gpio[0]; __raw_writel(tmp_gpio_l.value[0], gpio_membase + PIO_CODR); return 0; case GETGPIOVAL_LA : ret = get_lowlevel_gpio_info(PIOA, PIO_PDSR); copy_size = sizeof(unsigned int); if (copy_to_user(argp, &tmp_gpio_l.value[0],copy_size)) { return -EFAULT; } return ret; case SETGPIOPUL_LA : copy_size = sizeof(unsigned int); if (copy_from_user(&tmp_gpio_l.pullup[0], argp, copy_size)) { return -EFAULT; } ret = set_lowlevel_gpio_info(PIOA,SETGPIOPUL); return ret; case GETGPIOPUL_LA : ret = 0; ret = get_lowlevel_gpio_info(PIOA, PIO_PUSR); copy_size = sizeof(unsigned int); copy_size *= 3; if (copy_to_user(argp, &tmp_gpio_l.pullup[0],copy_size)) { return -EFAULT; } return ret; case SETGPIOMOD_LB : copy_size = sizeof(unsigned int); if (copy_from_user(&tmp_gpio_l.mode[1], argp, copy_size)) { return -EFAULT; } ret = set_lowlevel_gpio_info(PIOB,SETGPIOMOD); return ret; case GETGPIOMOD_LB : ret = get_lowlevel_gpio_info(PIOB, PIO_OSR); copy_size = sizeof(unsigned int); if (copy_to_user(argp, &tmp_gpio_l.mode[1],copy_size)) { return -EFAULT; } return ret; case SETGPIOVAL_LB : copy_size = sizeof(unsigned int); if (copy_from_user(&tmp_gpio_l.value[1], argp, copy_size)) { return -EFAULT; } eddy_gpio_l.value[1] = tmp_gpio_l.value[1]; __raw_writel(tmp_gpio_l.value[1], gpio_membase + pio[1] + PIO_SODR); tmp_gpio_l.value[1] = ~(tmp_gpio_l.value[1]) & eddy_gpio_l.en_gpio[1]; __raw_writel(tmp_gpio_l.value[1], gpio_membase + pio[1] + PIO_CODR); return 0; case GETGPIOVAL_LB : ret = get_lowlevel_gpio_info(PIOB, PIO_PDSR); copy_size = sizeof(unsigned int); if (copy_to_user(argp, &tmp_gpio_l.value[1],copy_size)) { return -EFAULT; } return ret; case SETGPIOPUL_LB : copy_size = sizeof(unsigned int); if (copy_from_user(&tmp_gpio_l.pullup[1], argp, copy_size)) { return -EFAULT; } ret = set_lowlevel_gpio_info(PIOB,SETGPIOPUL); return ret; case GETGPIOPUL_LB : ret = get_lowlevel_gpio_info(PIOB, PIO_PUSR); copy_size = sizeof(unsigned int); if (copy_to_user(argp, &tmp_gpio_l.pullup[1],copy_size)) { return -EFAULT; } return ret; case SETGPIOMOD_LC : copy_size = sizeof(unsigned int); if (copy_from_user(&tmp_gpio_l.mode[2], argp, copy_size)) { return -EFAULT; } ret = set_lowlevel_gpio_info(PIOC,SETGPIOMOD); return ret; case GETGPIOMOD_LC : ret = get_lowlevel_gpio_info(PIOC, PIO_OSR); copy_size = sizeof(unsigned int); if (copy_to_user(argp, &tmp_gpio_l.mode[2],copy_size)) { return -EFAULT; } return ret; case SETGPIOVAL_LC : copy_size = sizeof(unsigned int); if (copy_from_user(&tmp_gpio_l.value[2], argp, copy_size)) { return -EFAULT; } eddy_gpio_l.value[2] = tmp_gpio_l.value[2]; __raw_writel(tmp_gpio_l.value[2], gpio_membase + pio[2] + PIO_SODR); tmp_gpio_l.value[2] = ~(tmp_gpio_l.value[2]) & eddy_gpio_l.en_gpio[2]; __raw_writel(tmp_gpio_l.value[2], gpio_membase + pio[2] + PIO_CODR); return 0; case GETGPIOVAL_LC : ret = get_lowlevel_gpio_info(PIOC, PIO_PDSR); copy_size = sizeof(unsigned int); if (copy_to_user(argp, &tmp_gpio_l.value[2],copy_size)) { return -EFAULT; } return ret; case SETGPIOPUL_LC : copy_size = sizeof(unsigned int); if (copy_from_user(&tmp_gpio_l.pullup[2], argp, copy_size)) { return -EFAULT; } ret = set_lowlevel_gpio_info(PIOC,SETGPIOPUL); return ret; case GETGPIOPUL_LC : ret = get_lowlevel_gpio_info(PIOC, PIO_PUSR); copy_size = sizeof(unsigned int); if (copy_to_user(argp, &tmp_gpio_l.pullup[2],copy_size)) { return -EFAULT; } return ret; default : return 0; } return ret; }