日期:2014-05-16 浏览次数:21025 次
static struct platform_driver s3c_adc_driver = {
       .probe          = s3c_adc_probe,
       .remove         = s3c_adc_remove,
       .suspend        = s3c_adc_suspend,
       .resume         = s3c_adc_resume,
       .driver        = {
        .owner    = THIS_MODULE,
        .name    = "s3c-adc",
    },
};
int __init s3c_adc_init(void)
{
    printk(banner);
    return platform_driver_register(&s3c_adc_driver);
}
static int __init s3c_adc_probe(struct platform_device *pdev)
{
    struct resource    *res;
    struct device *dev;
    int ret;
    int size;
    res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
    dev = &pdev->dev;
    if(res == NULL){
        dev_err(dev,"no memory resource specified\n");
        return -ENOENT;
    }
    size = (res->end - res->start) + 1;
#if !defined(ADC_WITH_TOUCHSCREEN)
    adc_mem = request_mem_region(res->start, size, pdev->name);
    if(adc_mem == NULL){
        dev_err(dev, "failed to get memory region\n");
        ret = -ENOENT;
        goto err_req;
    }
#endif
         /* 为什么下面这一句就得到了一个虚拟地址,我的意思是res->start为什么就代表了ADC基地址 */
    base_addr = ioremap(res->start,size);
    if(base_addr ==  NULL){
        dev_err(dev,"fail to ioremap() region\n");
        ret = -ENOENT;
        goto err_map;
    }
    .
    .
    .
}