diff options
Diffstat (limited to 'drivers/ipack')
| -rw-r--r-- | drivers/ipack/carriers/tpci200.c | 14 | ||||
| -rw-r--r-- | drivers/ipack/ipack.c | 36 | 
2 files changed, 39 insertions, 11 deletions
diff --git a/drivers/ipack/carriers/tpci200.c b/drivers/ipack/carriers/tpci200.c index 0246b1fddff..c276fde318e 100644 --- a/drivers/ipack/carriers/tpci200.c +++ b/drivers/ipack/carriers/tpci200.c @@ -480,6 +480,7 @@ static void tpci200_release_device(struct ipack_device *dev)  static int tpci200_create_device(struct tpci200_board *tpci200, int i)  { +	int ret;  	enum ipack_space space;  	struct ipack_device *dev =  		kzalloc(sizeof(struct ipack_device), GFP_KERNEL); @@ -495,7 +496,18 @@ static int tpci200_create_device(struct tpci200_board *tpci200, int i)  			+ tpci200_space_interval[space] * i;  		dev->region[space].size = tpci200_space_size[space];  	} -	return ipack_device_register(dev); + +	ret = ipack_device_init(dev); +	if (ret < 0) { +		ipack_put_device(dev); +		return ret; +	} + +	ret = ipack_device_add(dev); +	if (ret < 0) +		ipack_put_device(dev); + +	return ret;  }  static int tpci200_pci_probe(struct pci_dev *pdev, diff --git a/drivers/ipack/ipack.c b/drivers/ipack/ipack.c index 7ec6b208b1c..6e066c53acc 100644 --- a/drivers/ipack/ipack.c +++ b/drivers/ipack/ipack.c @@ -227,7 +227,7 @@ static int ipack_unregister_bus_member(struct device *dev, void *data)  	struct ipack_bus_device *bus = data;  	if (idev->bus == bus) -		ipack_device_unregister(idev); +		ipack_device_del(idev);  	return 1;  } @@ -419,7 +419,7 @@ out:  	return ret;  } -int ipack_device_register(struct ipack_device *dev) +int ipack_device_init(struct ipack_device *dev)  {  	int ret; @@ -428,6 +428,7 @@ int ipack_device_register(struct ipack_device *dev)  	dev->dev.parent = dev->bus->parent;  	dev_set_name(&dev->dev,  		     "ipack-dev.%u.%u", dev->bus->bus_nr, dev->slot); +	device_initialize(&dev->dev);  	if (dev->bus->ops->set_clockrate(dev, 8))  		dev_warn(&dev->dev, "failed to switch to 8 MHz operation for reading of device ID.\n"); @@ -447,19 +448,34 @@ int ipack_device_register(struct ipack_device *dev)  			dev_err(&dev->dev, "failed to switch to 32 MHz operation.\n");  	} -	ret = device_register(&dev->dev); -	if (ret < 0) -		kfree(dev->id); +	return 0; +} +EXPORT_SYMBOL_GPL(ipack_device_init); -	return ret; +int ipack_device_add(struct ipack_device *dev) +{ +	return device_add(&dev->dev); +} +EXPORT_SYMBOL_GPL(ipack_device_add); + +void ipack_device_del(struct ipack_device *dev) +{ +	device_del(&dev->dev); +	ipack_put_device(dev); +} +EXPORT_SYMBOL_GPL(ipack_device_del); + +void ipack_get_device(struct ipack_device *dev) +{ +	get_device(&dev->dev);  } -EXPORT_SYMBOL_GPL(ipack_device_register); +EXPORT_SYMBOL_GPL(ipack_get_device); -void ipack_device_unregister(struct ipack_device *dev) +void ipack_put_device(struct ipack_device *dev)  { -	device_unregister(&dev->dev); +	put_device(&dev->dev);  } -EXPORT_SYMBOL_GPL(ipack_device_unregister); +EXPORT_SYMBOL_GPL(ipack_put_device);  static int __init ipack_init(void)  {  |