Example #1
0
struct device *mcuio_add_soft_hc(struct mcuio_device_id *id,
				 const struct mcuio_soft_hc_ops *ops,
				 void *priv)
{
	struct mcuio_hc_platform_data *plat;
	struct mcuio_soft_hc *shc = __setup_shc(ops, priv);
	struct device *out;
	int stat;
	if (IS_ERR(shc))
		return ERR_PTR(PTR_ERR(shc));
	plat = kzalloc(sizeof(*plat), GFP_KERNEL);
	if (!plat) {
		kfree(shc);
		return ERR_PTR(-ENOMEM);
	}
	plat->setup_regmap = mcuio_soft_hc_setup_regmap;
	plat->data = shc;

	stat = bus_register_notifier(&mcuio_bus_type, &device_nb);
	if (stat < 0) {
		kfree(shc);
		return ERR_PTR(stat);
	}

	out = mcuio_add_hc_device(id ? id : &default_soft_hc_id, plat,
				  mcuio_soft_hc_release);
	if (IS_ERR(out)) {
		kfree(shc);
		bus_unregister_notifier(&mcuio_bus_type, &device_nb);
		return out;
	}
	shc->hc = to_mcuio_dev(out);
	return out;
}
Example #2
0
/*
 * Init
 */
static int __init usb_init(void)
{
	int retval;
	if (nousb) {
		pr_info("%s: USB support disabled\n", usbcore_name);
		return 0;
	}

	retval = usb_debugfs_init();
	if (retval)
		goto out;

	retval = ksuspend_usb_init();
	if (retval)
		goto out;
	retval = bus_register(&usb_bus_type);
	if (retval)
		goto bus_register_failed;
	retval = bus_register_notifier(&usb_bus_type, &usb_bus_nb);
	if (retval)
		goto bus_notifier_failed;
	retval = usb_major_init();
	if (retval)
		goto major_init_failed;
	retval = usb_register(&usbfs_driver);
	if (retval)
		goto driver_register_failed;
	retval = usb_devio_init();
	if (retval)
		goto usb_devio_init_failed;
	retval = usbfs_init();
	if (retval)
		goto fs_init_failed;
	retval = usb_hub_init();
	if (retval)
		goto hub_init_failed;
	retval = usb_register_device_driver(&usb_generic_driver, THIS_MODULE);
	if (!retval)
		goto out;

	usb_hub_cleanup();
hub_init_failed:
	usbfs_cleanup();
fs_init_failed:
	usb_devio_cleanup();
usb_devio_init_failed:
	usb_deregister(&usbfs_driver);
driver_register_failed:
	usb_major_cleanup();
major_init_failed:
	bus_unregister_notifier(&usb_bus_type, &usb_bus_nb);
bus_notifier_failed:
	bus_unregister(&usb_bus_type);
bus_register_failed:
	ksuspend_usb_cleanup();
out:
	return retval;
}
Example #3
0
/*
 * Cleanup
 */
static void __exit usb_exit(void)
{
	/* This will matter if shutdown/reboot does exitcalls. */
	if (nousb)
		return;

	usb_deregister_device_driver(&usb_generic_driver);
	usb_major_cleanup();
	usbfs_cleanup();
	usb_deregister(&usbfs_driver);
	usb_devio_cleanup();
	usb_hub_cleanup();
	bus_unregister_notifier(&usb_bus_type, &usb_bus_nb);
	bus_unregister(&usb_bus_type);
	usb_debugfs_cleanup();
}
Example #4
0
static void __exit usb_exit(void)
{
	
	if (nousb)
		return;

	usb_deregister_device_driver(&usb_generic_driver);
	usb_major_cleanup();
	usbfs_cleanup();
	usb_deregister(&usbfs_driver);
	usb_devio_cleanup();
	usb_hub_cleanup();
	bus_unregister_notifier(&usb_bus_type, &usb_bus_nb);
	bus_unregister(&usb_bus_type);
	ksuspend_usb_cleanup();
	usb_debugfs_cleanup();
}
Example #5
0
File: usb.c Project: guribe94/linux
/*
 * Cleanup
 */
static void __exit usb_exit(void)
{
	/* This will matter if shutdown/reboot does exitcalls. */
	if (usb_disabled())
		return;

	usb_release_quirk_list();
	usb_deregister_device_driver(&usb_generic_driver);
	usb_major_cleanup();
	usb_deregister(&usbfs_driver);
	usb_devio_cleanup();
	usb_hub_cleanup();
	bus_unregister_notifier(&usb_bus_type, &usb_bus_nb);
	bus_unregister(&usb_bus_type);
	usb_acpi_unregister();
	usb_debugfs_cleanup();
	idr_destroy(&usb_bus_idr);
}
static int regulator_quirk_notify(struct notifier_block *nb,
				  unsigned long action, void *data)
{
	struct device *dev = data;
	struct i2c_client *client;
	u32 mon;

	mon = ioread32(irqc + IRQC_MONITOR);
	dev_dbg(dev, "%s: %ld, IRQC_MONITOR = 0x%x\n", __func__, action, mon);
	if (mon & REGULATOR_IRQ_MASK)
		goto remove;

	if (action != BUS_NOTIFY_ADD_DEVICE || dev->type == &i2c_adapter_type)
		return 0;

	client = to_i2c_client(dev);
	dev_dbg(dev, "Detected %s\n", client->name);

	if ((client->addr == 0x58 && !strcmp(client->name, "da9063")) ||
	    (client->addr == 0x68 && !strcmp(client->name, "da9210"))) {
		int ret;

		dev_info(&client->dev, "clearing da9063/da9210 interrupts\n");
		ret = i2c_transfer(client->adapter, da9xxx_msgs, ARRAY_SIZE(da9xxx_msgs));
		if (ret != ARRAY_SIZE(da9xxx_msgs))
			dev_err(&client->dev, "i2c error %d\n", ret);
	}

	mon = ioread32(irqc + IRQC_MONITOR);
	if (mon & REGULATOR_IRQ_MASK)
		goto remove;

	return 0;

remove:
	dev_info(dev, "IRQ2 is not asserted, removing quirk\n");

	bus_unregister_notifier(&i2c_bus_type, nb);
	iounmap(irqc);
	return 0;
}
Example #7
0
static void mcuio_soft_hc_release(struct device *device)
{
	struct mcuio_hc_platform_data *plat = dev_get_platdata(device);
	struct mcuio_soft_hc *shc;
	int i;
	if (!plat) {
		WARN_ON(1);
		return;
	}
	shc = plat->data;
	bus_unregister_notifier(&mcuio_bus_type, &device_nb);
	/* Unregister all irq controllers */
	for (i = 0; i < MCUIO_DEVS_PER_BUS; i++)
		if (shc->irq_controllers[i])
			mcuio_device_unregister(shc->irq_controllers[i]);
	irq_set_handler(shc->irqno, NULL);
	irq_set_chip(shc->irqno, NULL);
	irq_free_desc(shc->irqno);
	kfree(shc);
	mcuio_hc_dev_default_release(device);
}
Example #8
0
static void __exit cleanup_ccwgroup(void)
{
	bus_unregister_notifier(&ccwgroup_bus_type, &ccwgroup_nb);
	bus_unregister(&ccwgroup_bus_type);
}
Example #9
0
void i2c_dev_exit(void) {
	bus_unregister_notifier(&i2c_bus_type, &i2cdev_notifier);
	i2c_for_each_dev(NULL, i2cdev_detach_adapter);
	class_destroy(i2c_dev_class);
	//unregister_chrdev(I2C_MAJOR, "i2c");
}