当前位置: 技术问答>linux和unix
s3c6410平台的I2C驱动问题
来源: 互联网 发布时间:2016-12-05
本文导语: 我有S3C2410的I2C驱动,能不能在6410平台直接使用,我看了两个平台的文档,发现对于I2C部分只有寄存器地址不一样,其他都一样,我想改寄存器的地址,但是找不到在哪里改, res = platform_get_resource(pdev, IORESOURCE_MEM, ...
我有S3C2410的I2C驱动,能不能在6410平台直接使用,我看了两个平台的文档,发现对于I2C部分只有寄存器地址不一样,其他都一样,我想改寄存器的地址,但是找不到在哪里改,
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);//获取寄存器资源
if (res == NULL) {
dev_err(&pdev->dev, "cannot find IO resourcen");
ret = -ENOENT;
goto out;
}
i2c->ioarea = request_mem_region(res->start, (res->end-res->start)+1,
pdev->name);
if (i2c->ioarea == NULL) {
dev_err(&pdev->dev, "cannot request IOn");
ret = -ENXIO;
goto out;
}
i2c->regs = ioremap(res->start, (res->end-res->start)+1);//映射IO内存
if (i2c->regs == NULL) {
dev_err(&pdev->dev, "cannot map IOn");
ret = -ENXIO;
goto out;
}
上面的代码可以得到I2C的地址,但是在往里面追踪下去就不知道该怎么办了,请大家指教。
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);//获取寄存器资源
if (res == NULL) {
dev_err(&pdev->dev, "cannot find IO resourcen");
ret = -ENOENT;
goto out;
}
i2c->ioarea = request_mem_region(res->start, (res->end-res->start)+1,
pdev->name);
if (i2c->ioarea == NULL) {
dev_err(&pdev->dev, "cannot request IOn");
ret = -ENXIO;
goto out;
}
i2c->regs = ioremap(res->start, (res->end-res->start)+1);//映射IO内存
if (i2c->regs == NULL) {
dev_err(&pdev->dev, "cannot map IOn");
ret = -ENXIO;
goto out;
}
上面的代码可以得到I2C的地址,但是在往里面追踪下去就不知道该怎么办了,请大家指教。
|
类似于platform_get_resource这一类获取CPU or 板级资源的,其变量定义一般都在arch/arm/下对应的CPU or 板级文件中,你说的这个,应该在arch/arm/plat-samsung/dev-i2c0.c(和其他dev-i2c*.c)之类的文件中,具体某一块板里使用的i2c口,则在板级对应的文件中注册platform_device时实际确定,如arch/arm/mach-s3c2410/mach-smdk2410.c。
建议先了解platform总线的基本知识再去看代码应该就清楚了,这一部分和i2c的框架关系不太大。
建议先了解platform总线的基本知识再去看代码应该就清楚了,这一部分和i2c的框架关系不太大。
|
你用source insight搜iic设备名,就能找到它的板文件了。
通常在arch/arm/mach-xxx下面。
通常在arch/arm/mach-xxx下面。
|
I2C在linux构架还是比较复杂的,建议楼主系统的了解一下。
ioremap 是地址映射就是你说的寄存器地址。
ioremap 是地址映射就是你说的寄存器地址。
|
楼上回答的对,在BSP中定义各资源,包括了内存,dma,中断等,也就是resource结构体中的各成员。
|
类似于platform_get_resource这一类获取CPU or 板级资源的,其变量定义一般都在arch/arm/下对应的CPU or 板级文件中,你说的这个,应该在arch/arm/plat-samsung/dev-i2c0.c(和其他dev-i2c*.c)之类的文件中,具体某一块板里使用的i2c口,则在板级对应的文件中注册platform_device时实际确定,如arch/arm/mach-s3c2410/mach-smdk2410.c。
建议先了解platform总线的基本知识再去看代码应该就清楚了,这一部分和i2c的框架关系不太大。
建议先了解platform总线的基本知识再去看代码应该就清楚了,这一部分和i2c的框架关系不太大。