Linux设备驱动剖析之Input(一)
Linux设备驱动剖析之Input(一)
前言
Linux Input子系统架构图
__init input_init(
err = class_register(& printk(KERN_ERR
err =
err = register_chrdev(INPUT_MAJOR, , & printk(KERN_ERR
fail1: class_unregister(& }
__init input_proc_init( proc_dir_entry *
proc_bus_input_dir = proc_mkdir( (! -
entry = proc_create(, & (!
entry = proc_create(, & (!
fail2: remove_proc_entry( fail1: remove_proc_entry( - }
file_operations input_fops = .owner = .open = };
__init gpio_keys_init( platform_driver_register(& }
platform_driver gpio_keys_device_driver = .probe = .remove = .driver = .name = .owner = .pm = &
};
__devinit gpio_keys_probe( platform_device * gpio_keys_platform_data *pdata = pdev-> gpio_keys_drvdata * device *dev = &pdev-> input_dev * wakeup =
ddata = kzalloc(( gpio_keys_drvdata) +
pdata->nbuttons * ( input = (!ddata || ! dev_err(dev, error = -
ddata->input = ddata->n_buttons = pdata-> ddata->enable = pdata-> ddata->disable = pdata-> mutex_init(&ddata->
input->name = pdev-> input->phys = input->dev.parent = &pdev-> input->open = input->close =
input->id.bustype = input->id.vendor = input->id.product = input->id.version =
(pdata-> __set_bit(EV_REP, input->
(i = ; i < pdata->nbuttons; i++ gpio_keys_button *button = &pdata-> gpio_button_data *bdata = &ddata-> unsigned type = button->type ?
bdata->input = bdata->button =
error =
(button-> wakeup =
input_set_capability(input, type, button->
error = sysfs_create_group(&pdev->dev.kobj, & dev_err(dev,
error = dev_err(dev,
(i = ; i < pdata->nbuttons; i++ gpio_keys_report_event(&ddata->
device_init_wakeup(&pdev->
sysfs_remove_group(&pdev->dev.kobj, & (--i >= free_irq(gpio_to_irq(pdata->buttons[i].gpio), &ddata-> (ddata-> del_timer_sync(&ddata-> cancel_work_sync(&ddata-> gpio_free(pdata->
}
gpio_keys_button * unsigned rep:;
(*enable)( device * (*disable)( device * };
input_dev * unsigned (*enable)( device * (*disable)( device * gpio_button_data data[ };
gpio_keys_button * input_dev * timer_debounce;
};
code;
* type;
wakeup;
debounce_interval;
};
input_dev *input_allocate_device( input_dev *
dev = kzalloc(( dev->dev.type = & dev->dev. = & device_initialize(&dev-> mutex_init(&dev-> spin_lock_init(&dev-> INIT_LIST_HEAD(&dev-> INIT_LIST_HEAD(&dev->
}
* * *
unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned
unsigned
unsigned unsigned * (*setkeycode)( input_dev * unsigned scancode, unsigned (*getkeycode)( input_dev * unsigned scancode, unsigned *
ff_device *
unsigned
input_mt_slot *
input_absinfo *
unsigned unsigned unsigned unsigned
(*open)( input_dev * (*close)( input_dev * (*flush)( input_dev *dev, file * (*)( input_dev *dev, unsigned type, unsigned code,
input_handle *
unsigned
};
};
评论暂时关闭