static int generic_probe(struct usb_device *udev) { int err, c; /* put device-specific files into sysfs */ usb_create_sysfs_dev_files(udev); /* Choose and set the configuration. This registers the interfaces * with the driver core and lets interface drivers bind to them. */ c = choose_configuration(udev); if (c >= 0) { err = usb_set_configuration(udev, c); if (err) { dev_err(&udev->dev, "can't set config #%d, error %d\n", c, err); /* This need not be fatal. The user can try to * set other configurations. */ } } /* USB device state == configured ... usable */ usb_notify_add_device(udev); return 0; }
static int generic_probe(struct usb_device *udev) { int err, c; printk("[K] generic probe:%d, %d, %d\n", g3_flag, probe_count, g3_plug_flag); // tmp test /* probe_count: ignore first insmod */ if((g3_flag == 1) && (probe_count > 0)) { if(g3_plug_flag == 0) { printk("[K] send rc 3g on\n"); // tmp test g3_plug_flag = 1; usb_plug_flag = G3_PLUG_ON; // ASUS PLUG kill_proc(1, SIGTTIN, 1); } else printk("[K] ignore send 3g on\n"); // tmp test } if(probe_count < 128) ++probe_count; /* put device-specific files into sysfs */ usb_create_sysfs_dev_files(udev); /* Choose and set the configuration. This registers the interfaces * with the driver core and lets interface drivers bind to them. */ c = choose_configuration(udev); if (c >= 0) { err = usb_set_configuration(udev, c); if (err) { dev_err(&udev->dev, "can't set config #%d, error %d\n", c, err); /* This need not be fatal. The user can try to * set other configurations. */ } } /* USB device state == configured ... usable */ usb_notify_add_device(udev); return 0; }
/* * Notifications of device and interface registration */ static int usb_bus_notify(struct notifier_block *nb, unsigned long action, void *data) { struct device *dev = data; switch (action) { case BUS_NOTIFY_ADD_DEVICE: if (dev->type == &usb_device_type) (void) usb_create_sysfs_dev_files(to_usb_device(dev)); else if (dev->type == &usb_if_device_type) usb_create_sysfs_intf_files(to_usb_interface(dev)); break; case BUS_NOTIFY_DEL_DEVICE: if (dev->type == &usb_device_type) usb_remove_sysfs_dev_files(to_usb_device(dev)); else if (dev->type == &usb_if_device_type) usb_remove_sysfs_intf_files(to_usb_interface(dev)); break; } return 0; }