CN108549611A - 一种基于gt9系列芯片的驱动实现方法及系统 - Google Patents
一种基于gt9系列芯片的驱动实现方法及系统 Download PDFInfo
- Publication number
- CN108549611A CN108549611A CN201810280700.9A CN201810280700A CN108549611A CN 108549611 A CN108549611 A CN 108549611A CN 201810280700 A CN201810280700 A CN 201810280700A CN 108549611 A CN108549611 A CN 108549611A
- Authority
- CN
- China
- Prior art keywords
- driver
- functions
- dts
- peripheral hardware
- read
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
- G06F13/102—Program control for peripheral devices where the programme performs an interfacing function, e.g. device driver
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0016—Inter-integrated circuit (I2C)
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及芯片设计技术领域,提供一种基于gt9系列芯片的驱动实现方法及系统,方法包括:在I2C adapter的DTS node中添加外设的DTS描述;当添加完成所述DTS描述后,生成所述外设的驱动程序,所述外设的驱动程序主机驱动程序分离,从而实现对所有gt9系列芯片的驱动,减少各个gt9系列芯片设计一种对应的驱动程序所带来的增加研发成本,解决了各个芯片之间驱动程序兼容性较差的问题。
Description
技术领域
本发明属于芯片设计技术领域,尤其涉及一种基于gt9系列芯片的驱动实现方法及系统。
背景技术
I2C协议是嵌入式系统中广泛使用的一类通信协议,主要用于CPU和各种外设之间的低速数据通信。Linux kernel使用I2C framework抽象、管理相应的资源,并以各种形式,向各类使用者提供API。Linux的I2C体系结构分为3个组成部分,具体是:
(1)I2C核心:I2C核心提供了I2C总线驱动和设备驱动的注册、注销方法,I2C通信方法(即Algorithm)上层的与具体适配器无关的代码以及探测设备、检测设备地址的上层代码等。
(2)I2C总线驱动:I2C总线驱动是对I2C硬件体系结构中适配器端的实现,适配器可由CPU控制,甚至可以直接集成在CPU内部;
I2C总线驱动主要包含I2C适配器数据结构i2c_adapter、I2C适配器的Algorithm数据结构i2c_algorithm和控制I2C适配器产生通信信号的函数;
经由I2C总线驱动的代码,可以控制I2C适配器以主控方式产生开始位、停止位、读写周期,以及以从设备方式被读写、产生ACK等。
(3)I2C设备驱动:I2C设备驱动(也称为客户驱动)是对I2C硬件系统结构中设备端的实现,设备一般挂接在受CPU控制的I2C适配器上,通过I2C适配器与CPU交换数据;
I2C设备驱动主要包含数据结构i2c_driver和i2c_client,需要根据具体设备实现其中的成员函数。
目前,gt9系列芯片包含有若干种类型的芯片,每一类型的芯片均需要配置一对应的驱动程序,但是该gt9系列的芯片类型有若干,从而增加了芯片研发难度,而且不同类型的芯片之间兼容性较差。
发明内容
本发明的目的在于提供一种基于gt9系列芯片的驱动实现方法,旨在解决现有技术中的问题。
本发明是这样实现的,一种基于gt9系列芯片的驱动实现方法,所述方法包括下述步骤:
在I2C adapter的DTS node中添加外设的DTS描述;
当添加完成所述DTS描述后,生成所述外设的驱动程序,所述外设的驱动程序主机驱动程序分离。
作为一种改进的方案,所述在I2C adapter的DTS node中添加外设的DTS描述的步骤具体包括下述步骤:
根据硬件的连接方式,确定外设所从属的I2C adapter;
在所述I2C adapter的DTS node中,添加外设的DTS描述。
作为一种改进的方案,所述当添加完成所述DTS描述后,生成所述外设的驱动程序的步骤具体包括下述步骤:
定义一个struct i2c_driver类型的变量,所述变量包含一个与DTS中的“compatible”字段相同的of_match_table字段以及一个probe接口;
调用module_i2c_driver接口,同时将调用的所述module_i2c_driver接口注册到I2C core中。
作为一种改进的方案,所述方法还包括下述步骤:
在入口函数tpd_driver_init中调用i2c_add_driver完成对i2c_driver的注册;
其中,所述i2c_driver对应一套驱动方法,所述i2c_driver的成员函数包括probe()、remove()、suspend()和resume()。
作为一种改进的方案,所述方法还包括下述步骤:
控制在所述驱动程序中生成probe()函数,其中,所述probe()函数中包含tpd_power_on函数、gtp_read_version函数、gtp_init_panel函数、proc_create函数以及touch_event_handler函数;
其中,所述tpd_power_on函数用于为所述外设提供供电脚设置以及做上电复位动作,所述gtp_read_version函数用于读取外设版本号,若读取成功则标识I2C已通,所述gtp_init_panel函数用于读取配置文件,获取中断触发方式和分辨率信息,所述proc_create函数用于创建proc下的调试节点,所述touch_event_handler函数用于创建接收输入事件的线程。
作为一种改进的方案,所述方法还包括下述步骤:
对I2C读写函数进行封装,所述I2C读写函数的单位为i2c msg,在所述I2C读写函数中,addr是I2C slave device的地址,flags为数据传输可携带的flag,I2C数据传输的接口包含两类,一类是以i2c client为参数,进行简单的数据收发,另一类是以i2c adapter和i2c msg为参数进行的数据收发动作。
本发明的另一目的在于提供一种基于gt9系列芯片的驱动实现系统,所述系统包括:
DTS描述添加模块,用于在I2C adapter的DTS node中添加外设的DTS描述;
驱动程序生成模块,用于当添加完成所述DTS描述后,生成所述外设的驱动程序,所述外设的驱动程序主机驱动程序分离。
作为一种改进的方案,所述DTS描述添加模块具体包括:
I2C adapter确定模块,用于根据硬件的连接方式,确定外设所从属的I2Cadapter;
添加模块,用于在所述I2C adapter的DTS node中,添加外设的DTS描述。
作为一种改进的方案,所述驱动程序生成模块具体包括:
变量定义模块,用于定义一个struct i2c_driver类型的变量,所述变量包含一个与DTS中的“compatible”字段相同的of_match_table字段以及一个probe接口;
接口调用注册模块,用于调用module_i2c_driver接口,同时将调用的所述module_i2c_driver接口注册到I2C core中。
作为一种改进的方案,所述系统还包括:
i2c_driver注册模块,用于在入口函数tpd_driver_init中调用i2c_add_driver完成对i2c_driver的注册,其中,所述i2c_driver对应一套驱动方法,所述i2c_driver的成员函数包括probe()、remove()、suspend()和resume();
probe()函数生成模块,用于控制在所述驱动程序中生成probe()函数,其中,所述probe()函数中包含tpd_power_on函数、gtp_read_version函数、gtp_init_panel函数、proc_create函数以及touch_event_handler函数,其中,所述tpd_power_on函数用于为所述外设提供供电脚设置以及做上电复位动作,所述gtp_read_version函数用于读取外设版本号,若读取成功则标识I2C已通,所述gtp_init_panel函数用于读取配置文件,获取中断触发方式和分辨率信息,所述proc_create函数用于创建proc下的调试节点,所述touch_event_handler函数用于创建接收输入事件的线程;
读写函数封装模块,用于对I2C读写函数进行封装,所述I2C读写函数的单位为i2cmsg,在所述I2C读写函数中,addr是I2C slave device的地址,flags为数据传输可携带的flag,I2C数据传输的接口包含两类,一类是以i2c client为参数,进行简单的数据收发,另一类是以i2c adapter和i2c msg为参数进行的数据收发动作。
在本发明实施例中,在I2C adapter的DTS node中添加外设的DTS描述;当添加完成所述DTS描述后,生成所述外设的驱动程序,所述外设的驱动程序主机驱动程序分离,从而实现对所有gt9系列芯片的驱动,减少各个gt9系列芯片设计一种对应的驱动程序所带来的增加研发成本,解决了各个芯片之间驱动程序兼容性较差的问题。
附图说明
图1是本发明提供的基于gt9系列芯片的驱动实现方法的实现流程图;
图2是本发明提供的I2C子系统框架的结构示意图;
图3本发明提供的在I2C adapter的DTS node中添加外设的DTS描述的实现流程图;
图4是本发明提供的当添加完成所述DTS描述后,生成所述外设的驱动程序的实现流程图;
图5是本发明提供的基于gt9系列芯片的驱动实现系统的结构框图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图1示出了本发明提供的基于gt9系列芯片的驱动实现方法的实现流程图,其具体包括下述步骤:
在步骤S101中,在I2C adapter的DTS node中添加外设的DTS描述。
在步骤S102中,当添加完成所述DTS描述后,生成所述外设的驱动程序,所述外设的驱动程序主机驱动程序分离。
在该步骤中,上述步骤是基于I2C子系统框架实现,其中,该I2C子系统框架为现有的技术方案,结合图2所示,下述仅给出其具体的结构,但不用以限制本发明:
(1)I2C framework的最终目标,是提供一种“访问I2C slave devices”的方法。由于这些slave devices由I2C controller控制,因而主要由I2C controller驱动实现这一目标;
(2)经过I2C framework的抽象,consumer可以不用关心I2C总线的技术细节,只需要通过简单的API,就可以与slave devices进行数据交互。正常情况下,consumer是位于内核态的其它driver(例如HDMI driver、touch screen driver等等);与此同时,I2Cframework也通过字符设备向用户空间提供类似的接口,用户空间程序可以通过该接口访问slave devices;
(3)在I2C framework内部,有I2C core、I2C busses、I2C algos和I2C muxes四个模块;
(4)I2C core使用I2C adapter和I2C algorithm两个子模块抽象I2C controller的功能,使用I2C client和I2C driver抽象I2C slave device的功能(对应设备模型中的device和device driver)。另外,基于I2C协议,通过smbus模块实现SMBus(SystemManagement Bus,系统管理总线)的功能;
(5)I2C busses是各个I2C controller drivers的集合,位于drivers/i2c/busses/目录下;
(6)I2C algos包含了一些通用的I2C algorithm,所谓的algorithm,是指I2C协议包的生成方法,进而组合成I2C的read/write指令,一般情况下,都是由硬件实现,不需要特别关注该目录;
(7)I2C muxes用于实现I2C bus的多路复用功能,在此不过多介绍。
在本发明实施例中,如图3所示,在I2C adapter的DTS node中添加外设的DTS描述的步骤具体包括下述步骤:
在步骤S201中,根据硬件的连接方式,确定外设所从属的I2C adapter。
在步骤S202中,在所述I2C adapter的DTS node中,添加外设的DTS描述。
其中,DTS描述的格式与和正常的platform device一致,所示如下:
DTS描述中的compatible关键字用于设备和驱动的probe,如“compatible="huiding,gt9xx";”,其它字段根据实际情况自行添加。
如图4所示,当添加完成所述DTS描述后,生成所述外设的驱动程序的步骤具体包括下述步骤:
在步骤S301中,定义一个struct i2c_driver类型的变量,所述变量包含一个与DTS中的“compatible”字段相同的of_match_table字段以及一个probe接口;
在步骤S302中,调用module_i2c_driver接口,同时将调用的所述module_i2c_driver接口注册到I2C core中。
在图4所示的驱动程序的生成过程中,包括下述执行节点,具体为:
(1)在入口函数tpd_driver_init中调用i2c_add_driver完成对i2c_driver的注册;
其中,所述i2c_driver对应一套驱动方法,所述i2c_driver的成员函数包括probe()、remove()、suspend()和resume();
在该实施例中,i2c_driver的实现程序为:
static struct i2c_driver tpd_i2c_driver=
{
.probe=tpd_i2c_probe,
.remove=tpd_i2c_remove,
.detect=tpd_i2c_detect,
.driver.name="gt9xx",
.id_table=tpd_i2c_id,
.address_list=(const unsigned short*)forces,
};
(2)控制在所述驱动程序中生成probe()函数,其中,所述probe()函数中包含tpd_power_on函数、gtp_read_version函数、gtp_init_panel函数、proc_create函数以及touch_event_handler函数;
其中,所述tpd_power_on函数用于为所述外设提供供电脚设置以及做上电复位动作,所述gtp_read_version函数用于读取外设版本号,若读取成功则标识I2C已通,所述gtp_init_panel函数用于读取配置文件,获取中断触发方式和分辨率信息,所述proc_create函数用于创建proc下的调试节点,所述touch_event_handler函数用于创建接收输入事件的线程,没有输入事件时睡眠,有输入事件产生时,会被中断例程唤醒,获取输入事件并上报;最后是做中断相关的设置;
在该实施例中,probe()函数的具体实现程序为:
static s32 tpd_i2c_probe(struct i2c_client*client,const struct i2c_device_id*id)
{
s32 err=0;
s32 ret=0;
u16 version_info;
ret=tpd_power_on(client);
if(ret<0){
GTP_ERROR("I2C communication ERROR!");
}
ret=gtp_read_version(client,&version_info);
if(ret<0){
GTP_ERROR("Read version failed.");
}
ret=gtp_init_panel(client);
if(ret<0){
GTP_ERROR("GTP init panel failed.");
}
gt91xx_config_proc=proc_create(GT91XX_CONFIG_PROC_FILE,0666,NULL,&config_proc_ops);
if(gt91xx_config_proc==NULL){
GTP_ERROR("create_proc_entry%s failed\n",GT91XX_CONFIG_PROC_FILE);
}
else{
GTP_INFO("create proc entry%s success",GT91XX_CONFIG_PROC_FILE);
}
thread=kthread_run(touch_event_handler,0,TPD_DEVICE);
if(IS_ERR(thread)){
err=PTR_ERR(thread);
GTP_INFO(TPD_DEVICE"failed to create kernel thread:%d\n",err);
}
mt_set_gpio_mode(GPIO_CTP_EINT_PIN,GPIO_CTP_EINT_PIN_M_EINT);
mt_set_gpio_dir(GPIO_CTP_EINT_PIN,GPIO_DIR_IN);
mt_set_gpio_pull_enable(GPIO_CTP_EINT_PIN,GPIO_PULL_DISABLE);
msleep(50);
if(!int_type){
mt_eint_registration(CUST_EINT_TOUCH_PANEL_NUM,EINTF_TRIGGER_RISING,tpd_eint_interrupt_handler,1);
}
else{
mt_eint_registration(CUST_EINT_TOUCH_PANEL_NUM,EINTF_TRIGGER_FALLING,tpd_eint_interrupt_handler,1);
}
mt65xx_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM);
return 0;
}
(3)对I2C读写函数进行封装,I2C传输(读或者写)以i2c msg为单位,该数据结构包含了数据传输相关的所有信息,其中,addr,是I2C slave device的地址。flags,数据传输可携带的flag,常用的包括:I2C_M_TEN,支持10-bit的slave地址;I2C_M_RD,此次传输是读操作;len,数据传输的长度,单位为byte;buf,数据buf。
i2c数据传输有关的接口有两类:
一类是以i2c client为参数,进行简单的数据收发,包括i2c_master_send、i2c_master_recv。该方法只可以通过标准方式,发送或者接收一定数量的数据。
另一类是以i2c adapter和i2c msg为参数,可以更为灵活的read或者write数据,包括i2c_transfer。使用该方法可以以struct i2c_msg为参数,一次读取、或者写入、或者读取加写入,一定数量的数据。
本驱动实现的读函数接口如下:
int i2c_read_bytes_non_dma(struct i2c_client*client,u16 addr,u8*rxbuf,int len)
{
u8 buffer[GTP_ADDR_LENGTH];
u8 retry;
u16 left=len;
u16 offset=0;
struct i2c_msg msg[2]=
{
{
.addr=((client->addr&I2C_MASK_FLAG)|(I2C_PUSHPULL_FLAG)),
.flags=0,
.buf=buffer,
.len=GTP_ADDR_LENGTH,
.timing=I2C_MASTER_CLOCK
},
{
.addr=((client->addr&I2C_MASK_FLAG)|(I2C_PUSHPULL_FLAG)),
.flags=I2C_M_RD,
.timing=I2C_MASTER_CLOCK
},
};
if(rxbuf==NULL)
return-1;
while(left>0)
{
buffer[0]=((addr+offset)>>8)&0xFF;
buffer[1]=(addr+offset)&0xFF;
msg[1].buf=&rxbuf[offset];
if(left>MAX_TRANSACTION_LENGTH)
{
msg[1].len=MAX_TRANSACTION_LENGTH;
left-=MAX_TRANSACTION_LENGTH;
offset+=MAX_TRANSACTION_LENGTH;
}
else
{
msg[1].len=left;
left=0;
}
retry=0;
while(i2c_transfer(client->adapter,&msg[0],2)!=2)
{
retry++;
if(retry==5)
{
GTP_ERROR("I2C read 0x%X length=%d failed\n",addr+offset,len);
return-1;
}
}
}
return 0;
}
在本发明实施例中,本TP驱动的实现遵照主机驱动和外设驱动分离的设计思想,在设备模型的基础上进一步简化了设备驱动的实现,为驱动的维护升级提供了最大限度的便利。
图5示出了本发明提供的基于gt9系列芯片的驱动实现系统的结构框图,为了便于说明,图中仅给出了与本发明实施例相关的部分。
基于gt9系列芯片的驱动实现系统包括:
DTS描述添加模块11,用于在I2C adapter的DTS node中添加外设的DTS描述;
驱动程序生成模块12,用于当添加完成所述DTS描述后,生成所述外设的驱动程序,所述外设的驱动程序主机驱动程序分离。
其中,DTS描述添加模块11具体包括:
I2C adapter确定模块13,用于根据硬件的连接方式,确定外设所从属的I2Cadapter;
添加模块14,用于在所述I2C adapter的DTS node中,添加外设的DTS描述。
驱动程序生成模块12具体包括:
变量定义模块15,用于定义一个struct i2c_driver类型的变量,所述变量包含一个与DTS中的“compatible”字段相同的of_match_table字段以及一个probe接口;
接口调用注册模块16,用于调用module_i2c_driver接口,同时将调用的所述module_i2c_driver接口注册到I2C core中。
在该实施例中,i2c_driver注册模块17,用于在入口函数tpd_driver_init中调用i2c_add_driver完成对i2c_driver的注册,其中,所述i2c_driver对应一套驱动方法,所述i2c_driver的成员函数包括probe()、remove()、suspend()和resume();
probe()函数生成模块18,用于控制在所述驱动程序中生成probe()函数,其中,所述probe()函数中包含tpd_power_on函数、gtp_read_version函数、gtp_init_panel函数、proc_create函数以及touch_event_handler函数,其中,所述tpd_power_on函数用于为所述外设提供供电脚设置以及做上电复位动作,所述gtp_read_version函数用于读取外设版本号,若读取成功则标识I2C已通,所述gtp_init_panel函数用于读取配置文件,获取中断触发方式和分辨率信息,所述proc_create函数用于创建proc下的调试节点,所述touch_event_handler函数用于创建接收输入事件的线程;
读写函数封装模块19,用于对I2C读写函数进行封装,所述I2C读写函数的单位为i2c msg,在所述I2C读写函数中,addr是I2C slave device的地址,flags为数据传输可携带的flag,I2C数据传输的接口包含两类,一类是以i2c client为参数,进行简单的数据收发,另一类是以i2c adapter和i2c msg为参数进行的数据收发动作。
其中,上述各个模块的功能如上述方法实施例所记载,在此不再赘述。
在本发明实施例中,在I2C adapter的DTS node中添加外设的DTS描述;当添加完成所述DTS描述后,生成所述外设的驱动程序,所述外设的驱动程序主机驱动程序分离,从而实现对所有gt9系列芯片的驱动,减少各个gt9系列芯片设计一种对应的驱动程序所带来的增加研发成本,解决了各个芯片之间驱动程序兼容性较差的问题。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于gt9系列芯片的驱动实现方法,其特征在于,所述方法包括下述步骤:
在I2C adapter的DTS node中添加外设的DTS描述;
当添加完成所述DTS描述后,生成所述外设的驱动程序,所述外设的驱动程序主机驱动程序分离。
2.根据权利要求1所述的基于gt9系列芯片的驱动实现方法,其特征在于,所述在I2Cadapter的DTS node中添加外设的DTS描述的步骤具体包括下述步骤:
根据硬件的连接方式,确定外设所从属的I2C adapter;
在所述I2C adapter的DTS node中,添加外设的DTS描述。
3.根据权利要求1所述的基于gt9系列芯片的驱动实现方法,其特征在于,所述当添加完成所述DTS描述后,生成所述外设的驱动程序的步骤具体包括下述步骤:
定义一个struct i2c_driver类型的变量,所述变量包含一个与DTS中的“compatible”字段相同的of_match_table字段以及一个probe接口;
调用module_i2c_driver接口,同时将调用的所述module_i2c_driver接口注册到I2Ccore中。
4.根据权利要求3所述的基于gt9系列芯片的驱动实现方法,其特征在于,所述方法还包括下述步骤:
在入口函数tpd_driver_init中调用i2c_add_driver完成对i2c_driver的注册;
其中,所述i2c_driver对应一套驱动方法,所述i2c_driver的成员函数包括probe()、remove()、suspend()和resume()。
5.根据权利要求4所述的基于gt9系列芯片的驱动实现方法,其特征在于,所述方法还包括下述步骤:
控制在所述驱动程序中生成probe()函数,其中,所述probe()函数中包含tpd_power_on函数、gtp_read_version函数、gtp_init_panel函数、proc_create函数以及touch_event_handler函数;
其中,所述tpd_power_on函数用于为所述外设提供供电脚设置以及做上电复位动作,所述gtp_read_version函数用于读取外设版本号,若读取成功则标识I2C已通,所述gtp_init_panel函数用于读取配置文件,获取中断触发方式和分辨率信息,所述proc_create函数用于创建proc下的调试节点,所述touch_event_handler函数用于创建接收输入事件的线程。
6.根据权利要求4所述的基于gt9系列芯片的驱动实现方法,其特征在于,所述方法还包括下述步骤:
对I2C读写函数进行封装,所述I2C读写函数的单位为i2c msg,在所述I2C读写函数中,addr是I2C slave device的地址,flags为数据传输可携带的flag,I2C数据传输的接口包含两类,一类是以i2c client为参数,进行简单的数据收发,另一类是以i2c adapter和i2cmsg为参数进行的数据收发动作。
7.一种基于gt9系列芯片的驱动实现系统,其特征在于,所述系统包括:
DTS描述添加模块,用于在I2C adapter的DTS node中添加外设的DTS描述;
驱动程序生成模块,用于当添加完成所述DTS描述后,生成所述外设的驱动程序,所述外设的驱动程序主机驱动程序分离。
8.根据权利要求7所述的基于gt9系列芯片的驱动实现系统,其特征在于,所述DTS描述添加模块具体包括:
I2C adapter确定模块,用于根据硬件的连接方式,确定外设所从属的I2Cadapter;
添加模块,用于在所述I2C adapter的DTS node中,添加外设的DTS描述。
9.根据权利要求7所述的基于gt9系列芯片的驱动实现系统,其特征在于,所述驱动程序生成模块具体包括:
变量定义模块,用于定义一个struct i2c_driver类型的变量,所述变量包含一个与DTS中的“compatible”字段相同的of_match_table字段以及一个probe接口;
接口调用注册模块,用于调用module_i2c_driver接口,同时将调用的所述module_i2c_driver接口注册到I2C core中。
10.根据权利要求7所述的基于gt9系列芯片的驱动实现系统,其特征在于,所述系统还包括:
i2c_driver注册模块,用于在入口函数tpd_driver_init中调用i2c_add_driver完成对i2c_driver的注册,其中,所述i2c_driver对应一套驱动方法,所述i2c_driver的成员函数包括probe()、remove()、suspend()和resume();
probe()函数生成模块,用于控制在所述驱动程序中生成probe()函数,其中,所述probe()函数中包含tpd_power_on函数、gtp_read_version函数、gtp_init_panel函数、proc_create函数以及touch_event_handler函数,其中,所述tpd_power_on函数用于为所述外设提供供电脚设置以及做上电复位动作,所述gtp_read_version函数用于读取外设版本号,若读取成功则标识I2C已通,所述gtp_init_panel函数用于读取配置文件,获取中断触发方式和分辨率信息,所述proc_create函数用于创建proc下的调试节点,所述touch_event_handler函数用于创建接收输入事件的线程;
读写函数封装模块,用于对I2C读写函数进行封装,所述I2C读写函数的单位为i2cmsg,在所述I2C读写函数中,addr是I2C slave device的地址,flags为数据传输可携带的flag,I2C数据传输的接口包含两类,一类是以i2cclient为参数,进行简单的数据收发,另一类是以i2c adapter和i2c msg为参数进行的数据收发动作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810280700.9A CN108549611A (zh) | 2018-04-02 | 2018-04-02 | 一种基于gt9系列芯片的驱动实现方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810280700.9A CN108549611A (zh) | 2018-04-02 | 2018-04-02 | 一种基于gt9系列芯片的驱动实现方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108549611A true CN108549611A (zh) | 2018-09-18 |
Family
ID=63517600
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810280700.9A Pending CN108549611A (zh) | 2018-04-02 | 2018-04-02 | 一种基于gt9系列芯片的驱动实现方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108549611A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109656844A (zh) * | 2018-12-03 | 2019-04-19 | 郑州云海信息技术有限公司 | 一种AT24xx EEPROM驱动方法和装置 |
CN109992556A (zh) * | 2019-04-10 | 2019-07-09 | 苏州浪潮智能科技有限公司 | 一种i2c驱动方法和装置 |
-
2018
- 2018-04-02 CN CN201810280700.9A patent/CN108549611A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109656844A (zh) * | 2018-12-03 | 2019-04-19 | 郑州云海信息技术有限公司 | 一种AT24xx EEPROM驱动方法和装置 |
CN109656844B (zh) * | 2018-12-03 | 2022-02-22 | 郑州云海信息技术有限公司 | 一种AT24xx EEPROM驱动方法和装置 |
CN109992556A (zh) * | 2019-04-10 | 2019-07-09 | 苏州浪潮智能科技有限公司 | 一种i2c驱动方法和装置 |
CN109992556B (zh) * | 2019-04-10 | 2021-07-06 | 苏州浪潮智能科技有限公司 | 一种i2c驱动方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Axelson | USB complete: the developer's guide | |
CN107278299B (zh) | 经由可重配置的虚拟交换机实现次级总线功能性的方法、装置和系统 | |
CN107003955B (zh) | 用于在根复合体中集成设备的方法、装置和系统 | |
KR101695712B1 (ko) | 상이한 상호접속 프로토콜을 위한 하나의 상호접속 프로토콜의 열거 및/또는 구성 메커니즘의 레버리징 | |
Budruk et al. | PCI express system architecture | |
US7506077B2 (en) | Unified controller having host and device functionality | |
CN108255776B (zh) | 一种兼容apb总线的i3c主设备、主从系统及通信方法 | |
CN113849433B (zh) | 一种总线控制器的执行方法、装置、总线控制器、计算机设备和存储介质 | |
CN112579508A (zh) | 一种数据处理方法、数据处理装置、设备及存储介质 | |
CN109656844A (zh) | 一种AT24xx EEPROM驱动方法和装置 | |
CN108549611A (zh) | 一种基于gt9系列芯片的驱动实现方法及系统 | |
CN115499505A (zh) | Usb网卡和通信方法 | |
JP2006343942A (ja) | バスシステム設計方法と装置 | |
WO2003107199A2 (en) | Bus system, station for use in a bus system, and bus interface | |
CN112417797B (zh) | 寄存器配置同步方法、验证平台系统及配置方法、装置 | |
CN112256615B (zh) | Usb转换接口装置 | |
JP2003316732A (ja) | データ転送制御装置、電子機器及びデータ転送制御方法 | |
KR20210075878A (ko) | I2c와의 하위 호환성을 촉진하는 i3c 허브 | |
US20160314086A1 (en) | Secure digital host controller virtualization | |
CN116701285A (zh) | 远程访问控制装置、方法、设备及计算机可读介质 | |
CN112395147B (zh) | Soc上的调试装置 | |
CN100474266C (zh) | 一种用于数字信号处理器的调试系统及其调试方法 | |
CN102929828B (zh) | 同时支持标准和非标准i2c接口的数据传输方法及装置 | |
CN106126452B (zh) | 基于IIC协议的Linux操作系统与裸机通信的方法 | |
Serra | Multi-criticality Hypervisor for Automotive Domain |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180918 |