Loading Documentation/driver-model/devres.txt +3 −0 Original line number Diff line number Diff line Loading @@ -302,3 +302,6 @@ PHY SLAVE DMA ENGINE devm_acpi_dma_controller_register() SPI devm_spi_register_master() drivers/spi/spi.c +35 −0 Original line number Diff line number Diff line Loading @@ -1245,6 +1245,41 @@ int spi_register_master(struct spi_master *master) } EXPORT_SYMBOL_GPL(spi_register_master); static void devm_spi_unregister(struct device *dev, void *res) { spi_unregister_master(*(struct spi_master **)res); } /** * dev_spi_register_master - register managed SPI master controller * @dev: device managing SPI master * @master: initialized master, originally from spi_alloc_master() * Context: can sleep * * Register a SPI device as with spi_register_master() which will * automatically be unregister */ int devm_spi_register_master(struct device *dev, struct spi_master *master) { struct spi_master **ptr; int ret; ptr = devres_alloc(devm_spi_unregister, sizeof(*ptr), GFP_KERNEL); if (!ptr) return -ENOMEM; ret = spi_register_master(master); if (ret != 0) { *ptr = master; devres_add(dev, ptr); } else { devres_free(ptr); } return ret; } EXPORT_SYMBOL_GPL(devm_spi_register_master); static int __unregister(struct device *dev, void *null) { spi_unregister_device(to_spi_device(dev)); Loading include/linux/spi/spi.h +2 −0 Original line number Diff line number Diff line Loading @@ -434,6 +434,8 @@ extern struct spi_master * spi_alloc_master(struct device *host, unsigned size); extern int spi_register_master(struct spi_master *master); extern int devm_spi_register_master(struct device *dev, struct spi_master *master); extern void spi_unregister_master(struct spi_master *master); extern struct spi_master *spi_busnum_to_master(u16 busnum); Loading Loading
Documentation/driver-model/devres.txt +3 −0 Original line number Diff line number Diff line Loading @@ -302,3 +302,6 @@ PHY SLAVE DMA ENGINE devm_acpi_dma_controller_register() SPI devm_spi_register_master()
drivers/spi/spi.c +35 −0 Original line number Diff line number Diff line Loading @@ -1245,6 +1245,41 @@ int spi_register_master(struct spi_master *master) } EXPORT_SYMBOL_GPL(spi_register_master); static void devm_spi_unregister(struct device *dev, void *res) { spi_unregister_master(*(struct spi_master **)res); } /** * dev_spi_register_master - register managed SPI master controller * @dev: device managing SPI master * @master: initialized master, originally from spi_alloc_master() * Context: can sleep * * Register a SPI device as with spi_register_master() which will * automatically be unregister */ int devm_spi_register_master(struct device *dev, struct spi_master *master) { struct spi_master **ptr; int ret; ptr = devres_alloc(devm_spi_unregister, sizeof(*ptr), GFP_KERNEL); if (!ptr) return -ENOMEM; ret = spi_register_master(master); if (ret != 0) { *ptr = master; devres_add(dev, ptr); } else { devres_free(ptr); } return ret; } EXPORT_SYMBOL_GPL(devm_spi_register_master); static int __unregister(struct device *dev, void *null) { spi_unregister_device(to_spi_device(dev)); Loading
include/linux/spi/spi.h +2 −0 Original line number Diff line number Diff line Loading @@ -434,6 +434,8 @@ extern struct spi_master * spi_alloc_master(struct device *host, unsigned size); extern int spi_register_master(struct spi_master *master); extern int devm_spi_register_master(struct device *dev, struct spi_master *master); extern void spi_unregister_master(struct spi_master *master); extern struct spi_master *spi_busnum_to_master(u16 busnum); Loading