Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 未调用i2c设备驱动程序初始化_Android_C_Linux Kernel_I2c_Atmel - Fatal编程技术网

Android 未调用i2c设备驱动程序初始化

Android 未调用i2c设备驱动程序初始化,android,c,linux-kernel,i2c,atmel,Android,C,Linux Kernel,I2c,Atmel,我正在尝试为Atmel电容式触摸屏控制器提供一个i2c设备驱动程序,使其能够在基于Android Lollipop(5.0.2版)系统的Linux内核中工作。我已经将制造商提供的更新源代码(atmel_mxt_ts.c)添加到内核/驱动程序/输入/触摸屏,并根据需要修改devicetree,但是当内核启动时,这个特定的驱动程序永远不会调用i2c_设备_寄存器。这意味着我无法通过i2C总线与该设备通信,因此触摸面板将无法工作。请注意,这个驱动程序文件已经存在于内核中,我只需要通过运行makemen

我正在尝试为Atmel电容式触摸屏控制器提供一个i2c设备驱动程序,使其能够在基于Android Lollipop(5.0.2版)系统的Linux内核中工作。我已经将制造商提供的更新源代码(atmel_mxt_ts.c)添加到内核/驱动程序/输入/触摸屏,并根据需要修改devicetree,但是当内核启动时,这个特定的驱动程序永远不会调用i2c_设备_寄存器。这意味着我无法通过i2C总线与该设备通信,因此触摸面板将无法工作。请注意,这个驱动程序文件已经存在于内核中,我只需要通过运行makemenuconfig并执行完全干净的构建来确保它包含在内核构建中。 其他i2c驱动程序(如电池驱动程序)正在调用i2c_设备_寄存器函数,我可以看到它们的printk输出。 还请注意,此设备的设备地址显示在sysfs中。i、 e.相关i2c总线的目录列表如下所示:

root@var_mx6:/ # ls /sys/bus/i2c/devices/i2c-2/
2-000b
2-004a
2-0068
delete_device
i2c-dev
name
new_device
power
subsystem
uevent
004a是Atmel电容式触摸设备的地址,000b是SMBus电池,0068是RTC设备

关于为什么i2c_寄存器_驱动程序没有被称为Atmel电容式触摸设备驱动程序,有人有什么建议吗

我在下面包含了一些代码片段

以下是驱动程序源文件atmel_mxt_ts.c的最后一部分:

    static const struct of_device_id mxt_of_match[] = {
    { .compatible = "atmel,atmel_mxt_ts"},
    { /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, mxt_of_match);

#ifdef CONFIG_ACPI
static const struct acpi_device_id mxt_acpi_id[] = {
    { "ATML0000", 0 },  /* Touchpad */
    { "ATML0001", 0 },  /* Touchscreen */
    { }
};
MODULE_DEVICE_TABLE(acpi, mxt_acpi_id);
#endif

static const struct i2c_device_id mxt_id[] = {
    { "atmel_mxt_ts", 0 },
    { }
};
MODULE_DEVICE_TABLE(i2c, mxt_id);

static struct i2c_driver mxt_driver = {
    .driver = {
        .name   = "atmel_mxt_ts",
        .owner  = THIS_MODULE,
        .of_match_table = of_match_ptr(mxt_of_match),
        .acpi_match_table = ACPI_PTR(mxt_acpi_id),
        .pm = &mxt_pm_ops,
    },
    .probe      = mxt_probe,
    .remove     = mxt_remove,
    .id_table   = mxt_id,
};

module_i2c_driver(mxt_driver);

/* Module information */
MODULE_AUTHOR("Joonyoung Shim <jy0922.shim@samsung.com>");
MODULE_DESCRIPTION("Atmel maXTouch Touchscreen driver");
MODULE_LICENSE("GPL");
匹配[]的设备id mxt的静态常量结构{
{.compatible=“atmel,atmel_mxt_ts”},
{/*哨兵*/}
};
模块设备表(of、mxt、of匹配);
#ifdef配置\u ACPI
静态常量结构acpi_设备id mxt_acpi_id[]={
{“ATML0000”,0},/*触摸板*/
{“ATML0001”,0},/*触摸屏*/
{ }
};
模块设备表(acpi、mxt\U acpi\U id);
#恩迪夫
静态常量结构i2c_设备_id mxt_id[]={
{“atmel_mxts”,0},
{ }
};
模块设备表(i2c、mxt\U id);
静态结构i2c_驱动程序mxt_驱动程序={
.司机={
.name=“atmel_mxt_ts”,
.owner=此_模块,
.of_match_table=of_match_ptr(mxt_of_match),
.acpi_match_table=acpi_PTR(mxt_acpi_id),
.pm=&mxt\u pm\u ops,
},
.probe=mxt_探头,
.remove=mxt\u remove,
.id_table=mxt_id,
};
模块i2c驱动程序(mxt驱动程序);
/*模块信息*/
模块作者(“Joonyong Shim”);
模块描述(“Atmel maXTouch触摸屏驱动程序”);
模块许可证(“GPL”);
以下是devicetree源的相关部分:

&i2c3 {
        clock-frequency = <100000>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2c3_3>;
        status = "okay";

    battery {
        compatible = "ti,bq20z75";
        reg = <0xb>;
        /* nBATT_PRES */
        battery-detect-gpios = <&expander1 4 GPIO_ACTIVE_LOW>;
        power-supplies = <&charger>;
    };

    touch@4a {
        compatible = "atmel,atmel_mxt_ts";
        reg = <0x4a>;
        interrupt-parent = <&gpio1>;
        interrupts = <4 1>; 
    };


        /* DS1307 RTC module */
        rtc@0x68 {
                 compatible = "dallas,ds1307";
                 reg = <0x68>;
        };
};
&i2c3{
时钟频率=;
pinctrl names=“默认”;
pinctrl-0=;
status=“好”;
电池组{
compatible=“ti,bq20z75”;
reg=;
/*nBATT_PRES*/
电池检测gpios=;
电源=;
};
touch@4a {
compatible=“atmel,atmel\u mxt\u ts”;
reg=;
中断父项=;
中断=;
};
/*DS1307 RTC模块*/
rtc@0x68 {
compatible=“达拉斯,ds1307”;
reg=;
};
};

在第二次检查此文件时,先前为添加atmel电容式触摸驱动程序而对内核构建的.config文件所做的更改以某种方式被覆盖。在通过make manuconfig确保.config文件包含此驱动程序后,现在重新生成驱动程序。原来是用户错误

在第二次检查此文件时,先前为添加atmel电容式触摸驱动程序而对内核构建的.config文件所做的更改不知何故被覆盖。在通过make manuconfig确保.config文件包含此驱动程序后,现在重新生成驱动程序。原来是用户错误

您从未提到过
drivers/input/touchscreen/
中的
Makefile
Kconfig
文件。你更新了吗?您是否重新配置了内核并选择了新的触摸屏驱动程序?当然,您是否重建并安装了内核和devicetree?不确定是否有缺少大括号的打字错误。这个touch@4a条目应位于&i2c3节点内。i2cdetect是否在i2c总线上显示触摸屏?检查探测函数是否在处理Ian添加的内容的同时被调用。@IanAbbott此驱动程序已经是内核的一部分,因此存在于Makefile和Kconfig文件中。我刚刚使用makemenuconfig重新配置了内核,以确保包含atmel驱动程序。atmel驱动程序源代码已更新为最新代码。我对内核和设备树进行了全面清理/重建/安装touch@4a条目在&i2c3节点中,我只是没有显示足够的文件!此驱动程序的探测函数肯定没有被调用。@SimonBagley它是内置驱动程序还是可加载内核模块?它是否列在
/sys/bus/i2c/drivers
目录中?您从未提及
驱动程序/input/touchscreen/
中的
Makefile
Kconfig
文件。你更新了吗?您是否重新配置了内核并选择了新的触摸屏驱动程序?当然,您是否重建并安装了内核和devicetree?不确定是否有缺少大括号的打字错误。这个touch@4a条目应位于&i2c3节点内。i2cdetect是否在i2c总线上显示触摸屏?检查探测函数是否在处理Ian添加的内容的同时被调用。@IanAbbott此驱动程序已经是内核的一部分,因此存在于Makefile和Kconfig文件中。我刚刚使用makemenuconfig重新配置了内核,以确保包含atmel驱动程序。atmel驱动程序源代码已更新为最新代码。我对内核和设备树进行了全面清理/重建/安装touch@4a条目在&i2c3节点中,我只是没有显示足够的文件!此驱动程序的探测函数肯定没有被调用。@SimonBagley它是内置驱动程序吗