博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
fts touchscreen
阅读量:4073 次
发布时间:2019-05-25

本文共 2671 字,大约阅读时间需要 8 分钟。

1.查找驱动

触模屏驱动fts.c

kernel/msm-4.4/drivers/input/touchscreen/st/fts.c
ST FingerTips
msm8998:/ # getevent
add device 7: /dev/input/event4
name: “fts”
X_AXIS_MAX: 1440
Y_AXIS_MAX: 2560
I2C接口:gpio_87/88 ts_i2c_sda/scl
中断:GPIO_125 TP_INT_N
复位:GPIO_89 TP_RST_N

static struct of_device_id fts_of_match_table[] = {    {        .compatible = "st,fts",    },    {},};在kernel/msm-4.4/arch/arm/boot/dts/qcom/msm8998-qrd-skuk-hdk.dtsi里&i2c_5 {    status = "okay";    st_fts@49 {        compatible = "st,fts";        reg = <0x49>;        interrupt-parent = <&tlmm>;        interrupts = <125 0x2008>;        vdd-supply = <&pm8998_l6>;        avdd-supply = <&pm8998_l28>;        pinctrl-names = "pmx_ts_active", "pmx_ts_suspend";        pinctrl-0 = <&ts_active>;        pinctrl-1 = <&ts_int_suspend &ts_reset_suspend>;        st,irq-gpio = <&tlmm 125 0x2008>;        st,reset-gpio = <&tlmm 89 0x00>;        st,regulator_dvdd = "vdd";        st,regulator_avdd = "avdd";    };};

2.驱动解析

static int fts_probe(struct i2c_client *client,        const struct i2c_device_id *idp){    ...    struct device_node *dp = client->dev.of_node;    ...    if (dp) {        ...        parse_dt(&client->dev, info->bdata);    }    ...        info->fwu_workqueue = create_singlethread_workqueue("fts-fwu-queue");//创建workqueue,创建内核线程//msm8998:/ # ps | grep fts-fwu-queue                                            root      565   2     0      0     rescuer_th 0000000000 S fts-fwu-queue}static int parse_dt(struct device *dev, struct fts_i2c_platform_data *bdata){...    struct device_node *np = dev->of_node;    bdata->irq_gpio = of_get_named_gpio_flags(np,            "st,irq-gpio", 0, NULL);if (of_property_read_bool(np, "st, reset-gpio")) {        bdata->reset_gpio = of_get_named_gpio_flags(np,                "st, reset-gpio", 0, NULL);        logError(0, "%s reset_gpio =%d\n", tag, bdata->reset_gpio);    } else {        bdata->reset_gpio = GPIO_NOT_DEFINED;    }}

of_get_named_gpio_flags(np,”st,irq-gpio”, 0, NULL);

of_get_named_gpio_flags(np,”st, reset-gpio”, 0, NULL);
从dts中获取gpio
int of_get_named_gpio_flags(struct device_node *np,
const char *list_name, int index, enum of_gpio_flags *flags)

request_irq(info->client->irq, fts_interrupt_handler,            IRQF_TRIGGER_LOW, info->client->name,            info))static irqreturn_t fts_interrupt_handler(int irq, void *handle){    struct fts_ts_info *info = handle;    disable_irq_nosync(info->client->irq);    queue_work(info->event_wq, &info->work);//把耗时的操作放在工作队列中断底半部    return IRQ_HANDLED;}INIT_WORK(&info->work, fts_event_handler);static void fts_event_handler(struct work_struct *work){input_sync(info->input_dev);//)同步用于告诉input core子系统报告结束}

转载地址:http://bakni.baihongyu.com/

你可能感兴趣的文章
build/envsetup.sh 简介
查看>>
Android framework中修改或者添加资源无变化或编译不通过问题详解
查看>>
linux怎么切换到root里面?
查看>>
linux串口操作及设置详解
查看>>
安装alien,DEB与RPM互换
查看>>
编译Android4.0源码时常见错误及解决办法
查看>>
Android 源码编译make的错误处理
查看>>
linux环境下C语言中sleep的问题
查看>>
ubuntu 12.04 安装 GMA3650驱动
查看>>
新版本的linux如何生成xorg.conf
查看>>
xorg.conf的编写
查看>>
启用SELinux时遇到的问题
查看>>
virbr0 虚拟网卡卸载方法
查看>>
No devices detected. Fatal server error: no screens found
查看>>
新版本的linux如何生成xorg.conf
查看>>
virbr0 虚拟网卡卸载方法
查看>>
Centos 6.0_x86-64 终于成功安装官方显卡驱动
查看>>
Linux基础教程:CentOS卸载KDE桌面
查看>>
db sql montior
查看>>
read humor_campus
查看>>