aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/spi/spi_s3c24xx.c
diff options
context:
space:
mode:
authorDavid Brownell <david-b@pacbell.net>2007-10-16 04:27:46 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-16 12:43:09 -0400
commitd1e44d9ce8589cc4ca0596989fe17130817ebec5 (patch)
treed1b3bcfe1804ea1871d5e965a2e3f3fa2efa07fc /drivers/spi/spi_s3c24xx.c
parent86eeb6fe71c79bd0484e17d267034249a6943bd5 (diff)
SPI driver runtime footprint shrinkage
Shrink the runtime footprint of various SPI drivers: - Move the probe() routine into the init section where practical, using platform_driver_probe() to make that safe. This often saves around 1KB. Using platform_driver_probe() can also be a correctness fix, if the probe routine is already marked __init but the driver struct keeps a dangling pointer to it after init section removal. - Likewise move remove() routines into the exit sections. These changes would be inappropriate iff the platform devices were actually hotpluggable (e.g. they're found on optional addon cards, or in an FPGA that's dynamically reprogrammed). In these cases, that's not the situation; it's an SOC controller and the only device is initialized before these drivers. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/spi/spi_s3c24xx.c')
-rw-r--r--drivers/spi/spi_s3c24xx.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/drivers/spi/spi_s3c24xx.c b/drivers/spi/spi_s3c24xx.c
index e9b683f7d7b3..89d6685a5ca4 100644
--- a/drivers/spi/spi_s3c24xx.c
+++ b/drivers/spi/spi_s3c24xx.c
@@ -233,7 +233,7 @@ static irqreturn_t s3c24xx_spi_irq(int irq, void *dev)
233 return IRQ_HANDLED; 233 return IRQ_HANDLED;
234} 234}
235 235
236static int s3c24xx_spi_probe(struct platform_device *pdev) 236static int __init s3c24xx_spi_probe(struct platform_device *pdev)
237{ 237{
238 struct s3c24xx_spi *hw; 238 struct s3c24xx_spi *hw;
239 struct spi_master *master; 239 struct spi_master *master;
@@ -382,7 +382,7 @@ static int s3c24xx_spi_probe(struct platform_device *pdev)
382 return err; 382 return err;
383} 383}
384 384
385static int s3c24xx_spi_remove(struct platform_device *dev) 385static int __exit s3c24xx_spi_remove(struct platform_device *dev)
386{ 386{
387 struct s3c24xx_spi *hw = platform_get_drvdata(dev); 387 struct s3c24xx_spi *hw = platform_get_drvdata(dev);
388 388
@@ -429,8 +429,7 @@ static int s3c24xx_spi_resume(struct platform_device *pdev)
429 429
430MODULE_ALIAS("s3c2410_spi"); /* for platform bus hotplug */ 430MODULE_ALIAS("s3c2410_spi"); /* for platform bus hotplug */
431static struct platform_driver s3c24xx_spidrv = { 431static struct platform_driver s3c24xx_spidrv = {
432 .probe = s3c24xx_spi_probe, 432 .remove = __exit_p(s3c24xx_spi_remove),
433 .remove = s3c24xx_spi_remove,
434 .suspend = s3c24xx_spi_suspend, 433 .suspend = s3c24xx_spi_suspend,
435 .resume = s3c24xx_spi_resume, 434 .resume = s3c24xx_spi_resume,
436 .driver = { 435 .driver = {
@@ -441,7 +440,7 @@ static struct platform_driver s3c24xx_spidrv = {
441 440
442static int __init s3c24xx_spi_init(void) 441static int __init s3c24xx_spi_init(void)
443{ 442{
444 return platform_driver_register(&s3c24xx_spidrv); 443 return platform_driver_probe(&s3c24xx_spidrv, s3c24xx_spi_probe);
445} 444}
446 445
447static void __exit s3c24xx_spi_exit(void) 446static void __exit s3c24xx_spi_exit(void)