在USB設備枚舉探測hid-cp2112驅動程序時,它甚至不嘗試在設備樹中查找自身。 我已經將以下修補程序創建到 hid-cp2112.c,它將找到的cp2112設備鏈接到devie樹中的/i2c@cp2112 節點。 ( 當然,只有在USB上有一個cp2112晶元的情況下才適用。)diff --git a/drivers/hid/hid-cp2112.c b/drivers/hid/hid-cp2112.c
index 2bd7f97..fa88590 100644
--- a/drivers/hid/hid-cp2112.c
+++ b/drivers/hid/hid-cp2112.c
@@ -31,6 +31,8 @@
#include
#include
#include
+#include
+#include
#include"hid-ids.h"
enum {
@@ -1014,6 +1016,7 @@ static int cp2112_probe(struct hid_device *hdev, const struct hid_device_id *id)
dev->adap.algo = &smbus_algorithm;
dev->adap.algo_data = dev;
dev->adap.dev.parent = &hdev->dev;
+ dev->adap.dev.of_node = of_find_node_by_path("/i2c@cp2112");
snprintf(dev->adap.name, sizeof(dev->adap.name),
"CP2112 SMBus Bridge on hiddev%d", hdev->minor);
init_waitqueue_head(&dev->wait);
@@ -1029,6 +1032,8 @@ static int cp2112_probe(struct hid_device *hdev, const struct hid_device_id *id)
hid_dbg(hdev,"adapter registeredn");
+ of_i2c_register_devices(&dev->adap);
+
dev->gc.label ="cp2112_gpio";
dev->gc.direction_input = cp2112_gpio_direction_input;
dev->gc.direction_output = cp2112_gpio_direction_output;
觸摸控制器的. dts 文件中的條目如下所示:i2c@cp2112 {
#address-cells = <1>;
#size-cells = <0>;
st1332: touchscreen@55 {
compatible ="sitronix,st1232";
reg = <0x55>;
interrupt-parent = ;
interrupts = <189 IRQ_TYPE_EDGE_FALLING>;
};
};