I2C(四)linux3.4(写代码)

I2C(四)linux3.4(写代码)

老师的参考代码

https://gitee.com/layty/Jz2440/tree/master/Driver/code/39th-i2c

写clinet

回顾上一节的构造clinet,第四种方式需要构造i2c_driver.detect,不需要单独的dev来指定地址,因为i2c_detect会来检测地址并挂接client;而其他三种都是构造i2c_board_info

写i2c_driver

这里需要注册字符设备驱动等,使用adapt提供的接口来操作i2c设备

//读
i2c_smbus_read_byte_data(at24cxx_client, addr)
//写
i2c_smbus_write_byte_data(at24cxx_client, addr, data)

写adapt

这里操作硬件,一般来说会使用中断,触发数据传输的时候会有休眠唤醒的过程,主要是构造adapt中的i2c_algorithmmaster_xfer来传输数据

//休眠
timeout = wait_event_timeout(i2c->wait, i2c->msg_num == 0, HZ * 5);
//完成后唤醒
wake_up(&i2c->wait);
// probe 时候申请中断
request_irq(res->start, s3c24xx_i2c_irq, IRQF_DISABLED,pdev->name, i2c);

待续(懒的写了)

这个代码就参考下老师的代码或者内核的代码,新内核的设备驱动代码在

drivers\misc\eeprom

其他适配器的代码还是在老位置

drivers\i2c\i2c-core.c

总的来说就是懒得写步骤了,参考老师代码写驱动比看文字快多了,代码放到gitee上以后方便查看

posted @ 2019-01-29 17:27  zongzi10010  阅读(460)  评论(0编辑  收藏  举报