/*Atmel QT-60486 drivers *Sistemas Embebidos *UNAL *Authors: amasprillav,jsbuendiag,jamonsalveh *Year: 2010-II*/ #include /* Needed by all modules */ #include /* Needed for KERN_INFO */ #include #include #include /* We want an interrupt */ #include /* We want an interrupt */ #include #include #include #include #include #include #include #include #define FPGA_IRQ_PIN JZ_GPIO_PORTC(15) //pin del irq #define FPGA_BASE 0xB5000000 //direccion virtual base de la FPGA MODULE_AUTHOR("amasprillav name = "CAP Keyboard"; //asignacion de datos del teclado cap_keyboard->phys = "capkey/input0"; //direccion fisica cap_keyboard->id.bustype = BUS_HOST;//tipo de bus cap_keyboard->id.vendor = 0x0010; cap_keyboard->id.product = 0x0001; cap_keyboard->id.version = 0x001; cap_keyboard->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); cap_keyboard->keycode = cap_keycode;//asignacion del arreglo del keycode cap_keyboard->keycodesize = sizeof(unsigned char); cap_keyboard->keycodemax = ARRAY_SIZE(cap_keycode); for (i = 0; i <= 60; i++) { //funcion que ubica las 48 teclas (keycode) en memoria set_bit(cap_keycode[i], cap_keyboard->keybit); } error = input_register_device(cap_keyboard);//indica al sistema el nuevo dispositivo de entrada if (error) { input_free_device(cap_keyboard); return error; } irq = gpio_to_irq(FPGA_IRQ_PIN);//asigna el numero del irq al pin fisico del procesador res = request_irq(irq, irq_handler, IRQF_DISABLED | IRQF_TRIGGER_RISING, "cap_keyboard", NULL); // asignar el valor del irq y la funcion que lo utiliza return 0; } static void __exit atakbd_exit(void) { input_unregister_device(cap_keyboard);//libera los recursos utilizados por el dispositivo free_irq(irq, NULL); } module_init(atakbd_init); module_exit(atakbd_exit);