linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/5] Generalize module_platform_driver
@ 2011-11-16  9:13 Lars-Peter Clausen
  2011-11-16  9:13 ` [PATCH 1/5] drivercore: " Lars-Peter Clausen
                   ` (6 more replies)
  0 siblings, 7 replies; 26+ messages in thread
From: Lars-Peter Clausen @ 2011-11-16  9:13 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jean Delvare, Grant Likely
  Cc: Jonathan Cameron, Michael Hennerich, linux-iio, linux-kernel,
	linux-i2c, spi-devel-general, Lars-Peter Clausen

Grant Likely recently introduced the module_platform_driver macro which can be
used to eliminate a few lines on boilerplate code in platform driver modules.
The same approach can be used to do the same for other bus type drivers.

The first patch of this series generalizes the module_platform_driver macro and
introduces the module_driver macro. It is similar to module_platform_driver
macro but has two additional parameters to pass in the driver register and
unregister function. The intend is that this macro is used to construct bus
specific macros for generating the driver register/unregister boilerplate code.

The next two patches in this series add the module_i2c_driver and
module_spi_driver macro which use the module_driver macro to generate the I2C
and SPI driver boilerplate code.

The last two patches convert the driver found in the IIO framework to use the
new module_i2c_driver and module_spi_driver macros to demonstrate their
potential and remove over 700 lines of code.

While this series only introduces these kind of helper macros for I2C and SPI
bus drivers the same scheme should be applicable to most other bus driver types.
For example PCI and USB seem to be good candidates.

It probably makes sense to merge the first three patches together. The last two
can probably, since this is not urgent, wait until the first three have reached
mainline.

- Lars

Lars-Peter Clausen (5):
  drivercore: Generalize module_platform_driver
  I2C: Add helper macro for i2c_driver boilerplate
  SPI: Add helper macro for spi_driver boilerplate
  staging:iio: Use module_i2c_driver to register I2C drivers
  staging:iio: Use module_spi_driver to register SPI driver

 drivers/staging/iio/accel/adis16201_core.c      |   13 +------------
 drivers/staging/iio/accel/adis16203_core.c      |   13 +------------
 drivers/staging/iio/accel/adis16204_core.c      |   13 +------------
 drivers/staging/iio/accel/adis16209_core.c      |   13 +------------
 drivers/staging/iio/accel/adis16220_core.c      |   13 +------------
 drivers/staging/iio/accel/adis16240_core.c      |   13 +------------
 drivers/staging/iio/accel/kxsd9.c               |   13 +------------
 drivers/staging/iio/accel/lis3l02dq_core.c      |   13 +------------
 drivers/staging/iio/accel/sca3000_core.c        |   13 +------------
 drivers/staging/iio/adc/ad7192.c                |   13 +------------
 drivers/staging/iio/adc/ad7280a.c               |   13 +------------
 drivers/staging/iio/adc/ad7291.c                |   14 +-------------
 drivers/staging/iio/adc/ad7298_core.c           |   13 +------------
 drivers/staging/iio/adc/ad7476_core.c           |   13 +------------
 drivers/staging/iio/adc/ad7606_spi.c            |   13 +------------
 drivers/staging/iio/adc/ad7780.c                |   13 +------------
 drivers/staging/iio/adc/ad7793.c                |   13 +------------
 drivers/staging/iio/adc/ad7816.c                |   14 +-------------
 drivers/staging/iio/adc/ad7887_core.c           |   13 +------------
 drivers/staging/iio/adc/ad799x_core.c           |   14 +-------------
 drivers/staging/iio/adc/adt7310.c               |   14 +-------------
 drivers/staging/iio/adc/adt7410.c               |   14 +-------------
 drivers/staging/iio/adc/max1363_core.c          |   14 +-------------
 drivers/staging/iio/addac/adt7316-i2c.c         |   14 +-------------
 drivers/staging/iio/addac/adt7316-spi.c         |   14 +-------------
 drivers/staging/iio/cdc/ad7150.c                |   14 +-------------
 drivers/staging/iio/cdc/ad7152.c                |   14 +-------------
 drivers/staging/iio/cdc/ad7746.c                |   14 +-------------
 drivers/staging/iio/dac/ad5064.c                |   13 +------------
 drivers/staging/iio/dac/ad5360.c                |   13 +------------
 drivers/staging/iio/dac/ad5446.c                |   13 +------------
 drivers/staging/iio/dac/ad5504.c                |   13 +------------
 drivers/staging/iio/dac/ad5624r_spi.c           |   13 +------------
 drivers/staging/iio/dac/ad5686.c                |   13 +------------
 drivers/staging/iio/dac/ad5791.c                |   13 +------------
 drivers/staging/iio/dac/max517.c                |   14 +-------------
 drivers/staging/iio/dds/ad5930.c                |   13 +------------
 drivers/staging/iio/dds/ad9832.c                |   13 +------------
 drivers/staging/iio/dds/ad9834.c                |   13 +------------
 drivers/staging/iio/dds/ad9850.c                |   13 +------------
 drivers/staging/iio/dds/ad9852.c                |   13 +------------
 drivers/staging/iio/dds/ad9910.c                |   13 +------------
 drivers/staging/iio/dds/ad9951.c                |   13 +------------
 drivers/staging/iio/gyro/adis16080_core.c       |   13 +------------
 drivers/staging/iio/gyro/adis16130_core.c       |   13 +------------
 drivers/staging/iio/gyro/adis16260_core.c       |   13 +------------
 drivers/staging/iio/gyro/adxrs450_core.c        |   13 +------------
 drivers/staging/iio/impedance-analyzer/ad5933.c |   13 +------------
 drivers/staging/iio/imu/adis16400_core.c        |   13 +------------
 drivers/staging/iio/light/isl29018.c            |   14 +-------------
 drivers/staging/iio/light/tsl2563.c             |   14 +-------------
 drivers/staging/iio/light/tsl2583.c             |   14 +-------------
 drivers/staging/iio/magnetometer/ak8975.c       |   14 +-------------
 drivers/staging/iio/magnetometer/hmc5843.c      |   14 +-------------
 drivers/staging/iio/meter/ade7753.c             |   13 +------------
 drivers/staging/iio/meter/ade7754.c             |   13 +------------
 drivers/staging/iio/meter/ade7758_core.c        |   13 +------------
 drivers/staging/iio/meter/ade7759.c             |   13 +------------
 drivers/staging/iio/meter/ade7854-i2c.c         |   14 +-------------
 drivers/staging/iio/meter/ade7854-spi.c         |   13 +------------
 drivers/staging/iio/resolver/ad2s1200.c         |   13 +------------
 drivers/staging/iio/resolver/ad2s1210.c         |   13 +------------
 drivers/staging/iio/resolver/ad2s90.c           |   13 +------------
 include/linux/i2c.h                             |   13 +++++++++++++
 include/linux/init.h                            |   21 +++++++++++++++++++++
 include/linux/platform_device.h                 |   12 ++----------
 include/linux/spi/spi.h                         |   11 +++++++++++
 67 files changed, 110 insertions(+), 784 deletions(-)

-- 
1.7.7.1



^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PATCH 1/5] drivercore: Generalize module_platform_driver
  2011-11-16  9:13 [PATCH 0/5] Generalize module_platform_driver Lars-Peter Clausen
@ 2011-11-16  9:13 ` Lars-Peter Clausen
  2011-11-16 17:11   ` Grant Likely
                     ` (2 more replies)
  2011-11-16  9:13 ` [PATCH 2/5] I2C: Add helper macro for i2c_driver boilerplate Lars-Peter Clausen
                   ` (5 subsequent siblings)
  6 siblings, 3 replies; 26+ messages in thread
From: Lars-Peter Clausen @ 2011-11-16  9:13 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jean Delvare, Grant Likely
  Cc: Jonathan Cameron, Michael Hennerich, linux-iio, linux-kernel,
	linux-i2c, spi-devel-general, Lars-Peter Clausen

This patch generalizes the module_platform_driver macro and introduces a new
module_driver macro. The module_driver macro takes a driver name, a register
and a unregister function for this driver type. Using these it construct the
module init and exit sections which register and unregister the driver. Since
such init/exit sections are commonly found in drivers this macro can be used
to eliminate a lot of boilerplate code.

The macro is not intended to be used by driver modules directly, instead it
should be used to generate bus specific macros for registering drivers like
the module_platform_driver macro.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 include/linux/init.h            |   21 +++++++++++++++++++++
 include/linux/platform_device.h |   12 ++----------
 2 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/include/linux/init.h b/include/linux/init.h
index 9146f39..3e2d238 100644
--- a/include/linux/init.h
+++ b/include/linux/init.h
@@ -346,4 +346,25 @@ void __init parse_early_options(char *cmdline);
 #define __exit_p(x) NULL
 #endif
 
+/**
+ * module_driver() - Helper macro for drivers that don't do anything
+ * special in module init/exit. This eliminates a lot of boilerplate.
+ * Each module may only use this macro once, and calling it replaces
+ * module_init() and module_exit().
+ * Use this macro to construct bus specific macros for registering
+ * drivers.
+ */
+#define module_driver(__driver, __register, __unregister) \
+static int __init __driver##_init(void) \
+{ \
+	return __register(&(__driver)); \
+} \
+module_init(__driver##_init); \
+static void __exit __driver##_exit(void) \
+{ \
+	__unregister(&(__driver)); \
+} \
+module_exit(__driver##_exit);
+
 #endif /* _LINUX_INIT_H */
+
diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h
index 2a23f7d..165a8d1 100644
--- a/include/linux/platform_device.h
+++ b/include/linux/platform_device.h
@@ -196,16 +196,8 @@ static inline void platform_set_drvdata(struct platform_device *pdev, void *data
  * calling it replaces module_init() and module_exit()
  */
 #define module_platform_driver(__platform_driver) \
-static int __init __platform_driver##_init(void) \
-{ \
-	return platform_driver_register(&(__platform_driver)); \
-} \
-module_init(__platform_driver##_init); \
-static void __exit __platform_driver##_exit(void) \
-{ \
-	platform_driver_unregister(&(__platform_driver)); \
-} \
-module_exit(__platform_driver##_exit);
+	module_driver(__platform_driver, platform_driver_register, \
+			platform_driver_unregister)
 
 extern struct platform_device *platform_create_bundle(struct platform_driver *driver,
 					int (*probe)(struct platform_device *),
-- 
1.7.7.1



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH 2/5] I2C: Add helper macro for i2c_driver boilerplate
  2011-11-16  9:13 [PATCH 0/5] Generalize module_platform_driver Lars-Peter Clausen
  2011-11-16  9:13 ` [PATCH 1/5] drivercore: " Lars-Peter Clausen
@ 2011-11-16  9:13 ` Lars-Peter Clausen
  2011-11-16 17:12   ` Grant Likely
  2011-11-16  9:13 ` [PATCH 3/5] SPI: Add helper macro for spi_driver boilerplate Lars-Peter Clausen
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 26+ messages in thread
From: Lars-Peter Clausen @ 2011-11-16  9:13 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jean Delvare, Grant Likely
  Cc: Jonathan Cameron, Michael Hennerich, linux-iio, linux-kernel,
	linux-i2c, spi-devel-general, Lars-Peter Clausen

This patch introduces the module_i2c_driver macro which is a convenience macro
for I2C driver modules similar to module_platform_driver. It is intended to be
used by drivers which init/exit section does nothing but register/unregister
the I2C driver. By using this macro it is possible to eliminate a few lines of
boilerplate code per I2C driver.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 include/linux/i2c.h |   13 +++++++++++++
 1 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/include/linux/i2c.h b/include/linux/i2c.h
index a81bf6d..7e92854 100644
--- a/include/linux/i2c.h
+++ b/include/linux/i2c.h
@@ -485,6 +485,19 @@ static inline int i2c_adapter_id(struct i2c_adapter *adap)
 {
 	return adap->nr;
 }
+
+/**
+ * module_i2c_driver() - Helper macro for registering a I2C driver
+ * @__i2c_driver: i2c_driver struct
+ *
+ * Helper macro for I2C drivers which do not do anything special in module
+ * init/exit. This eliminates a lot of boilerplate. Each module may only
+ * use this macro once, and calling it replaces module_init() and module_exit()
+ */
+#define module_i2c_driver(__i2c_driver) \
+	module_driver(__i2c_driver, i2c_add_driver, \
+			i2c_del_driver)
+
 #endif /* I2C */
 #endif /* __KERNEL__ */
 
-- 
1.7.7.1



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH 3/5] SPI: Add helper macro for spi_driver boilerplate
  2011-11-16  9:13 [PATCH 0/5] Generalize module_platform_driver Lars-Peter Clausen
  2011-11-16  9:13 ` [PATCH 1/5] drivercore: " Lars-Peter Clausen
  2011-11-16  9:13 ` [PATCH 2/5] I2C: Add helper macro for i2c_driver boilerplate Lars-Peter Clausen
@ 2011-11-16  9:13 ` Lars-Peter Clausen
  2011-11-16 17:12   ` Grant Likely
  2011-11-16  9:13 ` [PATCH 4/5] staging:iio: Use module_i2c_driver to register I2C drivers Lars-Peter Clausen
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 26+ messages in thread
From: Lars-Peter Clausen @ 2011-11-16  9:13 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jean Delvare, Grant Likely
  Cc: Jonathan Cameron, Michael Hennerich, linux-iio, linux-kernel,
	linux-i2c, spi-devel-general, Lars-Peter Clausen

This patch introduces the module_spi_driver macro which is a convenience macro
for SPI driver modules similar to module_platform_driver. It is intended to be
used by drivers which init/exit section does nothing but register/unregister
the SPI driver. By using this macro it is possible to eliminate a few lines of
boilerplate code per SPI driver.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 include/linux/spi/spi.h |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h
index bb4f5fb..176fce9 100644
--- a/include/linux/spi/spi.h
+++ b/include/linux/spi/spi.h
@@ -200,6 +200,17 @@ static inline void spi_unregister_driver(struct spi_driver *sdrv)
 		driver_unregister(&sdrv->driver);
 }
 
+/**
+ * module_spi_driver() - Helper macro for registering a SPI driver
+ * @__spi_driver: spi_driver struct
+ *
+ * Helper macro for SPI drivers which do not do anything special in module
+ * init/exit. This eliminates a lot of boilerplate. Each module may only
+ * use this macro once, and calling it replaces module_init() and module_exit()
+ */
+#define module_spi_driver(__spi_driver) \
+	module_driver(__spi_driver, spi_register_driver, \
+			spi_unregister_driver)
 
 /**
  * struct spi_master - interface to SPI master controller
-- 
1.7.7.1



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH 4/5] staging:iio: Use module_i2c_driver to register I2C drivers
  2011-11-16  9:13 [PATCH 0/5] Generalize module_platform_driver Lars-Peter Clausen
                   ` (2 preceding siblings ...)
  2011-11-16  9:13 ` [PATCH 3/5] SPI: Add helper macro for spi_driver boilerplate Lars-Peter Clausen
@ 2011-11-16  9:13 ` Lars-Peter Clausen
  2011-11-17  6:50   ` Jonathan Cameron
  2011-11-16  9:13 ` [PATCH 5/5] staging:iio: Use module_spi_driver to register SPI driver Lars-Peter Clausen
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 26+ messages in thread
From: Lars-Peter Clausen @ 2011-11-16  9:13 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jean Delvare, Grant Likely
  Cc: Jonathan Cameron, Michael Hennerich, linux-iio, linux-kernel,
	linux-i2c, spi-devel-general, Lars-Peter Clausen

Use the newly introduced module_i2c_driver macro for registering I2C drivers.
This allows us to remove a few lines of boilerplate code.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 drivers/staging/iio/adc/ad7291.c                |   14 +-------------
 drivers/staging/iio/adc/ad799x_core.c           |   14 +-------------
 drivers/staging/iio/adc/adt7410.c               |   14 +-------------
 drivers/staging/iio/adc/max1363_core.c          |   14 +-------------
 drivers/staging/iio/addac/adt7316-i2c.c         |   14 +-------------
 drivers/staging/iio/cdc/ad7150.c                |   14 +-------------
 drivers/staging/iio/cdc/ad7152.c                |   14 +-------------
 drivers/staging/iio/cdc/ad7746.c                |   14 +-------------
 drivers/staging/iio/dac/max517.c                |   14 +-------------
 drivers/staging/iio/impedance-analyzer/ad5933.c |   13 +------------
 drivers/staging/iio/light/isl29018.c            |   14 +-------------
 drivers/staging/iio/light/tsl2563.c             |   14 +-------------
 drivers/staging/iio/light/tsl2583.c             |   14 +-------------
 drivers/staging/iio/magnetometer/ak8975.c       |   14 +-------------
 drivers/staging/iio/magnetometer/hmc5843.c      |   14 +-------------
 drivers/staging/iio/meter/ade7854-i2c.c         |   14 +-------------
 16 files changed, 16 insertions(+), 207 deletions(-)

diff --git a/drivers/staging/iio/adc/ad7291.c b/drivers/staging/iio/adc/ad7291.c
index 10e79e8..aa44a52 100644
--- a/drivers/staging/iio/adc/ad7291.c
+++ b/drivers/staging/iio/adc/ad7291.c
@@ -700,20 +700,8 @@ static struct i2c_driver ad7291_driver = {
 	.remove = __devexit_p(ad7291_remove),
 	.id_table = ad7291_id,
 };
-
-static __init int ad7291_init(void)
-{
-	return i2c_add_driver(&ad7291_driver);
-}
-
-static __exit void ad7291_exit(void)
-{
-	i2c_del_driver(&ad7291_driver);
-}
+module_i2c_driver(ad7291_driver);
 
 MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>");
 MODULE_DESCRIPTION("Analog Devices AD7291 ADC driver");
 MODULE_LICENSE("GPL v2");
-
-module_init(ad7291_init);
-module_exit(ad7291_exit);
diff --git a/drivers/staging/iio/adc/ad799x_core.c b/drivers/staging/iio/adc/ad799x_core.c
index ee6cd79..c0d2f88 100644
--- a/drivers/staging/iio/adc/ad799x_core.c
+++ b/drivers/staging/iio/adc/ad799x_core.c
@@ -929,21 +929,9 @@ static struct i2c_driver ad799x_driver = {
 	.remove = __devexit_p(ad799x_remove),
 	.id_table = ad799x_id,
 };
-
-static __init int ad799x_init(void)
-{
-	return i2c_add_driver(&ad799x_driver);
-}
-
-static __exit void ad799x_exit(void)
-{
-	i2c_del_driver(&ad799x_driver);
-}
+module_i2c_driver(ad799x_driver);
 
 MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
 MODULE_DESCRIPTION("Analog Devices AD799x ADC");
 MODULE_LICENSE("GPL v2");
 MODULE_ALIAS("i2c:ad799x");
-
-module_init(ad799x_init);
-module_exit(ad799x_exit);
diff --git a/drivers/staging/iio/adc/adt7410.c b/drivers/staging/iio/adc/adt7410.c
index a289e42..3481cf6 100644
--- a/drivers/staging/iio/adc/adt7410.c
+++ b/drivers/staging/iio/adc/adt7410.c
@@ -844,21 +844,9 @@ static struct i2c_driver adt7410_driver = {
 	.remove = __devexit_p(adt7410_remove),
 	.id_table = adt7410_id,
 };
-
-static __init int adt7410_init(void)
-{
-	return i2c_add_driver(&adt7410_driver);
-}
-
-static __exit void adt7410_exit(void)
-{
-	i2c_del_driver(&adt7410_driver);
-}
+module_i2c_driver(adt7410_driver);
 
 MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>");
 MODULE_DESCRIPTION("Analog Devices ADT7410 digital"
 			" temperature sensor driver");
 MODULE_LICENSE("GPL v2");
-
-module_init(adt7410_init);
-module_exit(adt7410_exit);
diff --git a/drivers/staging/iio/adc/max1363_core.c b/drivers/staging/iio/adc/max1363_core.c
index eb699ad..3f28f1a 100644
--- a/drivers/staging/iio/adc/max1363_core.c
+++ b/drivers/staging/iio/adc/max1363_core.c
@@ -1410,20 +1410,8 @@ static struct i2c_driver max1363_driver = {
 	.remove = max1363_remove,
 	.id_table = max1363_id,
 };
-
-static __init int max1363_init(void)
-{
-	return i2c_add_driver(&max1363_driver);
-}
-
-static __exit void max1363_exit(void)
-{
-	i2c_del_driver(&max1363_driver);
-}
+module_i2c_driver(max1363_driver);
 
 MODULE_AUTHOR("Jonathan Cameron <jic23@cam.ac.uk>");
 MODULE_DESCRIPTION("Maxim 1363 ADC");
 MODULE_LICENSE("GPL v2");
-
-module_init(max1363_init);
-module_exit(max1363_exit);
diff --git a/drivers/staging/iio/addac/adt7316-i2c.c b/drivers/staging/iio/addac/adt7316-i2c.c
index 07d718e..2c03a39 100644
--- a/drivers/staging/iio/addac/adt7316-i2c.c
+++ b/drivers/staging/iio/addac/adt7316-i2c.c
@@ -151,21 +151,9 @@ static struct i2c_driver adt7316_driver = {
 	.resume = adt7316_i2c_resume,
 	.id_table = adt7316_i2c_id,
 };
-
-static __init int adt7316_i2c_init(void)
-{
-	return i2c_add_driver(&adt7316_driver);
-}
-
-static __exit void adt7316_i2c_exit(void)
-{
-	i2c_del_driver(&adt7316_driver);
-}
+module_i2c_driver(adt7316_driver);
 
 MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>");
 MODULE_DESCRIPTION("I2C bus driver for Analog Devices ADT7316/7/9 and"
 			"ADT7516/7/8 digital temperature sensor, ADC and DAC");
 MODULE_LICENSE("GPL v2");
-
-module_init(adt7316_i2c_init);
-module_exit(adt7316_i2c_exit);
diff --git a/drivers/staging/iio/cdc/ad7150.c b/drivers/staging/iio/cdc/ad7150.c
index a761ca9..4718187 100644
--- a/drivers/staging/iio/cdc/ad7150.c
+++ b/drivers/staging/iio/cdc/ad7150.c
@@ -657,20 +657,8 @@ static struct i2c_driver ad7150_driver = {
 	.remove = __devexit_p(ad7150_remove),
 	.id_table = ad7150_id,
 };
-
-static __init int ad7150_init(void)
-{
-	return i2c_add_driver(&ad7150_driver);
-}
-
-static __exit void ad7150_exit(void)
-{
-	i2c_del_driver(&ad7150_driver);
-}
+module_i2c_driver(ad7150_driver);
 
 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
 MODULE_DESCRIPTION("Analog Devices AD7150/1/6 capacitive sensor driver");
 MODULE_LICENSE("GPL v2");
-
-module_init(ad7150_init);
-module_exit(ad7150_exit);
diff --git a/drivers/staging/iio/cdc/ad7152.c b/drivers/staging/iio/cdc/ad7152.c
index 662584d..152d3be 100644
--- a/drivers/staging/iio/cdc/ad7152.c
+++ b/drivers/staging/iio/cdc/ad7152.c
@@ -540,20 +540,8 @@ static struct i2c_driver ad7152_driver = {
 	.remove = __devexit_p(ad7152_remove),
 	.id_table = ad7152_id,
 };
-
-static __init int ad7152_init(void)
-{
-	return i2c_add_driver(&ad7152_driver);
-}
-
-static __exit void ad7152_exit(void)
-{
-	i2c_del_driver(&ad7152_driver);
-}
+module_i2c_driver(ad7152_driver);
 
 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
 MODULE_DESCRIPTION("Analog Devices AD7152/3 capacitive sensor driver");
 MODULE_LICENSE("GPL v2");
-
-module_init(ad7152_init);
-module_exit(ad7152_exit);
diff --git a/drivers/staging/iio/cdc/ad7746.c b/drivers/staging/iio/cdc/ad7746.c
index 2867943..9df5908 100644
--- a/drivers/staging/iio/cdc/ad7746.c
+++ b/drivers/staging/iio/cdc/ad7746.c
@@ -788,20 +788,8 @@ static struct i2c_driver ad7746_driver = {
 	.remove = __devexit_p(ad7746_remove),
 	.id_table = ad7746_id,
 };
-
-static __init int ad7746_init(void)
-{
-	return i2c_add_driver(&ad7746_driver);
-}
-
-static __exit void ad7746_exit(void)
-{
-	i2c_del_driver(&ad7746_driver);
-}
+module_i2c_driver(ad7746_driver);
 
 MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
 MODULE_DESCRIPTION("Analog Devices AD7746/5/7 capacitive sensor driver");
 MODULE_LICENSE("GPL v2");
-
-module_init(ad7746_init);
-module_exit(ad7746_exit);
diff --git a/drivers/staging/iio/dac/max517.c b/drivers/staging/iio/dac/max517.c
index adfbd20..a4df6d7 100644
--- a/drivers/staging/iio/dac/max517.c
+++ b/drivers/staging/iio/dac/max517.c
@@ -280,20 +280,8 @@ static struct i2c_driver max517_driver = {
 	.resume		= max517_resume,
 	.id_table	= max517_id,
 };
-
-static int __init max517_init(void)
-{
-	return i2c_add_driver(&max517_driver);
-}
-
-static void __exit max517_exit(void)
-{
-	i2c_del_driver(&max517_driver);
-}
+module_i2c_driver(max517_driver);
 
 MODULE_AUTHOR("Roland Stigge <stigge@antcom.de>");
 MODULE_DESCRIPTION("MAX517/MAX518/MAX519 8-bit DAC");
 MODULE_LICENSE("GPL");
-
-module_init(max517_init);
-module_exit(max517_exit);
diff --git a/drivers/staging/iio/impedance-analyzer/ad5933.c b/drivers/staging/iio/impedance-analyzer/ad5933.c
index 1086e0b..454d131 100644
--- a/drivers/staging/iio/impedance-analyzer/ad5933.c
+++ b/drivers/staging/iio/impedance-analyzer/ad5933.c
@@ -796,18 +796,7 @@ static struct i2c_driver ad5933_driver = {
 	.remove = __devexit_p(ad5933_remove),
 	.id_table = ad5933_id,
 };
-
-static __init int ad5933_init(void)
-{
-	return i2c_add_driver(&ad5933_driver);
-}
-module_init(ad5933_init);
-
-static __exit void ad5933_exit(void)
-{
-	i2c_del_driver(&ad5933_driver);
-}
-module_exit(ad5933_exit);
+module_i2c_driver(ad5933_driver);
 
 MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
 MODULE_DESCRIPTION("Analog Devices AD5933 Impedance Conv. Network Analyzer");
diff --git a/drivers/staging/iio/light/isl29018.c b/drivers/staging/iio/light/isl29018.c
index 9dc9e63..4763836 100644
--- a/drivers/staging/iio/light/isl29018.c
+++ b/drivers/staging/iio/light/isl29018.c
@@ -603,19 +603,7 @@ static struct i2c_driver isl29018_driver = {
 	.remove	 = __devexit_p(isl29018_remove),
 	.id_table = isl29018_id,
 };
-
-static int __init isl29018_init(void)
-{
-	return i2c_add_driver(&isl29018_driver);
-}
-
-static void __exit isl29018_exit(void)
-{
-	i2c_del_driver(&isl29018_driver);
-}
-
-module_init(isl29018_init);
-module_exit(isl29018_exit);
+module_i2c_driver(isl29018_driver);
 
 MODULE_DESCRIPTION("ISL29018 Ambient Light Sensor driver");
 MODULE_LICENSE("GPL");
diff --git a/drivers/staging/iio/light/tsl2563.c b/drivers/staging/iio/light/tsl2563.c
index 7e984bc..1942db1 100644
--- a/drivers/staging/iio/light/tsl2563.c
+++ b/drivers/staging/iio/light/tsl2563.c
@@ -866,20 +866,8 @@ static struct i2c_driver tsl2563_i2c_driver = {
 	.remove		= __devexit_p(tsl2563_remove),
 	.id_table	= tsl2563_id,
 };
-
-static int __init tsl2563_init(void)
-{
-	return i2c_add_driver(&tsl2563_i2c_driver);
-}
-
-static void __exit tsl2563_exit(void)
-{
-	i2c_del_driver(&tsl2563_i2c_driver);
-}
+module_i2c_driver(tsl2563_i2c_driver);
 
 MODULE_AUTHOR("Nokia Corporation");
 MODULE_DESCRIPTION("tsl2563 light sensor driver");
 MODULE_LICENSE("GPL");
-
-module_init(tsl2563_init);
-module_exit(tsl2563_exit);
diff --git a/drivers/staging/iio/light/tsl2583.c b/drivers/staging/iio/light/tsl2583.c
index 80f77cf..3836f73 100644
--- a/drivers/staging/iio/light/tsl2583.c
+++ b/drivers/staging/iio/light/tsl2583.c
@@ -933,19 +933,7 @@ static struct i2c_driver taos_driver = {
 	.probe = taos_probe,
 	.remove = __devexit_p(taos_remove),
 };
-
-static int __init taos_init(void)
-{
-	return i2c_add_driver(&taos_driver);
-}
-
-static void __exit taos_exit(void)
-{
-	i2c_del_driver(&taos_driver);
-}
-
-module_init(taos_init);
-module_exit(taos_exit);
+module_i2c_driver(taos_driver);
 
 MODULE_AUTHOR("J. August Brenner<jbrenner@taosinc.com>");
 MODULE_DESCRIPTION("TAOS tsl2583 ambient light sensor driver");
diff --git a/drivers/staging/iio/magnetometer/ak8975.c b/drivers/staging/iio/magnetometer/ak8975.c
index 8b01712..db31d6d 100644
--- a/drivers/staging/iio/magnetometer/ak8975.c
+++ b/drivers/staging/iio/magnetometer/ak8975.c
@@ -572,19 +572,7 @@ static struct i2c_driver ak8975_driver = {
 	.remove		= __devexit_p(ak8975_remove),
 	.id_table	= ak8975_id,
 };
-
-static int __init ak8975_init(void)
-{
-	return i2c_add_driver(&ak8975_driver);
-}
-
-static void __exit ak8975_exit(void)
-{
-	i2c_del_driver(&ak8975_driver);
-}
-
-module_init(ak8975_init);
-module_exit(ak8975_exit);
+module_i2c_driver(ak8975_driver);
 
 MODULE_AUTHOR("Laxman Dewangan <ldewangan@nvidia.com>");
 MODULE_DESCRIPTION("AK8975 magnetometer driver");
diff --git a/drivers/staging/iio/magnetometer/hmc5843.c b/drivers/staging/iio/magnetometer/hmc5843.c
index fc9ee97..7bb1bc6 100644
--- a/drivers/staging/iio/magnetometer/hmc5843.c
+++ b/drivers/staging/iio/magnetometer/hmc5843.c
@@ -618,20 +618,8 @@ static struct i2c_driver hmc5843_driver = {
 	.suspend	= hmc5843_suspend,
 	.resume		= hmc5843_resume,
 };
-
-static int __init hmc5843_init(void)
-{
-	return i2c_add_driver(&hmc5843_driver);
-}
-
-static void __exit hmc5843_exit(void)
-{
-	i2c_del_driver(&hmc5843_driver);
-}
+module_i2c_driver(hmc5843_driver);
 
 MODULE_AUTHOR("Shubhrajyoti Datta <shubhrajyoti@ti.com");
 MODULE_DESCRIPTION("HMC5843 driver");
 MODULE_LICENSE("GPL");
-
-module_init(hmc5843_init);
-module_exit(hmc5843_exit);
diff --git a/drivers/staging/iio/meter/ade7854-i2c.c b/drivers/staging/iio/meter/ade7854-i2c.c
index cbca3fd..1e1faa0 100644
--- a/drivers/staging/iio/meter/ade7854-i2c.c
+++ b/drivers/staging/iio/meter/ade7854-i2c.c
@@ -253,19 +253,7 @@ static struct i2c_driver ade7854_i2c_driver = {
 	.remove   = __devexit_p(ade7854_i2c_remove),
 	.id_table = ade7854_id,
 };
-
-static __init int ade7854_i2c_init(void)
-{
-	return i2c_add_driver(&ade7854_i2c_driver);
-}
-module_init(ade7854_i2c_init);
-
-static __exit void ade7854_i2c_exit(void)
-{
-	i2c_del_driver(&ade7854_i2c_driver);
-}
-module_exit(ade7854_i2c_exit);
-
+module_i2c_driver(ade7854_i2c_driver);
 
 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
 MODULE_DESCRIPTION("Analog Devices ADE7854/58/68/78 Polyphase Multifunction Energy Metering IC I2C Driver");
-- 
1.7.7.1



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH 5/5] staging:iio: Use module_spi_driver to register SPI driver
  2011-11-16  9:13 [PATCH 0/5] Generalize module_platform_driver Lars-Peter Clausen
                   ` (3 preceding siblings ...)
  2011-11-16  9:13 ` [PATCH 4/5] staging:iio: Use module_i2c_driver to register I2C drivers Lars-Peter Clausen
@ 2011-11-16  9:13 ` Lars-Peter Clausen
  2011-11-16 17:15   ` Grant Likely
  2011-11-17  6:49   ` Jonathan Cameron
  2011-11-16 16:02 ` [PATCH 0/5] Generalize module_platform_driver Greg KH
  2011-11-16 20:14 ` Wolfram Sang
  6 siblings, 2 replies; 26+ messages in thread
From: Lars-Peter Clausen @ 2011-11-16  9:13 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jean Delvare, Grant Likely
  Cc: Jonathan Cameron, Michael Hennerich, linux-iio, linux-kernel,
	linux-i2c, spi-devel-general, Lars-Peter Clausen

Use the newly introduced module_spi_driver macro for registering SPI drivers.
This allows us to remove a few lines of boilerplate code.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 drivers/staging/iio/accel/adis16201_core.c |   13 +------------
 drivers/staging/iio/accel/adis16203_core.c |   13 +------------
 drivers/staging/iio/accel/adis16204_core.c |   13 +------------
 drivers/staging/iio/accel/adis16209_core.c |   13 +------------
 drivers/staging/iio/accel/adis16220_core.c |   13 +------------
 drivers/staging/iio/accel/adis16240_core.c |   13 +------------
 drivers/staging/iio/accel/kxsd9.c          |   13 +------------
 drivers/staging/iio/accel/lis3l02dq_core.c |   13 +------------
 drivers/staging/iio/accel/sca3000_core.c   |   13 +------------
 drivers/staging/iio/adc/ad7192.c           |   13 +------------
 drivers/staging/iio/adc/ad7280a.c          |   13 +------------
 drivers/staging/iio/adc/ad7298_core.c      |   13 +------------
 drivers/staging/iio/adc/ad7476_core.c      |   13 +------------
 drivers/staging/iio/adc/ad7606_spi.c       |   13 +------------
 drivers/staging/iio/adc/ad7780.c           |   13 +------------
 drivers/staging/iio/adc/ad7793.c           |   13 +------------
 drivers/staging/iio/adc/ad7816.c           |   14 +-------------
 drivers/staging/iio/adc/ad7887_core.c      |   13 +------------
 drivers/staging/iio/adc/adt7310.c          |   14 +-------------
 drivers/staging/iio/addac/adt7316-spi.c    |   14 +-------------
 drivers/staging/iio/dac/ad5064.c           |   13 +------------
 drivers/staging/iio/dac/ad5360.c           |   13 +------------
 drivers/staging/iio/dac/ad5446.c           |   13 +------------
 drivers/staging/iio/dac/ad5504.c           |   13 +------------
 drivers/staging/iio/dac/ad5624r_spi.c      |   13 +------------
 drivers/staging/iio/dac/ad5686.c           |   13 +------------
 drivers/staging/iio/dac/ad5791.c           |   13 +------------
 drivers/staging/iio/dds/ad5930.c           |   13 +------------
 drivers/staging/iio/dds/ad9832.c           |   13 +------------
 drivers/staging/iio/dds/ad9834.c           |   13 +------------
 drivers/staging/iio/dds/ad9850.c           |   13 +------------
 drivers/staging/iio/dds/ad9852.c           |   13 +------------
 drivers/staging/iio/dds/ad9910.c           |   13 +------------
 drivers/staging/iio/dds/ad9951.c           |   13 +------------
 drivers/staging/iio/gyro/adis16080_core.c  |   13 +------------
 drivers/staging/iio/gyro/adis16130_core.c  |   13 +------------
 drivers/staging/iio/gyro/adis16260_core.c  |   13 +------------
 drivers/staging/iio/gyro/adxrs450_core.c   |   13 +------------
 drivers/staging/iio/imu/adis16400_core.c   |   13 +------------
 drivers/staging/iio/meter/ade7753.c        |   13 +------------
 drivers/staging/iio/meter/ade7754.c        |   13 +------------
 drivers/staging/iio/meter/ade7758_core.c   |   13 +------------
 drivers/staging/iio/meter/ade7759.c        |   13 +------------
 drivers/staging/iio/meter/ade7854-spi.c    |   13 +------------
 drivers/staging/iio/resolver/ad2s1200.c    |   13 +------------
 drivers/staging/iio/resolver/ad2s1210.c    |   13 +------------
 drivers/staging/iio/resolver/ad2s90.c      |   13 +------------
 47 files changed, 47 insertions(+), 567 deletions(-)

diff --git a/drivers/staging/iio/accel/adis16201_core.c b/drivers/staging/iio/accel/adis16201_core.c
index 1c5dad5..97f747e 100644
--- a/drivers/staging/iio/accel/adis16201_core.c
+++ b/drivers/staging/iio/accel/adis16201_core.c
@@ -549,18 +549,7 @@ static struct spi_driver adis16201_driver = {
 	.probe = adis16201_probe,
 	.remove = __devexit_p(adis16201_remove),
 };
-
-static __init int adis16201_init(void)
-{
-	return spi_register_driver(&adis16201_driver);
-}
-module_init(adis16201_init);
-
-static __exit void adis16201_exit(void)
-{
-	spi_unregister_driver(&adis16201_driver);
-}
-module_exit(adis16201_exit);
+module_spi_driver(adis16201_driver);
 
 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
 MODULE_DESCRIPTION("Analog Devices ADIS16201 Programmable Digital Vibration Sensor driver");
diff --git a/drivers/staging/iio/accel/adis16203_core.c b/drivers/staging/iio/accel/adis16203_core.c
index 8a33374..a6d6d27 100644
--- a/drivers/staging/iio/accel/adis16203_core.c
+++ b/drivers/staging/iio/accel/adis16203_core.c
@@ -504,18 +504,7 @@ static struct spi_driver adis16203_driver = {
 	.probe = adis16203_probe,
 	.remove = __devexit_p(adis16203_remove),
 };
-
-static __init int adis16203_init(void)
-{
-	return spi_register_driver(&adis16203_driver);
-}
-module_init(adis16203_init);
-
-static __exit void adis16203_exit(void)
-{
-	spi_unregister_driver(&adis16203_driver);
-}
-module_exit(adis16203_exit);
+module_spi_driver(adis16203_driver);
 
 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
 MODULE_DESCRIPTION("Analog Devices ADIS16203 Programmable Digital Vibration Sensor driver");
diff --git a/drivers/staging/iio/accel/adis16204_core.c b/drivers/staging/iio/accel/adis16204_core.c
index 644ac8e..7ac5b4c 100644
--- a/drivers/staging/iio/accel/adis16204_core.c
+++ b/drivers/staging/iio/accel/adis16204_core.c
@@ -577,18 +577,7 @@ static struct spi_driver adis16204_driver = {
 	.probe = adis16204_probe,
 	.remove = __devexit_p(adis16204_remove),
 };
-
-static __init int adis16204_init(void)
-{
-	return spi_register_driver(&adis16204_driver);
-}
-module_init(adis16204_init);
-
-static __exit void adis16204_exit(void)
-{
-	spi_unregister_driver(&adis16204_driver);
-}
-module_exit(adis16204_exit);
+module_spi_driver(adis16204_driver);
 
 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
 MODULE_DESCRIPTION("ADIS16204 High-g Digital Impact Sensor and Recorder");
diff --git a/drivers/staging/iio/accel/adis16209_core.c b/drivers/staging/iio/accel/adis16209_core.c
index 0a8571b..c03afbf 100644
--- a/drivers/staging/iio/accel/adis16209_core.c
+++ b/drivers/staging/iio/accel/adis16209_core.c
@@ -553,18 +553,7 @@ static struct spi_driver adis16209_driver = {
 	.probe = adis16209_probe,
 	.remove = __devexit_p(adis16209_remove),
 };
-
-static __init int adis16209_init(void)
-{
-	return spi_register_driver(&adis16209_driver);
-}
-module_init(adis16209_init);
-
-static __exit void adis16209_exit(void)
-{
-	spi_unregister_driver(&adis16209_driver);
-}
-module_exit(adis16209_exit);
+module_spi_driver(adis16209_driver);
 
 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
 MODULE_DESCRIPTION("Analog Devices ADIS16209 Digital Vibration Sensor driver");
diff --git a/drivers/staging/iio/accel/adis16220_core.c b/drivers/staging/iio/accel/adis16220_core.c
index 6d4503d..73298e7 100644
--- a/drivers/staging/iio/accel/adis16220_core.c
+++ b/drivers/staging/iio/accel/adis16220_core.c
@@ -708,18 +708,7 @@ static struct spi_driver adis16220_driver = {
 	.probe = adis16220_probe,
 	.remove = __devexit_p(adis16220_remove),
 };
-
-static __init int adis16220_init(void)
-{
-	return spi_register_driver(&adis16220_driver);
-}
-module_init(adis16220_init);
-
-static __exit void adis16220_exit(void)
-{
-	spi_unregister_driver(&adis16220_driver);
-}
-module_exit(adis16220_exit);
+module_spi_driver(adis16220_driver);
 
 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
 MODULE_DESCRIPTION("Analog Devices ADIS16220 Digital Vibration Sensor");
diff --git a/drivers/staging/iio/accel/adis16240_core.c b/drivers/staging/iio/accel/adis16240_core.c
index b8be292..88881b9 100644
--- a/drivers/staging/iio/accel/adis16240_core.c
+++ b/drivers/staging/iio/accel/adis16240_core.c
@@ -606,18 +606,7 @@ static struct spi_driver adis16240_driver = {
 	.probe = adis16240_probe,
 	.remove = __devexit_p(adis16240_remove),
 };
-
-static __init int adis16240_init(void)
-{
-	return spi_register_driver(&adis16240_driver);
-}
-module_init(adis16240_init);
-
-static __exit void adis16240_exit(void)
-{
-	spi_unregister_driver(&adis16240_driver);
-}
-module_exit(adis16240_exit);
+module_spi_driver(adis16240_driver);
 
 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
 MODULE_DESCRIPTION("Analog Devices Programmable Impact Sensor and Recorder");
diff --git a/drivers/staging/iio/accel/kxsd9.c b/drivers/staging/iio/accel/kxsd9.c
index 5238503..cfce21c 100644
--- a/drivers/staging/iio/accel/kxsd9.c
+++ b/drivers/staging/iio/accel/kxsd9.c
@@ -280,18 +280,7 @@ static struct spi_driver kxsd9_driver = {
 	.remove = __devexit_p(kxsd9_remove),
 	.id_table = kxsd9_id,
 };
-
-static __init int kxsd9_spi_init(void)
-{
-	return spi_register_driver(&kxsd9_driver);
-}
-module_init(kxsd9_spi_init);
-
-static __exit void kxsd9_spi_exit(void)
-{
-	spi_unregister_driver(&kxsd9_driver);
-}
-module_exit(kxsd9_spi_exit);
+module_spi_driver(kxsd9_driver);
 
 MODULE_AUTHOR("Jonathan Cameron <jic23@cam.ac.uk>");
 MODULE_DESCRIPTION("Kionix KXSD9 SPI driver");
diff --git a/drivers/staging/iio/accel/lis3l02dq_core.c b/drivers/staging/iio/accel/lis3l02dq_core.c
index 559545a..6877521 100644
--- a/drivers/staging/iio/accel/lis3l02dq_core.c
+++ b/drivers/staging/iio/accel/lis3l02dq_core.c
@@ -804,18 +804,7 @@ static struct spi_driver lis3l02dq_driver = {
 	.probe = lis3l02dq_probe,
 	.remove = __devexit_p(lis3l02dq_remove),
 };
-
-static __init int lis3l02dq_init(void)
-{
-	return spi_register_driver(&lis3l02dq_driver);
-}
-module_init(lis3l02dq_init);
-
-static __exit void lis3l02dq_exit(void)
-{
-	spi_unregister_driver(&lis3l02dq_driver);
-}
-module_exit(lis3l02dq_exit);
+module_spi_driver(lis3l02dq_driver);
 
 MODULE_AUTHOR("Jonathan Cameron <jic23@cam.ac.uk>");
 MODULE_DESCRIPTION("ST LIS3L02DQ Accelerometer SPI driver");
diff --git a/drivers/staging/iio/accel/sca3000_core.c b/drivers/staging/iio/accel/sca3000_core.c
index a44a705..6c35907 100644
--- a/drivers/staging/iio/accel/sca3000_core.c
+++ b/drivers/staging/iio/accel/sca3000_core.c
@@ -1250,18 +1250,7 @@ static struct spi_driver sca3000_driver = {
 	.remove = __devexit_p(sca3000_remove),
 	.id_table = sca3000_id,
 };
-
-static __init int sca3000_init(void)
-{
-	return spi_register_driver(&sca3000_driver);
-}
-module_init(sca3000_init);
-
-static __exit void sca3000_exit(void)
-{
-	spi_unregister_driver(&sca3000_driver);
-}
-module_exit(sca3000_exit);
+module_spi_driver(sca3000_driver);
 
 MODULE_AUTHOR("Jonathan Cameron <jic23@cam.ac.uk>");
 MODULE_DESCRIPTION("VTI SCA3000 Series Accelerometers SPI driver");
diff --git a/drivers/staging/iio/adc/ad7192.c b/drivers/staging/iio/adc/ad7192.c
index 31c376b..a6a4a4e 100644
--- a/drivers/staging/iio/adc/ad7192.c
+++ b/drivers/staging/iio/adc/ad7192.c
@@ -1161,18 +1161,7 @@ static struct spi_driver ad7192_driver = {
 	.remove		= __devexit_p(ad7192_remove),
 	.id_table	= ad7192_id,
 };
-
-static int __init ad7192_init(void)
-{
-	return spi_register_driver(&ad7192_driver);
-}
-module_init(ad7192_init);
-
-static void __exit ad7192_exit(void)
-{
-	spi_unregister_driver(&ad7192_driver);
-}
-module_exit(ad7192_exit);
+module_spi_driver(ad7192_driver);
 
 MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
 MODULE_DESCRIPTION("Analog Devices AD7190, AD7192, AD7195 ADC");
diff --git a/drivers/staging/iio/adc/ad7280a.c b/drivers/staging/iio/adc/ad7280a.c
index 372d059..dbaeae8 100644
--- a/drivers/staging/iio/adc/ad7280a.c
+++ b/drivers/staging/iio/adc/ad7280a.c
@@ -979,18 +979,7 @@ static struct spi_driver ad7280_driver = {
 	.remove		= __devexit_p(ad7280_remove),
 	.id_table	= ad7280_id,
 };
-
-static int __init ad7280_init(void)
-{
-	return spi_register_driver(&ad7280_driver);
-}
-module_init(ad7280_init);
-
-static void __exit ad7280_exit(void)
-{
-	spi_unregister_driver(&ad7280_driver);
-}
-module_exit(ad7280_exit);
+module_spi_driver(ad7280_driver);
 
 MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
 MODULE_DESCRIPTION("Analog Devices AD7280A");
diff --git a/drivers/staging/iio/adc/ad7298_core.c b/drivers/staging/iio/adc/ad7298_core.c
index c1de73a..a799bd1 100644
--- a/drivers/staging/iio/adc/ad7298_core.c
+++ b/drivers/staging/iio/adc/ad7298_core.c
@@ -276,18 +276,7 @@ static struct spi_driver ad7298_driver = {
 	.remove		= __devexit_p(ad7298_remove),
 	.id_table	= ad7298_id,
 };
-
-static int __init ad7298_init(void)
-{
-	return spi_register_driver(&ad7298_driver);
-}
-module_init(ad7298_init);
-
-static void __exit ad7298_exit(void)
-{
-	spi_unregister_driver(&ad7298_driver);
-}
-module_exit(ad7298_exit);
+module_spi_driver(ad7298_driver);
 
 MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
 MODULE_DESCRIPTION("Analog Devices AD7298 ADC");
diff --git a/drivers/staging/iio/adc/ad7476_core.c b/drivers/staging/iio/adc/ad7476_core.c
index fd79fac..0b58520 100644
--- a/drivers/staging/iio/adc/ad7476_core.c
+++ b/drivers/staging/iio/adc/ad7476_core.c
@@ -248,18 +248,7 @@ static struct spi_driver ad7476_driver = {
 	.remove		= __devexit_p(ad7476_remove),
 	.id_table	= ad7476_id,
 };
-
-static int __init ad7476_init(void)
-{
-	return spi_register_driver(&ad7476_driver);
-}
-module_init(ad7476_init);
-
-static void __exit ad7476_exit(void)
-{
-	spi_unregister_driver(&ad7476_driver);
-}
-module_exit(ad7476_exit);
+module_spi_driver(ad7476_driver);
 
 MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
 MODULE_DESCRIPTION("Analog Devices AD7475/6/7/8(A) AD7466/7/8 ADC");
diff --git a/drivers/staging/iio/adc/ad7606_spi.c b/drivers/staging/iio/adc/ad7606_spi.c
index aede1ba..b984bd2 100644
--- a/drivers/staging/iio/adc/ad7606_spi.c
+++ b/drivers/staging/iio/adc/ad7606_spi.c
@@ -109,18 +109,7 @@ static struct spi_driver ad7606_driver = {
 	.remove = __devexit_p(ad7606_spi_remove),
 	.id_table = ad7606_id,
 };
-
-static int __init ad7606_spi_init(void)
-{
-	return spi_register_driver(&ad7606_driver);
-}
-module_init(ad7606_spi_init);
-
-static void __exit ad7606_spi_exit(void)
-{
-	spi_unregister_driver(&ad7606_driver);
-}
-module_exit(ad7606_spi_exit);
+module_spi_driver(ad7606_driver);
 
 MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
 MODULE_DESCRIPTION("Analog Devices AD7606 ADC");
diff --git a/drivers/staging/iio/adc/ad7780.c b/drivers/staging/iio/adc/ad7780.c
index 7a579a1..ec90261 100644
--- a/drivers/staging/iio/adc/ad7780.c
+++ b/drivers/staging/iio/adc/ad7780.c
@@ -283,18 +283,7 @@ static struct spi_driver ad7780_driver = {
 	.remove		= __devexit_p(ad7780_remove),
 	.id_table	= ad7780_id,
 };
-
-static int __init ad7780_init(void)
-{
-	return spi_register_driver(&ad7780_driver);
-}
-module_init(ad7780_init);
-
-static void __exit ad7780_exit(void)
-{
-	spi_unregister_driver(&ad7780_driver);
-}
-module_exit(ad7780_exit);
+module_spi_driver(ad7780_driver);
 
 MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
 MODULE_DESCRIPTION("Analog Devices AD7780/1 ADC");
diff --git a/drivers/staging/iio/adc/ad7793.c b/drivers/staging/iio/adc/ad7793.c
index 999f8f7..1c5588e 100644
--- a/drivers/staging/iio/adc/ad7793.c
+++ b/drivers/staging/iio/adc/ad7793.c
@@ -1045,18 +1045,7 @@ static struct spi_driver ad7793_driver = {
 	.remove		= __devexit_p(ad7793_remove),
 	.id_table	= ad7793_id,
 };
-
-static int __init ad7793_init(void)
-{
-	return spi_register_driver(&ad7793_driver);
-}
-module_init(ad7793_init);
-
-static void __exit ad7793_exit(void)
-{
-	spi_unregister_driver(&ad7793_driver);
-}
-module_exit(ad7793_exit);
+module_spi_driver(ad7793_driver);
 
 MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
 MODULE_DESCRIPTION("Analog Devices AD7792/3 ADC");
diff --git a/drivers/staging/iio/adc/ad7816.c b/drivers/staging/iio/adc/ad7816.c
index bdb9049..acbf936 100644
--- a/drivers/staging/iio/adc/ad7816.c
+++ b/drivers/staging/iio/adc/ad7816.c
@@ -466,21 +466,9 @@ static struct spi_driver ad7816_driver = {
 	.remove = __devexit_p(ad7816_remove),
 	.id_table = ad7816_id,
 };
-
-static __init int ad7816_init(void)
-{
-	return spi_register_driver(&ad7816_driver);
-}
-
-static __exit void ad7816_exit(void)
-{
-	spi_unregister_driver(&ad7816_driver);
-}
+module_spi_driver(ad7816_driver);
 
 MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>");
 MODULE_DESCRIPTION("Analog Devices AD7816/7/8 digital"
 			" temperature sensor driver");
 MODULE_LICENSE("GPL v2");
-
-module_init(ad7816_init);
-module_exit(ad7816_exit);
diff --git a/drivers/staging/iio/adc/ad7887_core.c b/drivers/staging/iio/adc/ad7887_core.c
index 609dcd5..91b8fb0 100644
--- a/drivers/staging/iio/adc/ad7887_core.c
+++ b/drivers/staging/iio/adc/ad7887_core.c
@@ -257,18 +257,7 @@ static struct spi_driver ad7887_driver = {
 	.remove		= __devexit_p(ad7887_remove),
 	.id_table	= ad7887_id,
 };
-
-static int __init ad7887_init(void)
-{
-	return spi_register_driver(&ad7887_driver);
-}
-module_init(ad7887_init);
-
-static void __exit ad7887_exit(void)
-{
-	spi_unregister_driver(&ad7887_driver);
-}
-module_exit(ad7887_exit);
+module_spi_driver(ad7887_driver);
 
 MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
 MODULE_DESCRIPTION("Analog Devices AD7887 ADC");
diff --git a/drivers/staging/iio/adc/adt7310.c b/drivers/staging/iio/adc/adt7310.c
index c9e0be3..bc307f3 100644
--- a/drivers/staging/iio/adc/adt7310.c
+++ b/drivers/staging/iio/adc/adt7310.c
@@ -884,21 +884,9 @@ static struct spi_driver adt7310_driver = {
 	.remove = __devexit_p(adt7310_remove),
 	.id_table = adt7310_id,
 };
-
-static __init int adt7310_init(void)
-{
-	return spi_register_driver(&adt7310_driver);
-}
-
-static __exit void adt7310_exit(void)
-{
-	spi_unregister_driver(&adt7310_driver);
-}
+module_spi_driver(adt7310_driver);
 
 MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>");
 MODULE_DESCRIPTION("Analog Devices ADT7310 digital"
 			" temperature sensor driver");
 MODULE_LICENSE("GPL v2");
-
-module_init(adt7310_init);
-module_exit(adt7310_exit);
diff --git a/drivers/staging/iio/addac/adt7316-spi.c b/drivers/staging/iio/addac/adt7316-spi.c
index 369d4d0..1e93c7b 100644
--- a/drivers/staging/iio/addac/adt7316-spi.c
+++ b/drivers/staging/iio/addac/adt7316-spi.c
@@ -160,21 +160,9 @@ static struct spi_driver adt7316_driver = {
 	.resume = adt7316_spi_resume,
 	.id_table = adt7316_spi_id,
 };
-
-static __init int adt7316_spi_init(void)
-{
-	return spi_register_driver(&adt7316_driver);
-}
-
-static __exit void adt7316_spi_exit(void)
-{
-	spi_unregister_driver(&adt7316_driver);
-}
+module_spi_driver(adt7316_driver);
 
 MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>");
 MODULE_DESCRIPTION("SPI bus driver for Analog Devices ADT7316/7/8 and"
 			"ADT7516/7/9 digital temperature sensor, ADC and DAC");
 MODULE_LICENSE("GPL v2");
-
-module_init(adt7316_spi_init);
-module_exit(adt7316_spi_exit);
diff --git a/drivers/staging/iio/dac/ad5064.c b/drivers/staging/iio/dac/ad5064.c
index 24279f2..39cfe6c 100644
--- a/drivers/staging/iio/dac/ad5064.c
+++ b/drivers/staging/iio/dac/ad5064.c
@@ -445,18 +445,7 @@ static struct spi_driver ad5064_driver = {
 	.remove = __devexit_p(ad5064_remove),
 	.id_table = ad5064_id,
 };
-
-static __init int ad5064_spi_init(void)
-{
-	return spi_register_driver(&ad5064_driver);
-}
-module_init(ad5064_spi_init);
-
-static __exit void ad5064_spi_exit(void)
-{
-	spi_unregister_driver(&ad5064_driver);
-}
-module_exit(ad5064_spi_exit);
+module_spi_driver(ad5064_driver);
 
 MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
 MODULE_DESCRIPTION("Analog Devices AD5064/64-1/44/24 DAC");
diff --git a/drivers/staging/iio/dac/ad5360.c b/drivers/staging/iio/dac/ad5360.c
index 72d0f3f0..bc0459e 100644
--- a/drivers/staging/iio/dac/ad5360.c
+++ b/drivers/staging/iio/dac/ad5360.c
@@ -563,18 +563,7 @@ static struct spi_driver ad5360_driver = {
 	.remove = __devexit_p(ad5360_remove),
 	.id_table = ad5360_ids,
 };
-
-static __init int ad5360_spi_init(void)
-{
-	return spi_register_driver(&ad5360_driver);
-}
-module_init(ad5360_spi_init);
-
-static __exit void ad5360_spi_exit(void)
-{
-	spi_unregister_driver(&ad5360_driver);
-}
-module_exit(ad5360_spi_exit);
+module_spi_driver(ad5360_driver);
 
 MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
 MODULE_DESCRIPTION("Analog Devices AD5360/61/62/63/70/71/72/73 DAC");
diff --git a/drivers/staging/iio/dac/ad5446.c b/drivers/staging/iio/dac/ad5446.c
index e1c204d..ac3bc5f 100644
--- a/drivers/staging/iio/dac/ad5446.c
+++ b/drivers/staging/iio/dac/ad5446.c
@@ -465,18 +465,7 @@ static struct spi_driver ad5446_driver = {
 	.remove		= __devexit_p(ad5446_remove),
 	.id_table	= ad5446_id,
 };
-
-static int __init ad5446_init(void)
-{
-	return spi_register_driver(&ad5446_driver);
-}
-module_init(ad5446_init);
-
-static void __exit ad5446_exit(void)
-{
-	spi_unregister_driver(&ad5446_driver);
-}
-module_exit(ad5446_exit);
+module_spi_driver(ad5446_driver);
 
 MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
 MODULE_DESCRIPTION("Analog Devices AD5444/AD5446 DAC");
diff --git a/drivers/staging/iio/dac/ad5504.c b/drivers/staging/iio/dac/ad5504.c
index 60dd640..57539ce 100644
--- a/drivers/staging/iio/dac/ad5504.c
+++ b/drivers/staging/iio/dac/ad5504.c
@@ -377,18 +377,7 @@ static struct spi_driver ad5504_driver = {
 	.remove = __devexit_p(ad5504_remove),
 	.id_table = ad5504_id,
 };
-
-static __init int ad5504_spi_init(void)
-{
-	return spi_register_driver(&ad5504_driver);
-}
-module_init(ad5504_spi_init);
-
-static __exit void ad5504_spi_exit(void)
-{
-	spi_unregister_driver(&ad5504_driver);
-}
-module_exit(ad5504_spi_exit);
+module_spi_driver(ad5504_driver);
 
 MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
 MODULE_DESCRIPTION("Analog Devices AD5501/AD5501 DAC");
diff --git a/drivers/staging/iio/dac/ad5624r_spi.c b/drivers/staging/iio/dac/ad5624r_spi.c
index 284d879..6e05f0d 100644
--- a/drivers/staging/iio/dac/ad5624r_spi.c
+++ b/drivers/staging/iio/dac/ad5624r_spi.c
@@ -317,18 +317,7 @@ static struct spi_driver ad5624r_driver = {
 	.remove = __devexit_p(ad5624r_remove),
 	.id_table = ad5624r_id,
 };
-
-static __init int ad5624r_spi_init(void)
-{
-	return spi_register_driver(&ad5624r_driver);
-}
-module_init(ad5624r_spi_init);
-
-static __exit void ad5624r_spi_exit(void)
-{
-	spi_unregister_driver(&ad5624r_driver);
-}
-module_exit(ad5624r_spi_exit);
+module_spi_driver(ad5624r_driver);
 
 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
 MODULE_DESCRIPTION("Analog Devices AD5624/44/64R DAC spi driver");
diff --git a/drivers/staging/iio/dac/ad5686.c b/drivers/staging/iio/dac/ad5686.c
index 974c6f5..e72db2f 100644
--- a/drivers/staging/iio/dac/ad5686.c
+++ b/drivers/staging/iio/dac/ad5686.c
@@ -447,18 +447,7 @@ static struct spi_driver ad5686_driver = {
 	.remove = __devexit_p(ad5686_remove),
 	.id_table = ad5686_id,
 };
-
-static __init int ad5686_spi_init(void)
-{
-	return spi_register_driver(&ad5686_driver);
-}
-module_init(ad5686_spi_init);
-
-static __exit void ad5686_spi_exit(void)
-{
-	spi_unregister_driver(&ad5686_driver);
-}
-module_exit(ad5686_spi_exit);
+module_spi_driver(ad5686_driver);
 
 MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
 MODULE_DESCRIPTION("Analog Devices AD5686/85/84 DAC");
diff --git a/drivers/staging/iio/dac/ad5791.c b/drivers/staging/iio/dac/ad5791.c
index 6fbca8d..4a80fd8 100644
--- a/drivers/staging/iio/dac/ad5791.c
+++ b/drivers/staging/iio/dac/ad5791.c
@@ -410,18 +410,7 @@ static struct spi_driver ad5791_driver = {
 	.remove = __devexit_p(ad5791_remove),
 	.id_table = ad5791_id,
 };
-
-static __init int ad5791_spi_init(void)
-{
-	return spi_register_driver(&ad5791_driver);
-}
-module_init(ad5791_spi_init);
-
-static __exit void ad5791_spi_exit(void)
-{
-	spi_unregister_driver(&ad5791_driver);
-}
-module_exit(ad5791_spi_exit);
+module_spi_driver(ad5791_driver);
 
 MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
 MODULE_DESCRIPTION("Analog Devices AD5760/AD5780/AD5781/AD5791 DAC");
diff --git a/drivers/staging/iio/dds/ad5930.c b/drivers/staging/iio/dds/ad5930.c
index f5e368b..4a360d0 100644
--- a/drivers/staging/iio/dds/ad5930.c
+++ b/drivers/staging/iio/dds/ad5930.c
@@ -143,18 +143,7 @@ static struct spi_driver ad5930_driver = {
 	.probe = ad5930_probe,
 	.remove = __devexit_p(ad5930_remove),
 };
-
-static __init int ad5930_spi_init(void)
-{
-	return spi_register_driver(&ad5930_driver);
-}
-module_init(ad5930_spi_init);
-
-static __exit void ad5930_spi_exit(void)
-{
-	spi_unregister_driver(&ad5930_driver);
-}
-module_exit(ad5930_spi_exit);
+module_spi_driver(ad5930_driver);
 
 MODULE_AUTHOR("Cliff Cai");
 MODULE_DESCRIPTION("Analog Devices ad5930 driver");
diff --git a/drivers/staging/iio/dds/ad9832.c b/drivers/staging/iio/dds/ad9832.c
index 9b4ff60..cc32fd6 100644
--- a/drivers/staging/iio/dds/ad9832.c
+++ b/drivers/staging/iio/dds/ad9832.c
@@ -355,18 +355,7 @@ static struct spi_driver ad9832_driver = {
 	.remove		= __devexit_p(ad9832_remove),
 	.id_table	= ad9832_id,
 };
-
-static int __init ad9832_init(void)
-{
-	return spi_register_driver(&ad9832_driver);
-}
-module_init(ad9832_init);
-
-static void __exit ad9832_exit(void)
-{
-	spi_unregister_driver(&ad9832_driver);
-}
-module_exit(ad9832_exit);
+module_spi_driver(ad9832_driver);
 
 MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
 MODULE_DESCRIPTION("Analog Devices AD9832/AD9835 DDS");
diff --git a/drivers/staging/iio/dds/ad9834.c b/drivers/staging/iio/dds/ad9834.c
index c468f69..2b31e35 100644
--- a/drivers/staging/iio/dds/ad9834.c
+++ b/drivers/staging/iio/dds/ad9834.c
@@ -446,18 +446,7 @@ static struct spi_driver ad9834_driver = {
 	.remove		= __devexit_p(ad9834_remove),
 	.id_table	= ad9834_id,
 };
-
-static int __init ad9834_init(void)
-{
-	return spi_register_driver(&ad9834_driver);
-}
-module_init(ad9834_init);
-
-static void __exit ad9834_exit(void)
-{
-	spi_unregister_driver(&ad9834_driver);
-}
-module_exit(ad9834_exit);
+module_spi_driver(ad9834_driver);
 
 MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
 MODULE_DESCRIPTION("Analog Devices AD9833/AD9834/AD9837/AD9838 DDS");
diff --git a/drivers/staging/iio/dds/ad9850.c b/drivers/staging/iio/dds/ad9850.c
index a14771b..f9c96af 100644
--- a/drivers/staging/iio/dds/ad9850.c
+++ b/drivers/staging/iio/dds/ad9850.c
@@ -129,18 +129,7 @@ static struct spi_driver ad9850_driver = {
 	.probe = ad9850_probe,
 	.remove = __devexit_p(ad9850_remove),
 };
-
-static __init int ad9850_spi_init(void)
-{
-	return spi_register_driver(&ad9850_driver);
-}
-module_init(ad9850_spi_init);
-
-static __exit void ad9850_spi_exit(void)
-{
-	spi_unregister_driver(&ad9850_driver);
-}
-module_exit(ad9850_spi_exit);
+module_spi_driver(ad9850_driver);
 
 MODULE_AUTHOR("Cliff Cai");
 MODULE_DESCRIPTION("Analog Devices ad9850 driver");
diff --git a/drivers/staging/iio/dds/ad9852.c b/drivers/staging/iio/dds/ad9852.c
index cfceaa6..9fc73fd 100644
--- a/drivers/staging/iio/dds/ad9852.c
+++ b/drivers/staging/iio/dds/ad9852.c
@@ -280,18 +280,7 @@ static struct spi_driver ad9852_driver = {
 	.probe = ad9852_probe,
 	.remove = __devexit_p(ad9852_remove),
 };
-
-static __init int ad9852_spi_init(void)
-{
-	return spi_register_driver(&ad9852_driver);
-}
-module_init(ad9852_spi_init);
-
-static __exit void ad9852_spi_exit(void)
-{
-	spi_unregister_driver(&ad9852_driver);
-}
-module_exit(ad9852_spi_exit);
+module_spi_driver(ad9852_driver);
 
 MODULE_AUTHOR("Cliff Cai");
 MODULE_DESCRIPTION("Analog Devices ad9852 driver");
diff --git a/drivers/staging/iio/dds/ad9910.c b/drivers/staging/iio/dds/ad9910.c
index da83d2b..57046b0 100644
--- a/drivers/staging/iio/dds/ad9910.c
+++ b/drivers/staging/iio/dds/ad9910.c
@@ -413,18 +413,7 @@ static struct spi_driver ad9910_driver = {
 	.probe = ad9910_probe,
 	.remove = __devexit_p(ad9910_remove),
 };
-
-static __init int ad9910_spi_init(void)
-{
-	return spi_register_driver(&ad9910_driver);
-}
-module_init(ad9910_spi_init);
-
-static __exit void ad9910_spi_exit(void)
-{
-	spi_unregister_driver(&ad9910_driver);
-}
-module_exit(ad9910_spi_exit);
+module_spi_driver(ad9910_driver);
 
 MODULE_AUTHOR("Cliff Cai");
 MODULE_DESCRIPTION("Analog Devices ad9910 driver");
diff --git a/drivers/staging/iio/dds/ad9951.c b/drivers/staging/iio/dds/ad9951.c
index 20c1825..d29130e 100644
--- a/drivers/staging/iio/dds/ad9951.c
+++ b/drivers/staging/iio/dds/ad9951.c
@@ -224,18 +224,7 @@ static struct spi_driver ad9951_driver = {
 	.probe = ad9951_probe,
 	.remove = __devexit_p(ad9951_remove),
 };
-
-static __init int ad9951_spi_init(void)
-{
-	return spi_register_driver(&ad9951_driver);
-}
-module_init(ad9951_spi_init);
-
-static __exit void ad9951_spi_exit(void)
-{
-	spi_unregister_driver(&ad9951_driver);
-}
-module_exit(ad9951_spi_exit);
+module_spi_driver(ad9951_driver);
 
 MODULE_AUTHOR("Cliff Cai");
 MODULE_DESCRIPTION("Analog Devices ad9951 driver");
diff --git a/drivers/staging/iio/gyro/adis16080_core.c b/drivers/staging/iio/gyro/adis16080_core.c
index 5d7a906..9405f2d 100644
--- a/drivers/staging/iio/gyro/adis16080_core.c
+++ b/drivers/staging/iio/gyro/adis16080_core.c
@@ -189,18 +189,7 @@ static struct spi_driver adis16080_driver = {
 	.probe = adis16080_probe,
 	.remove = __devexit_p(adis16080_remove),
 };
-
-static __init int adis16080_init(void)
-{
-	return spi_register_driver(&adis16080_driver);
-}
-module_init(adis16080_init);
-
-static __exit void adis16080_exit(void)
-{
-	spi_unregister_driver(&adis16080_driver);
-}
-module_exit(adis16080_exit);
+module_spi_driver(adis16080_driver);
 
 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
 MODULE_DESCRIPTION("Analog Devices ADIS16080/100 Yaw Rate Gyroscope Driver");
diff --git a/drivers/staging/iio/gyro/adis16130_core.c b/drivers/staging/iio/gyro/adis16130_core.c
index 749240d..c9aaca9 100644
--- a/drivers/staging/iio/gyro/adis16130_core.c
+++ b/drivers/staging/iio/gyro/adis16130_core.c
@@ -168,18 +168,7 @@ static struct spi_driver adis16130_driver = {
 	.probe = adis16130_probe,
 	.remove = __devexit_p(adis16130_remove),
 };
-
-static __init int adis16130_init(void)
-{
-	return spi_register_driver(&adis16130_driver);
-}
-module_init(adis16130_init);
-
-static __exit void adis16130_exit(void)
-{
-	spi_unregister_driver(&adis16130_driver);
-}
-module_exit(adis16130_exit);
+module_spi_driver(adis16130_driver);
 
 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
 MODULE_DESCRIPTION("Analog Devices ADIS16130 High Precision Angular Rate");
diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
index aaa3967..886dddf 100644
--- a/drivers/staging/iio/gyro/adis16260_core.c
+++ b/drivers/staging/iio/gyro/adis16260_core.c
@@ -711,18 +711,7 @@ static struct spi_driver adis16260_driver = {
 	.remove = __devexit_p(adis16260_remove),
 	.id_table = adis16260_id,
 };
-
-static __init int adis16260_init(void)
-{
-	return spi_register_driver(&adis16260_driver);
-}
-module_init(adis16260_init);
-
-static __exit void adis16260_exit(void)
-{
-	spi_unregister_driver(&adis16260_driver);
-}
-module_exit(adis16260_exit);
+module_spi_driver(adis16260_driver);
 
 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
 MODULE_DESCRIPTION("Analog Devices ADIS16260/5 Digital Gyroscope Sensor");
diff --git a/drivers/staging/iio/gyro/adxrs450_core.c b/drivers/staging/iio/gyro/adxrs450_core.c
index 3c3ef79..70fd468 100644
--- a/drivers/staging/iio/gyro/adxrs450_core.c
+++ b/drivers/staging/iio/gyro/adxrs450_core.c
@@ -381,18 +381,7 @@ static struct spi_driver adxrs450_driver = {
 	.probe = adxrs450_probe,
 	.remove = __devexit_p(adxrs450_remove),
 };
-
-static __init int adxrs450_init(void)
-{
-	return spi_register_driver(&adxrs450_driver);
-}
-module_init(adxrs450_init);
-
-static __exit void adxrs450_exit(void)
-{
-	spi_unregister_driver(&adxrs450_driver);
-}
-module_exit(adxrs450_exit);
+module_spi_driver(adxrs450_driver);
 
 MODULE_AUTHOR("Cliff Cai <cliff.cai@xxxxxxxxxx>");
 MODULE_DESCRIPTION("Analog Devices ADXRS450 Gyroscope SPI driver");
diff --git a/drivers/staging/iio/imu/adis16400_core.c b/drivers/staging/iio/imu/adis16400_core.c
index d082a37..efc0f65 100644
--- a/drivers/staging/iio/imu/adis16400_core.c
+++ b/drivers/staging/iio/imu/adis16400_core.c
@@ -1128,18 +1128,7 @@ static struct spi_driver adis16400_driver = {
 	.probe = adis16400_probe,
 	.remove = __devexit_p(adis16400_remove),
 };
-
-static __init int adis16400_init(void)
-{
-	return spi_register_driver(&adis16400_driver);
-}
-module_init(adis16400_init);
-
-static __exit void adis16400_exit(void)
-{
-	spi_unregister_driver(&adis16400_driver);
-}
-module_exit(adis16400_exit);
+module_spi_driver(adis16400_driver);
 
 MODULE_AUTHOR("Manuel Stahl <manuel.stahl@iis.fraunhofer.de>");
 MODULE_DESCRIPTION("Analog Devices ADIS16400/5 IMU SPI driver");
diff --git a/drivers/staging/iio/meter/ade7753.c b/drivers/staging/iio/meter/ade7753.c
index 940fef6..4c7b0cb 100644
--- a/drivers/staging/iio/meter/ade7753.c
+++ b/drivers/staging/iio/meter/ade7753.c
@@ -577,18 +577,7 @@ static struct spi_driver ade7753_driver = {
 	.probe = ade7753_probe,
 	.remove = __devexit_p(ade7753_remove),
 };
-
-static __init int ade7753_init(void)
-{
-	return spi_register_driver(&ade7753_driver);
-}
-module_init(ade7753_init);
-
-static __exit void ade7753_exit(void)
-{
-	spi_unregister_driver(&ade7753_driver);
-}
-module_exit(ade7753_exit);
+module_spi_driver(ade7753_driver);
 
 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
 MODULE_DESCRIPTION("Analog Devices ADE7753/6 Single-Phase Multifunction Meter");
diff --git a/drivers/staging/iio/meter/ade7754.c b/drivers/staging/iio/meter/ade7754.c
index 33f0d32..15c98cd 100644
--- a/drivers/staging/iio/meter/ade7754.c
+++ b/drivers/staging/iio/meter/ade7754.c
@@ -600,18 +600,7 @@ static struct spi_driver ade7754_driver = {
 	.probe = ade7754_probe,
 	.remove = __devexit_p(ade7754_remove),
 };
-
-static __init int ade7754_init(void)
-{
-	return spi_register_driver(&ade7754_driver);
-}
-module_init(ade7754_init);
-
-static __exit void ade7754_exit(void)
-{
-	spi_unregister_driver(&ade7754_driver);
-}
-module_exit(ade7754_exit);
+module_spi_driver(ade7754_driver);
 
 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
 MODULE_DESCRIPTION("Analog Devices ADE7754 Polyphase Multifunction Energy Metering IC Driver");
diff --git a/drivers/staging/iio/meter/ade7758_core.c b/drivers/staging/iio/meter/ade7758_core.c
index c5dafbd..39338bc 100644
--- a/drivers/staging/iio/meter/ade7758_core.c
+++ b/drivers/staging/iio/meter/ade7758_core.c
@@ -853,18 +853,7 @@ static struct spi_driver ade7758_driver = {
 	.remove = __devexit_p(ade7758_remove),
 	.id_table = ade7758_id,
 };
-
-static __init int ade7758_init(void)
-{
-	return spi_register_driver(&ade7758_driver);
-}
-module_init(ade7758_init);
-
-static __exit void ade7758_exit(void)
-{
-	spi_unregister_driver(&ade7758_driver);
-}
-module_exit(ade7758_exit);
+module_spi_driver(ade7758_driver);
 
 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
 MODULE_DESCRIPTION("Analog Devices ADE7758 Polyphase Multifunction Energy Metering IC Driver");
diff --git a/drivers/staging/iio/meter/ade7759.c b/drivers/staging/iio/meter/ade7759.c
index b691f10..cfa2a5e 100644
--- a/drivers/staging/iio/meter/ade7759.c
+++ b/drivers/staging/iio/meter/ade7759.c
@@ -521,18 +521,7 @@ static struct spi_driver ade7759_driver = {
 	.probe = ade7759_probe,
 	.remove = __devexit_p(ade7759_remove),
 };
-
-static __init int ade7759_init(void)
-{
-	return spi_register_driver(&ade7759_driver);
-}
-module_init(ade7759_init);
-
-static __exit void ade7759_exit(void)
-{
-	spi_unregister_driver(&ade7759_driver);
-}
-module_exit(ade7759_exit);
+module_spi_driver(ade7759_driver);
 
 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
 MODULE_DESCRIPTION("Analog Devices ADE7759 Active Energy Metering IC Driver");
diff --git a/drivers/staging/iio/meter/ade7854-spi.c b/drivers/staging/iio/meter/ade7854-spi.c
index cfa23ba..c485a79 100644
--- a/drivers/staging/iio/meter/ade7854-spi.c
+++ b/drivers/staging/iio/meter/ade7854-spi.c
@@ -353,18 +353,7 @@ static struct spi_driver ade7854_driver = {
 	.remove = __devexit_p(ade7854_spi_remove),
 	.id_table = ade7854_id,
 };
-
-static __init int ade7854_init(void)
-{
-	return spi_register_driver(&ade7854_driver);
-}
-module_init(ade7854_init);
-
-static __exit void ade7854_exit(void)
-{
-	spi_unregister_driver(&ade7854_driver);
-}
-module_exit(ade7854_exit);
+module_spi_driver(ade7854_driver);
 
 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
 MODULE_DESCRIPTION("Analog Devices ADE7854/58/68/78 SPI Driver");
diff --git a/drivers/staging/iio/resolver/ad2s1200.c b/drivers/staging/iio/resolver/ad2s1200.c
index d7ad46a..1c6a02b 100644
--- a/drivers/staging/iio/resolver/ad2s1200.c
+++ b/drivers/staging/iio/resolver/ad2s1200.c
@@ -170,18 +170,7 @@ static struct spi_driver ad2s1200_driver = {
 	.remove = __devexit_p(ad2s1200_remove),
 	.id_table = ad2s1200_id,
 };
-
-static __init int ad2s1200_spi_init(void)
-{
-	return spi_register_driver(&ad2s1200_driver);
-}
-module_init(ad2s1200_spi_init);
-
-static __exit void ad2s1200_spi_exit(void)
-{
-	spi_unregister_driver(&ad2s1200_driver);
-}
-module_exit(ad2s1200_spi_exit);
+module_spi_driver(ad2s1200_driver);
 
 MODULE_AUTHOR("Graff Yang <graff.yang@gmail.com>");
 MODULE_DESCRIPTION("Analog Devices AD2S1200/1205 Resolver to Digital SPI driver");
diff --git a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/staging/iio/resolver/ad2s1210.c
index 6401a62..ff1b331 100644
--- a/drivers/staging/iio/resolver/ad2s1210.c
+++ b/drivers/staging/iio/resolver/ad2s1210.c
@@ -759,18 +759,7 @@ static struct spi_driver ad2s1210_driver = {
 	.remove = __devexit_p(ad2s1210_remove),
 	.id_table = ad2s1210_id,
 };
-
-static __init int ad2s1210_spi_init(void)
-{
-	return spi_register_driver(&ad2s1210_driver);
-}
-module_init(ad2s1210_spi_init);
-
-static __exit void ad2s1210_spi_exit(void)
-{
-	spi_unregister_driver(&ad2s1210_driver);
-}
-module_exit(ad2s1210_spi_exit);
+module_spi_driver(ad2s1210_driver);
 
 MODULE_AUTHOR("Graff Yang <graff.yang@gmail.com>");
 MODULE_DESCRIPTION("Analog Devices AD2S1210 Resolver to Digital SPI driver");
diff --git a/drivers/staging/iio/resolver/ad2s90.c b/drivers/staging/iio/resolver/ad2s90.c
index a9200d9..6d07943 100644
--- a/drivers/staging/iio/resolver/ad2s90.c
+++ b/drivers/staging/iio/resolver/ad2s90.c
@@ -119,18 +119,7 @@ static struct spi_driver ad2s90_driver = {
 	.remove = __devexit_p(ad2s90_remove),
 	.id_table = ad2s90_id,
 };
-
-static __init int ad2s90_spi_init(void)
-{
-	return spi_register_driver(&ad2s90_driver);
-}
-module_init(ad2s90_spi_init);
-
-static __exit void ad2s90_spi_exit(void)
-{
-	spi_unregister_driver(&ad2s90_driver);
-}
-module_exit(ad2s90_spi_exit);
+module_spi_driver(ad2s90_driver);
 
 MODULE_AUTHOR("Graff Yang <graff.yang@gmail.com>");
 MODULE_DESCRIPTION("Analog Devices AD2S90 Resolver to Digital SPI driver");
-- 
1.7.7.1



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* Re: [PATCH 0/5] Generalize module_platform_driver
  2011-11-16  9:13 [PATCH 0/5] Generalize module_platform_driver Lars-Peter Clausen
                   ` (4 preceding siblings ...)
  2011-11-16  9:13 ` [PATCH 5/5] staging:iio: Use module_spi_driver to register SPI driver Lars-Peter Clausen
@ 2011-11-16 16:02 ` Greg KH
  2011-11-16 16:36   ` Jean Delvare
  2011-11-16 20:14 ` Wolfram Sang
  6 siblings, 1 reply; 26+ messages in thread
From: Greg KH @ 2011-11-16 16:02 UTC (permalink / raw)
  To: Lars-Peter Clausen
  Cc: Jean Delvare, Grant Likely, Jonathan Cameron, Michael Hennerich,
	linux-iio, linux-kernel, linux-i2c, spi-devel-general

On Wed, Nov 16, 2011 at 10:13:34AM +0100, Lars-Peter Clausen wrote:
> Grant Likely recently introduced the module_platform_driver macro which can be
> used to eliminate a few lines on boilerplate code in platform driver modules.
> The same approach can be used to do the same for other bus type drivers.
> 
> The first patch of this series generalizes the module_platform_driver macro and
> introduces the module_driver macro. It is similar to module_platform_driver
> macro but has two additional parameters to pass in the driver register and
> unregister function. The intend is that this macro is used to construct bus
> specific macros for generating the driver register/unregister boilerplate code.
> 
> The next two patches in this series add the module_i2c_driver and
> module_spi_driver macro which use the module_driver macro to generate the I2C
> and SPI driver boilerplate code.
> 
> The last two patches convert the driver found in the IIO framework to use the
> new module_i2c_driver and module_spi_driver macros to demonstrate their
> potential and remove over 700 lines of code.
> 
> While this series only introduces these kind of helper macros for I2C and SPI
> bus drivers the same scheme should be applicable to most other bus driver types.
> For example PCI and USB seem to be good candidates.
> 
> It probably makes sense to merge the first three patches together. The last two
> can probably, since this is not urgent, wait until the first three have reached
> mainline.

Nice, I like this, unless people object, I'll merge the first patch to
the driver-core tree.

I'll gladly take the i2c and spi patches as well if the subsystem
maintainers there don't object, and I'll work on the USB patch as well.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 0/5] Generalize module_platform_driver
  2011-11-16 16:02 ` [PATCH 0/5] Generalize module_platform_driver Greg KH
@ 2011-11-16 16:36   ` Jean Delvare
  2011-11-16 16:37     ` Greg KH
  0 siblings, 1 reply; 26+ messages in thread
From: Jean Delvare @ 2011-11-16 16:36 UTC (permalink / raw)
  To: Greg KH
  Cc: Lars-Peter Clausen, Grant Likely, Jonathan Cameron,
	Michael Hennerich, linux-iio, linux-kernel, linux-i2c,
	spi-devel-general

On Wed, 16 Nov 2011 08:02:06 -0800, Greg KH wrote:
> On Wed, Nov 16, 2011 at 10:13:34AM +0100, Lars-Peter Clausen wrote:
> > Grant Likely recently introduced the module_platform_driver macro which can be
> > used to eliminate a few lines on boilerplate code in platform driver modules.
> > The same approach can be used to do the same for other bus type drivers.
> > 
> > The first patch of this series generalizes the module_platform_driver macro and
> > introduces the module_driver macro. It is similar to module_platform_driver
> > macro but has two additional parameters to pass in the driver register and
> > unregister function. The intend is that this macro is used to construct bus
> > specific macros for generating the driver register/unregister boilerplate code.
> > 
> > The next two patches in this series add the module_i2c_driver and
> > module_spi_driver macro which use the module_driver macro to generate the I2C
> > and SPI driver boilerplate code.
> > 
> > The last two patches convert the driver found in the IIO framework to use the
> > new module_i2c_driver and module_spi_driver macros to demonstrate their
> > potential and remove over 700 lines of code.
> > 
> > While this series only introduces these kind of helper macros for I2C and SPI
> > bus drivers the same scheme should be applicable to most other bus driver types.
> > For example PCI and USB seem to be good candidates.
> > 
> > It probably makes sense to merge the first three patches together. The last two
> > can probably, since this is not urgent, wait until the first three have reached
> > mainline.
> 
> Nice, I like this, unless people object, I'll merge the first patch to
> the driver-core tree.
> 
> I'll gladly take the i2c and spi patches as well if the subsystem
> maintainers there don't object, and I'll work on the USB patch as well.

No objection from me (for i2c).

-- 
Jean Delvare

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 0/5] Generalize module_platform_driver
  2011-11-16 16:36   ` Jean Delvare
@ 2011-11-16 16:37     ` Greg KH
  2011-11-16 17:13       ` Grant Likely
  0 siblings, 1 reply; 26+ messages in thread
From: Greg KH @ 2011-11-16 16:37 UTC (permalink / raw)
  To: Jean Delvare
  Cc: Lars-Peter Clausen, Grant Likely, Jonathan Cameron,
	Michael Hennerich, linux-iio, linux-kernel, linux-i2c,
	spi-devel-general

On Wed, Nov 16, 2011 at 05:36:18PM +0100, Jean Delvare wrote:
> On Wed, 16 Nov 2011 08:02:06 -0800, Greg KH wrote:
> > On Wed, Nov 16, 2011 at 10:13:34AM +0100, Lars-Peter Clausen wrote:
> > > Grant Likely recently introduced the module_platform_driver macro which can be
> > > used to eliminate a few lines on boilerplate code in platform driver modules.
> > > The same approach can be used to do the same for other bus type drivers.
> > > 
> > > The first patch of this series generalizes the module_platform_driver macro and
> > > introduces the module_driver macro. It is similar to module_platform_driver
> > > macro but has two additional parameters to pass in the driver register and
> > > unregister function. The intend is that this macro is used to construct bus
> > > specific macros for generating the driver register/unregister boilerplate code.
> > > 
> > > The next two patches in this series add the module_i2c_driver and
> > > module_spi_driver macro which use the module_driver macro to generate the I2C
> > > and SPI driver boilerplate code.
> > > 
> > > The last two patches convert the driver found in the IIO framework to use the
> > > new module_i2c_driver and module_spi_driver macros to demonstrate their
> > > potential and remove over 700 lines of code.
> > > 
> > > While this series only introduces these kind of helper macros for I2C and SPI
> > > bus drivers the same scheme should be applicable to most other bus driver types.
> > > For example PCI and USB seem to be good candidates.
> > > 
> > > It probably makes sense to merge the first three patches together. The last two
> > > can probably, since this is not urgent, wait until the first three have reached
> > > mainline.
> > 
> > Nice, I like this, unless people object, I'll merge the first patch to
> > the driver-core tree.
> > 
> > I'll gladly take the i2c and spi patches as well if the subsystem
> > maintainers there don't object, and I'll work on the USB patch as well.
> 
> No objection from me (for i2c).

Wonderful, thanks for letting me know.

greg k-h

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 1/5] drivercore: Generalize module_platform_driver
  2011-11-16  9:13 ` [PATCH 1/5] drivercore: " Lars-Peter Clausen
@ 2011-11-16 17:11   ` Grant Likely
  2011-11-17  6:51     ` Jonathan Cameron
  2011-11-17 20:04   ` Greg KH
  2012-01-13  9:07   ` Guennadi Liakhovetski
  2 siblings, 1 reply; 26+ messages in thread
From: Grant Likely @ 2011-11-16 17:11 UTC (permalink / raw)
  To: Lars-Peter Clausen
  Cc: Greg Kroah-Hartman, Jean Delvare, Jonathan Cameron,
	Michael Hennerich, linux-iio, linux-kernel, linux-i2c,
	spi-devel-general

On Wed, Nov 16, 2011 at 2:13 AM, Lars-Peter Clausen <lars@metafoo.de> wrote:
> This patch generalizes the module_platform_driver macro and introduces a new
> module_driver macro. The module_driver macro takes a driver name, a register
> and a unregister function for this driver type. Using these it construct the
> module init and exit sections which register and unregister the driver. Since
> such init/exit sections are commonly found in drivers this macro can be used
> to eliminate a lot of boilerplate code.
>
> The macro is not intended to be used by driver modules directly, instead it
> should be used to generate bus specific macros for registering drivers like
> the module_platform_driver macro.
>
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>

Acked-by: Grant Likely <grant.likely@secretlab.ca>

> ---
>  include/linux/init.h            |   21 +++++++++++++++++++++
>  include/linux/platform_device.h |   12 ++----------
>  2 files changed, 23 insertions(+), 10 deletions(-)
>
> diff --git a/include/linux/init.h b/include/linux/init.h
> index 9146f39..3e2d238 100644
> --- a/include/linux/init.h
> +++ b/include/linux/init.h
> @@ -346,4 +346,25 @@ void __init parse_early_options(char *cmdline);
>  #define __exit_p(x) NULL
>  #endif
>
> +/**
> + * module_driver() - Helper macro for drivers that don't do anything
> + * special in module init/exit. This eliminates a lot of boilerplate.
> + * Each module may only use this macro once, and calling it replaces
> + * module_init() and module_exit().
> + * Use this macro to construct bus specific macros for registering
> + * drivers.
> + */
> +#define module_driver(__driver, __register, __unregister) \
> +static int __init __driver##_init(void) \
> +{ \
> +       return __register(&(__driver)); \
> +} \
> +module_init(__driver##_init); \
> +static void __exit __driver##_exit(void) \
> +{ \
> +       __unregister(&(__driver)); \
> +} \
> +module_exit(__driver##_exit);
> +
>  #endif /* _LINUX_INIT_H */
> +
> diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h
> index 2a23f7d..165a8d1 100644
> --- a/include/linux/platform_device.h
> +++ b/include/linux/platform_device.h
> @@ -196,16 +196,8 @@ static inline void platform_set_drvdata(struct platform_device *pdev, void *data
>  * calling it replaces module_init() and module_exit()
>  */
>  #define module_platform_driver(__platform_driver) \
> -static int __init __platform_driver##_init(void) \
> -{ \
> -       return platform_driver_register(&(__platform_driver)); \
> -} \
> -module_init(__platform_driver##_init); \
> -static void __exit __platform_driver##_exit(void) \
> -{ \
> -       platform_driver_unregister(&(__platform_driver)); \
> -} \
> -module_exit(__platform_driver##_exit);
> +       module_driver(__platform_driver, platform_driver_register, \
> +                       platform_driver_unregister)
>
>  extern struct platform_device *platform_create_bundle(struct platform_driver *driver,
>                                        int (*probe)(struct platform_device *),
> --
> 1.7.7.1
>
>
>



-- 
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 2/5] I2C: Add helper macro for i2c_driver boilerplate
  2011-11-16  9:13 ` [PATCH 2/5] I2C: Add helper macro for i2c_driver boilerplate Lars-Peter Clausen
@ 2011-11-16 17:12   ` Grant Likely
  2011-11-17  6:47     ` Jonathan Cameron
  0 siblings, 1 reply; 26+ messages in thread
From: Grant Likely @ 2011-11-16 17:12 UTC (permalink / raw)
  To: Lars-Peter Clausen
  Cc: Greg Kroah-Hartman, Jean Delvare, Jonathan Cameron,
	Michael Hennerich, linux-iio, linux-kernel, linux-i2c,
	spi-devel-general

On Wed, Nov 16, 2011 at 2:13 AM, Lars-Peter Clausen <lars@metafoo.de> wrote:
> This patch introduces the module_i2c_driver macro which is a convenience macro
> for I2C driver modules similar to module_platform_driver. It is intended to be
> used by drivers which init/exit section does nothing but register/unregister
> the I2C driver. By using this macro it is possible to eliminate a few lines of
> boilerplate code per I2C driver.
>
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>

Acked-by: Grant Likely <grant.likely@secretlab.ca>

> ---
>  include/linux/i2c.h |   13 +++++++++++++
>  1 files changed, 13 insertions(+), 0 deletions(-)
>
> diff --git a/include/linux/i2c.h b/include/linux/i2c.h
> index a81bf6d..7e92854 100644
> --- a/include/linux/i2c.h
> +++ b/include/linux/i2c.h
> @@ -485,6 +485,19 @@ static inline int i2c_adapter_id(struct i2c_adapter *adap)
>  {
>        return adap->nr;
>  }
> +
> +/**
> + * module_i2c_driver() - Helper macro for registering a I2C driver
> + * @__i2c_driver: i2c_driver struct
> + *
> + * Helper macro for I2C drivers which do not do anything special in module
> + * init/exit. This eliminates a lot of boilerplate. Each module may only
> + * use this macro once, and calling it replaces module_init() and module_exit()
> + */
> +#define module_i2c_driver(__i2c_driver) \
> +       module_driver(__i2c_driver, i2c_add_driver, \
> +                       i2c_del_driver)
> +
>  #endif /* I2C */
>  #endif /* __KERNEL__ */
>
> --
> 1.7.7.1
>
>
>



-- 
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 3/5] SPI: Add helper macro for spi_driver boilerplate
  2011-11-16  9:13 ` [PATCH 3/5] SPI: Add helper macro for spi_driver boilerplate Lars-Peter Clausen
@ 2011-11-16 17:12   ` Grant Likely
  2011-11-24  0:13     ` Ben Dooks
  0 siblings, 1 reply; 26+ messages in thread
From: Grant Likely @ 2011-11-16 17:12 UTC (permalink / raw)
  To: Lars-Peter Clausen
  Cc: Greg Kroah-Hartman, Jean Delvare, Jonathan Cameron,
	Michael Hennerich, linux-iio, linux-kernel, linux-i2c,
	spi-devel-general

On Wed, Nov 16, 2011 at 2:13 AM, Lars-Peter Clausen <lars@metafoo.de> wrote:
> This patch introduces the module_spi_driver macro which is a convenience macro
> for SPI driver modules similar to module_platform_driver. It is intended to be
> used by drivers which init/exit section does nothing but register/unregister
> the SPI driver. By using this macro it is possible to eliminate a few lines of
> boilerplate code per SPI driver.
>
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>

Acked-by: Grant Likely <grant.likely@secretlab.ca>

> ---
>  include/linux/spi/spi.h |   11 +++++++++++
>  1 files changed, 11 insertions(+), 0 deletions(-)
>
> diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h
> index bb4f5fb..176fce9 100644
> --- a/include/linux/spi/spi.h
> +++ b/include/linux/spi/spi.h
> @@ -200,6 +200,17 @@ static inline void spi_unregister_driver(struct spi_driver *sdrv)
>                driver_unregister(&sdrv->driver);
>  }
>
> +/**
> + * module_spi_driver() - Helper macro for registering a SPI driver
> + * @__spi_driver: spi_driver struct
> + *
> + * Helper macro for SPI drivers which do not do anything special in module
> + * init/exit. This eliminates a lot of boilerplate. Each module may only
> + * use this macro once, and calling it replaces module_init() and module_exit()
> + */
> +#define module_spi_driver(__spi_driver) \
> +       module_driver(__spi_driver, spi_register_driver, \
> +                       spi_unregister_driver)
>
>  /**
>  * struct spi_master - interface to SPI master controller
> --
> 1.7.7.1
>
>
>



-- 
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 0/5] Generalize module_platform_driver
  2011-11-16 16:37     ` Greg KH
@ 2011-11-16 17:13       ` Grant Likely
  2011-11-17 19:49         ` Greg KH
  0 siblings, 1 reply; 26+ messages in thread
From: Grant Likely @ 2011-11-16 17:13 UTC (permalink / raw)
  To: Greg KH
  Cc: Jean Delvare, Lars-Peter Clausen, Jonathan Cameron,
	Michael Hennerich, linux-iio, linux-kernel, linux-i2c,
	spi-devel-general

On Wed, Nov 16, 2011 at 9:37 AM, Greg KH <gregkh@suse.de> wrote:
> On Wed, Nov 16, 2011 at 05:36:18PM +0100, Jean Delvare wrote:
>> On Wed, 16 Nov 2011 08:02:06 -0800, Greg KH wrote:
>> > On Wed, Nov 16, 2011 at 10:13:34AM +0100, Lars-Peter Clausen wrote:
>> > > Grant Likely recently introduced the module_platform_driver macro which can be
>> > > used to eliminate a few lines on boilerplate code in platform driver modules.
>> > > The same approach can be used to do the same for other bus type drivers.
>> > >
>> > > The first patch of this series generalizes the module_platform_driver macro and
>> > > introduces the module_driver macro. It is similar to module_platform_driver
>> > > macro but has two additional parameters to pass in the driver register and
>> > > unregister function. The intend is that this macro is used to construct bus
>> > > specific macros for generating the driver register/unregister boilerplate code.
>> > >
>> > > The next two patches in this series add the module_i2c_driver and
>> > > module_spi_driver macro which use the module_driver macro to generate the I2C
>> > > and SPI driver boilerplate code.
>> > >
>> > > The last two patches convert the driver found in the IIO framework to use the
>> > > new module_i2c_driver and module_spi_driver macros to demonstrate their
>> > > potential and remove over 700 lines of code.
>> > >
>> > > While this series only introduces these kind of helper macros for I2C and SPI
>> > > bus drivers the same scheme should be applicable to most other bus driver types.
>> > > For example PCI and USB seem to be good candidates.
>> > >
>> > > It probably makes sense to merge the first three patches together. The last two
>> > > can probably, since this is not urgent, wait until the first three have reached
>> > > mainline.
>> >
>> > Nice, I like this, unless people object, I'll merge the first patch to
>> > the driver-core tree.
>> >
>> > I'll gladly take the i2c and spi patches as well if the subsystem
>> > maintainers there don't object, and I'll work on the USB patch as well.
>>
>> No objection from me (for i2c).
>
> Wonderful, thanks for letting me know.

Yes, please take the spi patch too.

Thanks,
g.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 5/5] staging:iio: Use module_spi_driver to register SPI driver
  2011-11-16  9:13 ` [PATCH 5/5] staging:iio: Use module_spi_driver to register SPI driver Lars-Peter Clausen
@ 2011-11-16 17:15   ` Grant Likely
  2011-11-17  6:48     ` Jonathan Cameron
  2011-11-17  6:49   ` Jonathan Cameron
  1 sibling, 1 reply; 26+ messages in thread
From: Grant Likely @ 2011-11-16 17:15 UTC (permalink / raw)
  To: Lars-Peter Clausen
  Cc: Greg Kroah-Hartman, Jean Delvare, Jonathan Cameron,
	Michael Hennerich, linux-iio, linux-kernel, linux-i2c,
	spi-devel-general

On Wed, Nov 16, 2011 at 2:13 AM, Lars-Peter Clausen <lars@metafoo.de> wrote:
> Use the newly introduced module_spi_driver macro for registering SPI drivers.
> This allows us to remove a few lines of boilerplate code.
>
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>

Acked-by: Grant Likely <grant.likely@secretlab.ca>

g.

> ---
>  drivers/staging/iio/accel/adis16201_core.c |   13 +------------
>  drivers/staging/iio/accel/adis16203_core.c |   13 +------------
>  drivers/staging/iio/accel/adis16204_core.c |   13 +------------
>  drivers/staging/iio/accel/adis16209_core.c |   13 +------------
>  drivers/staging/iio/accel/adis16220_core.c |   13 +------------
>  drivers/staging/iio/accel/adis16240_core.c |   13 +------------
>  drivers/staging/iio/accel/kxsd9.c          |   13 +------------
>  drivers/staging/iio/accel/lis3l02dq_core.c |   13 +------------
>  drivers/staging/iio/accel/sca3000_core.c   |   13 +------------
>  drivers/staging/iio/adc/ad7192.c           |   13 +------------
>  drivers/staging/iio/adc/ad7280a.c          |   13 +------------
>  drivers/staging/iio/adc/ad7298_core.c      |   13 +------------
>  drivers/staging/iio/adc/ad7476_core.c      |   13 +------------
>  drivers/staging/iio/adc/ad7606_spi.c       |   13 +------------
>  drivers/staging/iio/adc/ad7780.c           |   13 +------------
>  drivers/staging/iio/adc/ad7793.c           |   13 +------------
>  drivers/staging/iio/adc/ad7816.c           |   14 +-------------
>  drivers/staging/iio/adc/ad7887_core.c      |   13 +------------
>  drivers/staging/iio/adc/adt7310.c          |   14 +-------------
>  drivers/staging/iio/addac/adt7316-spi.c    |   14 +-------------
>  drivers/staging/iio/dac/ad5064.c           |   13 +------------
>  drivers/staging/iio/dac/ad5360.c           |   13 +------------
>  drivers/staging/iio/dac/ad5446.c           |   13 +------------
>  drivers/staging/iio/dac/ad5504.c           |   13 +------------
>  drivers/staging/iio/dac/ad5624r_spi.c      |   13 +------------
>  drivers/staging/iio/dac/ad5686.c           |   13 +------------
>  drivers/staging/iio/dac/ad5791.c           |   13 +------------
>  drivers/staging/iio/dds/ad5930.c           |   13 +------------
>  drivers/staging/iio/dds/ad9832.c           |   13 +------------
>  drivers/staging/iio/dds/ad9834.c           |   13 +------------
>  drivers/staging/iio/dds/ad9850.c           |   13 +------------
>  drivers/staging/iio/dds/ad9852.c           |   13 +------------
>  drivers/staging/iio/dds/ad9910.c           |   13 +------------
>  drivers/staging/iio/dds/ad9951.c           |   13 +------------
>  drivers/staging/iio/gyro/adis16080_core.c  |   13 +------------
>  drivers/staging/iio/gyro/adis16130_core.c  |   13 +------------
>  drivers/staging/iio/gyro/adis16260_core.c  |   13 +------------
>  drivers/staging/iio/gyro/adxrs450_core.c   |   13 +------------
>  drivers/staging/iio/imu/adis16400_core.c   |   13 +------------
>  drivers/staging/iio/meter/ade7753.c        |   13 +------------
>  drivers/staging/iio/meter/ade7754.c        |   13 +------------
>  drivers/staging/iio/meter/ade7758_core.c   |   13 +------------
>  drivers/staging/iio/meter/ade7759.c        |   13 +------------
>  drivers/staging/iio/meter/ade7854-spi.c    |   13 +------------
>  drivers/staging/iio/resolver/ad2s1200.c    |   13 +------------
>  drivers/staging/iio/resolver/ad2s1210.c    |   13 +------------
>  drivers/staging/iio/resolver/ad2s90.c      |   13 +------------
>  47 files changed, 47 insertions(+), 567 deletions(-)
>
> diff --git a/drivers/staging/iio/accel/adis16201_core.c b/drivers/staging/iio/accel/adis16201_core.c
> index 1c5dad5..97f747e 100644
> --- a/drivers/staging/iio/accel/adis16201_core.c
> +++ b/drivers/staging/iio/accel/adis16201_core.c
> @@ -549,18 +549,7 @@ static struct spi_driver adis16201_driver = {
>        .probe = adis16201_probe,
>        .remove = __devexit_p(adis16201_remove),
>  };
> -
> -static __init int adis16201_init(void)
> -{
> -       return spi_register_driver(&adis16201_driver);
> -}
> -module_init(adis16201_init);
> -
> -static __exit void adis16201_exit(void)
> -{
> -       spi_unregister_driver(&adis16201_driver);
> -}
> -module_exit(adis16201_exit);
> +module_spi_driver(adis16201_driver);
>
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADIS16201 Programmable Digital Vibration Sensor driver");
> diff --git a/drivers/staging/iio/accel/adis16203_core.c b/drivers/staging/iio/accel/adis16203_core.c
> index 8a33374..a6d6d27 100644
> --- a/drivers/staging/iio/accel/adis16203_core.c
> +++ b/drivers/staging/iio/accel/adis16203_core.c
> @@ -504,18 +504,7 @@ static struct spi_driver adis16203_driver = {
>        .probe = adis16203_probe,
>        .remove = __devexit_p(adis16203_remove),
>  };
> -
> -static __init int adis16203_init(void)
> -{
> -       return spi_register_driver(&adis16203_driver);
> -}
> -module_init(adis16203_init);
> -
> -static __exit void adis16203_exit(void)
> -{
> -       spi_unregister_driver(&adis16203_driver);
> -}
> -module_exit(adis16203_exit);
> +module_spi_driver(adis16203_driver);
>
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADIS16203 Programmable Digital Vibration Sensor driver");
> diff --git a/drivers/staging/iio/accel/adis16204_core.c b/drivers/staging/iio/accel/adis16204_core.c
> index 644ac8e..7ac5b4c 100644
> --- a/drivers/staging/iio/accel/adis16204_core.c
> +++ b/drivers/staging/iio/accel/adis16204_core.c
> @@ -577,18 +577,7 @@ static struct spi_driver adis16204_driver = {
>        .probe = adis16204_probe,
>        .remove = __devexit_p(adis16204_remove),
>  };
> -
> -static __init int adis16204_init(void)
> -{
> -       return spi_register_driver(&adis16204_driver);
> -}
> -module_init(adis16204_init);
> -
> -static __exit void adis16204_exit(void)
> -{
> -       spi_unregister_driver(&adis16204_driver);
> -}
> -module_exit(adis16204_exit);
> +module_spi_driver(adis16204_driver);
>
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("ADIS16204 High-g Digital Impact Sensor and Recorder");
> diff --git a/drivers/staging/iio/accel/adis16209_core.c b/drivers/staging/iio/accel/adis16209_core.c
> index 0a8571b..c03afbf 100644
> --- a/drivers/staging/iio/accel/adis16209_core.c
> +++ b/drivers/staging/iio/accel/adis16209_core.c
> @@ -553,18 +553,7 @@ static struct spi_driver adis16209_driver = {
>        .probe = adis16209_probe,
>        .remove = __devexit_p(adis16209_remove),
>  };
> -
> -static __init int adis16209_init(void)
> -{
> -       return spi_register_driver(&adis16209_driver);
> -}
> -module_init(adis16209_init);
> -
> -static __exit void adis16209_exit(void)
> -{
> -       spi_unregister_driver(&adis16209_driver);
> -}
> -module_exit(adis16209_exit);
> +module_spi_driver(adis16209_driver);
>
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADIS16209 Digital Vibration Sensor driver");
> diff --git a/drivers/staging/iio/accel/adis16220_core.c b/drivers/staging/iio/accel/adis16220_core.c
> index 6d4503d..73298e7 100644
> --- a/drivers/staging/iio/accel/adis16220_core.c
> +++ b/drivers/staging/iio/accel/adis16220_core.c
> @@ -708,18 +708,7 @@ static struct spi_driver adis16220_driver = {
>        .probe = adis16220_probe,
>        .remove = __devexit_p(adis16220_remove),
>  };
> -
> -static __init int adis16220_init(void)
> -{
> -       return spi_register_driver(&adis16220_driver);
> -}
> -module_init(adis16220_init);
> -
> -static __exit void adis16220_exit(void)
> -{
> -       spi_unregister_driver(&adis16220_driver);
> -}
> -module_exit(adis16220_exit);
> +module_spi_driver(adis16220_driver);
>
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADIS16220 Digital Vibration Sensor");
> diff --git a/drivers/staging/iio/accel/adis16240_core.c b/drivers/staging/iio/accel/adis16240_core.c
> index b8be292..88881b9 100644
> --- a/drivers/staging/iio/accel/adis16240_core.c
> +++ b/drivers/staging/iio/accel/adis16240_core.c
> @@ -606,18 +606,7 @@ static struct spi_driver adis16240_driver = {
>        .probe = adis16240_probe,
>        .remove = __devexit_p(adis16240_remove),
>  };
> -
> -static __init int adis16240_init(void)
> -{
> -       return spi_register_driver(&adis16240_driver);
> -}
> -module_init(adis16240_init);
> -
> -static __exit void adis16240_exit(void)
> -{
> -       spi_unregister_driver(&adis16240_driver);
> -}
> -module_exit(adis16240_exit);
> +module_spi_driver(adis16240_driver);
>
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices Programmable Impact Sensor and Recorder");
> diff --git a/drivers/staging/iio/accel/kxsd9.c b/drivers/staging/iio/accel/kxsd9.c
> index 5238503..cfce21c 100644
> --- a/drivers/staging/iio/accel/kxsd9.c
> +++ b/drivers/staging/iio/accel/kxsd9.c
> @@ -280,18 +280,7 @@ static struct spi_driver kxsd9_driver = {
>        .remove = __devexit_p(kxsd9_remove),
>        .id_table = kxsd9_id,
>  };
> -
> -static __init int kxsd9_spi_init(void)
> -{
> -       return spi_register_driver(&kxsd9_driver);
> -}
> -module_init(kxsd9_spi_init);
> -
> -static __exit void kxsd9_spi_exit(void)
> -{
> -       spi_unregister_driver(&kxsd9_driver);
> -}
> -module_exit(kxsd9_spi_exit);
> +module_spi_driver(kxsd9_driver);
>
>  MODULE_AUTHOR("Jonathan Cameron <jic23@cam.ac.uk>");
>  MODULE_DESCRIPTION("Kionix KXSD9 SPI driver");
> diff --git a/drivers/staging/iio/accel/lis3l02dq_core.c b/drivers/staging/iio/accel/lis3l02dq_core.c
> index 559545a..6877521 100644
> --- a/drivers/staging/iio/accel/lis3l02dq_core.c
> +++ b/drivers/staging/iio/accel/lis3l02dq_core.c
> @@ -804,18 +804,7 @@ static struct spi_driver lis3l02dq_driver = {
>        .probe = lis3l02dq_probe,
>        .remove = __devexit_p(lis3l02dq_remove),
>  };
> -
> -static __init int lis3l02dq_init(void)
> -{
> -       return spi_register_driver(&lis3l02dq_driver);
> -}
> -module_init(lis3l02dq_init);
> -
> -static __exit void lis3l02dq_exit(void)
> -{
> -       spi_unregister_driver(&lis3l02dq_driver);
> -}
> -module_exit(lis3l02dq_exit);
> +module_spi_driver(lis3l02dq_driver);
>
>  MODULE_AUTHOR("Jonathan Cameron <jic23@cam.ac.uk>");
>  MODULE_DESCRIPTION("ST LIS3L02DQ Accelerometer SPI driver");
> diff --git a/drivers/staging/iio/accel/sca3000_core.c b/drivers/staging/iio/accel/sca3000_core.c
> index a44a705..6c35907 100644
> --- a/drivers/staging/iio/accel/sca3000_core.c
> +++ b/drivers/staging/iio/accel/sca3000_core.c
> @@ -1250,18 +1250,7 @@ static struct spi_driver sca3000_driver = {
>        .remove = __devexit_p(sca3000_remove),
>        .id_table = sca3000_id,
>  };
> -
> -static __init int sca3000_init(void)
> -{
> -       return spi_register_driver(&sca3000_driver);
> -}
> -module_init(sca3000_init);
> -
> -static __exit void sca3000_exit(void)
> -{
> -       spi_unregister_driver(&sca3000_driver);
> -}
> -module_exit(sca3000_exit);
> +module_spi_driver(sca3000_driver);
>
>  MODULE_AUTHOR("Jonathan Cameron <jic23@cam.ac.uk>");
>  MODULE_DESCRIPTION("VTI SCA3000 Series Accelerometers SPI driver");
> diff --git a/drivers/staging/iio/adc/ad7192.c b/drivers/staging/iio/adc/ad7192.c
> index 31c376b..a6a4a4e 100644
> --- a/drivers/staging/iio/adc/ad7192.c
> +++ b/drivers/staging/iio/adc/ad7192.c
> @@ -1161,18 +1161,7 @@ static struct spi_driver ad7192_driver = {
>        .remove         = __devexit_p(ad7192_remove),
>        .id_table       = ad7192_id,
>  };
> -
> -static int __init ad7192_init(void)
> -{
> -       return spi_register_driver(&ad7192_driver);
> -}
> -module_init(ad7192_init);
> -
> -static void __exit ad7192_exit(void)
> -{
> -       spi_unregister_driver(&ad7192_driver);
> -}
> -module_exit(ad7192_exit);
> +module_spi_driver(ad7192_driver);
>
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD7190, AD7192, AD7195 ADC");
> diff --git a/drivers/staging/iio/adc/ad7280a.c b/drivers/staging/iio/adc/ad7280a.c
> index 372d059..dbaeae8 100644
> --- a/drivers/staging/iio/adc/ad7280a.c
> +++ b/drivers/staging/iio/adc/ad7280a.c
> @@ -979,18 +979,7 @@ static struct spi_driver ad7280_driver = {
>        .remove         = __devexit_p(ad7280_remove),
>        .id_table       = ad7280_id,
>  };
> -
> -static int __init ad7280_init(void)
> -{
> -       return spi_register_driver(&ad7280_driver);
> -}
> -module_init(ad7280_init);
> -
> -static void __exit ad7280_exit(void)
> -{
> -       spi_unregister_driver(&ad7280_driver);
> -}
> -module_exit(ad7280_exit);
> +module_spi_driver(ad7280_driver);
>
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD7280A");
> diff --git a/drivers/staging/iio/adc/ad7298_core.c b/drivers/staging/iio/adc/ad7298_core.c
> index c1de73a..a799bd1 100644
> --- a/drivers/staging/iio/adc/ad7298_core.c
> +++ b/drivers/staging/iio/adc/ad7298_core.c
> @@ -276,18 +276,7 @@ static struct spi_driver ad7298_driver = {
>        .remove         = __devexit_p(ad7298_remove),
>        .id_table       = ad7298_id,
>  };
> -
> -static int __init ad7298_init(void)
> -{
> -       return spi_register_driver(&ad7298_driver);
> -}
> -module_init(ad7298_init);
> -
> -static void __exit ad7298_exit(void)
> -{
> -       spi_unregister_driver(&ad7298_driver);
> -}
> -module_exit(ad7298_exit);
> +module_spi_driver(ad7298_driver);
>
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD7298 ADC");
> diff --git a/drivers/staging/iio/adc/ad7476_core.c b/drivers/staging/iio/adc/ad7476_core.c
> index fd79fac..0b58520 100644
> --- a/drivers/staging/iio/adc/ad7476_core.c
> +++ b/drivers/staging/iio/adc/ad7476_core.c
> @@ -248,18 +248,7 @@ static struct spi_driver ad7476_driver = {
>        .remove         = __devexit_p(ad7476_remove),
>        .id_table       = ad7476_id,
>  };
> -
> -static int __init ad7476_init(void)
> -{
> -       return spi_register_driver(&ad7476_driver);
> -}
> -module_init(ad7476_init);
> -
> -static void __exit ad7476_exit(void)
> -{
> -       spi_unregister_driver(&ad7476_driver);
> -}
> -module_exit(ad7476_exit);
> +module_spi_driver(ad7476_driver);
>
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD7475/6/7/8(A) AD7466/7/8 ADC");
> diff --git a/drivers/staging/iio/adc/ad7606_spi.c b/drivers/staging/iio/adc/ad7606_spi.c
> index aede1ba..b984bd2 100644
> --- a/drivers/staging/iio/adc/ad7606_spi.c
> +++ b/drivers/staging/iio/adc/ad7606_spi.c
> @@ -109,18 +109,7 @@ static struct spi_driver ad7606_driver = {
>        .remove = __devexit_p(ad7606_spi_remove),
>        .id_table = ad7606_id,
>  };
> -
> -static int __init ad7606_spi_init(void)
> -{
> -       return spi_register_driver(&ad7606_driver);
> -}
> -module_init(ad7606_spi_init);
> -
> -static void __exit ad7606_spi_exit(void)
> -{
> -       spi_unregister_driver(&ad7606_driver);
> -}
> -module_exit(ad7606_spi_exit);
> +module_spi_driver(ad7606_driver);
>
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD7606 ADC");
> diff --git a/drivers/staging/iio/adc/ad7780.c b/drivers/staging/iio/adc/ad7780.c
> index 7a579a1..ec90261 100644
> --- a/drivers/staging/iio/adc/ad7780.c
> +++ b/drivers/staging/iio/adc/ad7780.c
> @@ -283,18 +283,7 @@ static struct spi_driver ad7780_driver = {
>        .remove         = __devexit_p(ad7780_remove),
>        .id_table       = ad7780_id,
>  };
> -
> -static int __init ad7780_init(void)
> -{
> -       return spi_register_driver(&ad7780_driver);
> -}
> -module_init(ad7780_init);
> -
> -static void __exit ad7780_exit(void)
> -{
> -       spi_unregister_driver(&ad7780_driver);
> -}
> -module_exit(ad7780_exit);
> +module_spi_driver(ad7780_driver);
>
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD7780/1 ADC");
> diff --git a/drivers/staging/iio/adc/ad7793.c b/drivers/staging/iio/adc/ad7793.c
> index 999f8f7..1c5588e 100644
> --- a/drivers/staging/iio/adc/ad7793.c
> +++ b/drivers/staging/iio/adc/ad7793.c
> @@ -1045,18 +1045,7 @@ static struct spi_driver ad7793_driver = {
>        .remove         = __devexit_p(ad7793_remove),
>        .id_table       = ad7793_id,
>  };
> -
> -static int __init ad7793_init(void)
> -{
> -       return spi_register_driver(&ad7793_driver);
> -}
> -module_init(ad7793_init);
> -
> -static void __exit ad7793_exit(void)
> -{
> -       spi_unregister_driver(&ad7793_driver);
> -}
> -module_exit(ad7793_exit);
> +module_spi_driver(ad7793_driver);
>
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD7792/3 ADC");
> diff --git a/drivers/staging/iio/adc/ad7816.c b/drivers/staging/iio/adc/ad7816.c
> index bdb9049..acbf936 100644
> --- a/drivers/staging/iio/adc/ad7816.c
> +++ b/drivers/staging/iio/adc/ad7816.c
> @@ -466,21 +466,9 @@ static struct spi_driver ad7816_driver = {
>        .remove = __devexit_p(ad7816_remove),
>        .id_table = ad7816_id,
>  };
> -
> -static __init int ad7816_init(void)
> -{
> -       return spi_register_driver(&ad7816_driver);
> -}
> -
> -static __exit void ad7816_exit(void)
> -{
> -       spi_unregister_driver(&ad7816_driver);
> -}
> +module_spi_driver(ad7816_driver);
>
>  MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>");
>  MODULE_DESCRIPTION("Analog Devices AD7816/7/8 digital"
>                        " temperature sensor driver");
>  MODULE_LICENSE("GPL v2");
> -
> -module_init(ad7816_init);
> -module_exit(ad7816_exit);
> diff --git a/drivers/staging/iio/adc/ad7887_core.c b/drivers/staging/iio/adc/ad7887_core.c
> index 609dcd5..91b8fb0 100644
> --- a/drivers/staging/iio/adc/ad7887_core.c
> +++ b/drivers/staging/iio/adc/ad7887_core.c
> @@ -257,18 +257,7 @@ static struct spi_driver ad7887_driver = {
>        .remove         = __devexit_p(ad7887_remove),
>        .id_table       = ad7887_id,
>  };
> -
> -static int __init ad7887_init(void)
> -{
> -       return spi_register_driver(&ad7887_driver);
> -}
> -module_init(ad7887_init);
> -
> -static void __exit ad7887_exit(void)
> -{
> -       spi_unregister_driver(&ad7887_driver);
> -}
> -module_exit(ad7887_exit);
> +module_spi_driver(ad7887_driver);
>
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD7887 ADC");
> diff --git a/drivers/staging/iio/adc/adt7310.c b/drivers/staging/iio/adc/adt7310.c
> index c9e0be3..bc307f3 100644
> --- a/drivers/staging/iio/adc/adt7310.c
> +++ b/drivers/staging/iio/adc/adt7310.c
> @@ -884,21 +884,9 @@ static struct spi_driver adt7310_driver = {
>        .remove = __devexit_p(adt7310_remove),
>        .id_table = adt7310_id,
>  };
> -
> -static __init int adt7310_init(void)
> -{
> -       return spi_register_driver(&adt7310_driver);
> -}
> -
> -static __exit void adt7310_exit(void)
> -{
> -       spi_unregister_driver(&adt7310_driver);
> -}
> +module_spi_driver(adt7310_driver);
>
>  MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>");
>  MODULE_DESCRIPTION("Analog Devices ADT7310 digital"
>                        " temperature sensor driver");
>  MODULE_LICENSE("GPL v2");
> -
> -module_init(adt7310_init);
> -module_exit(adt7310_exit);
> diff --git a/drivers/staging/iio/addac/adt7316-spi.c b/drivers/staging/iio/addac/adt7316-spi.c
> index 369d4d0..1e93c7b 100644
> --- a/drivers/staging/iio/addac/adt7316-spi.c
> +++ b/drivers/staging/iio/addac/adt7316-spi.c
> @@ -160,21 +160,9 @@ static struct spi_driver adt7316_driver = {
>        .resume = adt7316_spi_resume,
>        .id_table = adt7316_spi_id,
>  };
> -
> -static __init int adt7316_spi_init(void)
> -{
> -       return spi_register_driver(&adt7316_driver);
> -}
> -
> -static __exit void adt7316_spi_exit(void)
> -{
> -       spi_unregister_driver(&adt7316_driver);
> -}
> +module_spi_driver(adt7316_driver);
>
>  MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>");
>  MODULE_DESCRIPTION("SPI bus driver for Analog Devices ADT7316/7/8 and"
>                        "ADT7516/7/9 digital temperature sensor, ADC and DAC");
>  MODULE_LICENSE("GPL v2");
> -
> -module_init(adt7316_spi_init);
> -module_exit(adt7316_spi_exit);
> diff --git a/drivers/staging/iio/dac/ad5064.c b/drivers/staging/iio/dac/ad5064.c
> index 24279f2..39cfe6c 100644
> --- a/drivers/staging/iio/dac/ad5064.c
> +++ b/drivers/staging/iio/dac/ad5064.c
> @@ -445,18 +445,7 @@ static struct spi_driver ad5064_driver = {
>        .remove = __devexit_p(ad5064_remove),
>        .id_table = ad5064_id,
>  };
> -
> -static __init int ad5064_spi_init(void)
> -{
> -       return spi_register_driver(&ad5064_driver);
> -}
> -module_init(ad5064_spi_init);
> -
> -static __exit void ad5064_spi_exit(void)
> -{
> -       spi_unregister_driver(&ad5064_driver);
> -}
> -module_exit(ad5064_spi_exit);
> +module_spi_driver(ad5064_driver);
>
>  MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
>  MODULE_DESCRIPTION("Analog Devices AD5064/64-1/44/24 DAC");
> diff --git a/drivers/staging/iio/dac/ad5360.c b/drivers/staging/iio/dac/ad5360.c
> index 72d0f3f0..bc0459e 100644
> --- a/drivers/staging/iio/dac/ad5360.c
> +++ b/drivers/staging/iio/dac/ad5360.c
> @@ -563,18 +563,7 @@ static struct spi_driver ad5360_driver = {
>        .remove = __devexit_p(ad5360_remove),
>        .id_table = ad5360_ids,
>  };
> -
> -static __init int ad5360_spi_init(void)
> -{
> -       return spi_register_driver(&ad5360_driver);
> -}
> -module_init(ad5360_spi_init);
> -
> -static __exit void ad5360_spi_exit(void)
> -{
> -       spi_unregister_driver(&ad5360_driver);
> -}
> -module_exit(ad5360_spi_exit);
> +module_spi_driver(ad5360_driver);
>
>  MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
>  MODULE_DESCRIPTION("Analog Devices AD5360/61/62/63/70/71/72/73 DAC");
> diff --git a/drivers/staging/iio/dac/ad5446.c b/drivers/staging/iio/dac/ad5446.c
> index e1c204d..ac3bc5f 100644
> --- a/drivers/staging/iio/dac/ad5446.c
> +++ b/drivers/staging/iio/dac/ad5446.c
> @@ -465,18 +465,7 @@ static struct spi_driver ad5446_driver = {
>        .remove         = __devexit_p(ad5446_remove),
>        .id_table       = ad5446_id,
>  };
> -
> -static int __init ad5446_init(void)
> -{
> -       return spi_register_driver(&ad5446_driver);
> -}
> -module_init(ad5446_init);
> -
> -static void __exit ad5446_exit(void)
> -{
> -       spi_unregister_driver(&ad5446_driver);
> -}
> -module_exit(ad5446_exit);
> +module_spi_driver(ad5446_driver);
>
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD5444/AD5446 DAC");
> diff --git a/drivers/staging/iio/dac/ad5504.c b/drivers/staging/iio/dac/ad5504.c
> index 60dd640..57539ce 100644
> --- a/drivers/staging/iio/dac/ad5504.c
> +++ b/drivers/staging/iio/dac/ad5504.c
> @@ -377,18 +377,7 @@ static struct spi_driver ad5504_driver = {
>        .remove = __devexit_p(ad5504_remove),
>        .id_table = ad5504_id,
>  };
> -
> -static __init int ad5504_spi_init(void)
> -{
> -       return spi_register_driver(&ad5504_driver);
> -}
> -module_init(ad5504_spi_init);
> -
> -static __exit void ad5504_spi_exit(void)
> -{
> -       spi_unregister_driver(&ad5504_driver);
> -}
> -module_exit(ad5504_spi_exit);
> +module_spi_driver(ad5504_driver);
>
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD5501/AD5501 DAC");
> diff --git a/drivers/staging/iio/dac/ad5624r_spi.c b/drivers/staging/iio/dac/ad5624r_spi.c
> index 284d879..6e05f0d 100644
> --- a/drivers/staging/iio/dac/ad5624r_spi.c
> +++ b/drivers/staging/iio/dac/ad5624r_spi.c
> @@ -317,18 +317,7 @@ static struct spi_driver ad5624r_driver = {
>        .remove = __devexit_p(ad5624r_remove),
>        .id_table = ad5624r_id,
>  };
> -
> -static __init int ad5624r_spi_init(void)
> -{
> -       return spi_register_driver(&ad5624r_driver);
> -}
> -module_init(ad5624r_spi_init);
> -
> -static __exit void ad5624r_spi_exit(void)
> -{
> -       spi_unregister_driver(&ad5624r_driver);
> -}
> -module_exit(ad5624r_spi_exit);
> +module_spi_driver(ad5624r_driver);
>
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices AD5624/44/64R DAC spi driver");
> diff --git a/drivers/staging/iio/dac/ad5686.c b/drivers/staging/iio/dac/ad5686.c
> index 974c6f5..e72db2f 100644
> --- a/drivers/staging/iio/dac/ad5686.c
> +++ b/drivers/staging/iio/dac/ad5686.c
> @@ -447,18 +447,7 @@ static struct spi_driver ad5686_driver = {
>        .remove = __devexit_p(ad5686_remove),
>        .id_table = ad5686_id,
>  };
> -
> -static __init int ad5686_spi_init(void)
> -{
> -       return spi_register_driver(&ad5686_driver);
> -}
> -module_init(ad5686_spi_init);
> -
> -static __exit void ad5686_spi_exit(void)
> -{
> -       spi_unregister_driver(&ad5686_driver);
> -}
> -module_exit(ad5686_spi_exit);
> +module_spi_driver(ad5686_driver);
>
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD5686/85/84 DAC");
> diff --git a/drivers/staging/iio/dac/ad5791.c b/drivers/staging/iio/dac/ad5791.c
> index 6fbca8d..4a80fd8 100644
> --- a/drivers/staging/iio/dac/ad5791.c
> +++ b/drivers/staging/iio/dac/ad5791.c
> @@ -410,18 +410,7 @@ static struct spi_driver ad5791_driver = {
>        .remove = __devexit_p(ad5791_remove),
>        .id_table = ad5791_id,
>  };
> -
> -static __init int ad5791_spi_init(void)
> -{
> -       return spi_register_driver(&ad5791_driver);
> -}
> -module_init(ad5791_spi_init);
> -
> -static __exit void ad5791_spi_exit(void)
> -{
> -       spi_unregister_driver(&ad5791_driver);
> -}
> -module_exit(ad5791_spi_exit);
> +module_spi_driver(ad5791_driver);
>
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD5760/AD5780/AD5781/AD5791 DAC");
> diff --git a/drivers/staging/iio/dds/ad5930.c b/drivers/staging/iio/dds/ad5930.c
> index f5e368b..4a360d0 100644
> --- a/drivers/staging/iio/dds/ad5930.c
> +++ b/drivers/staging/iio/dds/ad5930.c
> @@ -143,18 +143,7 @@ static struct spi_driver ad5930_driver = {
>        .probe = ad5930_probe,
>        .remove = __devexit_p(ad5930_remove),
>  };
> -
> -static __init int ad5930_spi_init(void)
> -{
> -       return spi_register_driver(&ad5930_driver);
> -}
> -module_init(ad5930_spi_init);
> -
> -static __exit void ad5930_spi_exit(void)
> -{
> -       spi_unregister_driver(&ad5930_driver);
> -}
> -module_exit(ad5930_spi_exit);
> +module_spi_driver(ad5930_driver);
>
>  MODULE_AUTHOR("Cliff Cai");
>  MODULE_DESCRIPTION("Analog Devices ad5930 driver");
> diff --git a/drivers/staging/iio/dds/ad9832.c b/drivers/staging/iio/dds/ad9832.c
> index 9b4ff60..cc32fd6 100644
> --- a/drivers/staging/iio/dds/ad9832.c
> +++ b/drivers/staging/iio/dds/ad9832.c
> @@ -355,18 +355,7 @@ static struct spi_driver ad9832_driver = {
>        .remove         = __devexit_p(ad9832_remove),
>        .id_table       = ad9832_id,
>  };
> -
> -static int __init ad9832_init(void)
> -{
> -       return spi_register_driver(&ad9832_driver);
> -}
> -module_init(ad9832_init);
> -
> -static void __exit ad9832_exit(void)
> -{
> -       spi_unregister_driver(&ad9832_driver);
> -}
> -module_exit(ad9832_exit);
> +module_spi_driver(ad9832_driver);
>
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD9832/AD9835 DDS");
> diff --git a/drivers/staging/iio/dds/ad9834.c b/drivers/staging/iio/dds/ad9834.c
> index c468f69..2b31e35 100644
> --- a/drivers/staging/iio/dds/ad9834.c
> +++ b/drivers/staging/iio/dds/ad9834.c
> @@ -446,18 +446,7 @@ static struct spi_driver ad9834_driver = {
>        .remove         = __devexit_p(ad9834_remove),
>        .id_table       = ad9834_id,
>  };
> -
> -static int __init ad9834_init(void)
> -{
> -       return spi_register_driver(&ad9834_driver);
> -}
> -module_init(ad9834_init);
> -
> -static void __exit ad9834_exit(void)
> -{
> -       spi_unregister_driver(&ad9834_driver);
> -}
> -module_exit(ad9834_exit);
> +module_spi_driver(ad9834_driver);
>
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD9833/AD9834/AD9837/AD9838 DDS");
> diff --git a/drivers/staging/iio/dds/ad9850.c b/drivers/staging/iio/dds/ad9850.c
> index a14771b..f9c96af 100644
> --- a/drivers/staging/iio/dds/ad9850.c
> +++ b/drivers/staging/iio/dds/ad9850.c
> @@ -129,18 +129,7 @@ static struct spi_driver ad9850_driver = {
>        .probe = ad9850_probe,
>        .remove = __devexit_p(ad9850_remove),
>  };
> -
> -static __init int ad9850_spi_init(void)
> -{
> -       return spi_register_driver(&ad9850_driver);
> -}
> -module_init(ad9850_spi_init);
> -
> -static __exit void ad9850_spi_exit(void)
> -{
> -       spi_unregister_driver(&ad9850_driver);
> -}
> -module_exit(ad9850_spi_exit);
> +module_spi_driver(ad9850_driver);
>
>  MODULE_AUTHOR("Cliff Cai");
>  MODULE_DESCRIPTION("Analog Devices ad9850 driver");
> diff --git a/drivers/staging/iio/dds/ad9852.c b/drivers/staging/iio/dds/ad9852.c
> index cfceaa6..9fc73fd 100644
> --- a/drivers/staging/iio/dds/ad9852.c
> +++ b/drivers/staging/iio/dds/ad9852.c
> @@ -280,18 +280,7 @@ static struct spi_driver ad9852_driver = {
>        .probe = ad9852_probe,
>        .remove = __devexit_p(ad9852_remove),
>  };
> -
> -static __init int ad9852_spi_init(void)
> -{
> -       return spi_register_driver(&ad9852_driver);
> -}
> -module_init(ad9852_spi_init);
> -
> -static __exit void ad9852_spi_exit(void)
> -{
> -       spi_unregister_driver(&ad9852_driver);
> -}
> -module_exit(ad9852_spi_exit);
> +module_spi_driver(ad9852_driver);
>
>  MODULE_AUTHOR("Cliff Cai");
>  MODULE_DESCRIPTION("Analog Devices ad9852 driver");
> diff --git a/drivers/staging/iio/dds/ad9910.c b/drivers/staging/iio/dds/ad9910.c
> index da83d2b..57046b0 100644
> --- a/drivers/staging/iio/dds/ad9910.c
> +++ b/drivers/staging/iio/dds/ad9910.c
> @@ -413,18 +413,7 @@ static struct spi_driver ad9910_driver = {
>        .probe = ad9910_probe,
>        .remove = __devexit_p(ad9910_remove),
>  };
> -
> -static __init int ad9910_spi_init(void)
> -{
> -       return spi_register_driver(&ad9910_driver);
> -}
> -module_init(ad9910_spi_init);
> -
> -static __exit void ad9910_spi_exit(void)
> -{
> -       spi_unregister_driver(&ad9910_driver);
> -}
> -module_exit(ad9910_spi_exit);
> +module_spi_driver(ad9910_driver);
>
>  MODULE_AUTHOR("Cliff Cai");
>  MODULE_DESCRIPTION("Analog Devices ad9910 driver");
> diff --git a/drivers/staging/iio/dds/ad9951.c b/drivers/staging/iio/dds/ad9951.c
> index 20c1825..d29130e 100644
> --- a/drivers/staging/iio/dds/ad9951.c
> +++ b/drivers/staging/iio/dds/ad9951.c
> @@ -224,18 +224,7 @@ static struct spi_driver ad9951_driver = {
>        .probe = ad9951_probe,
>        .remove = __devexit_p(ad9951_remove),
>  };
> -
> -static __init int ad9951_spi_init(void)
> -{
> -       return spi_register_driver(&ad9951_driver);
> -}
> -module_init(ad9951_spi_init);
> -
> -static __exit void ad9951_spi_exit(void)
> -{
> -       spi_unregister_driver(&ad9951_driver);
> -}
> -module_exit(ad9951_spi_exit);
> +module_spi_driver(ad9951_driver);
>
>  MODULE_AUTHOR("Cliff Cai");
>  MODULE_DESCRIPTION("Analog Devices ad9951 driver");
> diff --git a/drivers/staging/iio/gyro/adis16080_core.c b/drivers/staging/iio/gyro/adis16080_core.c
> index 5d7a906..9405f2d 100644
> --- a/drivers/staging/iio/gyro/adis16080_core.c
> +++ b/drivers/staging/iio/gyro/adis16080_core.c
> @@ -189,18 +189,7 @@ static struct spi_driver adis16080_driver = {
>        .probe = adis16080_probe,
>        .remove = __devexit_p(adis16080_remove),
>  };
> -
> -static __init int adis16080_init(void)
> -{
> -       return spi_register_driver(&adis16080_driver);
> -}
> -module_init(adis16080_init);
> -
> -static __exit void adis16080_exit(void)
> -{
> -       spi_unregister_driver(&adis16080_driver);
> -}
> -module_exit(adis16080_exit);
> +module_spi_driver(adis16080_driver);
>
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADIS16080/100 Yaw Rate Gyroscope Driver");
> diff --git a/drivers/staging/iio/gyro/adis16130_core.c b/drivers/staging/iio/gyro/adis16130_core.c
> index 749240d..c9aaca9 100644
> --- a/drivers/staging/iio/gyro/adis16130_core.c
> +++ b/drivers/staging/iio/gyro/adis16130_core.c
> @@ -168,18 +168,7 @@ static struct spi_driver adis16130_driver = {
>        .probe = adis16130_probe,
>        .remove = __devexit_p(adis16130_remove),
>  };
> -
> -static __init int adis16130_init(void)
> -{
> -       return spi_register_driver(&adis16130_driver);
> -}
> -module_init(adis16130_init);
> -
> -static __exit void adis16130_exit(void)
> -{
> -       spi_unregister_driver(&adis16130_driver);
> -}
> -module_exit(adis16130_exit);
> +module_spi_driver(adis16130_driver);
>
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADIS16130 High Precision Angular Rate");
> diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
> index aaa3967..886dddf 100644
> --- a/drivers/staging/iio/gyro/adis16260_core.c
> +++ b/drivers/staging/iio/gyro/adis16260_core.c
> @@ -711,18 +711,7 @@ static struct spi_driver adis16260_driver = {
>        .remove = __devexit_p(adis16260_remove),
>        .id_table = adis16260_id,
>  };
> -
> -static __init int adis16260_init(void)
> -{
> -       return spi_register_driver(&adis16260_driver);
> -}
> -module_init(adis16260_init);
> -
> -static __exit void adis16260_exit(void)
> -{
> -       spi_unregister_driver(&adis16260_driver);
> -}
> -module_exit(adis16260_exit);
> +module_spi_driver(adis16260_driver);
>
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADIS16260/5 Digital Gyroscope Sensor");
> diff --git a/drivers/staging/iio/gyro/adxrs450_core.c b/drivers/staging/iio/gyro/adxrs450_core.c
> index 3c3ef79..70fd468 100644
> --- a/drivers/staging/iio/gyro/adxrs450_core.c
> +++ b/drivers/staging/iio/gyro/adxrs450_core.c
> @@ -381,18 +381,7 @@ static struct spi_driver adxrs450_driver = {
>        .probe = adxrs450_probe,
>        .remove = __devexit_p(adxrs450_remove),
>  };
> -
> -static __init int adxrs450_init(void)
> -{
> -       return spi_register_driver(&adxrs450_driver);
> -}
> -module_init(adxrs450_init);
> -
> -static __exit void adxrs450_exit(void)
> -{
> -       spi_unregister_driver(&adxrs450_driver);
> -}
> -module_exit(adxrs450_exit);
> +module_spi_driver(adxrs450_driver);
>
>  MODULE_AUTHOR("Cliff Cai <cliff.cai@xxxxxxxxxx>");
>  MODULE_DESCRIPTION("Analog Devices ADXRS450 Gyroscope SPI driver");
> diff --git a/drivers/staging/iio/imu/adis16400_core.c b/drivers/staging/iio/imu/adis16400_core.c
> index d082a37..efc0f65 100644
> --- a/drivers/staging/iio/imu/adis16400_core.c
> +++ b/drivers/staging/iio/imu/adis16400_core.c
> @@ -1128,18 +1128,7 @@ static struct spi_driver adis16400_driver = {
>        .probe = adis16400_probe,
>        .remove = __devexit_p(adis16400_remove),
>  };
> -
> -static __init int adis16400_init(void)
> -{
> -       return spi_register_driver(&adis16400_driver);
> -}
> -module_init(adis16400_init);
> -
> -static __exit void adis16400_exit(void)
> -{
> -       spi_unregister_driver(&adis16400_driver);
> -}
> -module_exit(adis16400_exit);
> +module_spi_driver(adis16400_driver);
>
>  MODULE_AUTHOR("Manuel Stahl <manuel.stahl@iis.fraunhofer.de>");
>  MODULE_DESCRIPTION("Analog Devices ADIS16400/5 IMU SPI driver");
> diff --git a/drivers/staging/iio/meter/ade7753.c b/drivers/staging/iio/meter/ade7753.c
> index 940fef6..4c7b0cb 100644
> --- a/drivers/staging/iio/meter/ade7753.c
> +++ b/drivers/staging/iio/meter/ade7753.c
> @@ -577,18 +577,7 @@ static struct spi_driver ade7753_driver = {
>        .probe = ade7753_probe,
>        .remove = __devexit_p(ade7753_remove),
>  };
> -
> -static __init int ade7753_init(void)
> -{
> -       return spi_register_driver(&ade7753_driver);
> -}
> -module_init(ade7753_init);
> -
> -static __exit void ade7753_exit(void)
> -{
> -       spi_unregister_driver(&ade7753_driver);
> -}
> -module_exit(ade7753_exit);
> +module_spi_driver(ade7753_driver);
>
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADE7753/6 Single-Phase Multifunction Meter");
> diff --git a/drivers/staging/iio/meter/ade7754.c b/drivers/staging/iio/meter/ade7754.c
> index 33f0d32..15c98cd 100644
> --- a/drivers/staging/iio/meter/ade7754.c
> +++ b/drivers/staging/iio/meter/ade7754.c
> @@ -600,18 +600,7 @@ static struct spi_driver ade7754_driver = {
>        .probe = ade7754_probe,
>        .remove = __devexit_p(ade7754_remove),
>  };
> -
> -static __init int ade7754_init(void)
> -{
> -       return spi_register_driver(&ade7754_driver);
> -}
> -module_init(ade7754_init);
> -
> -static __exit void ade7754_exit(void)
> -{
> -       spi_unregister_driver(&ade7754_driver);
> -}
> -module_exit(ade7754_exit);
> +module_spi_driver(ade7754_driver);
>
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADE7754 Polyphase Multifunction Energy Metering IC Driver");
> diff --git a/drivers/staging/iio/meter/ade7758_core.c b/drivers/staging/iio/meter/ade7758_core.c
> index c5dafbd..39338bc 100644
> --- a/drivers/staging/iio/meter/ade7758_core.c
> +++ b/drivers/staging/iio/meter/ade7758_core.c
> @@ -853,18 +853,7 @@ static struct spi_driver ade7758_driver = {
>        .remove = __devexit_p(ade7758_remove),
>        .id_table = ade7758_id,
>  };
> -
> -static __init int ade7758_init(void)
> -{
> -       return spi_register_driver(&ade7758_driver);
> -}
> -module_init(ade7758_init);
> -
> -static __exit void ade7758_exit(void)
> -{
> -       spi_unregister_driver(&ade7758_driver);
> -}
> -module_exit(ade7758_exit);
> +module_spi_driver(ade7758_driver);
>
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADE7758 Polyphase Multifunction Energy Metering IC Driver");
> diff --git a/drivers/staging/iio/meter/ade7759.c b/drivers/staging/iio/meter/ade7759.c
> index b691f10..cfa2a5e 100644
> --- a/drivers/staging/iio/meter/ade7759.c
> +++ b/drivers/staging/iio/meter/ade7759.c
> @@ -521,18 +521,7 @@ static struct spi_driver ade7759_driver = {
>        .probe = ade7759_probe,
>        .remove = __devexit_p(ade7759_remove),
>  };
> -
> -static __init int ade7759_init(void)
> -{
> -       return spi_register_driver(&ade7759_driver);
> -}
> -module_init(ade7759_init);
> -
> -static __exit void ade7759_exit(void)
> -{
> -       spi_unregister_driver(&ade7759_driver);
> -}
> -module_exit(ade7759_exit);
> +module_spi_driver(ade7759_driver);
>
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADE7759 Active Energy Metering IC Driver");
> diff --git a/drivers/staging/iio/meter/ade7854-spi.c b/drivers/staging/iio/meter/ade7854-spi.c
> index cfa23ba..c485a79 100644
> --- a/drivers/staging/iio/meter/ade7854-spi.c
> +++ b/drivers/staging/iio/meter/ade7854-spi.c
> @@ -353,18 +353,7 @@ static struct spi_driver ade7854_driver = {
>        .remove = __devexit_p(ade7854_spi_remove),
>        .id_table = ade7854_id,
>  };
> -
> -static __init int ade7854_init(void)
> -{
> -       return spi_register_driver(&ade7854_driver);
> -}
> -module_init(ade7854_init);
> -
> -static __exit void ade7854_exit(void)
> -{
> -       spi_unregister_driver(&ade7854_driver);
> -}
> -module_exit(ade7854_exit);
> +module_spi_driver(ade7854_driver);
>
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADE7854/58/68/78 SPI Driver");
> diff --git a/drivers/staging/iio/resolver/ad2s1200.c b/drivers/staging/iio/resolver/ad2s1200.c
> index d7ad46a..1c6a02b 100644
> --- a/drivers/staging/iio/resolver/ad2s1200.c
> +++ b/drivers/staging/iio/resolver/ad2s1200.c
> @@ -170,18 +170,7 @@ static struct spi_driver ad2s1200_driver = {
>        .remove = __devexit_p(ad2s1200_remove),
>        .id_table = ad2s1200_id,
>  };
> -
> -static __init int ad2s1200_spi_init(void)
> -{
> -       return spi_register_driver(&ad2s1200_driver);
> -}
> -module_init(ad2s1200_spi_init);
> -
> -static __exit void ad2s1200_spi_exit(void)
> -{
> -       spi_unregister_driver(&ad2s1200_driver);
> -}
> -module_exit(ad2s1200_spi_exit);
> +module_spi_driver(ad2s1200_driver);
>
>  MODULE_AUTHOR("Graff Yang <graff.yang@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices AD2S1200/1205 Resolver to Digital SPI driver");
> diff --git a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/staging/iio/resolver/ad2s1210.c
> index 6401a62..ff1b331 100644
> --- a/drivers/staging/iio/resolver/ad2s1210.c
> +++ b/drivers/staging/iio/resolver/ad2s1210.c
> @@ -759,18 +759,7 @@ static struct spi_driver ad2s1210_driver = {
>        .remove = __devexit_p(ad2s1210_remove),
>        .id_table = ad2s1210_id,
>  };
> -
> -static __init int ad2s1210_spi_init(void)
> -{
> -       return spi_register_driver(&ad2s1210_driver);
> -}
> -module_init(ad2s1210_spi_init);
> -
> -static __exit void ad2s1210_spi_exit(void)
> -{
> -       spi_unregister_driver(&ad2s1210_driver);
> -}
> -module_exit(ad2s1210_spi_exit);
> +module_spi_driver(ad2s1210_driver);
>
>  MODULE_AUTHOR("Graff Yang <graff.yang@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices AD2S1210 Resolver to Digital SPI driver");
> diff --git a/drivers/staging/iio/resolver/ad2s90.c b/drivers/staging/iio/resolver/ad2s90.c
> index a9200d9..6d07943 100644
> --- a/drivers/staging/iio/resolver/ad2s90.c
> +++ b/drivers/staging/iio/resolver/ad2s90.c
> @@ -119,18 +119,7 @@ static struct spi_driver ad2s90_driver = {
>        .remove = __devexit_p(ad2s90_remove),
>        .id_table = ad2s90_id,
>  };
> -
> -static __init int ad2s90_spi_init(void)
> -{
> -       return spi_register_driver(&ad2s90_driver);
> -}
> -module_init(ad2s90_spi_init);
> -
> -static __exit void ad2s90_spi_exit(void)
> -{
> -       spi_unregister_driver(&ad2s90_driver);
> -}
> -module_exit(ad2s90_spi_exit);
> +module_spi_driver(ad2s90_driver);
>
>  MODULE_AUTHOR("Graff Yang <graff.yang@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices AD2S90 Resolver to Digital SPI driver");
> --
> 1.7.7.1
>
>
>



-- 
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 0/5] Generalize module_platform_driver
  2011-11-16  9:13 [PATCH 0/5] Generalize module_platform_driver Lars-Peter Clausen
                   ` (5 preceding siblings ...)
  2011-11-16 16:02 ` [PATCH 0/5] Generalize module_platform_driver Greg KH
@ 2011-11-16 20:14 ` Wolfram Sang
  6 siblings, 0 replies; 26+ messages in thread
From: Wolfram Sang @ 2011-11-16 20:14 UTC (permalink / raw)
  To: Lars-Peter Clausen
  Cc: Greg Kroah-Hartman, Jean Delvare, Grant Likely, Jonathan Cameron,
	Michael Hennerich, linux-iio, linux-kernel, linux-i2c,
	spi-devel-general

[-- Attachment #1: Type: text/plain, Size: 630 bytes --]

On Wed, Nov 16, 2011 at 10:13:34AM +0100, Lars-Peter Clausen wrote:
> Grant Likely recently introduced the module_platform_driver macro which can be
> used to eliminate a few lines on boilerplate code in platform driver modules.
> The same approach can be used to do the same for other bus type drivers.

Cool, had the same thought when I saw Grant's series back then. Series looks
good to me, so for all patches:

Acked-by: Wolfram Sang <w.sang@pengutronix.de>

-- 
Pengutronix e.K.                           | Wolfram Sang                |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 2/5] I2C: Add helper macro for i2c_driver boilerplate
  2011-11-16 17:12   ` Grant Likely
@ 2011-11-17  6:47     ` Jonathan Cameron
  0 siblings, 0 replies; 26+ messages in thread
From: Jonathan Cameron @ 2011-11-17  6:47 UTC (permalink / raw)
  To: Grant Likely
  Cc: Lars-Peter Clausen, Greg Kroah-Hartman, Jean Delvare,
	Michael Hennerich, linux-iio, linux-kernel, linux-i2c,
	spi-devel-general

On 11/16/2011 05:12 PM, Grant Likely wrote:
> On Wed, Nov 16, 2011 at 2:13 AM, Lars-Peter Clausen <lars@metafoo.de> wrote:
>> This patch introduces the module_i2c_driver macro which is a convenience macro
>> for I2C driver modules similar to module_platform_driver. It is intended to be
>> used by drivers which init/exit section does nothing but register/unregister
>> the I2C driver. By using this macro it is possible to eliminate a few lines of
>> boilerplate code per I2C driver.
>>
>> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
> 
> Acked-by: Grant Likely <grant.likely@secretlab.ca>
Acked-by: Jonathan Cameron <jic23@cam.ac.uk>
> 
>> ---
>>  include/linux/i2c.h |   13 +++++++++++++
>>  1 files changed, 13 insertions(+), 0 deletions(-)
>>
>> diff --git a/include/linux/i2c.h b/include/linux/i2c.h
>> index a81bf6d..7e92854 100644
>> --- a/include/linux/i2c.h
>> +++ b/include/linux/i2c.h
>> @@ -485,6 +485,19 @@ static inline int i2c_adapter_id(struct i2c_adapter *adap)
>>  {
>>        return adap->nr;
>>  }
>> +
>> +/**
>> + * module_i2c_driver() - Helper macro for registering a I2C driver
>> + * @__i2c_driver: i2c_driver struct
>> + *
>> + * Helper macro for I2C drivers which do not do anything special in module
>> + * init/exit. This eliminates a lot of boilerplate. Each module may only
>> + * use this macro once, and calling it replaces module_init() and module_exit()
>> + */
>> +#define module_i2c_driver(__i2c_driver) \
>> +       module_driver(__i2c_driver, i2c_add_driver, \
>> +                       i2c_del_driver)
>> +
>>  #endif /* I2C */
>>  #endif /* __KERNEL__ */
>>
>> --
>> 1.7.7.1
>>
>>
>>
> 
> 
> 


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 5/5] staging:iio: Use module_spi_driver to register SPI driver
  2011-11-16 17:15   ` Grant Likely
@ 2011-11-17  6:48     ` Jonathan Cameron
  0 siblings, 0 replies; 26+ messages in thread
From: Jonathan Cameron @ 2011-11-17  6:48 UTC (permalink / raw)
  To: Grant Likely
  Cc: Lars-Peter Clausen, Greg Kroah-Hartman, Jean Delvare,
	Michael Hennerich, linux-iio, linux-kernel, linux-i2c,
	spi-devel-general

On 11/16/2011 05:15 PM, Grant Likely wrote:
> On Wed, Nov 16, 2011 at 2:13 AM, Lars-Peter Clausen <lars@metafoo.de> wrote:
>> Use the newly introduced module_spi_driver macro for registering SPI drivers.
>> This allows us to remove a few lines of boilerplate code.
>>
>> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
> 
> Acked-by: Grant Likely <grant.likely@secretlab.ca>
Acked-by: Jonathan Cameron <jic23@kernel.org>
> 
> g.
> 
>> ---
>>  drivers/staging/iio/accel/adis16201_core.c |   13 +------------
>>  drivers/staging/iio/accel/adis16203_core.c |   13 +------------
>>  drivers/staging/iio/accel/adis16204_core.c |   13 +------------
>>  drivers/staging/iio/accel/adis16209_core.c |   13 +------------
>>  drivers/staging/iio/accel/adis16220_core.c |   13 +------------
>>  drivers/staging/iio/accel/adis16240_core.c |   13 +------------
>>  drivers/staging/iio/accel/kxsd9.c          |   13 +------------
>>  drivers/staging/iio/accel/lis3l02dq_core.c |   13 +------------
>>  drivers/staging/iio/accel/sca3000_core.c   |   13 +------------
>>  drivers/staging/iio/adc/ad7192.c           |   13 +------------
>>  drivers/staging/iio/adc/ad7280a.c          |   13 +------------
>>  drivers/staging/iio/adc/ad7298_core.c      |   13 +------------
>>  drivers/staging/iio/adc/ad7476_core.c      |   13 +------------
>>  drivers/staging/iio/adc/ad7606_spi.c       |   13 +------------
>>  drivers/staging/iio/adc/ad7780.c           |   13 +------------
>>  drivers/staging/iio/adc/ad7793.c           |   13 +------------
>>  drivers/staging/iio/adc/ad7816.c           |   14 +-------------
>>  drivers/staging/iio/adc/ad7887_core.c      |   13 +------------
>>  drivers/staging/iio/adc/adt7310.c          |   14 +-------------
>>  drivers/staging/iio/addac/adt7316-spi.c    |   14 +-------------
>>  drivers/staging/iio/dac/ad5064.c           |   13 +------------
>>  drivers/staging/iio/dac/ad5360.c           |   13 +------------
>>  drivers/staging/iio/dac/ad5446.c           |   13 +------------
>>  drivers/staging/iio/dac/ad5504.c           |   13 +------------
>>  drivers/staging/iio/dac/ad5624r_spi.c      |   13 +------------
>>  drivers/staging/iio/dac/ad5686.c           |   13 +------------
>>  drivers/staging/iio/dac/ad5791.c           |   13 +------------
>>  drivers/staging/iio/dds/ad5930.c           |   13 +------------
>>  drivers/staging/iio/dds/ad9832.c           |   13 +------------
>>  drivers/staging/iio/dds/ad9834.c           |   13 +------------
>>  drivers/staging/iio/dds/ad9850.c           |   13 +------------
>>  drivers/staging/iio/dds/ad9852.c           |   13 +------------
>>  drivers/staging/iio/dds/ad9910.c           |   13 +------------
>>  drivers/staging/iio/dds/ad9951.c           |   13 +------------
>>  drivers/staging/iio/gyro/adis16080_core.c  |   13 +------------
>>  drivers/staging/iio/gyro/adis16130_core.c  |   13 +------------
>>  drivers/staging/iio/gyro/adis16260_core.c  |   13 +------------
>>  drivers/staging/iio/gyro/adxrs450_core.c   |   13 +------------
>>  drivers/staging/iio/imu/adis16400_core.c   |   13 +------------
>>  drivers/staging/iio/meter/ade7753.c        |   13 +------------
>>  drivers/staging/iio/meter/ade7754.c        |   13 +------------
>>  drivers/staging/iio/meter/ade7758_core.c   |   13 +------------
>>  drivers/staging/iio/meter/ade7759.c        |   13 +------------
>>  drivers/staging/iio/meter/ade7854-spi.c    |   13 +------------
>>  drivers/staging/iio/resolver/ad2s1200.c    |   13 +------------
>>  drivers/staging/iio/resolver/ad2s1210.c    |   13 +------------
>>  drivers/staging/iio/resolver/ad2s90.c      |   13 +------------
>>  47 files changed, 47 insertions(+), 567 deletions(-)
>>
>> diff --git a/drivers/staging/iio/accel/adis16201_core.c b/drivers/staging/iio/accel/adis16201_core.c
>> index 1c5dad5..97f747e 100644
>> --- a/drivers/staging/iio/accel/adis16201_core.c
>> +++ b/drivers/staging/iio/accel/adis16201_core.c
>> @@ -549,18 +549,7 @@ static struct spi_driver adis16201_driver = {
>>        .probe = adis16201_probe,
>>        .remove = __devexit_p(adis16201_remove),
>>  };
>> -
>> -static __init int adis16201_init(void)
>> -{
>> -       return spi_register_driver(&adis16201_driver);
>> -}
>> -module_init(adis16201_init);
>> -
>> -static __exit void adis16201_exit(void)
>> -{
>> -       spi_unregister_driver(&adis16201_driver);
>> -}
>> -module_exit(adis16201_exit);
>> +module_spi_driver(adis16201_driver);
>>
>>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>>  MODULE_DESCRIPTION("Analog Devices ADIS16201 Programmable Digital Vibration Sensor driver");
>> diff --git a/drivers/staging/iio/accel/adis16203_core.c b/drivers/staging/iio/accel/adis16203_core.c
>> index 8a33374..a6d6d27 100644
>> --- a/drivers/staging/iio/accel/adis16203_core.c
>> +++ b/drivers/staging/iio/accel/adis16203_core.c
>> @@ -504,18 +504,7 @@ static struct spi_driver adis16203_driver = {
>>        .probe = adis16203_probe,
>>        .remove = __devexit_p(adis16203_remove),
>>  };
>> -
>> -static __init int adis16203_init(void)
>> -{
>> -       return spi_register_driver(&adis16203_driver);
>> -}
>> -module_init(adis16203_init);
>> -
>> -static __exit void adis16203_exit(void)
>> -{
>> -       spi_unregister_driver(&adis16203_driver);
>> -}
>> -module_exit(adis16203_exit);
>> +module_spi_driver(adis16203_driver);
>>
>>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>>  MODULE_DESCRIPTION("Analog Devices ADIS16203 Programmable Digital Vibration Sensor driver");
>> diff --git a/drivers/staging/iio/accel/adis16204_core.c b/drivers/staging/iio/accel/adis16204_core.c
>> index 644ac8e..7ac5b4c 100644
>> --- a/drivers/staging/iio/accel/adis16204_core.c
>> +++ b/drivers/staging/iio/accel/adis16204_core.c
>> @@ -577,18 +577,7 @@ static struct spi_driver adis16204_driver = {
>>        .probe = adis16204_probe,
>>        .remove = __devexit_p(adis16204_remove),
>>  };
>> -
>> -static __init int adis16204_init(void)
>> -{
>> -       return spi_register_driver(&adis16204_driver);
>> -}
>> -module_init(adis16204_init);
>> -
>> -static __exit void adis16204_exit(void)
>> -{
>> -       spi_unregister_driver(&adis16204_driver);
>> -}
>> -module_exit(adis16204_exit);
>> +module_spi_driver(adis16204_driver);
>>
>>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>>  MODULE_DESCRIPTION("ADIS16204 High-g Digital Impact Sensor and Recorder");
>> diff --git a/drivers/staging/iio/accel/adis16209_core.c b/drivers/staging/iio/accel/adis16209_core.c
>> index 0a8571b..c03afbf 100644
>> --- a/drivers/staging/iio/accel/adis16209_core.c
>> +++ b/drivers/staging/iio/accel/adis16209_core.c
>> @@ -553,18 +553,7 @@ static struct spi_driver adis16209_driver = {
>>        .probe = adis16209_probe,
>>        .remove = __devexit_p(adis16209_remove),
>>  };
>> -
>> -static __init int adis16209_init(void)
>> -{
>> -       return spi_register_driver(&adis16209_driver);
>> -}
>> -module_init(adis16209_init);
>> -
>> -static __exit void adis16209_exit(void)
>> -{
>> -       spi_unregister_driver(&adis16209_driver);
>> -}
>> -module_exit(adis16209_exit);
>> +module_spi_driver(adis16209_driver);
>>
>>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>>  MODULE_DESCRIPTION("Analog Devices ADIS16209 Digital Vibration Sensor driver");
>> diff --git a/drivers/staging/iio/accel/adis16220_core.c b/drivers/staging/iio/accel/adis16220_core.c
>> index 6d4503d..73298e7 100644
>> --- a/drivers/staging/iio/accel/adis16220_core.c
>> +++ b/drivers/staging/iio/accel/adis16220_core.c
>> @@ -708,18 +708,7 @@ static struct spi_driver adis16220_driver = {
>>        .probe = adis16220_probe,
>>        .remove = __devexit_p(adis16220_remove),
>>  };
>> -
>> -static __init int adis16220_init(void)
>> -{
>> -       return spi_register_driver(&adis16220_driver);
>> -}
>> -module_init(adis16220_init);
>> -
>> -static __exit void adis16220_exit(void)
>> -{
>> -       spi_unregister_driver(&adis16220_driver);
>> -}
>> -module_exit(adis16220_exit);
>> +module_spi_driver(adis16220_driver);
>>
>>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>>  MODULE_DESCRIPTION("Analog Devices ADIS16220 Digital Vibration Sensor");
>> diff --git a/drivers/staging/iio/accel/adis16240_core.c b/drivers/staging/iio/accel/adis16240_core.c
>> index b8be292..88881b9 100644
>> --- a/drivers/staging/iio/accel/adis16240_core.c
>> +++ b/drivers/staging/iio/accel/adis16240_core.c
>> @@ -606,18 +606,7 @@ static struct spi_driver adis16240_driver = {
>>        .probe = adis16240_probe,
>>        .remove = __devexit_p(adis16240_remove),
>>  };
>> -
>> -static __init int adis16240_init(void)
>> -{
>> -       return spi_register_driver(&adis16240_driver);
>> -}
>> -module_init(adis16240_init);
>> -
>> -static __exit void adis16240_exit(void)
>> -{
>> -       spi_unregister_driver(&adis16240_driver);
>> -}
>> -module_exit(adis16240_exit);
>> +module_spi_driver(adis16240_driver);
>>
>>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>>  MODULE_DESCRIPTION("Analog Devices Programmable Impact Sensor and Recorder");
>> diff --git a/drivers/staging/iio/accel/kxsd9.c b/drivers/staging/iio/accel/kxsd9.c
>> index 5238503..cfce21c 100644
>> --- a/drivers/staging/iio/accel/kxsd9.c
>> +++ b/drivers/staging/iio/accel/kxsd9.c
>> @@ -280,18 +280,7 @@ static struct spi_driver kxsd9_driver = {
>>        .remove = __devexit_p(kxsd9_remove),
>>        .id_table = kxsd9_id,
>>  };
>> -
>> -static __init int kxsd9_spi_init(void)
>> -{
>> -       return spi_register_driver(&kxsd9_driver);
>> -}
>> -module_init(kxsd9_spi_init);
>> -
>> -static __exit void kxsd9_spi_exit(void)
>> -{
>> -       spi_unregister_driver(&kxsd9_driver);
>> -}
>> -module_exit(kxsd9_spi_exit);
>> +module_spi_driver(kxsd9_driver);
>>
>>  MODULE_AUTHOR("Jonathan Cameron <jic23@cam.ac.uk>");
>>  MODULE_DESCRIPTION("Kionix KXSD9 SPI driver");
>> diff --git a/drivers/staging/iio/accel/lis3l02dq_core.c b/drivers/staging/iio/accel/lis3l02dq_core.c
>> index 559545a..6877521 100644
>> --- a/drivers/staging/iio/accel/lis3l02dq_core.c
>> +++ b/drivers/staging/iio/accel/lis3l02dq_core.c
>> @@ -804,18 +804,7 @@ static struct spi_driver lis3l02dq_driver = {
>>        .probe = lis3l02dq_probe,
>>        .remove = __devexit_p(lis3l02dq_remove),
>>  };
>> -
>> -static __init int lis3l02dq_init(void)
>> -{
>> -       return spi_register_driver(&lis3l02dq_driver);
>> -}
>> -module_init(lis3l02dq_init);
>> -
>> -static __exit void lis3l02dq_exit(void)
>> -{
>> -       spi_unregister_driver(&lis3l02dq_driver);
>> -}
>> -module_exit(lis3l02dq_exit);
>> +module_spi_driver(lis3l02dq_driver);
>>
>>  MODULE_AUTHOR("Jonathan Cameron <jic23@cam.ac.uk>");
>>  MODULE_DESCRIPTION("ST LIS3L02DQ Accelerometer SPI driver");
>> diff --git a/drivers/staging/iio/accel/sca3000_core.c b/drivers/staging/iio/accel/sca3000_core.c
>> index a44a705..6c35907 100644
>> --- a/drivers/staging/iio/accel/sca3000_core.c
>> +++ b/drivers/staging/iio/accel/sca3000_core.c
>> @@ -1250,18 +1250,7 @@ static struct spi_driver sca3000_driver = {
>>        .remove = __devexit_p(sca3000_remove),
>>        .id_table = sca3000_id,
>>  };
>> -
>> -static __init int sca3000_init(void)
>> -{
>> -       return spi_register_driver(&sca3000_driver);
>> -}
>> -module_init(sca3000_init);
>> -
>> -static __exit void sca3000_exit(void)
>> -{
>> -       spi_unregister_driver(&sca3000_driver);
>> -}
>> -module_exit(sca3000_exit);
>> +module_spi_driver(sca3000_driver);
>>
>>  MODULE_AUTHOR("Jonathan Cameron <jic23@cam.ac.uk>");
>>  MODULE_DESCRIPTION("VTI SCA3000 Series Accelerometers SPI driver");
>> diff --git a/drivers/staging/iio/adc/ad7192.c b/drivers/staging/iio/adc/ad7192.c
>> index 31c376b..a6a4a4e 100644
>> --- a/drivers/staging/iio/adc/ad7192.c
>> +++ b/drivers/staging/iio/adc/ad7192.c
>> @@ -1161,18 +1161,7 @@ static struct spi_driver ad7192_driver = {
>>        .remove         = __devexit_p(ad7192_remove),
>>        .id_table       = ad7192_id,
>>  };
>> -
>> -static int __init ad7192_init(void)
>> -{
>> -       return spi_register_driver(&ad7192_driver);
>> -}
>> -module_init(ad7192_init);
>> -
>> -static void __exit ad7192_exit(void)
>> -{
>> -       spi_unregister_driver(&ad7192_driver);
>> -}
>> -module_exit(ad7192_exit);
>> +module_spi_driver(ad7192_driver);
>>
>>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>>  MODULE_DESCRIPTION("Analog Devices AD7190, AD7192, AD7195 ADC");
>> diff --git a/drivers/staging/iio/adc/ad7280a.c b/drivers/staging/iio/adc/ad7280a.c
>> index 372d059..dbaeae8 100644
>> --- a/drivers/staging/iio/adc/ad7280a.c
>> +++ b/drivers/staging/iio/adc/ad7280a.c
>> @@ -979,18 +979,7 @@ static struct spi_driver ad7280_driver = {
>>        .remove         = __devexit_p(ad7280_remove),
>>        .id_table       = ad7280_id,
>>  };
>> -
>> -static int __init ad7280_init(void)
>> -{
>> -       return spi_register_driver(&ad7280_driver);
>> -}
>> -module_init(ad7280_init);
>> -
>> -static void __exit ad7280_exit(void)
>> -{
>> -       spi_unregister_driver(&ad7280_driver);
>> -}
>> -module_exit(ad7280_exit);
>> +module_spi_driver(ad7280_driver);
>>
>>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>>  MODULE_DESCRIPTION("Analog Devices AD7280A");
>> diff --git a/drivers/staging/iio/adc/ad7298_core.c b/drivers/staging/iio/adc/ad7298_core.c
>> index c1de73a..a799bd1 100644
>> --- a/drivers/staging/iio/adc/ad7298_core.c
>> +++ b/drivers/staging/iio/adc/ad7298_core.c
>> @@ -276,18 +276,7 @@ static struct spi_driver ad7298_driver = {
>>        .remove         = __devexit_p(ad7298_remove),
>>        .id_table       = ad7298_id,
>>  };
>> -
>> -static int __init ad7298_init(void)
>> -{
>> -       return spi_register_driver(&ad7298_driver);
>> -}
>> -module_init(ad7298_init);
>> -
>> -static void __exit ad7298_exit(void)
>> -{
>> -       spi_unregister_driver(&ad7298_driver);
>> -}
>> -module_exit(ad7298_exit);
>> +module_spi_driver(ad7298_driver);
>>
>>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>>  MODULE_DESCRIPTION("Analog Devices AD7298 ADC");
>> diff --git a/drivers/staging/iio/adc/ad7476_core.c b/drivers/staging/iio/adc/ad7476_core.c
>> index fd79fac..0b58520 100644
>> --- a/drivers/staging/iio/adc/ad7476_core.c
>> +++ b/drivers/staging/iio/adc/ad7476_core.c
>> @@ -248,18 +248,7 @@ static struct spi_driver ad7476_driver = {
>>        .remove         = __devexit_p(ad7476_remove),
>>        .id_table       = ad7476_id,
>>  };
>> -
>> -static int __init ad7476_init(void)
>> -{
>> -       return spi_register_driver(&ad7476_driver);
>> -}
>> -module_init(ad7476_init);
>> -
>> -static void __exit ad7476_exit(void)
>> -{
>> -       spi_unregister_driver(&ad7476_driver);
>> -}
>> -module_exit(ad7476_exit);
>> +module_spi_driver(ad7476_driver);
>>
>>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>>  MODULE_DESCRIPTION("Analog Devices AD7475/6/7/8(A) AD7466/7/8 ADC");
>> diff --git a/drivers/staging/iio/adc/ad7606_spi.c b/drivers/staging/iio/adc/ad7606_spi.c
>> index aede1ba..b984bd2 100644
>> --- a/drivers/staging/iio/adc/ad7606_spi.c
>> +++ b/drivers/staging/iio/adc/ad7606_spi.c
>> @@ -109,18 +109,7 @@ static struct spi_driver ad7606_driver = {
>>        .remove = __devexit_p(ad7606_spi_remove),
>>        .id_table = ad7606_id,
>>  };
>> -
>> -static int __init ad7606_spi_init(void)
>> -{
>> -       return spi_register_driver(&ad7606_driver);
>> -}
>> -module_init(ad7606_spi_init);
>> -
>> -static void __exit ad7606_spi_exit(void)
>> -{
>> -       spi_unregister_driver(&ad7606_driver);
>> -}
>> -module_exit(ad7606_spi_exit);
>> +module_spi_driver(ad7606_driver);
>>
>>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>>  MODULE_DESCRIPTION("Analog Devices AD7606 ADC");
>> diff --git a/drivers/staging/iio/adc/ad7780.c b/drivers/staging/iio/adc/ad7780.c
>> index 7a579a1..ec90261 100644
>> --- a/drivers/staging/iio/adc/ad7780.c
>> +++ b/drivers/staging/iio/adc/ad7780.c
>> @@ -283,18 +283,7 @@ static struct spi_driver ad7780_driver = {
>>        .remove         = __devexit_p(ad7780_remove),
>>        .id_table       = ad7780_id,
>>  };
>> -
>> -static int __init ad7780_init(void)
>> -{
>> -       return spi_register_driver(&ad7780_driver);
>> -}
>> -module_init(ad7780_init);
>> -
>> -static void __exit ad7780_exit(void)
>> -{
>> -       spi_unregister_driver(&ad7780_driver);
>> -}
>> -module_exit(ad7780_exit);
>> +module_spi_driver(ad7780_driver);
>>
>>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>>  MODULE_DESCRIPTION("Analog Devices AD7780/1 ADC");
>> diff --git a/drivers/staging/iio/adc/ad7793.c b/drivers/staging/iio/adc/ad7793.c
>> index 999f8f7..1c5588e 100644
>> --- a/drivers/staging/iio/adc/ad7793.c
>> +++ b/drivers/staging/iio/adc/ad7793.c
>> @@ -1045,18 +1045,7 @@ static struct spi_driver ad7793_driver = {
>>        .remove         = __devexit_p(ad7793_remove),
>>        .id_table       = ad7793_id,
>>  };
>> -
>> -static int __init ad7793_init(void)
>> -{
>> -       return spi_register_driver(&ad7793_driver);
>> -}
>> -module_init(ad7793_init);
>> -
>> -static void __exit ad7793_exit(void)
>> -{
>> -       spi_unregister_driver(&ad7793_driver);
>> -}
>> -module_exit(ad7793_exit);
>> +module_spi_driver(ad7793_driver);
>>
>>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>>  MODULE_DESCRIPTION("Analog Devices AD7792/3 ADC");
>> diff --git a/drivers/staging/iio/adc/ad7816.c b/drivers/staging/iio/adc/ad7816.c
>> index bdb9049..acbf936 100644
>> --- a/drivers/staging/iio/adc/ad7816.c
>> +++ b/drivers/staging/iio/adc/ad7816.c
>> @@ -466,21 +466,9 @@ static struct spi_driver ad7816_driver = {
>>        .remove = __devexit_p(ad7816_remove),
>>        .id_table = ad7816_id,
>>  };
>> -
>> -static __init int ad7816_init(void)
>> -{
>> -       return spi_register_driver(&ad7816_driver);
>> -}
>> -
>> -static __exit void ad7816_exit(void)
>> -{
>> -       spi_unregister_driver(&ad7816_driver);
>> -}
>> +module_spi_driver(ad7816_driver);
>>
>>  MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>");
>>  MODULE_DESCRIPTION("Analog Devices AD7816/7/8 digital"
>>                        " temperature sensor driver");
>>  MODULE_LICENSE("GPL v2");
>> -
>> -module_init(ad7816_init);
>> -module_exit(ad7816_exit);
>> diff --git a/drivers/staging/iio/adc/ad7887_core.c b/drivers/staging/iio/adc/ad7887_core.c
>> index 609dcd5..91b8fb0 100644
>> --- a/drivers/staging/iio/adc/ad7887_core.c
>> +++ b/drivers/staging/iio/adc/ad7887_core.c
>> @@ -257,18 +257,7 @@ static struct spi_driver ad7887_driver = {
>>        .remove         = __devexit_p(ad7887_remove),
>>        .id_table       = ad7887_id,
>>  };
>> -
>> -static int __init ad7887_init(void)
>> -{
>> -       return spi_register_driver(&ad7887_driver);
>> -}
>> -module_init(ad7887_init);
>> -
>> -static void __exit ad7887_exit(void)
>> -{
>> -       spi_unregister_driver(&ad7887_driver);
>> -}
>> -module_exit(ad7887_exit);
>> +module_spi_driver(ad7887_driver);
>>
>>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>>  MODULE_DESCRIPTION("Analog Devices AD7887 ADC");
>> diff --git a/drivers/staging/iio/adc/adt7310.c b/drivers/staging/iio/adc/adt7310.c
>> index c9e0be3..bc307f3 100644
>> --- a/drivers/staging/iio/adc/adt7310.c
>> +++ b/drivers/staging/iio/adc/adt7310.c
>> @@ -884,21 +884,9 @@ static struct spi_driver adt7310_driver = {
>>        .remove = __devexit_p(adt7310_remove),
>>        .id_table = adt7310_id,
>>  };
>> -
>> -static __init int adt7310_init(void)
>> -{
>> -       return spi_register_driver(&adt7310_driver);
>> -}
>> -
>> -static __exit void adt7310_exit(void)
>> -{
>> -       spi_unregister_driver(&adt7310_driver);
>> -}
>> +module_spi_driver(adt7310_driver);
>>
>>  MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>");
>>  MODULE_DESCRIPTION("Analog Devices ADT7310 digital"
>>                        " temperature sensor driver");
>>  MODULE_LICENSE("GPL v2");
>> -
>> -module_init(adt7310_init);
>> -module_exit(adt7310_exit);
>> diff --git a/drivers/staging/iio/addac/adt7316-spi.c b/drivers/staging/iio/addac/adt7316-spi.c
>> index 369d4d0..1e93c7b 100644
>> --- a/drivers/staging/iio/addac/adt7316-spi.c
>> +++ b/drivers/staging/iio/addac/adt7316-spi.c
>> @@ -160,21 +160,9 @@ static struct spi_driver adt7316_driver = {
>>        .resume = adt7316_spi_resume,
>>        .id_table = adt7316_spi_id,
>>  };
>> -
>> -static __init int adt7316_spi_init(void)
>> -{
>> -       return spi_register_driver(&adt7316_driver);
>> -}
>> -
>> -static __exit void adt7316_spi_exit(void)
>> -{
>> -       spi_unregister_driver(&adt7316_driver);
>> -}
>> +module_spi_driver(adt7316_driver);
>>
>>  MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>");
>>  MODULE_DESCRIPTION("SPI bus driver for Analog Devices ADT7316/7/8 and"
>>                        "ADT7516/7/9 digital temperature sensor, ADC and DAC");
>>  MODULE_LICENSE("GPL v2");
>> -
>> -module_init(adt7316_spi_init);
>> -module_exit(adt7316_spi_exit);
>> diff --git a/drivers/staging/iio/dac/ad5064.c b/drivers/staging/iio/dac/ad5064.c
>> index 24279f2..39cfe6c 100644
>> --- a/drivers/staging/iio/dac/ad5064.c
>> +++ b/drivers/staging/iio/dac/ad5064.c
>> @@ -445,18 +445,7 @@ static struct spi_driver ad5064_driver = {
>>        .remove = __devexit_p(ad5064_remove),
>>        .id_table = ad5064_id,
>>  };
>> -
>> -static __init int ad5064_spi_init(void)
>> -{
>> -       return spi_register_driver(&ad5064_driver);
>> -}
>> -module_init(ad5064_spi_init);
>> -
>> -static __exit void ad5064_spi_exit(void)
>> -{
>> -       spi_unregister_driver(&ad5064_driver);
>> -}
>> -module_exit(ad5064_spi_exit);
>> +module_spi_driver(ad5064_driver);
>>
>>  MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
>>  MODULE_DESCRIPTION("Analog Devices AD5064/64-1/44/24 DAC");
>> diff --git a/drivers/staging/iio/dac/ad5360.c b/drivers/staging/iio/dac/ad5360.c
>> index 72d0f3f0..bc0459e 100644
>> --- a/drivers/staging/iio/dac/ad5360.c
>> +++ b/drivers/staging/iio/dac/ad5360.c
>> @@ -563,18 +563,7 @@ static struct spi_driver ad5360_driver = {
>>        .remove = __devexit_p(ad5360_remove),
>>        .id_table = ad5360_ids,
>>  };
>> -
>> -static __init int ad5360_spi_init(void)
>> -{
>> -       return spi_register_driver(&ad5360_driver);
>> -}
>> -module_init(ad5360_spi_init);
>> -
>> -static __exit void ad5360_spi_exit(void)
>> -{
>> -       spi_unregister_driver(&ad5360_driver);
>> -}
>> -module_exit(ad5360_spi_exit);
>> +module_spi_driver(ad5360_driver);
>>
>>  MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
>>  MODULE_DESCRIPTION("Analog Devices AD5360/61/62/63/70/71/72/73 DAC");
>> diff --git a/drivers/staging/iio/dac/ad5446.c b/drivers/staging/iio/dac/ad5446.c
>> index e1c204d..ac3bc5f 100644
>> --- a/drivers/staging/iio/dac/ad5446.c
>> +++ b/drivers/staging/iio/dac/ad5446.c
>> @@ -465,18 +465,7 @@ static struct spi_driver ad5446_driver = {
>>        .remove         = __devexit_p(ad5446_remove),
>>        .id_table       = ad5446_id,
>>  };
>> -
>> -static int __init ad5446_init(void)
>> -{
>> -       return spi_register_driver(&ad5446_driver);
>> -}
>> -module_init(ad5446_init);
>> -
>> -static void __exit ad5446_exit(void)
>> -{
>> -       spi_unregister_driver(&ad5446_driver);
>> -}
>> -module_exit(ad5446_exit);
>> +module_spi_driver(ad5446_driver);
>>
>>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>>  MODULE_DESCRIPTION("Analog Devices AD5444/AD5446 DAC");
>> diff --git a/drivers/staging/iio/dac/ad5504.c b/drivers/staging/iio/dac/ad5504.c
>> index 60dd640..57539ce 100644
>> --- a/drivers/staging/iio/dac/ad5504.c
>> +++ b/drivers/staging/iio/dac/ad5504.c
>> @@ -377,18 +377,7 @@ static struct spi_driver ad5504_driver = {
>>        .remove = __devexit_p(ad5504_remove),
>>        .id_table = ad5504_id,
>>  };
>> -
>> -static __init int ad5504_spi_init(void)
>> -{
>> -       return spi_register_driver(&ad5504_driver);
>> -}
>> -module_init(ad5504_spi_init);
>> -
>> -static __exit void ad5504_spi_exit(void)
>> -{
>> -       spi_unregister_driver(&ad5504_driver);
>> -}
>> -module_exit(ad5504_spi_exit);
>> +module_spi_driver(ad5504_driver);
>>
>>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>>  MODULE_DESCRIPTION("Analog Devices AD5501/AD5501 DAC");
>> diff --git a/drivers/staging/iio/dac/ad5624r_spi.c b/drivers/staging/iio/dac/ad5624r_spi.c
>> index 284d879..6e05f0d 100644
>> --- a/drivers/staging/iio/dac/ad5624r_spi.c
>> +++ b/drivers/staging/iio/dac/ad5624r_spi.c
>> @@ -317,18 +317,7 @@ static struct spi_driver ad5624r_driver = {
>>        .remove = __devexit_p(ad5624r_remove),
>>        .id_table = ad5624r_id,
>>  };
>> -
>> -static __init int ad5624r_spi_init(void)
>> -{
>> -       return spi_register_driver(&ad5624r_driver);
>> -}
>> -module_init(ad5624r_spi_init);
>> -
>> -static __exit void ad5624r_spi_exit(void)
>> -{
>> -       spi_unregister_driver(&ad5624r_driver);
>> -}
>> -module_exit(ad5624r_spi_exit);
>> +module_spi_driver(ad5624r_driver);
>>
>>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>>  MODULE_DESCRIPTION("Analog Devices AD5624/44/64R DAC spi driver");
>> diff --git a/drivers/staging/iio/dac/ad5686.c b/drivers/staging/iio/dac/ad5686.c
>> index 974c6f5..e72db2f 100644
>> --- a/drivers/staging/iio/dac/ad5686.c
>> +++ b/drivers/staging/iio/dac/ad5686.c
>> @@ -447,18 +447,7 @@ static struct spi_driver ad5686_driver = {
>>        .remove = __devexit_p(ad5686_remove),
>>        .id_table = ad5686_id,
>>  };
>> -
>> -static __init int ad5686_spi_init(void)
>> -{
>> -       return spi_register_driver(&ad5686_driver);
>> -}
>> -module_init(ad5686_spi_init);
>> -
>> -static __exit void ad5686_spi_exit(void)
>> -{
>> -       spi_unregister_driver(&ad5686_driver);
>> -}
>> -module_exit(ad5686_spi_exit);
>> +module_spi_driver(ad5686_driver);
>>
>>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>>  MODULE_DESCRIPTION("Analog Devices AD5686/85/84 DAC");
>> diff --git a/drivers/staging/iio/dac/ad5791.c b/drivers/staging/iio/dac/ad5791.c
>> index 6fbca8d..4a80fd8 100644
>> --- a/drivers/staging/iio/dac/ad5791.c
>> +++ b/drivers/staging/iio/dac/ad5791.c
>> @@ -410,18 +410,7 @@ static struct spi_driver ad5791_driver = {
>>        .remove = __devexit_p(ad5791_remove),
>>        .id_table = ad5791_id,
>>  };
>> -
>> -static __init int ad5791_spi_init(void)
>> -{
>> -       return spi_register_driver(&ad5791_driver);
>> -}
>> -module_init(ad5791_spi_init);
>> -
>> -static __exit void ad5791_spi_exit(void)
>> -{
>> -       spi_unregister_driver(&ad5791_driver);
>> -}
>> -module_exit(ad5791_spi_exit);
>> +module_spi_driver(ad5791_driver);
>>
>>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>>  MODULE_DESCRIPTION("Analog Devices AD5760/AD5780/AD5781/AD5791 DAC");
>> diff --git a/drivers/staging/iio/dds/ad5930.c b/drivers/staging/iio/dds/ad5930.c
>> index f5e368b..4a360d0 100644
>> --- a/drivers/staging/iio/dds/ad5930.c
>> +++ b/drivers/staging/iio/dds/ad5930.c
>> @@ -143,18 +143,7 @@ static struct spi_driver ad5930_driver = {
>>        .probe = ad5930_probe,
>>        .remove = __devexit_p(ad5930_remove),
>>  };
>> -
>> -static __init int ad5930_spi_init(void)
>> -{
>> -       return spi_register_driver(&ad5930_driver);
>> -}
>> -module_init(ad5930_spi_init);
>> -
>> -static __exit void ad5930_spi_exit(void)
>> -{
>> -       spi_unregister_driver(&ad5930_driver);
>> -}
>> -module_exit(ad5930_spi_exit);
>> +module_spi_driver(ad5930_driver);
>>
>>  MODULE_AUTHOR("Cliff Cai");
>>  MODULE_DESCRIPTION("Analog Devices ad5930 driver");
>> diff --git a/drivers/staging/iio/dds/ad9832.c b/drivers/staging/iio/dds/ad9832.c
>> index 9b4ff60..cc32fd6 100644
>> --- a/drivers/staging/iio/dds/ad9832.c
>> +++ b/drivers/staging/iio/dds/ad9832.c
>> @@ -355,18 +355,7 @@ static struct spi_driver ad9832_driver = {
>>        .remove         = __devexit_p(ad9832_remove),
>>        .id_table       = ad9832_id,
>>  };
>> -
>> -static int __init ad9832_init(void)
>> -{
>> -       return spi_register_driver(&ad9832_driver);
>> -}
>> -module_init(ad9832_init);
>> -
>> -static void __exit ad9832_exit(void)
>> -{
>> -       spi_unregister_driver(&ad9832_driver);
>> -}
>> -module_exit(ad9832_exit);
>> +module_spi_driver(ad9832_driver);
>>
>>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>>  MODULE_DESCRIPTION("Analog Devices AD9832/AD9835 DDS");
>> diff --git a/drivers/staging/iio/dds/ad9834.c b/drivers/staging/iio/dds/ad9834.c
>> index c468f69..2b31e35 100644
>> --- a/drivers/staging/iio/dds/ad9834.c
>> +++ b/drivers/staging/iio/dds/ad9834.c
>> @@ -446,18 +446,7 @@ static struct spi_driver ad9834_driver = {
>>        .remove         = __devexit_p(ad9834_remove),
>>        .id_table       = ad9834_id,
>>  };
>> -
>> -static int __init ad9834_init(void)
>> -{
>> -       return spi_register_driver(&ad9834_driver);
>> -}
>> -module_init(ad9834_init);
>> -
>> -static void __exit ad9834_exit(void)
>> -{
>> -       spi_unregister_driver(&ad9834_driver);
>> -}
>> -module_exit(ad9834_exit);
>> +module_spi_driver(ad9834_driver);
>>
>>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>>  MODULE_DESCRIPTION("Analog Devices AD9833/AD9834/AD9837/AD9838 DDS");
>> diff --git a/drivers/staging/iio/dds/ad9850.c b/drivers/staging/iio/dds/ad9850.c
>> index a14771b..f9c96af 100644
>> --- a/drivers/staging/iio/dds/ad9850.c
>> +++ b/drivers/staging/iio/dds/ad9850.c
>> @@ -129,18 +129,7 @@ static struct spi_driver ad9850_driver = {
>>        .probe = ad9850_probe,
>>        .remove = __devexit_p(ad9850_remove),
>>  };
>> -
>> -static __init int ad9850_spi_init(void)
>> -{
>> -       return spi_register_driver(&ad9850_driver);
>> -}
>> -module_init(ad9850_spi_init);
>> -
>> -static __exit void ad9850_spi_exit(void)
>> -{
>> -       spi_unregister_driver(&ad9850_driver);
>> -}
>> -module_exit(ad9850_spi_exit);
>> +module_spi_driver(ad9850_driver);
>>
>>  MODULE_AUTHOR("Cliff Cai");
>>  MODULE_DESCRIPTION("Analog Devices ad9850 driver");
>> diff --git a/drivers/staging/iio/dds/ad9852.c b/drivers/staging/iio/dds/ad9852.c
>> index cfceaa6..9fc73fd 100644
>> --- a/drivers/staging/iio/dds/ad9852.c
>> +++ b/drivers/staging/iio/dds/ad9852.c
>> @@ -280,18 +280,7 @@ static struct spi_driver ad9852_driver = {
>>        .probe = ad9852_probe,
>>        .remove = __devexit_p(ad9852_remove),
>>  };
>> -
>> -static __init int ad9852_spi_init(void)
>> -{
>> -       return spi_register_driver(&ad9852_driver);
>> -}
>> -module_init(ad9852_spi_init);
>> -
>> -static __exit void ad9852_spi_exit(void)
>> -{
>> -       spi_unregister_driver(&ad9852_driver);
>> -}
>> -module_exit(ad9852_spi_exit);
>> +module_spi_driver(ad9852_driver);
>>
>>  MODULE_AUTHOR("Cliff Cai");
>>  MODULE_DESCRIPTION("Analog Devices ad9852 driver");
>> diff --git a/drivers/staging/iio/dds/ad9910.c b/drivers/staging/iio/dds/ad9910.c
>> index da83d2b..57046b0 100644
>> --- a/drivers/staging/iio/dds/ad9910.c
>> +++ b/drivers/staging/iio/dds/ad9910.c
>> @@ -413,18 +413,7 @@ static struct spi_driver ad9910_driver = {
>>        .probe = ad9910_probe,
>>        .remove = __devexit_p(ad9910_remove),
>>  };
>> -
>> -static __init int ad9910_spi_init(void)
>> -{
>> -       return spi_register_driver(&ad9910_driver);
>> -}
>> -module_init(ad9910_spi_init);
>> -
>> -static __exit void ad9910_spi_exit(void)
>> -{
>> -       spi_unregister_driver(&ad9910_driver);
>> -}
>> -module_exit(ad9910_spi_exit);
>> +module_spi_driver(ad9910_driver);
>>
>>  MODULE_AUTHOR("Cliff Cai");
>>  MODULE_DESCRIPTION("Analog Devices ad9910 driver");
>> diff --git a/drivers/staging/iio/dds/ad9951.c b/drivers/staging/iio/dds/ad9951.c
>> index 20c1825..d29130e 100644
>> --- a/drivers/staging/iio/dds/ad9951.c
>> +++ b/drivers/staging/iio/dds/ad9951.c
>> @@ -224,18 +224,7 @@ static struct spi_driver ad9951_driver = {
>>        .probe = ad9951_probe,
>>        .remove = __devexit_p(ad9951_remove),
>>  };
>> -
>> -static __init int ad9951_spi_init(void)
>> -{
>> -       return spi_register_driver(&ad9951_driver);
>> -}
>> -module_init(ad9951_spi_init);
>> -
>> -static __exit void ad9951_spi_exit(void)
>> -{
>> -       spi_unregister_driver(&ad9951_driver);
>> -}
>> -module_exit(ad9951_spi_exit);
>> +module_spi_driver(ad9951_driver);
>>
>>  MODULE_AUTHOR("Cliff Cai");
>>  MODULE_DESCRIPTION("Analog Devices ad9951 driver");
>> diff --git a/drivers/staging/iio/gyro/adis16080_core.c b/drivers/staging/iio/gyro/adis16080_core.c
>> index 5d7a906..9405f2d 100644
>> --- a/drivers/staging/iio/gyro/adis16080_core.c
>> +++ b/drivers/staging/iio/gyro/adis16080_core.c
>> @@ -189,18 +189,7 @@ static struct spi_driver adis16080_driver = {
>>        .probe = adis16080_probe,
>>        .remove = __devexit_p(adis16080_remove),
>>  };
>> -
>> -static __init int adis16080_init(void)
>> -{
>> -       return spi_register_driver(&adis16080_driver);
>> -}
>> -module_init(adis16080_init);
>> -
>> -static __exit void adis16080_exit(void)
>> -{
>> -       spi_unregister_driver(&adis16080_driver);
>> -}
>> -module_exit(adis16080_exit);
>> +module_spi_driver(adis16080_driver);
>>
>>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>>  MODULE_DESCRIPTION("Analog Devices ADIS16080/100 Yaw Rate Gyroscope Driver");
>> diff --git a/drivers/staging/iio/gyro/adis16130_core.c b/drivers/staging/iio/gyro/adis16130_core.c
>> index 749240d..c9aaca9 100644
>> --- a/drivers/staging/iio/gyro/adis16130_core.c
>> +++ b/drivers/staging/iio/gyro/adis16130_core.c
>> @@ -168,18 +168,7 @@ static struct spi_driver adis16130_driver = {
>>        .probe = adis16130_probe,
>>        .remove = __devexit_p(adis16130_remove),
>>  };
>> -
>> -static __init int adis16130_init(void)
>> -{
>> -       return spi_register_driver(&adis16130_driver);
>> -}
>> -module_init(adis16130_init);
>> -
>> -static __exit void adis16130_exit(void)
>> -{
>> -       spi_unregister_driver(&adis16130_driver);
>> -}
>> -module_exit(adis16130_exit);
>> +module_spi_driver(adis16130_driver);
>>
>>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>>  MODULE_DESCRIPTION("Analog Devices ADIS16130 High Precision Angular Rate");
>> diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
>> index aaa3967..886dddf 100644
>> --- a/drivers/staging/iio/gyro/adis16260_core.c
>> +++ b/drivers/staging/iio/gyro/adis16260_core.c
>> @@ -711,18 +711,7 @@ static struct spi_driver adis16260_driver = {
>>        .remove = __devexit_p(adis16260_remove),
>>        .id_table = adis16260_id,
>>  };
>> -
>> -static __init int adis16260_init(void)
>> -{
>> -       return spi_register_driver(&adis16260_driver);
>> -}
>> -module_init(adis16260_init);
>> -
>> -static __exit void adis16260_exit(void)
>> -{
>> -       spi_unregister_driver(&adis16260_driver);
>> -}
>> -module_exit(adis16260_exit);
>> +module_spi_driver(adis16260_driver);
>>
>>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>>  MODULE_DESCRIPTION("Analog Devices ADIS16260/5 Digital Gyroscope Sensor");
>> diff --git a/drivers/staging/iio/gyro/adxrs450_core.c b/drivers/staging/iio/gyro/adxrs450_core.c
>> index 3c3ef79..70fd468 100644
>> --- a/drivers/staging/iio/gyro/adxrs450_core.c
>> +++ b/drivers/staging/iio/gyro/adxrs450_core.c
>> @@ -381,18 +381,7 @@ static struct spi_driver adxrs450_driver = {
>>        .probe = adxrs450_probe,
>>        .remove = __devexit_p(adxrs450_remove),
>>  };
>> -
>> -static __init int adxrs450_init(void)
>> -{
>> -       return spi_register_driver(&adxrs450_driver);
>> -}
>> -module_init(adxrs450_init);
>> -
>> -static __exit void adxrs450_exit(void)
>> -{
>> -       spi_unregister_driver(&adxrs450_driver);
>> -}
>> -module_exit(adxrs450_exit);
>> +module_spi_driver(adxrs450_driver);
>>
>>  MODULE_AUTHOR("Cliff Cai <cliff.cai@xxxxxxxxxx>");
>>  MODULE_DESCRIPTION("Analog Devices ADXRS450 Gyroscope SPI driver");
>> diff --git a/drivers/staging/iio/imu/adis16400_core.c b/drivers/staging/iio/imu/adis16400_core.c
>> index d082a37..efc0f65 100644
>> --- a/drivers/staging/iio/imu/adis16400_core.c
>> +++ b/drivers/staging/iio/imu/adis16400_core.c
>> @@ -1128,18 +1128,7 @@ static struct spi_driver adis16400_driver = {
>>        .probe = adis16400_probe,
>>        .remove = __devexit_p(adis16400_remove),
>>  };
>> -
>> -static __init int adis16400_init(void)
>> -{
>> -       return spi_register_driver(&adis16400_driver);
>> -}
>> -module_init(adis16400_init);
>> -
>> -static __exit void adis16400_exit(void)
>> -{
>> -       spi_unregister_driver(&adis16400_driver);
>> -}
>> -module_exit(adis16400_exit);
>> +module_spi_driver(adis16400_driver);
>>
>>  MODULE_AUTHOR("Manuel Stahl <manuel.stahl@iis.fraunhofer.de>");
>>  MODULE_DESCRIPTION("Analog Devices ADIS16400/5 IMU SPI driver");
>> diff --git a/drivers/staging/iio/meter/ade7753.c b/drivers/staging/iio/meter/ade7753.c
>> index 940fef6..4c7b0cb 100644
>> --- a/drivers/staging/iio/meter/ade7753.c
>> +++ b/drivers/staging/iio/meter/ade7753.c
>> @@ -577,18 +577,7 @@ static struct spi_driver ade7753_driver = {
>>        .probe = ade7753_probe,
>>        .remove = __devexit_p(ade7753_remove),
>>  };
>> -
>> -static __init int ade7753_init(void)
>> -{
>> -       return spi_register_driver(&ade7753_driver);
>> -}
>> -module_init(ade7753_init);
>> -
>> -static __exit void ade7753_exit(void)
>> -{
>> -       spi_unregister_driver(&ade7753_driver);
>> -}
>> -module_exit(ade7753_exit);
>> +module_spi_driver(ade7753_driver);
>>
>>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>>  MODULE_DESCRIPTION("Analog Devices ADE7753/6 Single-Phase Multifunction Meter");
>> diff --git a/drivers/staging/iio/meter/ade7754.c b/drivers/staging/iio/meter/ade7754.c
>> index 33f0d32..15c98cd 100644
>> --- a/drivers/staging/iio/meter/ade7754.c
>> +++ b/drivers/staging/iio/meter/ade7754.c
>> @@ -600,18 +600,7 @@ static struct spi_driver ade7754_driver = {
>>        .probe = ade7754_probe,
>>        .remove = __devexit_p(ade7754_remove),
>>  };
>> -
>> -static __init int ade7754_init(void)
>> -{
>> -       return spi_register_driver(&ade7754_driver);
>> -}
>> -module_init(ade7754_init);
>> -
>> -static __exit void ade7754_exit(void)
>> -{
>> -       spi_unregister_driver(&ade7754_driver);
>> -}
>> -module_exit(ade7754_exit);
>> +module_spi_driver(ade7754_driver);
>>
>>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>>  MODULE_DESCRIPTION("Analog Devices ADE7754 Polyphase Multifunction Energy Metering IC Driver");
>> diff --git a/drivers/staging/iio/meter/ade7758_core.c b/drivers/staging/iio/meter/ade7758_core.c
>> index c5dafbd..39338bc 100644
>> --- a/drivers/staging/iio/meter/ade7758_core.c
>> +++ b/drivers/staging/iio/meter/ade7758_core.c
>> @@ -853,18 +853,7 @@ static struct spi_driver ade7758_driver = {
>>        .remove = __devexit_p(ade7758_remove),
>>        .id_table = ade7758_id,
>>  };
>> -
>> -static __init int ade7758_init(void)
>> -{
>> -       return spi_register_driver(&ade7758_driver);
>> -}
>> -module_init(ade7758_init);
>> -
>> -static __exit void ade7758_exit(void)
>> -{
>> -       spi_unregister_driver(&ade7758_driver);
>> -}
>> -module_exit(ade7758_exit);
>> +module_spi_driver(ade7758_driver);
>>
>>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>>  MODULE_DESCRIPTION("Analog Devices ADE7758 Polyphase Multifunction Energy Metering IC Driver");
>> diff --git a/drivers/staging/iio/meter/ade7759.c b/drivers/staging/iio/meter/ade7759.c
>> index b691f10..cfa2a5e 100644
>> --- a/drivers/staging/iio/meter/ade7759.c
>> +++ b/drivers/staging/iio/meter/ade7759.c
>> @@ -521,18 +521,7 @@ static struct spi_driver ade7759_driver = {
>>        .probe = ade7759_probe,
>>        .remove = __devexit_p(ade7759_remove),
>>  };
>> -
>> -static __init int ade7759_init(void)
>> -{
>> -       return spi_register_driver(&ade7759_driver);
>> -}
>> -module_init(ade7759_init);
>> -
>> -static __exit void ade7759_exit(void)
>> -{
>> -       spi_unregister_driver(&ade7759_driver);
>> -}
>> -module_exit(ade7759_exit);
>> +module_spi_driver(ade7759_driver);
>>
>>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>>  MODULE_DESCRIPTION("Analog Devices ADE7759 Active Energy Metering IC Driver");
>> diff --git a/drivers/staging/iio/meter/ade7854-spi.c b/drivers/staging/iio/meter/ade7854-spi.c
>> index cfa23ba..c485a79 100644
>> --- a/drivers/staging/iio/meter/ade7854-spi.c
>> +++ b/drivers/staging/iio/meter/ade7854-spi.c
>> @@ -353,18 +353,7 @@ static struct spi_driver ade7854_driver = {
>>        .remove = __devexit_p(ade7854_spi_remove),
>>        .id_table = ade7854_id,
>>  };
>> -
>> -static __init int ade7854_init(void)
>> -{
>> -       return spi_register_driver(&ade7854_driver);
>> -}
>> -module_init(ade7854_init);
>> -
>> -static __exit void ade7854_exit(void)
>> -{
>> -       spi_unregister_driver(&ade7854_driver);
>> -}
>> -module_exit(ade7854_exit);
>> +module_spi_driver(ade7854_driver);
>>
>>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>>  MODULE_DESCRIPTION("Analog Devices ADE7854/58/68/78 SPI Driver");
>> diff --git a/drivers/staging/iio/resolver/ad2s1200.c b/drivers/staging/iio/resolver/ad2s1200.c
>> index d7ad46a..1c6a02b 100644
>> --- a/drivers/staging/iio/resolver/ad2s1200.c
>> +++ b/drivers/staging/iio/resolver/ad2s1200.c
>> @@ -170,18 +170,7 @@ static struct spi_driver ad2s1200_driver = {
>>        .remove = __devexit_p(ad2s1200_remove),
>>        .id_table = ad2s1200_id,
>>  };
>> -
>> -static __init int ad2s1200_spi_init(void)
>> -{
>> -       return spi_register_driver(&ad2s1200_driver);
>> -}
>> -module_init(ad2s1200_spi_init);
>> -
>> -static __exit void ad2s1200_spi_exit(void)
>> -{
>> -       spi_unregister_driver(&ad2s1200_driver);
>> -}
>> -module_exit(ad2s1200_spi_exit);
>> +module_spi_driver(ad2s1200_driver);
>>
>>  MODULE_AUTHOR("Graff Yang <graff.yang@gmail.com>");
>>  MODULE_DESCRIPTION("Analog Devices AD2S1200/1205 Resolver to Digital SPI driver");
>> diff --git a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/staging/iio/resolver/ad2s1210.c
>> index 6401a62..ff1b331 100644
>> --- a/drivers/staging/iio/resolver/ad2s1210.c
>> +++ b/drivers/staging/iio/resolver/ad2s1210.c
>> @@ -759,18 +759,7 @@ static struct spi_driver ad2s1210_driver = {
>>        .remove = __devexit_p(ad2s1210_remove),
>>        .id_table = ad2s1210_id,
>>  };
>> -
>> -static __init int ad2s1210_spi_init(void)
>> -{
>> -       return spi_register_driver(&ad2s1210_driver);
>> -}
>> -module_init(ad2s1210_spi_init);
>> -
>> -static __exit void ad2s1210_spi_exit(void)
>> -{
>> -       spi_unregister_driver(&ad2s1210_driver);
>> -}
>> -module_exit(ad2s1210_spi_exit);
>> +module_spi_driver(ad2s1210_driver);
>>
>>  MODULE_AUTHOR("Graff Yang <graff.yang@gmail.com>");
>>  MODULE_DESCRIPTION("Analog Devices AD2S1210 Resolver to Digital SPI driver");
>> diff --git a/drivers/staging/iio/resolver/ad2s90.c b/drivers/staging/iio/resolver/ad2s90.c
>> index a9200d9..6d07943 100644
>> --- a/drivers/staging/iio/resolver/ad2s90.c
>> +++ b/drivers/staging/iio/resolver/ad2s90.c
>> @@ -119,18 +119,7 @@ static struct spi_driver ad2s90_driver = {
>>        .remove = __devexit_p(ad2s90_remove),
>>        .id_table = ad2s90_id,
>>  };
>> -
>> -static __init int ad2s90_spi_init(void)
>> -{
>> -       return spi_register_driver(&ad2s90_driver);
>> -}
>> -module_init(ad2s90_spi_init);
>> -
>> -static __exit void ad2s90_spi_exit(void)
>> -{
>> -       spi_unregister_driver(&ad2s90_driver);
>> -}
>> -module_exit(ad2s90_spi_exit);
>> +module_spi_driver(ad2s90_driver);
>>
>>  MODULE_AUTHOR("Graff Yang <graff.yang@gmail.com>");
>>  MODULE_DESCRIPTION("Analog Devices AD2S90 Resolver to Digital SPI driver");
>> --
>> 1.7.7.1
>>
>>
>>
> 
> 
> 


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 5/5] staging:iio: Use module_spi_driver to register SPI driver
  2011-11-16  9:13 ` [PATCH 5/5] staging:iio: Use module_spi_driver to register SPI driver Lars-Peter Clausen
  2011-11-16 17:15   ` Grant Likely
@ 2011-11-17  6:49   ` Jonathan Cameron
  1 sibling, 0 replies; 26+ messages in thread
From: Jonathan Cameron @ 2011-11-17  6:49 UTC (permalink / raw)
  To: Lars-Peter Clausen
  Cc: Greg Kroah-Hartman, Jean Delvare, Grant Likely,
	Michael Hennerich, linux-iio, linux-kernel, linux-i2c,
	spi-devel-general

On 11/16/2011 09:13 AM, Lars-Peter Clausen wrote:
> Use the newly introduced module_spi_driver macro for registering SPI drivers.
> This allows us to remove a few lines of boilerplate code.
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Jonathan Cameron <jic23@kernel.org>
> ---
>  drivers/staging/iio/accel/adis16201_core.c |   13 +------------
>  drivers/staging/iio/accel/adis16203_core.c |   13 +------------
>  drivers/staging/iio/accel/adis16204_core.c |   13 +------------
>  drivers/staging/iio/accel/adis16209_core.c |   13 +------------
>  drivers/staging/iio/accel/adis16220_core.c |   13 +------------
>  drivers/staging/iio/accel/adis16240_core.c |   13 +------------
>  drivers/staging/iio/accel/kxsd9.c          |   13 +------------
>  drivers/staging/iio/accel/lis3l02dq_core.c |   13 +------------
>  drivers/staging/iio/accel/sca3000_core.c   |   13 +------------
>  drivers/staging/iio/adc/ad7192.c           |   13 +------------
>  drivers/staging/iio/adc/ad7280a.c          |   13 +------------
>  drivers/staging/iio/adc/ad7298_core.c      |   13 +------------
>  drivers/staging/iio/adc/ad7476_core.c      |   13 +------------
>  drivers/staging/iio/adc/ad7606_spi.c       |   13 +------------
>  drivers/staging/iio/adc/ad7780.c           |   13 +------------
>  drivers/staging/iio/adc/ad7793.c           |   13 +------------
>  drivers/staging/iio/adc/ad7816.c           |   14 +-------------
>  drivers/staging/iio/adc/ad7887_core.c      |   13 +------------
>  drivers/staging/iio/adc/adt7310.c          |   14 +-------------
>  drivers/staging/iio/addac/adt7316-spi.c    |   14 +-------------
>  drivers/staging/iio/dac/ad5064.c           |   13 +------------
>  drivers/staging/iio/dac/ad5360.c           |   13 +------------
>  drivers/staging/iio/dac/ad5446.c           |   13 +------------
>  drivers/staging/iio/dac/ad5504.c           |   13 +------------
>  drivers/staging/iio/dac/ad5624r_spi.c      |   13 +------------
>  drivers/staging/iio/dac/ad5686.c           |   13 +------------
>  drivers/staging/iio/dac/ad5791.c           |   13 +------------
>  drivers/staging/iio/dds/ad5930.c           |   13 +------------
>  drivers/staging/iio/dds/ad9832.c           |   13 +------------
>  drivers/staging/iio/dds/ad9834.c           |   13 +------------
>  drivers/staging/iio/dds/ad9850.c           |   13 +------------
>  drivers/staging/iio/dds/ad9852.c           |   13 +------------
>  drivers/staging/iio/dds/ad9910.c           |   13 +------------
>  drivers/staging/iio/dds/ad9951.c           |   13 +------------
>  drivers/staging/iio/gyro/adis16080_core.c  |   13 +------------
>  drivers/staging/iio/gyro/adis16130_core.c  |   13 +------------
>  drivers/staging/iio/gyro/adis16260_core.c  |   13 +------------
>  drivers/staging/iio/gyro/adxrs450_core.c   |   13 +------------
>  drivers/staging/iio/imu/adis16400_core.c   |   13 +------------
>  drivers/staging/iio/meter/ade7753.c        |   13 +------------
>  drivers/staging/iio/meter/ade7754.c        |   13 +------------
>  drivers/staging/iio/meter/ade7758_core.c   |   13 +------------
>  drivers/staging/iio/meter/ade7759.c        |   13 +------------
>  drivers/staging/iio/meter/ade7854-spi.c    |   13 +------------
>  drivers/staging/iio/resolver/ad2s1200.c    |   13 +------------
>  drivers/staging/iio/resolver/ad2s1210.c    |   13 +------------
>  drivers/staging/iio/resolver/ad2s90.c      |   13 +------------
>  47 files changed, 47 insertions(+), 567 deletions(-)
> 
> diff --git a/drivers/staging/iio/accel/adis16201_core.c b/drivers/staging/iio/accel/adis16201_core.c
> index 1c5dad5..97f747e 100644
> --- a/drivers/staging/iio/accel/adis16201_core.c
> +++ b/drivers/staging/iio/accel/adis16201_core.c
> @@ -549,18 +549,7 @@ static struct spi_driver adis16201_driver = {
>  	.probe = adis16201_probe,
>  	.remove = __devexit_p(adis16201_remove),
>  };
> -
> -static __init int adis16201_init(void)
> -{
> -	return spi_register_driver(&adis16201_driver);
> -}
> -module_init(adis16201_init);
> -
> -static __exit void adis16201_exit(void)
> -{
> -	spi_unregister_driver(&adis16201_driver);
> -}
> -module_exit(adis16201_exit);
> +module_spi_driver(adis16201_driver);
>  
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADIS16201 Programmable Digital Vibration Sensor driver");
> diff --git a/drivers/staging/iio/accel/adis16203_core.c b/drivers/staging/iio/accel/adis16203_core.c
> index 8a33374..a6d6d27 100644
> --- a/drivers/staging/iio/accel/adis16203_core.c
> +++ b/drivers/staging/iio/accel/adis16203_core.c
> @@ -504,18 +504,7 @@ static struct spi_driver adis16203_driver = {
>  	.probe = adis16203_probe,
>  	.remove = __devexit_p(adis16203_remove),
>  };
> -
> -static __init int adis16203_init(void)
> -{
> -	return spi_register_driver(&adis16203_driver);
> -}
> -module_init(adis16203_init);
> -
> -static __exit void adis16203_exit(void)
> -{
> -	spi_unregister_driver(&adis16203_driver);
> -}
> -module_exit(adis16203_exit);
> +module_spi_driver(adis16203_driver);
>  
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADIS16203 Programmable Digital Vibration Sensor driver");
> diff --git a/drivers/staging/iio/accel/adis16204_core.c b/drivers/staging/iio/accel/adis16204_core.c
> index 644ac8e..7ac5b4c 100644
> --- a/drivers/staging/iio/accel/adis16204_core.c
> +++ b/drivers/staging/iio/accel/adis16204_core.c
> @@ -577,18 +577,7 @@ static struct spi_driver adis16204_driver = {
>  	.probe = adis16204_probe,
>  	.remove = __devexit_p(adis16204_remove),
>  };
> -
> -static __init int adis16204_init(void)
> -{
> -	return spi_register_driver(&adis16204_driver);
> -}
> -module_init(adis16204_init);
> -
> -static __exit void adis16204_exit(void)
> -{
> -	spi_unregister_driver(&adis16204_driver);
> -}
> -module_exit(adis16204_exit);
> +module_spi_driver(adis16204_driver);
>  
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("ADIS16204 High-g Digital Impact Sensor and Recorder");
> diff --git a/drivers/staging/iio/accel/adis16209_core.c b/drivers/staging/iio/accel/adis16209_core.c
> index 0a8571b..c03afbf 100644
> --- a/drivers/staging/iio/accel/adis16209_core.c
> +++ b/drivers/staging/iio/accel/adis16209_core.c
> @@ -553,18 +553,7 @@ static struct spi_driver adis16209_driver = {
>  	.probe = adis16209_probe,
>  	.remove = __devexit_p(adis16209_remove),
>  };
> -
> -static __init int adis16209_init(void)
> -{
> -	return spi_register_driver(&adis16209_driver);
> -}
> -module_init(adis16209_init);
> -
> -static __exit void adis16209_exit(void)
> -{
> -	spi_unregister_driver(&adis16209_driver);
> -}
> -module_exit(adis16209_exit);
> +module_spi_driver(adis16209_driver);
>  
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADIS16209 Digital Vibration Sensor driver");
> diff --git a/drivers/staging/iio/accel/adis16220_core.c b/drivers/staging/iio/accel/adis16220_core.c
> index 6d4503d..73298e7 100644
> --- a/drivers/staging/iio/accel/adis16220_core.c
> +++ b/drivers/staging/iio/accel/adis16220_core.c
> @@ -708,18 +708,7 @@ static struct spi_driver adis16220_driver = {
>  	.probe = adis16220_probe,
>  	.remove = __devexit_p(adis16220_remove),
>  };
> -
> -static __init int adis16220_init(void)
> -{
> -	return spi_register_driver(&adis16220_driver);
> -}
> -module_init(adis16220_init);
> -
> -static __exit void adis16220_exit(void)
> -{
> -	spi_unregister_driver(&adis16220_driver);
> -}
> -module_exit(adis16220_exit);
> +module_spi_driver(adis16220_driver);
>  
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADIS16220 Digital Vibration Sensor");
> diff --git a/drivers/staging/iio/accel/adis16240_core.c b/drivers/staging/iio/accel/adis16240_core.c
> index b8be292..88881b9 100644
> --- a/drivers/staging/iio/accel/adis16240_core.c
> +++ b/drivers/staging/iio/accel/adis16240_core.c
> @@ -606,18 +606,7 @@ static struct spi_driver adis16240_driver = {
>  	.probe = adis16240_probe,
>  	.remove = __devexit_p(adis16240_remove),
>  };
> -
> -static __init int adis16240_init(void)
> -{
> -	return spi_register_driver(&adis16240_driver);
> -}
> -module_init(adis16240_init);
> -
> -static __exit void adis16240_exit(void)
> -{
> -	spi_unregister_driver(&adis16240_driver);
> -}
> -module_exit(adis16240_exit);
> +module_spi_driver(adis16240_driver);
>  
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices Programmable Impact Sensor and Recorder");
> diff --git a/drivers/staging/iio/accel/kxsd9.c b/drivers/staging/iio/accel/kxsd9.c
> index 5238503..cfce21c 100644
> --- a/drivers/staging/iio/accel/kxsd9.c
> +++ b/drivers/staging/iio/accel/kxsd9.c
> @@ -280,18 +280,7 @@ static struct spi_driver kxsd9_driver = {
>  	.remove = __devexit_p(kxsd9_remove),
>  	.id_table = kxsd9_id,
>  };
> -
> -static __init int kxsd9_spi_init(void)
> -{
> -	return spi_register_driver(&kxsd9_driver);
> -}
> -module_init(kxsd9_spi_init);
> -
> -static __exit void kxsd9_spi_exit(void)
> -{
> -	spi_unregister_driver(&kxsd9_driver);
> -}
> -module_exit(kxsd9_spi_exit);
> +module_spi_driver(kxsd9_driver);
>  
>  MODULE_AUTHOR("Jonathan Cameron <jic23@cam.ac.uk>");
>  MODULE_DESCRIPTION("Kionix KXSD9 SPI driver");
> diff --git a/drivers/staging/iio/accel/lis3l02dq_core.c b/drivers/staging/iio/accel/lis3l02dq_core.c
> index 559545a..6877521 100644
> --- a/drivers/staging/iio/accel/lis3l02dq_core.c
> +++ b/drivers/staging/iio/accel/lis3l02dq_core.c
> @@ -804,18 +804,7 @@ static struct spi_driver lis3l02dq_driver = {
>  	.probe = lis3l02dq_probe,
>  	.remove = __devexit_p(lis3l02dq_remove),
>  };
> -
> -static __init int lis3l02dq_init(void)
> -{
> -	return spi_register_driver(&lis3l02dq_driver);
> -}
> -module_init(lis3l02dq_init);
> -
> -static __exit void lis3l02dq_exit(void)
> -{
> -	spi_unregister_driver(&lis3l02dq_driver);
> -}
> -module_exit(lis3l02dq_exit);
> +module_spi_driver(lis3l02dq_driver);
>  
>  MODULE_AUTHOR("Jonathan Cameron <jic23@cam.ac.uk>");
>  MODULE_DESCRIPTION("ST LIS3L02DQ Accelerometer SPI driver");
> diff --git a/drivers/staging/iio/accel/sca3000_core.c b/drivers/staging/iio/accel/sca3000_core.c
> index a44a705..6c35907 100644
> --- a/drivers/staging/iio/accel/sca3000_core.c
> +++ b/drivers/staging/iio/accel/sca3000_core.c
> @@ -1250,18 +1250,7 @@ static struct spi_driver sca3000_driver = {
>  	.remove = __devexit_p(sca3000_remove),
>  	.id_table = sca3000_id,
>  };
> -
> -static __init int sca3000_init(void)
> -{
> -	return spi_register_driver(&sca3000_driver);
> -}
> -module_init(sca3000_init);
> -
> -static __exit void sca3000_exit(void)
> -{
> -	spi_unregister_driver(&sca3000_driver);
> -}
> -module_exit(sca3000_exit);
> +module_spi_driver(sca3000_driver);
>  
>  MODULE_AUTHOR("Jonathan Cameron <jic23@cam.ac.uk>");
>  MODULE_DESCRIPTION("VTI SCA3000 Series Accelerometers SPI driver");
> diff --git a/drivers/staging/iio/adc/ad7192.c b/drivers/staging/iio/adc/ad7192.c
> index 31c376b..a6a4a4e 100644
> --- a/drivers/staging/iio/adc/ad7192.c
> +++ b/drivers/staging/iio/adc/ad7192.c
> @@ -1161,18 +1161,7 @@ static struct spi_driver ad7192_driver = {
>  	.remove		= __devexit_p(ad7192_remove),
>  	.id_table	= ad7192_id,
>  };
> -
> -static int __init ad7192_init(void)
> -{
> -	return spi_register_driver(&ad7192_driver);
> -}
> -module_init(ad7192_init);
> -
> -static void __exit ad7192_exit(void)
> -{
> -	spi_unregister_driver(&ad7192_driver);
> -}
> -module_exit(ad7192_exit);
> +module_spi_driver(ad7192_driver);
>  
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD7190, AD7192, AD7195 ADC");
> diff --git a/drivers/staging/iio/adc/ad7280a.c b/drivers/staging/iio/adc/ad7280a.c
> index 372d059..dbaeae8 100644
> --- a/drivers/staging/iio/adc/ad7280a.c
> +++ b/drivers/staging/iio/adc/ad7280a.c
> @@ -979,18 +979,7 @@ static struct spi_driver ad7280_driver = {
>  	.remove		= __devexit_p(ad7280_remove),
>  	.id_table	= ad7280_id,
>  };
> -
> -static int __init ad7280_init(void)
> -{
> -	return spi_register_driver(&ad7280_driver);
> -}
> -module_init(ad7280_init);
> -
> -static void __exit ad7280_exit(void)
> -{
> -	spi_unregister_driver(&ad7280_driver);
> -}
> -module_exit(ad7280_exit);
> +module_spi_driver(ad7280_driver);
>  
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD7280A");
> diff --git a/drivers/staging/iio/adc/ad7298_core.c b/drivers/staging/iio/adc/ad7298_core.c
> index c1de73a..a799bd1 100644
> --- a/drivers/staging/iio/adc/ad7298_core.c
> +++ b/drivers/staging/iio/adc/ad7298_core.c
> @@ -276,18 +276,7 @@ static struct spi_driver ad7298_driver = {
>  	.remove		= __devexit_p(ad7298_remove),
>  	.id_table	= ad7298_id,
>  };
> -
> -static int __init ad7298_init(void)
> -{
> -	return spi_register_driver(&ad7298_driver);
> -}
> -module_init(ad7298_init);
> -
> -static void __exit ad7298_exit(void)
> -{
> -	spi_unregister_driver(&ad7298_driver);
> -}
> -module_exit(ad7298_exit);
> +module_spi_driver(ad7298_driver);
>  
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD7298 ADC");
> diff --git a/drivers/staging/iio/adc/ad7476_core.c b/drivers/staging/iio/adc/ad7476_core.c
> index fd79fac..0b58520 100644
> --- a/drivers/staging/iio/adc/ad7476_core.c
> +++ b/drivers/staging/iio/adc/ad7476_core.c
> @@ -248,18 +248,7 @@ static struct spi_driver ad7476_driver = {
>  	.remove		= __devexit_p(ad7476_remove),
>  	.id_table	= ad7476_id,
>  };
> -
> -static int __init ad7476_init(void)
> -{
> -	return spi_register_driver(&ad7476_driver);
> -}
> -module_init(ad7476_init);
> -
> -static void __exit ad7476_exit(void)
> -{
> -	spi_unregister_driver(&ad7476_driver);
> -}
> -module_exit(ad7476_exit);
> +module_spi_driver(ad7476_driver);
>  
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD7475/6/7/8(A) AD7466/7/8 ADC");
> diff --git a/drivers/staging/iio/adc/ad7606_spi.c b/drivers/staging/iio/adc/ad7606_spi.c
> index aede1ba..b984bd2 100644
> --- a/drivers/staging/iio/adc/ad7606_spi.c
> +++ b/drivers/staging/iio/adc/ad7606_spi.c
> @@ -109,18 +109,7 @@ static struct spi_driver ad7606_driver = {
>  	.remove = __devexit_p(ad7606_spi_remove),
>  	.id_table = ad7606_id,
>  };
> -
> -static int __init ad7606_spi_init(void)
> -{
> -	return spi_register_driver(&ad7606_driver);
> -}
> -module_init(ad7606_spi_init);
> -
> -static void __exit ad7606_spi_exit(void)
> -{
> -	spi_unregister_driver(&ad7606_driver);
> -}
> -module_exit(ad7606_spi_exit);
> +module_spi_driver(ad7606_driver);
>  
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD7606 ADC");
> diff --git a/drivers/staging/iio/adc/ad7780.c b/drivers/staging/iio/adc/ad7780.c
> index 7a579a1..ec90261 100644
> --- a/drivers/staging/iio/adc/ad7780.c
> +++ b/drivers/staging/iio/adc/ad7780.c
> @@ -283,18 +283,7 @@ static struct spi_driver ad7780_driver = {
>  	.remove		= __devexit_p(ad7780_remove),
>  	.id_table	= ad7780_id,
>  };
> -
> -static int __init ad7780_init(void)
> -{
> -	return spi_register_driver(&ad7780_driver);
> -}
> -module_init(ad7780_init);
> -
> -static void __exit ad7780_exit(void)
> -{
> -	spi_unregister_driver(&ad7780_driver);
> -}
> -module_exit(ad7780_exit);
> +module_spi_driver(ad7780_driver);
>  
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD7780/1 ADC");
> diff --git a/drivers/staging/iio/adc/ad7793.c b/drivers/staging/iio/adc/ad7793.c
> index 999f8f7..1c5588e 100644
> --- a/drivers/staging/iio/adc/ad7793.c
> +++ b/drivers/staging/iio/adc/ad7793.c
> @@ -1045,18 +1045,7 @@ static struct spi_driver ad7793_driver = {
>  	.remove		= __devexit_p(ad7793_remove),
>  	.id_table	= ad7793_id,
>  };
> -
> -static int __init ad7793_init(void)
> -{
> -	return spi_register_driver(&ad7793_driver);
> -}
> -module_init(ad7793_init);
> -
> -static void __exit ad7793_exit(void)
> -{
> -	spi_unregister_driver(&ad7793_driver);
> -}
> -module_exit(ad7793_exit);
> +module_spi_driver(ad7793_driver);
>  
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD7792/3 ADC");
> diff --git a/drivers/staging/iio/adc/ad7816.c b/drivers/staging/iio/adc/ad7816.c
> index bdb9049..acbf936 100644
> --- a/drivers/staging/iio/adc/ad7816.c
> +++ b/drivers/staging/iio/adc/ad7816.c
> @@ -466,21 +466,9 @@ static struct spi_driver ad7816_driver = {
>  	.remove = __devexit_p(ad7816_remove),
>  	.id_table = ad7816_id,
>  };
> -
> -static __init int ad7816_init(void)
> -{
> -	return spi_register_driver(&ad7816_driver);
> -}
> -
> -static __exit void ad7816_exit(void)
> -{
> -	spi_unregister_driver(&ad7816_driver);
> -}
> +module_spi_driver(ad7816_driver);
>  
>  MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>");
>  MODULE_DESCRIPTION("Analog Devices AD7816/7/8 digital"
>  			" temperature sensor driver");
>  MODULE_LICENSE("GPL v2");
> -
> -module_init(ad7816_init);
> -module_exit(ad7816_exit);
> diff --git a/drivers/staging/iio/adc/ad7887_core.c b/drivers/staging/iio/adc/ad7887_core.c
> index 609dcd5..91b8fb0 100644
> --- a/drivers/staging/iio/adc/ad7887_core.c
> +++ b/drivers/staging/iio/adc/ad7887_core.c
> @@ -257,18 +257,7 @@ static struct spi_driver ad7887_driver = {
>  	.remove		= __devexit_p(ad7887_remove),
>  	.id_table	= ad7887_id,
>  };
> -
> -static int __init ad7887_init(void)
> -{
> -	return spi_register_driver(&ad7887_driver);
> -}
> -module_init(ad7887_init);
> -
> -static void __exit ad7887_exit(void)
> -{
> -	spi_unregister_driver(&ad7887_driver);
> -}
> -module_exit(ad7887_exit);
> +module_spi_driver(ad7887_driver);
>  
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD7887 ADC");
> diff --git a/drivers/staging/iio/adc/adt7310.c b/drivers/staging/iio/adc/adt7310.c
> index c9e0be3..bc307f3 100644
> --- a/drivers/staging/iio/adc/adt7310.c
> +++ b/drivers/staging/iio/adc/adt7310.c
> @@ -884,21 +884,9 @@ static struct spi_driver adt7310_driver = {
>  	.remove = __devexit_p(adt7310_remove),
>  	.id_table = adt7310_id,
>  };
> -
> -static __init int adt7310_init(void)
> -{
> -	return spi_register_driver(&adt7310_driver);
> -}
> -
> -static __exit void adt7310_exit(void)
> -{
> -	spi_unregister_driver(&adt7310_driver);
> -}
> +module_spi_driver(adt7310_driver);
>  
>  MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>");
>  MODULE_DESCRIPTION("Analog Devices ADT7310 digital"
>  			" temperature sensor driver");
>  MODULE_LICENSE("GPL v2");
> -
> -module_init(adt7310_init);
> -module_exit(adt7310_exit);
> diff --git a/drivers/staging/iio/addac/adt7316-spi.c b/drivers/staging/iio/addac/adt7316-spi.c
> index 369d4d0..1e93c7b 100644
> --- a/drivers/staging/iio/addac/adt7316-spi.c
> +++ b/drivers/staging/iio/addac/adt7316-spi.c
> @@ -160,21 +160,9 @@ static struct spi_driver adt7316_driver = {
>  	.resume = adt7316_spi_resume,
>  	.id_table = adt7316_spi_id,
>  };
> -
> -static __init int adt7316_spi_init(void)
> -{
> -	return spi_register_driver(&adt7316_driver);
> -}
> -
> -static __exit void adt7316_spi_exit(void)
> -{
> -	spi_unregister_driver(&adt7316_driver);
> -}
> +module_spi_driver(adt7316_driver);
>  
>  MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>");
>  MODULE_DESCRIPTION("SPI bus driver for Analog Devices ADT7316/7/8 and"
>  			"ADT7516/7/9 digital temperature sensor, ADC and DAC");
>  MODULE_LICENSE("GPL v2");
> -
> -module_init(adt7316_spi_init);
> -module_exit(adt7316_spi_exit);
> diff --git a/drivers/staging/iio/dac/ad5064.c b/drivers/staging/iio/dac/ad5064.c
> index 24279f2..39cfe6c 100644
> --- a/drivers/staging/iio/dac/ad5064.c
> +++ b/drivers/staging/iio/dac/ad5064.c
> @@ -445,18 +445,7 @@ static struct spi_driver ad5064_driver = {
>  	.remove = __devexit_p(ad5064_remove),
>  	.id_table = ad5064_id,
>  };
> -
> -static __init int ad5064_spi_init(void)
> -{
> -	return spi_register_driver(&ad5064_driver);
> -}
> -module_init(ad5064_spi_init);
> -
> -static __exit void ad5064_spi_exit(void)
> -{
> -	spi_unregister_driver(&ad5064_driver);
> -}
> -module_exit(ad5064_spi_exit);
> +module_spi_driver(ad5064_driver);
>  
>  MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
>  MODULE_DESCRIPTION("Analog Devices AD5064/64-1/44/24 DAC");
> diff --git a/drivers/staging/iio/dac/ad5360.c b/drivers/staging/iio/dac/ad5360.c
> index 72d0f3f0..bc0459e 100644
> --- a/drivers/staging/iio/dac/ad5360.c
> +++ b/drivers/staging/iio/dac/ad5360.c
> @@ -563,18 +563,7 @@ static struct spi_driver ad5360_driver = {
>  	.remove = __devexit_p(ad5360_remove),
>  	.id_table = ad5360_ids,
>  };
> -
> -static __init int ad5360_spi_init(void)
> -{
> -	return spi_register_driver(&ad5360_driver);
> -}
> -module_init(ad5360_spi_init);
> -
> -static __exit void ad5360_spi_exit(void)
> -{
> -	spi_unregister_driver(&ad5360_driver);
> -}
> -module_exit(ad5360_spi_exit);
> +module_spi_driver(ad5360_driver);
>  
>  MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
>  MODULE_DESCRIPTION("Analog Devices AD5360/61/62/63/70/71/72/73 DAC");
> diff --git a/drivers/staging/iio/dac/ad5446.c b/drivers/staging/iio/dac/ad5446.c
> index e1c204d..ac3bc5f 100644
> --- a/drivers/staging/iio/dac/ad5446.c
> +++ b/drivers/staging/iio/dac/ad5446.c
> @@ -465,18 +465,7 @@ static struct spi_driver ad5446_driver = {
>  	.remove		= __devexit_p(ad5446_remove),
>  	.id_table	= ad5446_id,
>  };
> -
> -static int __init ad5446_init(void)
> -{
> -	return spi_register_driver(&ad5446_driver);
> -}
> -module_init(ad5446_init);
> -
> -static void __exit ad5446_exit(void)
> -{
> -	spi_unregister_driver(&ad5446_driver);
> -}
> -module_exit(ad5446_exit);
> +module_spi_driver(ad5446_driver);
>  
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD5444/AD5446 DAC");
> diff --git a/drivers/staging/iio/dac/ad5504.c b/drivers/staging/iio/dac/ad5504.c
> index 60dd640..57539ce 100644
> --- a/drivers/staging/iio/dac/ad5504.c
> +++ b/drivers/staging/iio/dac/ad5504.c
> @@ -377,18 +377,7 @@ static struct spi_driver ad5504_driver = {
>  	.remove = __devexit_p(ad5504_remove),
>  	.id_table = ad5504_id,
>  };
> -
> -static __init int ad5504_spi_init(void)
> -{
> -	return spi_register_driver(&ad5504_driver);
> -}
> -module_init(ad5504_spi_init);
> -
> -static __exit void ad5504_spi_exit(void)
> -{
> -	spi_unregister_driver(&ad5504_driver);
> -}
> -module_exit(ad5504_spi_exit);
> +module_spi_driver(ad5504_driver);
>  
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD5501/AD5501 DAC");
> diff --git a/drivers/staging/iio/dac/ad5624r_spi.c b/drivers/staging/iio/dac/ad5624r_spi.c
> index 284d879..6e05f0d 100644
> --- a/drivers/staging/iio/dac/ad5624r_spi.c
> +++ b/drivers/staging/iio/dac/ad5624r_spi.c
> @@ -317,18 +317,7 @@ static struct spi_driver ad5624r_driver = {
>  	.remove = __devexit_p(ad5624r_remove),
>  	.id_table = ad5624r_id,
>  };
> -
> -static __init int ad5624r_spi_init(void)
> -{
> -	return spi_register_driver(&ad5624r_driver);
> -}
> -module_init(ad5624r_spi_init);
> -
> -static __exit void ad5624r_spi_exit(void)
> -{
> -	spi_unregister_driver(&ad5624r_driver);
> -}
> -module_exit(ad5624r_spi_exit);
> +module_spi_driver(ad5624r_driver);
>  
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices AD5624/44/64R DAC spi driver");
> diff --git a/drivers/staging/iio/dac/ad5686.c b/drivers/staging/iio/dac/ad5686.c
> index 974c6f5..e72db2f 100644
> --- a/drivers/staging/iio/dac/ad5686.c
> +++ b/drivers/staging/iio/dac/ad5686.c
> @@ -447,18 +447,7 @@ static struct spi_driver ad5686_driver = {
>  	.remove = __devexit_p(ad5686_remove),
>  	.id_table = ad5686_id,
>  };
> -
> -static __init int ad5686_spi_init(void)
> -{
> -	return spi_register_driver(&ad5686_driver);
> -}
> -module_init(ad5686_spi_init);
> -
> -static __exit void ad5686_spi_exit(void)
> -{
> -	spi_unregister_driver(&ad5686_driver);
> -}
> -module_exit(ad5686_spi_exit);
> +module_spi_driver(ad5686_driver);
>  
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD5686/85/84 DAC");
> diff --git a/drivers/staging/iio/dac/ad5791.c b/drivers/staging/iio/dac/ad5791.c
> index 6fbca8d..4a80fd8 100644
> --- a/drivers/staging/iio/dac/ad5791.c
> +++ b/drivers/staging/iio/dac/ad5791.c
> @@ -410,18 +410,7 @@ static struct spi_driver ad5791_driver = {
>  	.remove = __devexit_p(ad5791_remove),
>  	.id_table = ad5791_id,
>  };
> -
> -static __init int ad5791_spi_init(void)
> -{
> -	return spi_register_driver(&ad5791_driver);
> -}
> -module_init(ad5791_spi_init);
> -
> -static __exit void ad5791_spi_exit(void)
> -{
> -	spi_unregister_driver(&ad5791_driver);
> -}
> -module_exit(ad5791_spi_exit);
> +module_spi_driver(ad5791_driver);
>  
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD5760/AD5780/AD5781/AD5791 DAC");
> diff --git a/drivers/staging/iio/dds/ad5930.c b/drivers/staging/iio/dds/ad5930.c
> index f5e368b..4a360d0 100644
> --- a/drivers/staging/iio/dds/ad5930.c
> +++ b/drivers/staging/iio/dds/ad5930.c
> @@ -143,18 +143,7 @@ static struct spi_driver ad5930_driver = {
>  	.probe = ad5930_probe,
>  	.remove = __devexit_p(ad5930_remove),
>  };
> -
> -static __init int ad5930_spi_init(void)
> -{
> -	return spi_register_driver(&ad5930_driver);
> -}
> -module_init(ad5930_spi_init);
> -
> -static __exit void ad5930_spi_exit(void)
> -{
> -	spi_unregister_driver(&ad5930_driver);
> -}
> -module_exit(ad5930_spi_exit);
> +module_spi_driver(ad5930_driver);
>  
>  MODULE_AUTHOR("Cliff Cai");
>  MODULE_DESCRIPTION("Analog Devices ad5930 driver");
> diff --git a/drivers/staging/iio/dds/ad9832.c b/drivers/staging/iio/dds/ad9832.c
> index 9b4ff60..cc32fd6 100644
> --- a/drivers/staging/iio/dds/ad9832.c
> +++ b/drivers/staging/iio/dds/ad9832.c
> @@ -355,18 +355,7 @@ static struct spi_driver ad9832_driver = {
>  	.remove		= __devexit_p(ad9832_remove),
>  	.id_table	= ad9832_id,
>  };
> -
> -static int __init ad9832_init(void)
> -{
> -	return spi_register_driver(&ad9832_driver);
> -}
> -module_init(ad9832_init);
> -
> -static void __exit ad9832_exit(void)
> -{
> -	spi_unregister_driver(&ad9832_driver);
> -}
> -module_exit(ad9832_exit);
> +module_spi_driver(ad9832_driver);
>  
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD9832/AD9835 DDS");
> diff --git a/drivers/staging/iio/dds/ad9834.c b/drivers/staging/iio/dds/ad9834.c
> index c468f69..2b31e35 100644
> --- a/drivers/staging/iio/dds/ad9834.c
> +++ b/drivers/staging/iio/dds/ad9834.c
> @@ -446,18 +446,7 @@ static struct spi_driver ad9834_driver = {
>  	.remove		= __devexit_p(ad9834_remove),
>  	.id_table	= ad9834_id,
>  };
> -
> -static int __init ad9834_init(void)
> -{
> -	return spi_register_driver(&ad9834_driver);
> -}
> -module_init(ad9834_init);
> -
> -static void __exit ad9834_exit(void)
> -{
> -	spi_unregister_driver(&ad9834_driver);
> -}
> -module_exit(ad9834_exit);
> +module_spi_driver(ad9834_driver);
>  
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD9833/AD9834/AD9837/AD9838 DDS");
> diff --git a/drivers/staging/iio/dds/ad9850.c b/drivers/staging/iio/dds/ad9850.c
> index a14771b..f9c96af 100644
> --- a/drivers/staging/iio/dds/ad9850.c
> +++ b/drivers/staging/iio/dds/ad9850.c
> @@ -129,18 +129,7 @@ static struct spi_driver ad9850_driver = {
>  	.probe = ad9850_probe,
>  	.remove = __devexit_p(ad9850_remove),
>  };
> -
> -static __init int ad9850_spi_init(void)
> -{
> -	return spi_register_driver(&ad9850_driver);
> -}
> -module_init(ad9850_spi_init);
> -
> -static __exit void ad9850_spi_exit(void)
> -{
> -	spi_unregister_driver(&ad9850_driver);
> -}
> -module_exit(ad9850_spi_exit);
> +module_spi_driver(ad9850_driver);
>  
>  MODULE_AUTHOR("Cliff Cai");
>  MODULE_DESCRIPTION("Analog Devices ad9850 driver");
> diff --git a/drivers/staging/iio/dds/ad9852.c b/drivers/staging/iio/dds/ad9852.c
> index cfceaa6..9fc73fd 100644
> --- a/drivers/staging/iio/dds/ad9852.c
> +++ b/drivers/staging/iio/dds/ad9852.c
> @@ -280,18 +280,7 @@ static struct spi_driver ad9852_driver = {
>  	.probe = ad9852_probe,
>  	.remove = __devexit_p(ad9852_remove),
>  };
> -
> -static __init int ad9852_spi_init(void)
> -{
> -	return spi_register_driver(&ad9852_driver);
> -}
> -module_init(ad9852_spi_init);
> -
> -static __exit void ad9852_spi_exit(void)
> -{
> -	spi_unregister_driver(&ad9852_driver);
> -}
> -module_exit(ad9852_spi_exit);
> +module_spi_driver(ad9852_driver);
>  
>  MODULE_AUTHOR("Cliff Cai");
>  MODULE_DESCRIPTION("Analog Devices ad9852 driver");
> diff --git a/drivers/staging/iio/dds/ad9910.c b/drivers/staging/iio/dds/ad9910.c
> index da83d2b..57046b0 100644
> --- a/drivers/staging/iio/dds/ad9910.c
> +++ b/drivers/staging/iio/dds/ad9910.c
> @@ -413,18 +413,7 @@ static struct spi_driver ad9910_driver = {
>  	.probe = ad9910_probe,
>  	.remove = __devexit_p(ad9910_remove),
>  };
> -
> -static __init int ad9910_spi_init(void)
> -{
> -	return spi_register_driver(&ad9910_driver);
> -}
> -module_init(ad9910_spi_init);
> -
> -static __exit void ad9910_spi_exit(void)
> -{
> -	spi_unregister_driver(&ad9910_driver);
> -}
> -module_exit(ad9910_spi_exit);
> +module_spi_driver(ad9910_driver);
>  
>  MODULE_AUTHOR("Cliff Cai");
>  MODULE_DESCRIPTION("Analog Devices ad9910 driver");
> diff --git a/drivers/staging/iio/dds/ad9951.c b/drivers/staging/iio/dds/ad9951.c
> index 20c1825..d29130e 100644
> --- a/drivers/staging/iio/dds/ad9951.c
> +++ b/drivers/staging/iio/dds/ad9951.c
> @@ -224,18 +224,7 @@ static struct spi_driver ad9951_driver = {
>  	.probe = ad9951_probe,
>  	.remove = __devexit_p(ad9951_remove),
>  };
> -
> -static __init int ad9951_spi_init(void)
> -{
> -	return spi_register_driver(&ad9951_driver);
> -}
> -module_init(ad9951_spi_init);
> -
> -static __exit void ad9951_spi_exit(void)
> -{
> -	spi_unregister_driver(&ad9951_driver);
> -}
> -module_exit(ad9951_spi_exit);
> +module_spi_driver(ad9951_driver);
>  
>  MODULE_AUTHOR("Cliff Cai");
>  MODULE_DESCRIPTION("Analog Devices ad9951 driver");
> diff --git a/drivers/staging/iio/gyro/adis16080_core.c b/drivers/staging/iio/gyro/adis16080_core.c
> index 5d7a906..9405f2d 100644
> --- a/drivers/staging/iio/gyro/adis16080_core.c
> +++ b/drivers/staging/iio/gyro/adis16080_core.c
> @@ -189,18 +189,7 @@ static struct spi_driver adis16080_driver = {
>  	.probe = adis16080_probe,
>  	.remove = __devexit_p(adis16080_remove),
>  };
> -
> -static __init int adis16080_init(void)
> -{
> -	return spi_register_driver(&adis16080_driver);
> -}
> -module_init(adis16080_init);
> -
> -static __exit void adis16080_exit(void)
> -{
> -	spi_unregister_driver(&adis16080_driver);
> -}
> -module_exit(adis16080_exit);
> +module_spi_driver(adis16080_driver);
>  
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADIS16080/100 Yaw Rate Gyroscope Driver");
> diff --git a/drivers/staging/iio/gyro/adis16130_core.c b/drivers/staging/iio/gyro/adis16130_core.c
> index 749240d..c9aaca9 100644
> --- a/drivers/staging/iio/gyro/adis16130_core.c
> +++ b/drivers/staging/iio/gyro/adis16130_core.c
> @@ -168,18 +168,7 @@ static struct spi_driver adis16130_driver = {
>  	.probe = adis16130_probe,
>  	.remove = __devexit_p(adis16130_remove),
>  };
> -
> -static __init int adis16130_init(void)
> -{
> -	return spi_register_driver(&adis16130_driver);
> -}
> -module_init(adis16130_init);
> -
> -static __exit void adis16130_exit(void)
> -{
> -	spi_unregister_driver(&adis16130_driver);
> -}
> -module_exit(adis16130_exit);
> +module_spi_driver(adis16130_driver);
>  
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADIS16130 High Precision Angular Rate");
> diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
> index aaa3967..886dddf 100644
> --- a/drivers/staging/iio/gyro/adis16260_core.c
> +++ b/drivers/staging/iio/gyro/adis16260_core.c
> @@ -711,18 +711,7 @@ static struct spi_driver adis16260_driver = {
>  	.remove = __devexit_p(adis16260_remove),
>  	.id_table = adis16260_id,
>  };
> -
> -static __init int adis16260_init(void)
> -{
> -	return spi_register_driver(&adis16260_driver);
> -}
> -module_init(adis16260_init);
> -
> -static __exit void adis16260_exit(void)
> -{
> -	spi_unregister_driver(&adis16260_driver);
> -}
> -module_exit(adis16260_exit);
> +module_spi_driver(adis16260_driver);
>  
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADIS16260/5 Digital Gyroscope Sensor");
> diff --git a/drivers/staging/iio/gyro/adxrs450_core.c b/drivers/staging/iio/gyro/adxrs450_core.c
> index 3c3ef79..70fd468 100644
> --- a/drivers/staging/iio/gyro/adxrs450_core.c
> +++ b/drivers/staging/iio/gyro/adxrs450_core.c
> @@ -381,18 +381,7 @@ static struct spi_driver adxrs450_driver = {
>  	.probe = adxrs450_probe,
>  	.remove = __devexit_p(adxrs450_remove),
>  };
> -
> -static __init int adxrs450_init(void)
> -{
> -	return spi_register_driver(&adxrs450_driver);
> -}
> -module_init(adxrs450_init);
> -
> -static __exit void adxrs450_exit(void)
> -{
> -	spi_unregister_driver(&adxrs450_driver);
> -}
> -module_exit(adxrs450_exit);
> +module_spi_driver(adxrs450_driver);
>  
>  MODULE_AUTHOR("Cliff Cai <cliff.cai@xxxxxxxxxx>");
>  MODULE_DESCRIPTION("Analog Devices ADXRS450 Gyroscope SPI driver");
> diff --git a/drivers/staging/iio/imu/adis16400_core.c b/drivers/staging/iio/imu/adis16400_core.c
> index d082a37..efc0f65 100644
> --- a/drivers/staging/iio/imu/adis16400_core.c
> +++ b/drivers/staging/iio/imu/adis16400_core.c
> @@ -1128,18 +1128,7 @@ static struct spi_driver adis16400_driver = {
>  	.probe = adis16400_probe,
>  	.remove = __devexit_p(adis16400_remove),
>  };
> -
> -static __init int adis16400_init(void)
> -{
> -	return spi_register_driver(&adis16400_driver);
> -}
> -module_init(adis16400_init);
> -
> -static __exit void adis16400_exit(void)
> -{
> -	spi_unregister_driver(&adis16400_driver);
> -}
> -module_exit(adis16400_exit);
> +module_spi_driver(adis16400_driver);
>  
>  MODULE_AUTHOR("Manuel Stahl <manuel.stahl@iis.fraunhofer.de>");
>  MODULE_DESCRIPTION("Analog Devices ADIS16400/5 IMU SPI driver");
> diff --git a/drivers/staging/iio/meter/ade7753.c b/drivers/staging/iio/meter/ade7753.c
> index 940fef6..4c7b0cb 100644
> --- a/drivers/staging/iio/meter/ade7753.c
> +++ b/drivers/staging/iio/meter/ade7753.c
> @@ -577,18 +577,7 @@ static struct spi_driver ade7753_driver = {
>  	.probe = ade7753_probe,
>  	.remove = __devexit_p(ade7753_remove),
>  };
> -
> -static __init int ade7753_init(void)
> -{
> -	return spi_register_driver(&ade7753_driver);
> -}
> -module_init(ade7753_init);
> -
> -static __exit void ade7753_exit(void)
> -{
> -	spi_unregister_driver(&ade7753_driver);
> -}
> -module_exit(ade7753_exit);
> +module_spi_driver(ade7753_driver);
>  
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADE7753/6 Single-Phase Multifunction Meter");
> diff --git a/drivers/staging/iio/meter/ade7754.c b/drivers/staging/iio/meter/ade7754.c
> index 33f0d32..15c98cd 100644
> --- a/drivers/staging/iio/meter/ade7754.c
> +++ b/drivers/staging/iio/meter/ade7754.c
> @@ -600,18 +600,7 @@ static struct spi_driver ade7754_driver = {
>  	.probe = ade7754_probe,
>  	.remove = __devexit_p(ade7754_remove),
>  };
> -
> -static __init int ade7754_init(void)
> -{
> -	return spi_register_driver(&ade7754_driver);
> -}
> -module_init(ade7754_init);
> -
> -static __exit void ade7754_exit(void)
> -{
> -	spi_unregister_driver(&ade7754_driver);
> -}
> -module_exit(ade7754_exit);
> +module_spi_driver(ade7754_driver);
>  
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADE7754 Polyphase Multifunction Energy Metering IC Driver");
> diff --git a/drivers/staging/iio/meter/ade7758_core.c b/drivers/staging/iio/meter/ade7758_core.c
> index c5dafbd..39338bc 100644
> --- a/drivers/staging/iio/meter/ade7758_core.c
> +++ b/drivers/staging/iio/meter/ade7758_core.c
> @@ -853,18 +853,7 @@ static struct spi_driver ade7758_driver = {
>  	.remove = __devexit_p(ade7758_remove),
>  	.id_table = ade7758_id,
>  };
> -
> -static __init int ade7758_init(void)
> -{
> -	return spi_register_driver(&ade7758_driver);
> -}
> -module_init(ade7758_init);
> -
> -static __exit void ade7758_exit(void)
> -{
> -	spi_unregister_driver(&ade7758_driver);
> -}
> -module_exit(ade7758_exit);
> +module_spi_driver(ade7758_driver);
>  
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADE7758 Polyphase Multifunction Energy Metering IC Driver");
> diff --git a/drivers/staging/iio/meter/ade7759.c b/drivers/staging/iio/meter/ade7759.c
> index b691f10..cfa2a5e 100644
> --- a/drivers/staging/iio/meter/ade7759.c
> +++ b/drivers/staging/iio/meter/ade7759.c
> @@ -521,18 +521,7 @@ static struct spi_driver ade7759_driver = {
>  	.probe = ade7759_probe,
>  	.remove = __devexit_p(ade7759_remove),
>  };
> -
> -static __init int ade7759_init(void)
> -{
> -	return spi_register_driver(&ade7759_driver);
> -}
> -module_init(ade7759_init);
> -
> -static __exit void ade7759_exit(void)
> -{
> -	spi_unregister_driver(&ade7759_driver);
> -}
> -module_exit(ade7759_exit);
> +module_spi_driver(ade7759_driver);
>  
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADE7759 Active Energy Metering IC Driver");
> diff --git a/drivers/staging/iio/meter/ade7854-spi.c b/drivers/staging/iio/meter/ade7854-spi.c
> index cfa23ba..c485a79 100644
> --- a/drivers/staging/iio/meter/ade7854-spi.c
> +++ b/drivers/staging/iio/meter/ade7854-spi.c
> @@ -353,18 +353,7 @@ static struct spi_driver ade7854_driver = {
>  	.remove = __devexit_p(ade7854_spi_remove),
>  	.id_table = ade7854_id,
>  };
> -
> -static __init int ade7854_init(void)
> -{
> -	return spi_register_driver(&ade7854_driver);
> -}
> -module_init(ade7854_init);
> -
> -static __exit void ade7854_exit(void)
> -{
> -	spi_unregister_driver(&ade7854_driver);
> -}
> -module_exit(ade7854_exit);
> +module_spi_driver(ade7854_driver);
>  
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADE7854/58/68/78 SPI Driver");
> diff --git a/drivers/staging/iio/resolver/ad2s1200.c b/drivers/staging/iio/resolver/ad2s1200.c
> index d7ad46a..1c6a02b 100644
> --- a/drivers/staging/iio/resolver/ad2s1200.c
> +++ b/drivers/staging/iio/resolver/ad2s1200.c
> @@ -170,18 +170,7 @@ static struct spi_driver ad2s1200_driver = {
>  	.remove = __devexit_p(ad2s1200_remove),
>  	.id_table = ad2s1200_id,
>  };
> -
> -static __init int ad2s1200_spi_init(void)
> -{
> -	return spi_register_driver(&ad2s1200_driver);
> -}
> -module_init(ad2s1200_spi_init);
> -
> -static __exit void ad2s1200_spi_exit(void)
> -{
> -	spi_unregister_driver(&ad2s1200_driver);
> -}
> -module_exit(ad2s1200_spi_exit);
> +module_spi_driver(ad2s1200_driver);
>  
>  MODULE_AUTHOR("Graff Yang <graff.yang@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices AD2S1200/1205 Resolver to Digital SPI driver");
> diff --git a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/staging/iio/resolver/ad2s1210.c
> index 6401a62..ff1b331 100644
> --- a/drivers/staging/iio/resolver/ad2s1210.c
> +++ b/drivers/staging/iio/resolver/ad2s1210.c
> @@ -759,18 +759,7 @@ static struct spi_driver ad2s1210_driver = {
>  	.remove = __devexit_p(ad2s1210_remove),
>  	.id_table = ad2s1210_id,
>  };
> -
> -static __init int ad2s1210_spi_init(void)
> -{
> -	return spi_register_driver(&ad2s1210_driver);
> -}
> -module_init(ad2s1210_spi_init);
> -
> -static __exit void ad2s1210_spi_exit(void)
> -{
> -	spi_unregister_driver(&ad2s1210_driver);
> -}
> -module_exit(ad2s1210_spi_exit);
> +module_spi_driver(ad2s1210_driver);
>  
>  MODULE_AUTHOR("Graff Yang <graff.yang@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices AD2S1210 Resolver to Digital SPI driver");
> diff --git a/drivers/staging/iio/resolver/ad2s90.c b/drivers/staging/iio/resolver/ad2s90.c
> index a9200d9..6d07943 100644
> --- a/drivers/staging/iio/resolver/ad2s90.c
> +++ b/drivers/staging/iio/resolver/ad2s90.c
> @@ -119,18 +119,7 @@ static struct spi_driver ad2s90_driver = {
>  	.remove = __devexit_p(ad2s90_remove),
>  	.id_table = ad2s90_id,
>  };
> -
> -static __init int ad2s90_spi_init(void)
> -{
> -	return spi_register_driver(&ad2s90_driver);
> -}
> -module_init(ad2s90_spi_init);
> -
> -static __exit void ad2s90_spi_exit(void)
> -{
> -	spi_unregister_driver(&ad2s90_driver);
> -}
> -module_exit(ad2s90_spi_exit);
> +module_spi_driver(ad2s90_driver);
>  
>  MODULE_AUTHOR("Graff Yang <graff.yang@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices AD2S90 Resolver to Digital SPI driver");


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 4/5] staging:iio: Use module_i2c_driver to register I2C drivers
  2011-11-16  9:13 ` [PATCH 4/5] staging:iio: Use module_i2c_driver to register I2C drivers Lars-Peter Clausen
@ 2011-11-17  6:50   ` Jonathan Cameron
  0 siblings, 0 replies; 26+ messages in thread
From: Jonathan Cameron @ 2011-11-17  6:50 UTC (permalink / raw)
  To: Lars-Peter Clausen
  Cc: Greg Kroah-Hartman, Jean Delvare, Grant Likely,
	Michael Hennerich, linux-iio, linux-kernel, linux-i2c,
	spi-devel-general

On 11/16/2011 09:13 AM, Lars-Peter Clausen wrote:
> Use the newly introduced module_i2c_driver macro for registering I2C drivers.
> This allows us to remove a few lines of boilerplate code.
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Jonathan Cameron <jic23@kernel.org>
> ---
>  drivers/staging/iio/adc/ad7291.c                |   14 +-------------
>  drivers/staging/iio/adc/ad799x_core.c           |   14 +-------------
>  drivers/staging/iio/adc/adt7410.c               |   14 +-------------
>  drivers/staging/iio/adc/max1363_core.c          |   14 +-------------
>  drivers/staging/iio/addac/adt7316-i2c.c         |   14 +-------------
>  drivers/staging/iio/cdc/ad7150.c                |   14 +-------------
>  drivers/staging/iio/cdc/ad7152.c                |   14 +-------------
>  drivers/staging/iio/cdc/ad7746.c                |   14 +-------------
>  drivers/staging/iio/dac/max517.c                |   14 +-------------
>  drivers/staging/iio/impedance-analyzer/ad5933.c |   13 +------------
>  drivers/staging/iio/light/isl29018.c            |   14 +-------------
>  drivers/staging/iio/light/tsl2563.c             |   14 +-------------
>  drivers/staging/iio/light/tsl2583.c             |   14 +-------------
>  drivers/staging/iio/magnetometer/ak8975.c       |   14 +-------------
>  drivers/staging/iio/magnetometer/hmc5843.c      |   14 +-------------
>  drivers/staging/iio/meter/ade7854-i2c.c         |   14 +-------------
>  16 files changed, 16 insertions(+), 207 deletions(-)
> 
> diff --git a/drivers/staging/iio/adc/ad7291.c b/drivers/staging/iio/adc/ad7291.c
> index 10e79e8..aa44a52 100644
> --- a/drivers/staging/iio/adc/ad7291.c
> +++ b/drivers/staging/iio/adc/ad7291.c
> @@ -700,20 +700,8 @@ static struct i2c_driver ad7291_driver = {
>  	.remove = __devexit_p(ad7291_remove),
>  	.id_table = ad7291_id,
>  };
> -
> -static __init int ad7291_init(void)
> -{
> -	return i2c_add_driver(&ad7291_driver);
> -}
> -
> -static __exit void ad7291_exit(void)
> -{
> -	i2c_del_driver(&ad7291_driver);
> -}
> +module_i2c_driver(ad7291_driver);
>  
>  MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>");
>  MODULE_DESCRIPTION("Analog Devices AD7291 ADC driver");
>  MODULE_LICENSE("GPL v2");
> -
> -module_init(ad7291_init);
> -module_exit(ad7291_exit);
> diff --git a/drivers/staging/iio/adc/ad799x_core.c b/drivers/staging/iio/adc/ad799x_core.c
> index ee6cd79..c0d2f88 100644
> --- a/drivers/staging/iio/adc/ad799x_core.c
> +++ b/drivers/staging/iio/adc/ad799x_core.c
> @@ -929,21 +929,9 @@ static struct i2c_driver ad799x_driver = {
>  	.remove = __devexit_p(ad799x_remove),
>  	.id_table = ad799x_id,
>  };
> -
> -static __init int ad799x_init(void)
> -{
> -	return i2c_add_driver(&ad799x_driver);
> -}
> -
> -static __exit void ad799x_exit(void)
> -{
> -	i2c_del_driver(&ad799x_driver);
> -}
> +module_i2c_driver(ad799x_driver);
>  
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD799x ADC");
>  MODULE_LICENSE("GPL v2");
>  MODULE_ALIAS("i2c:ad799x");
> -
> -module_init(ad799x_init);
> -module_exit(ad799x_exit);
> diff --git a/drivers/staging/iio/adc/adt7410.c b/drivers/staging/iio/adc/adt7410.c
> index a289e42..3481cf6 100644
> --- a/drivers/staging/iio/adc/adt7410.c
> +++ b/drivers/staging/iio/adc/adt7410.c
> @@ -844,21 +844,9 @@ static struct i2c_driver adt7410_driver = {
>  	.remove = __devexit_p(adt7410_remove),
>  	.id_table = adt7410_id,
>  };
> -
> -static __init int adt7410_init(void)
> -{
> -	return i2c_add_driver(&adt7410_driver);
> -}
> -
> -static __exit void adt7410_exit(void)
> -{
> -	i2c_del_driver(&adt7410_driver);
> -}
> +module_i2c_driver(adt7410_driver);
>  
>  MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>");
>  MODULE_DESCRIPTION("Analog Devices ADT7410 digital"
>  			" temperature sensor driver");
>  MODULE_LICENSE("GPL v2");
> -
> -module_init(adt7410_init);
> -module_exit(adt7410_exit);
> diff --git a/drivers/staging/iio/adc/max1363_core.c b/drivers/staging/iio/adc/max1363_core.c
> index eb699ad..3f28f1a 100644
> --- a/drivers/staging/iio/adc/max1363_core.c
> +++ b/drivers/staging/iio/adc/max1363_core.c
> @@ -1410,20 +1410,8 @@ static struct i2c_driver max1363_driver = {
>  	.remove = max1363_remove,
>  	.id_table = max1363_id,
>  };
> -
> -static __init int max1363_init(void)
> -{
> -	return i2c_add_driver(&max1363_driver);
> -}
> -
> -static __exit void max1363_exit(void)
> -{
> -	i2c_del_driver(&max1363_driver);
> -}
> +module_i2c_driver(max1363_driver);
>  
>  MODULE_AUTHOR("Jonathan Cameron <jic23@cam.ac.uk>");
>  MODULE_DESCRIPTION("Maxim 1363 ADC");
>  MODULE_LICENSE("GPL v2");
> -
> -module_init(max1363_init);
> -module_exit(max1363_exit);
> diff --git a/drivers/staging/iio/addac/adt7316-i2c.c b/drivers/staging/iio/addac/adt7316-i2c.c
> index 07d718e..2c03a39 100644
> --- a/drivers/staging/iio/addac/adt7316-i2c.c
> +++ b/drivers/staging/iio/addac/adt7316-i2c.c
> @@ -151,21 +151,9 @@ static struct i2c_driver adt7316_driver = {
>  	.resume = adt7316_i2c_resume,
>  	.id_table = adt7316_i2c_id,
>  };
> -
> -static __init int adt7316_i2c_init(void)
> -{
> -	return i2c_add_driver(&adt7316_driver);
> -}
> -
> -static __exit void adt7316_i2c_exit(void)
> -{
> -	i2c_del_driver(&adt7316_driver);
> -}
> +module_i2c_driver(adt7316_driver);
>  
>  MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>");
>  MODULE_DESCRIPTION("I2C bus driver for Analog Devices ADT7316/7/9 and"
>  			"ADT7516/7/8 digital temperature sensor, ADC and DAC");
>  MODULE_LICENSE("GPL v2");
> -
> -module_init(adt7316_i2c_init);
> -module_exit(adt7316_i2c_exit);
> diff --git a/drivers/staging/iio/cdc/ad7150.c b/drivers/staging/iio/cdc/ad7150.c
> index a761ca9..4718187 100644
> --- a/drivers/staging/iio/cdc/ad7150.c
> +++ b/drivers/staging/iio/cdc/ad7150.c
> @@ -657,20 +657,8 @@ static struct i2c_driver ad7150_driver = {
>  	.remove = __devexit_p(ad7150_remove),
>  	.id_table = ad7150_id,
>  };
> -
> -static __init int ad7150_init(void)
> -{
> -	return i2c_add_driver(&ad7150_driver);
> -}
> -
> -static __exit void ad7150_exit(void)
> -{
> -	i2c_del_driver(&ad7150_driver);
> -}
> +module_i2c_driver(ad7150_driver);
>  
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices AD7150/1/6 capacitive sensor driver");
>  MODULE_LICENSE("GPL v2");
> -
> -module_init(ad7150_init);
> -module_exit(ad7150_exit);
> diff --git a/drivers/staging/iio/cdc/ad7152.c b/drivers/staging/iio/cdc/ad7152.c
> index 662584d..152d3be 100644
> --- a/drivers/staging/iio/cdc/ad7152.c
> +++ b/drivers/staging/iio/cdc/ad7152.c
> @@ -540,20 +540,8 @@ static struct i2c_driver ad7152_driver = {
>  	.remove = __devexit_p(ad7152_remove),
>  	.id_table = ad7152_id,
>  };
> -
> -static __init int ad7152_init(void)
> -{
> -	return i2c_add_driver(&ad7152_driver);
> -}
> -
> -static __exit void ad7152_exit(void)
> -{
> -	i2c_del_driver(&ad7152_driver);
> -}
> +module_i2c_driver(ad7152_driver);
>  
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices AD7152/3 capacitive sensor driver");
>  MODULE_LICENSE("GPL v2");
> -
> -module_init(ad7152_init);
> -module_exit(ad7152_exit);
> diff --git a/drivers/staging/iio/cdc/ad7746.c b/drivers/staging/iio/cdc/ad7746.c
> index 2867943..9df5908 100644
> --- a/drivers/staging/iio/cdc/ad7746.c
> +++ b/drivers/staging/iio/cdc/ad7746.c
> @@ -788,20 +788,8 @@ static struct i2c_driver ad7746_driver = {
>  	.remove = __devexit_p(ad7746_remove),
>  	.id_table = ad7746_id,
>  };
> -
> -static __init int ad7746_init(void)
> -{
> -	return i2c_add_driver(&ad7746_driver);
> -}
> -
> -static __exit void ad7746_exit(void)
> -{
> -	i2c_del_driver(&ad7746_driver);
> -}
> +module_i2c_driver(ad7746_driver);
>  
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD7746/5/7 capacitive sensor driver");
>  MODULE_LICENSE("GPL v2");
> -
> -module_init(ad7746_init);
> -module_exit(ad7746_exit);
> diff --git a/drivers/staging/iio/dac/max517.c b/drivers/staging/iio/dac/max517.c
> index adfbd20..a4df6d7 100644
> --- a/drivers/staging/iio/dac/max517.c
> +++ b/drivers/staging/iio/dac/max517.c
> @@ -280,20 +280,8 @@ static struct i2c_driver max517_driver = {
>  	.resume		= max517_resume,
>  	.id_table	= max517_id,
>  };
> -
> -static int __init max517_init(void)
> -{
> -	return i2c_add_driver(&max517_driver);
> -}
> -
> -static void __exit max517_exit(void)
> -{
> -	i2c_del_driver(&max517_driver);
> -}
> +module_i2c_driver(max517_driver);
>  
>  MODULE_AUTHOR("Roland Stigge <stigge@antcom.de>");
>  MODULE_DESCRIPTION("MAX517/MAX518/MAX519 8-bit DAC");
>  MODULE_LICENSE("GPL");
> -
> -module_init(max517_init);
> -module_exit(max517_exit);
> diff --git a/drivers/staging/iio/impedance-analyzer/ad5933.c b/drivers/staging/iio/impedance-analyzer/ad5933.c
> index 1086e0b..454d131 100644
> --- a/drivers/staging/iio/impedance-analyzer/ad5933.c
> +++ b/drivers/staging/iio/impedance-analyzer/ad5933.c
> @@ -796,18 +796,7 @@ static struct i2c_driver ad5933_driver = {
>  	.remove = __devexit_p(ad5933_remove),
>  	.id_table = ad5933_id,
>  };
> -
> -static __init int ad5933_init(void)
> -{
> -	return i2c_add_driver(&ad5933_driver);
> -}
> -module_init(ad5933_init);
> -
> -static __exit void ad5933_exit(void)
> -{
> -	i2c_del_driver(&ad5933_driver);
> -}
> -module_exit(ad5933_exit);
> +module_i2c_driver(ad5933_driver);
>  
>  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
>  MODULE_DESCRIPTION("Analog Devices AD5933 Impedance Conv. Network Analyzer");
> diff --git a/drivers/staging/iio/light/isl29018.c b/drivers/staging/iio/light/isl29018.c
> index 9dc9e63..4763836 100644
> --- a/drivers/staging/iio/light/isl29018.c
> +++ b/drivers/staging/iio/light/isl29018.c
> @@ -603,19 +603,7 @@ static struct i2c_driver isl29018_driver = {
>  	.remove	 = __devexit_p(isl29018_remove),
>  	.id_table = isl29018_id,
>  };
> -
> -static int __init isl29018_init(void)
> -{
> -	return i2c_add_driver(&isl29018_driver);
> -}
> -
> -static void __exit isl29018_exit(void)
> -{
> -	i2c_del_driver(&isl29018_driver);
> -}
> -
> -module_init(isl29018_init);
> -module_exit(isl29018_exit);
> +module_i2c_driver(isl29018_driver);
>  
>  MODULE_DESCRIPTION("ISL29018 Ambient Light Sensor driver");
>  MODULE_LICENSE("GPL");
> diff --git a/drivers/staging/iio/light/tsl2563.c b/drivers/staging/iio/light/tsl2563.c
> index 7e984bc..1942db1 100644
> --- a/drivers/staging/iio/light/tsl2563.c
> +++ b/drivers/staging/iio/light/tsl2563.c
> @@ -866,20 +866,8 @@ static struct i2c_driver tsl2563_i2c_driver = {
>  	.remove		= __devexit_p(tsl2563_remove),
>  	.id_table	= tsl2563_id,
>  };
> -
> -static int __init tsl2563_init(void)
> -{
> -	return i2c_add_driver(&tsl2563_i2c_driver);
> -}
> -
> -static void __exit tsl2563_exit(void)
> -{
> -	i2c_del_driver(&tsl2563_i2c_driver);
> -}
> +module_i2c_driver(tsl2563_i2c_driver);
>  
>  MODULE_AUTHOR("Nokia Corporation");
>  MODULE_DESCRIPTION("tsl2563 light sensor driver");
>  MODULE_LICENSE("GPL");
> -
> -module_init(tsl2563_init);
> -module_exit(tsl2563_exit);
> diff --git a/drivers/staging/iio/light/tsl2583.c b/drivers/staging/iio/light/tsl2583.c
> index 80f77cf..3836f73 100644
> --- a/drivers/staging/iio/light/tsl2583.c
> +++ b/drivers/staging/iio/light/tsl2583.c
> @@ -933,19 +933,7 @@ static struct i2c_driver taos_driver = {
>  	.probe = taos_probe,
>  	.remove = __devexit_p(taos_remove),
>  };
> -
> -static int __init taos_init(void)
> -{
> -	return i2c_add_driver(&taos_driver);
> -}
> -
> -static void __exit taos_exit(void)
> -{
> -	i2c_del_driver(&taos_driver);
> -}
> -
> -module_init(taos_init);
> -module_exit(taos_exit);
> +module_i2c_driver(taos_driver);
>  
>  MODULE_AUTHOR("J. August Brenner<jbrenner@taosinc.com>");
>  MODULE_DESCRIPTION("TAOS tsl2583 ambient light sensor driver");
> diff --git a/drivers/staging/iio/magnetometer/ak8975.c b/drivers/staging/iio/magnetometer/ak8975.c
> index 8b01712..db31d6d 100644
> --- a/drivers/staging/iio/magnetometer/ak8975.c
> +++ b/drivers/staging/iio/magnetometer/ak8975.c
> @@ -572,19 +572,7 @@ static struct i2c_driver ak8975_driver = {
>  	.remove		= __devexit_p(ak8975_remove),
>  	.id_table	= ak8975_id,
>  };
> -
> -static int __init ak8975_init(void)
> -{
> -	return i2c_add_driver(&ak8975_driver);
> -}
> -
> -static void __exit ak8975_exit(void)
> -{
> -	i2c_del_driver(&ak8975_driver);
> -}
> -
> -module_init(ak8975_init);
> -module_exit(ak8975_exit);
> +module_i2c_driver(ak8975_driver);
>  
>  MODULE_AUTHOR("Laxman Dewangan <ldewangan@nvidia.com>");
>  MODULE_DESCRIPTION("AK8975 magnetometer driver");
> diff --git a/drivers/staging/iio/magnetometer/hmc5843.c b/drivers/staging/iio/magnetometer/hmc5843.c
> index fc9ee97..7bb1bc6 100644
> --- a/drivers/staging/iio/magnetometer/hmc5843.c
> +++ b/drivers/staging/iio/magnetometer/hmc5843.c
> @@ -618,20 +618,8 @@ static struct i2c_driver hmc5843_driver = {
>  	.suspend	= hmc5843_suspend,
>  	.resume		= hmc5843_resume,
>  };
> -
> -static int __init hmc5843_init(void)
> -{
> -	return i2c_add_driver(&hmc5843_driver);
> -}
> -
> -static void __exit hmc5843_exit(void)
> -{
> -	i2c_del_driver(&hmc5843_driver);
> -}
> +module_i2c_driver(hmc5843_driver);
>  
>  MODULE_AUTHOR("Shubhrajyoti Datta <shubhrajyoti@ti.com");
>  MODULE_DESCRIPTION("HMC5843 driver");
>  MODULE_LICENSE("GPL");
> -
> -module_init(hmc5843_init);
> -module_exit(hmc5843_exit);
> diff --git a/drivers/staging/iio/meter/ade7854-i2c.c b/drivers/staging/iio/meter/ade7854-i2c.c
> index cbca3fd..1e1faa0 100644
> --- a/drivers/staging/iio/meter/ade7854-i2c.c
> +++ b/drivers/staging/iio/meter/ade7854-i2c.c
> @@ -253,19 +253,7 @@ static struct i2c_driver ade7854_i2c_driver = {
>  	.remove   = __devexit_p(ade7854_i2c_remove),
>  	.id_table = ade7854_id,
>  };
> -
> -static __init int ade7854_i2c_init(void)
> -{
> -	return i2c_add_driver(&ade7854_i2c_driver);
> -}
> -module_init(ade7854_i2c_init);
> -
> -static __exit void ade7854_i2c_exit(void)
> -{
> -	i2c_del_driver(&ade7854_i2c_driver);
> -}
> -module_exit(ade7854_i2c_exit);
> -
> +module_i2c_driver(ade7854_i2c_driver);
>  
>  MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>  MODULE_DESCRIPTION("Analog Devices ADE7854/58/68/78 Polyphase Multifunction Energy Metering IC I2C Driver");


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 1/5] drivercore: Generalize module_platform_driver
  2011-11-16 17:11   ` Grant Likely
@ 2011-11-17  6:51     ` Jonathan Cameron
  0 siblings, 0 replies; 26+ messages in thread
From: Jonathan Cameron @ 2011-11-17  6:51 UTC (permalink / raw)
  To: Grant Likely
  Cc: Lars-Peter Clausen, Greg Kroah-Hartman, Jean Delvare,
	Michael Hennerich, linux-iio, linux-kernel, linux-i2c,
	spi-devel-general

On 11/16/2011 05:11 PM, Grant Likely wrote:
> On Wed, Nov 16, 2011 at 2:13 AM, Lars-Peter Clausen <lars@metafoo.de> wrote:
>> This patch generalizes the module_platform_driver macro and introduces a new
>> module_driver macro. The module_driver macro takes a driver name, a register
>> and a unregister function for this driver type. Using these it construct the
>> module init and exit sections which register and unregister the driver. Since
>> such init/exit sections are commonly found in drivers this macro can be used
>> to eliminate a lot of boilerplate code.
>>
>> The macro is not intended to be used by driver modules directly, instead it
>> should be used to generate bus specific macros for registering drivers like
>> the module_platform_driver macro.
>>
>> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
> 
> Acked-by: Grant Likely <grant.likely@secretlab.ca>
Acked-by: Jonathan Cameron <jic23@kernel.org>
> 
>> ---
>>  include/linux/init.h            |   21 +++++++++++++++++++++
>>  include/linux/platform_device.h |   12 ++----------
>>  2 files changed, 23 insertions(+), 10 deletions(-)
>>
>> diff --git a/include/linux/init.h b/include/linux/init.h
>> index 9146f39..3e2d238 100644
>> --- a/include/linux/init.h
>> +++ b/include/linux/init.h
>> @@ -346,4 +346,25 @@ void __init parse_early_options(char *cmdline);
>>  #define __exit_p(x) NULL
>>  #endif
>>
>> +/**
>> + * module_driver() - Helper macro for drivers that don't do anything
>> + * special in module init/exit. This eliminates a lot of boilerplate.
>> + * Each module may only use this macro once, and calling it replaces
>> + * module_init() and module_exit().
>> + * Use this macro to construct bus specific macros for registering
>> + * drivers.
>> + */
>> +#define module_driver(__driver, __register, __unregister) \
>> +static int __init __driver##_init(void) \
>> +{ \
>> +       return __register(&(__driver)); \
>> +} \
>> +module_init(__driver##_init); \
>> +static void __exit __driver##_exit(void) \
>> +{ \
>> +       __unregister(&(__driver)); \
>> +} \
>> +module_exit(__driver##_exit);
>> +
>>  #endif /* _LINUX_INIT_H */
>> +
>> diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h
>> index 2a23f7d..165a8d1 100644
>> --- a/include/linux/platform_device.h
>> +++ b/include/linux/platform_device.h
>> @@ -196,16 +196,8 @@ static inline void platform_set_drvdata(struct platform_device *pdev, void *data
>>  * calling it replaces module_init() and module_exit()
>>  */
>>  #define module_platform_driver(__platform_driver) \
>> -static int __init __platform_driver##_init(void) \
>> -{ \
>> -       return platform_driver_register(&(__platform_driver)); \
>> -} \
>> -module_init(__platform_driver##_init); \
>> -static void __exit __platform_driver##_exit(void) \
>> -{ \
>> -       platform_driver_unregister(&(__platform_driver)); \
>> -} \
>> -module_exit(__platform_driver##_exit);
>> +       module_driver(__platform_driver, platform_driver_register, \
>> +                       platform_driver_unregister)
>>
>>  extern struct platform_device *platform_create_bundle(struct platform_driver *driver,
>>                                        int (*probe)(struct platform_device *),
>> --
>> 1.7.7.1
>>
>>
>>
> 
> 
> 


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 0/5] Generalize module_platform_driver
  2011-11-16 17:13       ` Grant Likely
@ 2011-11-17 19:49         ` Greg KH
  0 siblings, 0 replies; 26+ messages in thread
From: Greg KH @ 2011-11-17 19:49 UTC (permalink / raw)
  To: Grant Likely
  Cc: Greg KH, Jean Delvare, Lars-Peter Clausen, Jonathan Cameron,
	Michael Hennerich, linux-iio, linux-kernel, linux-i2c,
	spi-devel-general

On Wed, Nov 16, 2011 at 10:13:31AM -0700, Grant Likely wrote:
> On Wed, Nov 16, 2011 at 9:37 AM, Greg KH <gregkh@suse.de> wrote:
> > On Wed, Nov 16, 2011 at 05:36:18PM +0100, Jean Delvare wrote:
> >> On Wed, 16 Nov 2011 08:02:06 -0800, Greg KH wrote:
> >> > On Wed, Nov 16, 2011 at 10:13:34AM +0100, Lars-Peter Clausen wrote:
> >> > > Grant Likely recently introduced the module_platform_driver macro which can be
> >> > > used to eliminate a few lines on boilerplate code in platform driver modules.
> >> > > The same approach can be used to do the same for other bus type drivers.
> >> > >
> >> > > The first patch of this series generalizes the module_platform_driver macro and
> >> > > introduces the module_driver macro. It is similar to module_platform_driver
> >> > > macro but has two additional parameters to pass in the driver register and
> >> > > unregister function. The intend is that this macro is used to construct bus
> >> > > specific macros for generating the driver register/unregister boilerplate code.
> >> > >
> >> > > The next two patches in this series add the module_i2c_driver and
> >> > > module_spi_driver macro which use the module_driver macro to generate the I2C
> >> > > and SPI driver boilerplate code.
> >> > >
> >> > > The last two patches convert the driver found in the IIO framework to use the
> >> > > new module_i2c_driver and module_spi_driver macros to demonstrate their
> >> > > potential and remove over 700 lines of code.
> >> > >
> >> > > While this series only introduces these kind of helper macros for I2C and SPI
> >> > > bus drivers the same scheme should be applicable to most other bus driver types.
> >> > > For example PCI and USB seem to be good candidates.
> >> > >
> >> > > It probably makes sense to merge the first three patches together. The last two
> >> > > can probably, since this is not urgent, wait until the first three have reached
> >> > > mainline.
> >> >
> >> > Nice, I like this, unless people object, I'll merge the first patch to
> >> > the driver-core tree.
> >> >
> >> > I'll gladly take the i2c and spi patches as well if the subsystem
> >> > maintainers there don't object, and I'll work on the USB patch as well.
> >>
> >> No objection from me (for i2c).
> >
> > Wonderful, thanks for letting me know.
> 
> Yes, please take the spi patch too.

Ok, will go queue these up, thanks.

greg k-h

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 1/5] drivercore: Generalize module_platform_driver
  2011-11-16  9:13 ` [PATCH 1/5] drivercore: " Lars-Peter Clausen
  2011-11-16 17:11   ` Grant Likely
@ 2011-11-17 20:04   ` Greg KH
  2012-01-13  9:07   ` Guennadi Liakhovetski
  2 siblings, 0 replies; 26+ messages in thread
From: Greg KH @ 2011-11-17 20:04 UTC (permalink / raw)
  To: Lars-Peter Clausen
  Cc: Greg Kroah-Hartman, Jean Delvare, Grant Likely, Jonathan Cameron,
	Michael Hennerich, linux-iio, linux-kernel, linux-i2c,
	spi-devel-general

On Wed, Nov 16, 2011 at 10:13:35AM +0100, Lars-Peter Clausen wrote:
> This patch generalizes the module_platform_driver macro and introduces a new
> module_driver macro. The module_driver macro takes a driver name, a register
> and a unregister function for this driver type. Using these it construct the
> module init and exit sections which register and unregister the driver. Since
> such init/exit sections are commonly found in drivers this macro can be used
> to eliminate a lot of boilerplate code.
> 
> The macro is not intended to be used by driver modules directly, instead it
> should be used to generate bus specific macros for registering drivers like
> the module_platform_driver macro.
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
> Acked-by: Grant Likely <grant.likely@secretlab.ca>
> Acked-by: Jonathan Cameron <jic23@kernel.org>
> Acked-by: Wolfram Sang <w.sang@pengutronix.de>
> ---
>  include/linux/init.h            |   21 +++++++++++++++++++++

I've moved this from init.h (which is trying to get away from
module-specific stuff) to device.h, which is where this really should
be.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 3/5] SPI: Add helper macro for spi_driver boilerplate
  2011-11-16 17:12   ` Grant Likely
@ 2011-11-24  0:13     ` Ben Dooks
  2011-11-24  7:29       ` Lars-Peter Clausen
  0 siblings, 1 reply; 26+ messages in thread
From: Ben Dooks @ 2011-11-24  0:13 UTC (permalink / raw)
  To: Grant Likely
  Cc: Lars-Peter Clausen, Greg Kroah-Hartman, Jean Delvare,
	Jonathan Cameron, Michael Hennerich, linux-iio, linux-kernel,
	linux-i2c, spi-devel-general

On Wed, Nov 16, 2011 at 10:12:54AM -0700, Grant Likely wrote:
> On Wed, Nov 16, 2011 at 2:13 AM, Lars-Peter Clausen <lars@metafoo.de> wrote:
> > This patch introduces the module_spi_driver macro which is a convenience macro
> > for SPI driver modules similar to module_platform_driver. It is intended to be
> > used by drivers which init/exit section does nothing but register/unregister
> > the SPI driver. By using this macro it is possible to eliminate a few lines of
> > boilerplate code per SPI driver.
> >
> > Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
> 
> Acked-by: Grant Likely <grant.likely@secretlab.ca>

I'm begining to think we need to make some of these driver and device
bits more generic... there seems to be so much similar but not quite
the same code.

-- 
Ben Dooks, ben@fluff.org, http://www.fluff.org/ben/

Large Hadron Colada: A large Pina Colada that makes the universe disappear.


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 3/5] SPI: Add helper macro for spi_driver boilerplate
  2011-11-24  0:13     ` Ben Dooks
@ 2011-11-24  7:29       ` Lars-Peter Clausen
  0 siblings, 0 replies; 26+ messages in thread
From: Lars-Peter Clausen @ 2011-11-24  7:29 UTC (permalink / raw)
  To: Ben Dooks
  Cc: Grant Likely, Greg Kroah-Hartman, Jean Delvare, Jonathan Cameron,
	Michael Hennerich, linux-iio, linux-kernel, linux-i2c,
	spi-devel-general

On 11/24/2011 01:13 AM, Ben Dooks wrote:
> On Wed, Nov 16, 2011 at 10:12:54AM -0700, Grant Likely wrote:
>> On Wed, Nov 16, 2011 at 2:13 AM, Lars-Peter Clausen <lars@metafoo.de> wrote:
>>> This patch introduces the module_spi_driver macro which is a convenience macro
>>> for SPI driver modules similar to module_platform_driver. It is intended to be
>>> used by drivers which init/exit section does nothing but register/unregister
>>> the SPI driver. By using this macro it is possible to eliminate a few lines of
>>> boilerplate code per SPI driver.
>>>
>>> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
>>
>> Acked-by: Grant Likely <grant.likely@secretlab.ca>
> 
> I'm begining to think we need to make some of these driver and device
> bits more generic... there seems to be so much similar but not quite
> the same code.
> 

I've been thinking the same. A good start would probably be consolidating
the platform/spi/i2c device id handling code. Since those are all name based
ids the code for handling them looks rather similar, though there are some
minor differences.

- Lars

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 1/5] drivercore: Generalize module_platform_driver
  2011-11-16  9:13 ` [PATCH 1/5] drivercore: " Lars-Peter Clausen
  2011-11-16 17:11   ` Grant Likely
  2011-11-17 20:04   ` Greg KH
@ 2012-01-13  9:07   ` Guennadi Liakhovetski
  2012-01-13 18:23     ` Greg KH
  2 siblings, 1 reply; 26+ messages in thread
From: Guennadi Liakhovetski @ 2012-01-13  9:07 UTC (permalink / raw)
  To: Lars-Peter Clausen
  Cc: Greg Kroah-Hartman, Jean Delvare, Grant Likely, Jonathan Cameron,
	Michael Hennerich, linux-iio, linux-kernel, linux-i2c,
	spi-devel-general

I didn't find this patch either in "next" or in Greg's "driver-core" 
trees, so, couldn't generate a patch and had to comment here:

On Wed, 16 Nov 2011, Lars-Peter Clausen wrote:

> This patch generalizes the module_platform_driver macro and introduces a new
> module_driver macro. The module_driver macro takes a driver name, a register
> and a unregister function for this driver type. Using these it construct the
> module init and exit sections which register and unregister the driver. Since
> such init/exit sections are commonly found in drivers this macro can be used
> to eliminate a lot of boilerplate code.
> 
> The macro is not intended to be used by driver modules directly, instead it
> should be used to generate bus specific macros for registering drivers like
> the module_platform_driver macro.
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
> ---
>  include/linux/init.h            |   21 +++++++++++++++++++++
>  include/linux/platform_device.h |   12 ++----------
>  2 files changed, 23 insertions(+), 10 deletions(-)
> 
> diff --git a/include/linux/init.h b/include/linux/init.h
> index 9146f39..3e2d238 100644
> --- a/include/linux/init.h
> +++ b/include/linux/init.h
> @@ -346,4 +346,25 @@ void __init parse_early_options(char *cmdline);
>  #define __exit_p(x) NULL
>  #endif
>  
> +/**
> + * module_driver() - Helper macro for drivers that don't do anything
> + * special in module init/exit. This eliminates a lot of boilerplate.
> + * Each module may only use this macro once, and calling it replaces
> + * module_init() and module_exit().
> + * Use this macro to construct bus specific macros for registering
> + * drivers.
> + */
> +#define module_driver(__driver, __register, __unregister) \
> +static int __init __driver##_init(void) \
> +{ \
> +	return __register(&(__driver)); \
> +} \
> +module_init(__driver##_init); \
> +static void __exit __driver##_exit(void) \
> +{ \
> +	__unregister(&(__driver)); \
> +} \
> +module_exit(__driver##_exit);

Shall we maybe remove the trailing semicolon above?

Thanks
Guennadi

> +
>  #endif /* _LINUX_INIT_H */
> +
> diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h
> index 2a23f7d..165a8d1 100644
> --- a/include/linux/platform_device.h
> +++ b/include/linux/platform_device.h
> @@ -196,16 +196,8 @@ static inline void platform_set_drvdata(struct platform_device *pdev, void *data
>   * calling it replaces module_init() and module_exit()
>   */
>  #define module_platform_driver(__platform_driver) \
> -static int __init __platform_driver##_init(void) \
> -{ \
> -	return platform_driver_register(&(__platform_driver)); \
> -} \
> -module_init(__platform_driver##_init); \
> -static void __exit __platform_driver##_exit(void) \
> -{ \
> -	platform_driver_unregister(&(__platform_driver)); \
> -} \
> -module_exit(__platform_driver##_exit);
> +	module_driver(__platform_driver, platform_driver_register, \
> +			platform_driver_unregister)
>  
>  extern struct platform_device *platform_create_bundle(struct platform_driver *driver,
>  					int (*probe)(struct platform_device *),
> -- 
> 1.7.7.1
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
> 

---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 1/5] drivercore: Generalize module_platform_driver
  2012-01-13  9:07   ` Guennadi Liakhovetski
@ 2012-01-13 18:23     ` Greg KH
  0 siblings, 0 replies; 26+ messages in thread
From: Greg KH @ 2012-01-13 18:23 UTC (permalink / raw)
  To: Guennadi Liakhovetski
  Cc: Lars-Peter Clausen, Jean Delvare, Grant Likely, Jonathan Cameron,
	Michael Hennerich, linux-iio, linux-kernel, linux-i2c,
	spi-devel-general

On Fri, Jan 13, 2012 at 10:07:19AM +0100, Guennadi Liakhovetski wrote:
> I didn't find this patch either in "next" or in Greg's "driver-core" 
> trees, so, couldn't generate a patch and had to comment here:

It's in Linus's tree now.

> > +/**
> > + * module_driver() - Helper macro for drivers that don't do anything
> > + * special in module init/exit. This eliminates a lot of boilerplate.
> > + * Each module may only use this macro once, and calling it replaces
> > + * module_init() and module_exit().
> > + * Use this macro to construct bus specific macros for registering
> > + * drivers.
> > + */
> > +#define module_driver(__driver, __register, __unregister) \
> > +static int __init __driver##_init(void) \
> > +{ \
> > +	return __register(&(__driver)); \
> > +} \
> > +module_init(__driver##_init); \
> > +static void __exit __driver##_exit(void) \
> > +{ \
> > +	__unregister(&(__driver)); \
> > +} \
> > +module_exit(__driver##_exit);
> 
> Shall we maybe remove the trailing semicolon above?

Sure, but either way it doesn't really matter.

Care to send a fix-up patch that I can apply for 3.4?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2012-01-13 18:28 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-11-16  9:13 [PATCH 0/5] Generalize module_platform_driver Lars-Peter Clausen
2011-11-16  9:13 ` [PATCH 1/5] drivercore: " Lars-Peter Clausen
2011-11-16 17:11   ` Grant Likely
2011-11-17  6:51     ` Jonathan Cameron
2011-11-17 20:04   ` Greg KH
2012-01-13  9:07   ` Guennadi Liakhovetski
2012-01-13 18:23     ` Greg KH
2011-11-16  9:13 ` [PATCH 2/5] I2C: Add helper macro for i2c_driver boilerplate Lars-Peter Clausen
2011-11-16 17:12   ` Grant Likely
2011-11-17  6:47     ` Jonathan Cameron
2011-11-16  9:13 ` [PATCH 3/5] SPI: Add helper macro for spi_driver boilerplate Lars-Peter Clausen
2011-11-16 17:12   ` Grant Likely
2011-11-24  0:13     ` Ben Dooks
2011-11-24  7:29       ` Lars-Peter Clausen
2011-11-16  9:13 ` [PATCH 4/5] staging:iio: Use module_i2c_driver to register I2C drivers Lars-Peter Clausen
2011-11-17  6:50   ` Jonathan Cameron
2011-11-16  9:13 ` [PATCH 5/5] staging:iio: Use module_spi_driver to register SPI driver Lars-Peter Clausen
2011-11-16 17:15   ` Grant Likely
2011-11-17  6:48     ` Jonathan Cameron
2011-11-17  6:49   ` Jonathan Cameron
2011-11-16 16:02 ` [PATCH 0/5] Generalize module_platform_driver Greg KH
2011-11-16 16:36   ` Jean Delvare
2011-11-16 16:37     ` Greg KH
2011-11-16 17:13       ` Grant Likely
2011-11-17 19:49         ` Greg KH
2011-11-16 20:14 ` Wolfram Sang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).