S3C6410-ADC驱动
我刚学linux,今天看第一个驱动ADC
在plat-s3c64xx目录下游个adc.c,代码(部分):
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; } . . .}