当前位置:  技术问答>linux和unix

100分请教高手I2C驱动的小问题

    来源: 互联网  发布时间:2016-12-25

    本文导语:  I2C设备驱动的probe函数传进去的参数如下: static int  i2c1_driver_probe( struct i2c_client *client, const struct i2c_device_id *id)  我想得到: struct platform_device s3c_device_i2c1;这一个对像; 请问应该怎么办? 1.为什么I2C设备驱...

I2C设备驱动的probe函数传进去的参数如下:
static int  i2c1_driver_probe( struct i2c_client *client, const struct i2c_device_id *id) 
我想得到:
struct platform_device s3c_device_i2c1;这一个对像;
请问应该怎么办?
1.为什么I2C设备驱动probe带的不是:platform_device参数而是:struct i2c_client *client ?
2.两者有什么联系?从struct i2c_client *client怎样才能得到:struct platform_device s3c_device_i2c1?



|
上面说的可能有点乱了,呵呵,主要是probe被调用的条件是:
1,设备被注册至系统内
2,驱动的名字有设备的名字一致
3,调用了驱动注册函数。

|
1,对于第一个问题它应该只是采用了类似的思想,调用的probe函数可以自己处理。
比如,static int s3c24xx_i2c_probe(struct platform_device *pdev)
      static int eeprom_i2c_probe_adapter(struct i2c_adapter *adap)
这个要看自己如何实现了。
2,第二个问题与上一问题基本一样,若采用第一个定义实现,可以转换成第二个,驱动注册使用platform_driver_register;若采用第二个实现,根本无需转换回去。

|
在board-xxx.c里面注册你的platform_device。I2C设备是i2c_board_info。

在probe中
struct platform_device *data;
pdata=(struct platform_device*)client->dev.platform_data; 

要知道怎么实现的需要读代码,可以从下面代码看起
struct i2c_client *
i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
{
struct i2c_client *client;
int status;

client = kzalloc(sizeof *client, GFP_KERNEL);
if (!client)
return NULL;

client->adapter = adap;

client->dev.platform_data = info->platform_data;

if (info->archdata)
client->dev.archdata = *info->archdata;

client->flags = info->flags;
client->addr = info->addr;
client->irq = info->irq;

strlcpy(client->name, info->type, sizeof(client->name));

/* Check for address business */
status = i2c_check_addr(adap, client->addr);
if (status)
goto out_err;

client->dev.parent = &client->adapter->dev;
client->dev.bus = &i2c_bus_type;
client->dev.type = &i2c_client_type;

dev_set_name(&client->dev, "%d-%04x", i2c_adapter_id(adap),
     client->addr);
status = device_register(&client->dev);
if (status)
goto out_err;

dev_dbg(&adap->dev, "client [%s] registered with bus id %sn",
client->name, dev_name(&client->dev));

return client;

out_err:
dev_err(&adap->dev, "Failed to register i2c client %s at 0x%02x "
"(%d)n", client->name, client->addr, status);
kfree(client);
return NULL;
}

|
首先楼主要搞明白i2c驱动注册的过程,另外最好再搞明白linux下虚拟的所谓平台设备。
一般在硬件驱动初始化中有个函数叫platform_driver_register,或driver_register之类的函数,传入他们的参数需要带设备的名字,如果设备被注册到系统中,那么这个函数会继续调用上成的所谓probe的函数,当然传入的就是找到的与驱动相关联的设备。
楼主要是不介意的话,可以先看看下面这个链接,看完后估计你就会明白了。
http://blog.donews.com/21cnbao/archive/2010/07/14/1581997.aspx

|
1.为什么I2C设备驱动probe带的不是:platform_device参数而是:struct i2c_client *client ?
2.两者有什么联系?从struct i2c_client *client怎样才能得到:struct platform_device s3c_device_i2c1?

答:这是平台驱动,平台统一了硬件资源管理, 仔细看源代码, 内核封装了相应的函数.

|
用过i2c协议,不过楼主说的这个驱动方面的小弟就不懂了,友情帮顶一下。

    
 
 

您可能感兴趣的文章:

  • unix/linux知识 iis7站长之家
  • 请教!关于linux字符驱动程序
  • 请教一下在驱动里怎么调用应用程序
  • 请教!linux设备驱动
  • 请教用户空间编写设备驱动
  • Linux新手请教声卡驱动!!!!!!!!!!!
  • 请教各位大大 怎样编写LINUX触摸屏的驱动程序?
  • 请教Linux设备驱动的具体应用(基于PC)
  • 请教linux驱动复杂,庞大的结构
  • 请教一个关于驱动测试程序的问题
  • 高分相送,请教cs5530芯片组声卡驱动的问题
  • 请教:怎么安装声卡驱动?
  • 请教关于linux开发驱动程序的方向
  • 巨难请教网卡驱动
  • 请教一个显卡问题:我是u5的机器,它的显卡是集成的吗?需要安装驱动吗?
  • 请教单片机驱动程序开发
  • 《DCAD-620U ADSL Modem》linux下没有驱动怎么办?高分请教(是usb的adsl modem)
  • 高分请教一个串口驱动模块加载的问题
  • sql server数据库有没有专门的jdbc驱动程序,若有,请教怎样获得?
  • 请教如何安装内猫的驱动程序
  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 高分请教,各位大侠,请教一个问题,理论高手请进??谢谢
  • 请教高手lvs的奇怪问题,我挺着急,希望高手别潜水,就就我,先谢谢了
  • 请教高手:如何用gnome/gtk编写托盘程序
  • 请教各位高手一个简单的问题:在JAVA 中如何才能取得一些系统信息?
  • 请教curses的高手
  • #######菜鸟问题,请教高手,一定给分########
  • 如何在Linux上使用LoadLibrary()?高手请教!
  • 请教:Java高手读书之路
  • 请教高手:cpu占用经常100%怎么解决?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教,请教,这个问题是为什么????
  • 请教本地硬盘安装问题请教本地硬盘安装问题
  • ■请教■请教redhat最基本的问题!
  • 请教一个 shell 问题,我用下面这个 shell 语句总是失败,请教
  • 请教Linux下pgadmin3-1.0.2的编译和安装!!高分请教!
  • 各位大虾,请教装了REDHAT9操作系统后,启动时无法引导到LINUX,请教该如何解决啊
  • 请教,请教,,,一定要看!!一定要看!!
  • 请教象我这样的硬盘应如何安装Linux,我昨天试装了,但有问题。(老问题了,也看了前面的帖子,但还是来请教,请多指教)
  • 请教这种循环的执行过程
  • 请教两个redhat9问题
  • 请教如何在指定目录下查找包含指定文字的文件
  • 请教局域网中如何通过ip地址得到主机名
  • 请教kdevelop的问题
  • 请教linux 下的adsl拨号问题.
  • 请教,如何用虚拟订机安装liux
  • 【请教】LINUX 下SNMP的MIB开发
  • 请教一个opengl的问题
  • 请教unix常用命令命令问题
  • 请教两个shell
  • 菜鸟请教Linux


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3