找回密码
 注册
搜索
查看: 2178|回复: 13

i2c-gpio问题!!!

[复制链接]
发表于 2011-12-22 20:49:29 | 显示全部楼层 |阅读模式
最近在android平台上用gpio口做i2c通信,通过i2c-gpio.c文件实现i2c通信,现在做到平台设备生成了,i2c设备也可以看到,但在开机时报了个错误。后来查看发现在real_probe函数里probe failed,
if (ret != -ENODEV && ret != -ENXIO) {
                /* driver matched but the probe failed */
                printk(KERN_WARNING
                       "%s: probe of %s failed with error %d\n",
                       drv->name, dev->bus_id, ret);
        }
代码注释说是driver attach but probe failed,请求高手指教啊!!!
发表于 2011-12-30 16:26:03 | 显示全部楼层
以下是引用zrtqinqi在2011-12-26 20:44:11的发言:

终于把问题解决了,在此总结下,probe失败是因为驱动代码里通信不成功导致的,而通信未成功是因为open_drain要改为0,不知道高通芯片为什么这么特别。

用C写的



奇怪,要把OD关掉?设置成0是关掉吗?一般I2C总线空闲电平是高电平,是要外部上拉吧,可能你外部没做上拉,然后又内部设置成了OD,结果没信号。
点评回复

使用道具 举报

发表于 2011-12-30 13:14:19 | 显示全部楼层
这是灌水区,不是技术讨论区。
点评回复

使用道具 举报

 楼主| 发表于 2011-12-26 20:44:11 | 显示全部楼层
以下是引用sandy77在2011-12-26 17:59:43的发言:
pin的模式对吗

终于把问题解决了,在此总结下,probe失败是因为驱动代码里通信不成功导致的,而通信未成功是因为open_drain要改为0,不知道高通芯片为什么这么特别。

用C写的
点评回复

使用道具 举报

发表于 2011-12-26 18:22:24 | 显示全部楼层
兄弟,诚心问问题,好歹指点一下啊!
点评回复

使用道具 举报

发表于 2011-12-26 17:59:43 | 显示全部楼层
pin的模式对吗
点评回复

使用道具 举报

 楼主| 发表于 2011-12-26 16:25:22 | 显示全部楼层
是因为调到了驱动模块的probe,由于通信不成功导致的问题.挂示波器发现没有波形输出.
点评回复

使用道具 举报

发表于 2011-12-26 12:10:16 | 显示全部楼层

if (ret != -ENODEV && ret != -ENXIO) {
  /* driver matched but the probe failed */
的前面几句打出来看看
点评回复

使用道具 举报

发表于 2011-12-26 08:50:18 | 显示全部楼层
请问程式是用什么软件写的,C++吗?
点评回复

使用道具 举报

发表于 2011-12-25 14:37:33 | 显示全部楼层
以下是引用zrtqinqi在2011-12-24 17:49:32的发言:

您高见?好歹也说点有用的


好吧 我菜鸟 我sb
点评回复

使用道具 举报

 楼主| 发表于 2011-12-24 17:49:32 | 显示全部楼层
以下是引用deep_pro在2011-12-24 15:05:17的发言:
lz的基础不行啊 没有linux驱动模型的概念就只能瞎调
沾的代码都沾不到重点

先要学会 总线 设备 驱动 这三者的关系,自然就知道probe是什么东西了
买本eldk慢慢学习吧

您高见?好歹也说点有用的
点评回复

使用道具 举报

发表于 2011-12-24 15:05:17 | 显示全部楼层
lz的基础不行啊 没有linux驱动模型的概念就只能瞎调
沾的代码都沾不到重点

先要学会 总线 设备 驱动 这三者的关系,自然就知道probe是什么东西了
买本eldk慢慢学习吧
点评回复

使用道具 举报

 楼主| 发表于 2011-12-23 22:11:42 | 显示全部楼层
没人应答?看来这论坛太冷清了,还是大家都深藏不露?
static struct i2c_gpio_platform_data i2c3_data = {
        .sda_pin = 107,
        .scl_pin = 108,
        .udelay = 5,         
        .sda_is_open_drain = 1,
        .scl_is_open_drain = 1,
      

};


static struct platform_device i2c3_device = {
        .name           = "i2c-gpio",
        .id                     = 2,
        .dev = {
                .platform_data  = &i2c3_data,
        },

};


static struct platform_device *platform_devs_pre[] __initdata = {
                       & i2c3_device,//注册

};


static struct i2c_board_info i2c_devices[] = {
        {
                I2C_BOARD_INFO("lis35de", 0x1C),
        },


};
然后platform_add_devices(platform_devs_pre,
ARRAY_SIZE(platform_devs_post));
        i2c_register_board_info(2, i2c_devices, ARRAY_SIZE(i2c_devices));

id设为2的话一切都成浮云了(sys/devices/下只有i2c-0和i2c-1),改成1的话还可以在sys/devices/i2c-1下面看到对应i2c设备,但log里打出probe失败,望高手指教!!!!
点评回复

使用道具 举报

发表于 2012-4-1 11:58:32 | 显示全部楼层

楼主求联系方式!

最近也在搞这个。 看到你的帖子。我的是MTK平台的。
出现错误:
[    1.066640] i2c-gpio: probe of i2c-gpio.2 failed with error -38

Error: Driver 'i2c-gpio' is already registered, aborting...

继续帮助!谢谢
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2025-1-24 13:55 , Processed in 0.048761 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表