基于DragonBoard 410c开发板的触摸屏驱动编写.doc
《基于DragonBoard 410c开发板的触摸屏驱动编写.doc》由会员分享,可在线阅读,更多相关《基于DragonBoard 410c开发板的触摸屏驱动编写.doc(4页珍藏版)》请在三一文库上搜索。
1、基于DragonBoard 410c开发板的触摸屏驱动编写前言:让大家初步了解对高通MSM8916平台的输入子系统的实现,给大家提供Dragon Board 410c平台开发输入系统设备的思路。(如:按键设备、触摸屏、轨迹球等)在高通MSM8916平台中,具有触摸屏、轨迹球和简单按键功能,这些功能是由Android系统内中的驱动程序实现的,并且需要用户空间的内容来协助实现。一、触摸屏驱动编写高通MSM8916平台的触摸屏驱动程序的实现文件是drivers/input/touchscreen/synapTIcs_i2c_rmi4.c,此文件的核心是函数synapTIcs_ts_probe(),在
2、该函数中需要进行触摸屏工作模式的初始化,对作为输出设备的触摸屏驱动在Linux平台下的设备名注册,同事初始化触摸时间触发时引起的中断操作。此函数的实现代码如下:staTIc int synapTIcs_rmi4_probe(struct i2c_client *client,const struct i2c_device_id *dev_id)int retval = 0;unsigned char ii;unsigned char attr_count;struct synaptics_rmi4_f1a_handle *f1a;struct synaptics_rmi4_fn *fhandl
3、er;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 (!i2c_check_functionality(client-adapter,I2C_FUNC_SMBUS_BYTE_DATA) dev_err(clien
4、t-dev,%s: SMBus byte data not supportedn,_func_);return -EIO;if (client-dev.of_node) platform_data = devm_kzalloc(client-dev,sizeof(*platform_data),GFP_KERNEL);if (!platform_data) dev_err(client-dev, Failed to allocate memoryn);return -ENOMEM;retval = synaptics_rmi4_parse_dt(client-dev, platform_dat
5、a);if (retval)return retval; else platform_data = client-dev.platform_data;if (!platform_data) dev_err(client-dev,%s: No platform data foundn,_func_);return -EINVAL;rmi4_data = kzalloc(sizeof(*rmi4_data) * 2, GFP_KERNEL);if (!rmi4_data) dev_err(client-dev,%s: Failed to alloc mem for rmi4_datan,_func
6、_);return -ENOMEM;rmi = (rmi4_data-rmi4_mod_info);rmi4_data-input_dev = input_allocate_device();/创建设备if (rmi4_data-input_dev = NULL) dev_err(client-dev,%s: Failed to allocate input devicen,_func_);retval = -ENOMEM;goto err_input_device;rmi4_data-i2c_client = client;rmi4_data-current_page = MASK_8BIT
7、;rmi4_data-board = platform_data;rmi4_data-touch_stopped = false;rmi4_data-sensor_sleep = false;rmi4_data-irq_enabled = false;rmi4_data-fw_updating = false;rmi4_data-suspended = false;rmi4_data-i2c_read = synaptics_rmi4_i2c_read;rmi4_data-i2c_write = synaptics_rmi4_i2c_write;rmi4_data-irq_enable = s
8、ynaptics_rmi4_irq_enable;rmi4_data-reset_device = synaptics_rmi4_reset_device;rmi4_data-flip_x = rmi4_data-board-x_flip;rmi4_data-flip_y = rmi4_data-board-y_flip;if (rmi4_data-board-fw_image_name)snprintf(rmi4_data-fw_image_name, NAME_BUFFER_SIZE, %s,rmi4_data-board-fw_image_name);rmi4_data-input_de
9、v-name = DRIVER_NAME;rmi4_data-input_dev-phys = INPUT_PHYS_NAME;rmi4_data-input_dev-id.bustype = BUS_I2C;rmi4_data-input_dev-id.product = SYNAPTICS_DSX_DRIVER_PRODUCT;rmi4_data-input_dev-id.version = SYNAPTICS_DSX_DRIVER_VERSION;rmi4_data-input_dev-dev.parent = client-dev;input_set_drvdata(rmi4_data
10、-input_dev, rmi4_data);set_bit(EV_SYN, rmi4_data-input_dev-evbit);set_bit(EV_KEY, rmi4_data-input_dev-evbit);set_bit(EV_ABS, rmi4_data-input_dev-evbit);set_bit(BTN_TOUCH, rmi4_data-input_dev-keybit);set_bit(BTN_TOOL_FINGER, rmi4_data-input_dev-keybit);#ifdef INPUT_PROP_DIRECTset_bit(INPUT_PROP_DIREC
11、T, rmi4_data-input_dev-propbit);#endifretval = synaptics_rmi4_regulator_configure(rmi4_data, true);if (retval 0) dev_err(client-dev, Failed to configure regulatorsn);goto err_reg_configure;retval = synaptics_rmi4_power_on(rmi4_data, true);if (retval 0) dev_err(client-dev, Failed to power onn);goto e
12、rr_power_device;retval = synaptics_rmi4_pinctrl_init(rmi4_data);if (!retval rmi4_data-ts_pinctrl) /* Pinctrl handle is optional. If pinctrl handle is found* let pins to be configured in active state. If not found* continue further without error*/if (pinctrl_select_state(rmi4_data-ts_pinctrl,rmi4_dat
13、a-pinctrl_state_active)dev_err(rmi4_data-i2c_client-dev,Can not select %s pinstaten,PINCTRL_STATE_ACTIVE);retval = synaptics_rmi4_gpio_configure(rmi4_data, true);if (retval 0) dev_err(client-dev, Failed to configure gpiosn);goto err_gpio_config;init_waitqueue_head(rmi4_data-wait);mutex_init(rmi4_dat
14、a-rmi4_io_ctrl_mutex);INIT_LIST_HEAD(rmi-support_fn_list);mutex_init(rmi-support_fn_list_mutex);retval = synaptics_rmi4_query_device(rmi4_data);if (retval 0) dev_err(client-dev,%s: Failed to query devicen,_func_);goto err_free_gpios;if (platform_data-detect_device) retval = synaptics_rmi4_parse_dt_c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于DragonBoard 410c开发板的触摸屏驱动编写 基于 DragonBoard 410 开发 触摸屏 驱动 编写
链接地址:https://www.31doc.com/p-3409824.html