title: I2C(四)linux3.4(写代码)
date: 2019/1/29 17:18:42
toc: true
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_algorithm
的master_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);
待续(懒的写了)
这个代码就参考下老师的代码或者内核的代码,新内核的设备驱动代码在
driversmisceeprom
其他适配器的代码还是在老位置
driversi2ci2c-core.c
总的来说就是懒得写步骤了,参考老师代码写驱动比看文字快多了,代码放到gitee上以后方便查看