[ 2185.170000] usb 1-2.3.3: new full-speed USB device number 7 using s5p-ehci
[ 2185.275000] usb 1-2.3.3: New USB device found, idVendor=fff0, idProduct=05d1
[ 2185.275000] usb 1-2.3.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 2185.275000] usb 1-2.3.3: Product: MultiTouch.
[ 2185.275000] usb 1-2.3.3: Manufacturer: MultiTouch.
[ 2185.275000] hid_match_id_yangjia####
[ 2185.280000] hid_match_id_yangjia####
[ 2185.285000] hid_bus_match_yangjia####
[ 2185.285000] hid_match_device_yangjia####
[ 2185.290000] hid_match_id_yangjia####
[ 2185.295000] hid_bus_match_yangjia####
[ 2185.300000] hid_match_device_yangjia####
[ 2185.305000] hid_match_id_yangjia####
[ 2185.305000] hid_match_one_id(hdev, id)=1
[ 2185.310000] hid_device_probe_yangjia####
[ 2185.315000] hid_match_device_yangjia####
[ 2185.320000] hid_match_id_yangjia####
[ 2185.320000] hid_match_one_id(hdev, id)=1
[ 2185.325000] #######mt_probe
[ 2185.330000] hid_match_id_yangjia####
[ 2185.330000] input: MultiTouch. MultiTouch. as /devices/platform/s5p-ehci/usb1/1-2/1-2.3/1-2.3.3/1-2.3.3:1.0/input/input5
[ 2185.345000] 4: TCNTB=0000028a, TCNTO=000000f2, TINT_CSTAT=00000008
[ 2185.350000] hid-multitouch 0003:FFF0:05D1.0003: input: USB HID v1.10 Mouse [MultiTouch. MultiTouch.] on usb-s5p-ehci-2.3.3/input0
[ 2185.360000] hid_match_id_yangjia####
[ 2185.365000] hid_match_id_yangjia####
[ 2185.370000] hid_bus_match_yangjia####
[ 2185.370000] hid_match_device_yangjia####
[ 2185.375000] hid_match_id_yangjia####
[ 2185.380000] hid_match_one_id(hdev, id)=1
[ 2185.385000] hid_device_probe_yangjia####
[ 2185.390000] hid_match_device_yangjia####
[ 2185.390000] hid_match_id_yangjia####
[ 2185.395000] hid_match_one_id(hdev, id)=1
[ 2185.400000] hid_match_id_yangjia####
[ 2185.405000] hid-generic 0003:FFF0:05D1.0004: claimed by neither input, hiddev nor hidraw
[ 2185.410000] hid_bus_match_yangjia####
[ 2185.415000] hid_match_device_yangjia####
[ 2185.420000] hid_match_id_yangjia####
static struct hid_driver mt_driver = {
.name = "hid-multitouch",
.id_table = mt_devices,
.probe = mt_probe,
.remove = mt_remove,
.input_mapping = mt_input_mapping,
.input_mapped = mt_input_mapped,
.feature_mapping = mt_feature_mapping,
.usage_table = mt_grabbed_usages,
.event = mt_event,
#ifdef CONFIG_PM
.reset_resume = mt_reset_resume,
#endif
};
static int __init mt_init(void)
{
return hid_register_driver(&mt_driver);
}
static struct bus_type hid_bus_type = {
.name = "hid",
.dev_attrs = hid_dev_attrs,
.match = hid_bus_match,
.probe = hid_device_probe,
.remove = hid_device_remove,
.uevent = hid_uevent,
};
static int hid_bus_match(struct device *dev, struct device_driver *drv)
{
printk(" hid_bus_match_yangjia####\n");
struct hid_driver *hdrv = container_of(drv, struct hid_driver, driver);
struct hid_device *hdev = container_of(dev, struct hid_device, dev);
return hid_match_device(hdev, hdrv) != NULL;
}
static const struct hid_device_id *hid_match_device(struct hid_device *hdev,
struct hid_driver *hdrv)
{
struct hid_dynid *dynid;
printk(" hid_match_device_yangjia####\n");
spin_lock(&hdrv->dyn_lock);
list_for_each_entry(dynid, &hdrv->dyn_list, list) {
if (<span style="color:#ff0000;">hid_match_one_id(hdev, &dynid->id)</span>) {
spin_unlock(&hdrv->dyn_lock);
printk("dynid->id###############\n");
return &dynid->id;
}
}
spin_unlock(&hdrv->dyn_lock);
return<span style="color:#ff0000;"> hid_match_id(hdev, hdrv->id_table);</span>
}
const struct hid_device_id *hid_match_id(struct hid_device *hdev,
const struct hid_device_id *id)
{
int flag = 10;
printk(" hid_match_id_yangjia####\n");
for (; id->bus; id++)
if (flag = <span style="color:#ff0000;">hid_match_one_id</span>(hdev, id))
{
printk(" hid_match_one_id(hdev, id)=%d\n",flag);
return id;
}
return NULL;
}
static bool hid_match_one_id(struct hid_device *hdev,
const struct hid_device_id *id)
{
if((id->vendor == hdev->vendor)&&(id->product == hdev->product))
{
printk("#############\n");
}
// printk(" id->vendor == %d,id->product= %d,hdev->vendor=%d,hdev->product=%d\n",id->vendor,id->product,hdev->vendor,hdev->product);
return (<span style="color:#ff0000;">id->bus == HID_BUS_ANY </span>|| id->bus == hdev->bus) &&
(<span style="color:#ff0000;">id->group == HID_GROUP_ANY </span>|| id->group == hdev->group) &&
(<span style="color:#ff0000;">id->vendor == HID_ANY_ID</span> || id->vendor == hdev->vendor) &&
(<span style="color:#ff0000;">id->product == HID_ANY_ID</span> || id->product == hdev->product);
}
hid_device_probe(struct device *dev)
hid_hw_start(struct hid_device *hdev,unsigned int connect_mask)
hid_connect(struct hid_device *hdev, unsigned int connect_mask)