基于DragonBoard 410c开发板的触摸屏驱动编写

分享到:
12440
下一篇 >

前言:

让大家初步了解对高通MSM8916平台的输入子系统的实现,给大家提供Dragon Board 410c平台开发输入系统设备的思路。(如:按键设备、触摸屏、轨迹球等)

在高通MSM8916平台中,具有触摸屏、轨迹球和简单按键功能,这些功能是由Android系统内中的驱动程序实现的,并且需要用户空间的内容来协助实现。

一、触摸屏驱动编写

高通MSM8916平台的触摸屏驱动程序的实现文件是drivers/input/touchscreen/synapTIcs_i2c_rmi4.c,此文件的核心是函数synapTIcs_ts_probe(),在该函数中需要进行触摸屏工作模式的初始化,对作为输出设备的触摸屏驱动在Linux平台下的设备名注册,同事初始化触摸时间触发时引起的中断操作。此函数的实现代码如下:

staTIc int synapTIcs_rmi4_probe

{

int retval = 0;

unsigned char ii;

unsigned char attr_count;

struct synaptics_rmi4_f1a_handle *f1a;

struct synaptics_rmi4_fn *fhandler;

struct synaptics_rmi4_fn *next_fhandler;

struct synaptics_rmi4_data *rmi4_data;

struct synaptics_rmi4_device_info *rmi;

struct synaptics_rmi4_platform_data *platform_data =

client->dev.platform_data;

struct dentry *temp;

if

return retval;

} else {

platform_data = client->dev.platform_data;

}

if

snprintf

dev_err

dev_err

rmi4_data->disp_maxx = rmi4_data->board->disp_maxx;

else

rmi4_data->disp_maxx = rmi4_data->sensor_max_x;

if

rmi4_data->disp_maxy = rmi4_data->board->disp_maxy;

else

rmi4_data->disp_maxy = rmi4_data->sensor_max_y;

if

rmi4_data->disp_minx = rmi4_data->board->disp_minx;

else

rmi4_data->disp_minx = 0;

if

rmi4_data->disp_miny = rmi4_data->board->disp_miny;

else

rmi4_data->disp_miny = 0;

input_set_abs_params

f1a = fhandler->data;

}

}

mutex_unlock

synaptics_rmi4_f1a_kfree

gpio_free

gpio_free

pr_err("failed to select release pinctrl state");

}

}

synaptics_rmi4_power_on(rmi4_data, false);

err_power_device:

synaptics_rmi4_regulator_configure(rmi4_data, false);

err_reg_configure:

input_free_device(rmi4_data->input_dev);

rmi4_data->input_dev = NULL;

err_input_device:

kfree(rmi4_data);

return retval;

}

在上述代码中,通过I2c_smb_read_byte_data()函数对其寄存器信息进行读取即可完成其事件信息的获取,也可以通过i2c_transfer完成对其寄存器信息的批量读取。

你可能感兴趣: 技术文章 DragonBoard 410c 开发板 触摸屏 board NB
无觅相关文章插件,快速提升流量