CN108549611A - 一种基于gt9系列芯片的驱动实现方法及系统 - Google Patents

一种基于gt9系列芯片的驱动实现方法及系统 Download PDF

Info

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
Application number
CN201810280700.9A
Other languages
English (en)
Inventor
王鹏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhengzhou Yunhai Information Technology Co Ltd
Original Assignee
Zhengzhou Yunhai Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Zhengzhou Yunhai Information Technology Co Ltd filed Critical Zhengzhou Yunhai Information Technology Co Ltd
Priority to CN201810280700.9A priority Critical patent/CN108549611A/zh
Publication of CN108549611A publication Critical patent/CN108549611A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • G06F13/102Program control for peripheral devices where the programme performs an interfacing function, e.g. device driver
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0016Inter-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系列芯片的驱动实现方法及系统
技术领域
本发明属于芯片设计技术领域,尤其涉及一种基于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为参数进行的数据收发动作。
CN201810280700.9A 2018-04-02 2018-04-02 一种基于gt9系列芯片的驱动实现方法及系统 Pending CN108549611A (zh)

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)

* Cited by examiner, † Cited by third party
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驱动方法和装置

Cited By (4)

* Cited by examiner, † Cited by third party
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