All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Andrew F. Davis" <afd@ti.com>
To: David Airlie <airlied@linux.ie>,
	Russell King <rmk+kernel@arm.linux.org.uk>,
	Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>,
	Lars-Peter Clausen <lars@metafoo.de>
Cc: <dri-devel@lists.freedesktop.org>, <linux-kernel@vger.kernel.org>,
	"Andrew F. Davis" <afd@ti.com>
Subject: [PATCH] drm: Add helper macro for drm_i2c_encoder_driver boilerplate
Date: Thu, 22 Oct 2015 13:30:12 -0500	[thread overview]
Message-ID: <1445538612-3633-1-git-send-email-afd@ti.com> (raw)

This patch introduces the module_drm_i2c_encoder_driver macro which is
a convenience macro for I2C encoder driver modules similar to others
such as module_platform_driver.

To help with this we also add the drm_i2c_encoder_register macro
that gets THIS_MODULE without include chaining or adding it to
every driver filel, renaming the old drm_i2c_encoder_register to
__drm_i2c_encoder_register, again similar to many other subsystems.

Finally, use this macro in all aplicable drivers.

Signed-off-by: Andrew F. Davis <afd@ti.com>
---
 drivers/gpu/drm/i2c/adv7511.c     | 12 +-----------
 drivers/gpu/drm/i2c/ch7006_drv.c  | 12 +-----------
 drivers/gpu/drm/i2c/sil164_drv.c  | 14 +-------------
 drivers/gpu/drm/i2c/tda998x_drv.c | 17 +----------------
 include/drm/drm_encoder_slave.h   | 23 +++++++++++++++++++----
 5 files changed, 23 insertions(+), 55 deletions(-)

diff --git a/drivers/gpu/drm/i2c/adv7511.c b/drivers/gpu/drm/i2c/adv7511.c
index 00416f2..c1d1206 100644
--- a/drivers/gpu/drm/i2c/adv7511.c
+++ b/drivers/gpu/drm/i2c/adv7511.c
@@ -997,17 +997,7 @@ static struct drm_i2c_encoder_driver adv7511_driver = {
 	.encoder_init = adv7511_encoder_init,
 };
 
-static int __init adv7511_init(void)
-{
-	return drm_i2c_encoder_register(THIS_MODULE, &adv7511_driver);
-}
-module_init(adv7511_init);
-
-static void __exit adv7511_exit(void)
-{
-	drm_i2c_encoder_unregister(&adv7511_driver);
-}
-module_exit(adv7511_exit);
+module_drm_i2c_encoder_driver(adv7511_driver);
 
 MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
 MODULE_DESCRIPTION("ADV7511 HDMI transmitter driver");
diff --git a/drivers/gpu/drm/i2c/ch7006_drv.c b/drivers/gpu/drm/i2c/ch7006_drv.c
index 51fa323..cdf79f8 100644
--- a/drivers/gpu/drm/i2c/ch7006_drv.c
+++ b/drivers/gpu/drm/i2c/ch7006_drv.c
@@ -517,15 +517,7 @@ static struct drm_i2c_encoder_driver ch7006_driver = {
 
 /* Module initialization */
 
-static int __init ch7006_init(void)
-{
-	return drm_i2c_encoder_register(THIS_MODULE, &ch7006_driver);
-}
-
-static void __exit ch7006_exit(void)
-{
-	drm_i2c_encoder_unregister(&ch7006_driver);
-}
+module_drm_i2c_encoder_driver(ch7006_driver);
 
 int ch7006_debug;
 module_param_named(debug, ch7006_debug, int, 0600);
@@ -548,5 +540,3 @@ MODULE_AUTHOR("Francisco Jerez <currojerez@riseup.net>");
 MODULE_DESCRIPTION("Chrontel ch7006 TV encoder driver");
 MODULE_LICENSE("GPL and additional rights");
 
-module_init(ch7006_init);
-module_exit(ch7006_exit);
diff --git a/drivers/gpu/drm/i2c/sil164_drv.c b/drivers/gpu/drm/i2c/sil164_drv.c
index 002ce78..2d217ba 100644
--- a/drivers/gpu/drm/i2c/sil164_drv.c
+++ b/drivers/gpu/drm/i2c/sil164_drv.c
@@ -444,21 +444,9 @@ static struct drm_i2c_encoder_driver sil164_driver = {
 
 /* Module initialization */
 
-static int __init
-sil164_init(void)
-{
-	return drm_i2c_encoder_register(THIS_MODULE, &sil164_driver);
-}
-
-static void __exit
-sil164_exit(void)
-{
-	drm_i2c_encoder_unregister(&sil164_driver);
-}
+module_drm_i2c_encoder_driver(sil164_driver);
 
 MODULE_AUTHOR("Francisco Jerez <currojerez@riseup.net>");
 MODULE_DESCRIPTION("Silicon Image sil164 TMDS transmitter driver");
 MODULE_LICENSE("GPL and additional rights");
 
-module_init(sil164_init);
-module_exit(sil164_exit);
diff --git a/drivers/gpu/drm/i2c/tda998x_drv.c b/drivers/gpu/drm/i2c/tda998x_drv.c
index 424228b..2d77a5a 100644
--- a/drivers/gpu/drm/i2c/tda998x_drv.c
+++ b/drivers/gpu/drm/i2c/tda998x_drv.c
@@ -1620,23 +1620,8 @@ static struct drm_i2c_encoder_driver tda998x_driver = {
 
 /* Module initialization */
 
-static int __init
-tda998x_init(void)
-{
-	DBG("");
-	return drm_i2c_encoder_register(THIS_MODULE, &tda998x_driver);
-}
-
-static void __exit
-tda998x_exit(void)
-{
-	DBG("");
-	drm_i2c_encoder_unregister(&tda998x_driver);
-}
+module_drm_i2c_encoder_driver(tda998x_driver);
 
 MODULE_AUTHOR("Rob Clark <robdclark@gmail.com");
 MODULE_DESCRIPTION("NXP Semiconductors TDA998X HDMI Encoder");
 MODULE_LICENSE("GPL");
-
-module_init(tda998x_init);
-module_exit(tda998x_exit);
diff --git a/include/drm/drm_encoder_slave.h b/include/drm/drm_encoder_slave.h
index 8b9cc36..d80dc9d 100644
--- a/include/drm/drm_encoder_slave.h
+++ b/include/drm/drm_encoder_slave.h
@@ -138,16 +138,20 @@ static inline struct i2c_client *drm_i2c_encoder_get_client(struct drm_encoder *
 }
 
 /**
- * drm_i2c_encoder_register - Register an I2C encoder driver
+ * __drm_i2c_encoder_register - Register an I2C encoder driver
  * @owner:	Module containing the driver.
  * @driver:	Driver to be registered.
  */
-static inline int drm_i2c_encoder_register(struct module *owner,
-					   struct drm_i2c_encoder_driver *driver)
+static inline int __drm_i2c_encoder_register(struct module *owner,
+					     struct drm_i2c_encoder_driver *driver)
 {
 	return i2c_register_driver(owner, &driver->i2c_driver);
 }
 
+/* use a define to avoid include chaining to get THIS_MODULE */
+#define drm_i2c_encoder_register(driver) \
+	__drm_i2c_encoder_register(THIS_MODULE, driver)
+
 /**
  * drm_i2c_encoder_unregister - Unregister an I2C encoder driver
  * @driver:	Driver to be unregistered.
@@ -159,7 +163,6 @@ static inline void drm_i2c_encoder_unregister(struct drm_i2c_encoder_driver *dri
 
 void drm_i2c_encoder_destroy(struct drm_encoder *encoder);
 
-
 /*
  * Wrapper fxns which can be plugged in to drm_encoder_helper_funcs:
  */
@@ -178,5 +181,17 @@ enum drm_connector_status drm_i2c_encoder_detect(struct drm_encoder *encoder,
 void drm_i2c_encoder_save(struct drm_encoder *encoder);
 void drm_i2c_encoder_restore(struct drm_encoder *encoder);
 
+/**
+ * module_drm_i2c_encoder_driver() - Helper macro for registering a I2C
+ * Encoder driver
+ * @__drm_i2c_encoder_driver: drm_i2c_encoder_driver struct
+ *
+ * Helper macro for I2C Encoder 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_drm_i2c_encoder_driver(__drm_i2c_encoder_driver) \
+	module_driver(__drm_i2c_encoder_driver, drm_i2c_encoder_register, \
+			drm_i2c_encoder_unregister)
 
 #endif
-- 
1.9.1


WARNING: multiple messages have this Message-ID (diff)
From: "Andrew F. Davis" <afd@ti.com>
To: David Airlie <airlied@linux.ie>,
	Russell King <rmk+kernel@arm.linux.org.uk>,
	Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>,
	Lars-Peter Clausen <lars@metafoo.de>
Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
	"Andrew F. Davis" <afd@ti.com>
Subject: [PATCH] drm: Add helper macro for drm_i2c_encoder_driver boilerplate
Date: Thu, 22 Oct 2015 13:30:12 -0500	[thread overview]
Message-ID: <1445538612-3633-1-git-send-email-afd@ti.com> (raw)

This patch introduces the module_drm_i2c_encoder_driver macro which is
a convenience macro for I2C encoder driver modules similar to others
such as module_platform_driver.

To help with this we also add the drm_i2c_encoder_register macro
that gets THIS_MODULE without include chaining or adding it to
every driver filel, renaming the old drm_i2c_encoder_register to
__drm_i2c_encoder_register, again similar to many other subsystems.

Finally, use this macro in all aplicable drivers.

Signed-off-by: Andrew F. Davis <afd@ti.com>
---
 drivers/gpu/drm/i2c/adv7511.c     | 12 +-----------
 drivers/gpu/drm/i2c/ch7006_drv.c  | 12 +-----------
 drivers/gpu/drm/i2c/sil164_drv.c  | 14 +-------------
 drivers/gpu/drm/i2c/tda998x_drv.c | 17 +----------------
 include/drm/drm_encoder_slave.h   | 23 +++++++++++++++++++----
 5 files changed, 23 insertions(+), 55 deletions(-)

diff --git a/drivers/gpu/drm/i2c/adv7511.c b/drivers/gpu/drm/i2c/adv7511.c
index 00416f2..c1d1206 100644
--- a/drivers/gpu/drm/i2c/adv7511.c
+++ b/drivers/gpu/drm/i2c/adv7511.c
@@ -997,17 +997,7 @@ static struct drm_i2c_encoder_driver adv7511_driver = {
 	.encoder_init = adv7511_encoder_init,
 };
 
-static int __init adv7511_init(void)
-{
-	return drm_i2c_encoder_register(THIS_MODULE, &adv7511_driver);
-}
-module_init(adv7511_init);
-
-static void __exit adv7511_exit(void)
-{
-	drm_i2c_encoder_unregister(&adv7511_driver);
-}
-module_exit(adv7511_exit);
+module_drm_i2c_encoder_driver(adv7511_driver);
 
 MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
 MODULE_DESCRIPTION("ADV7511 HDMI transmitter driver");
diff --git a/drivers/gpu/drm/i2c/ch7006_drv.c b/drivers/gpu/drm/i2c/ch7006_drv.c
index 51fa323..cdf79f8 100644
--- a/drivers/gpu/drm/i2c/ch7006_drv.c
+++ b/drivers/gpu/drm/i2c/ch7006_drv.c
@@ -517,15 +517,7 @@ static struct drm_i2c_encoder_driver ch7006_driver = {
 
 /* Module initialization */
 
-static int __init ch7006_init(void)
-{
-	return drm_i2c_encoder_register(THIS_MODULE, &ch7006_driver);
-}
-
-static void __exit ch7006_exit(void)
-{
-	drm_i2c_encoder_unregister(&ch7006_driver);
-}
+module_drm_i2c_encoder_driver(ch7006_driver);
 
 int ch7006_debug;
 module_param_named(debug, ch7006_debug, int, 0600);
@@ -548,5 +540,3 @@ MODULE_AUTHOR("Francisco Jerez <currojerez@riseup.net>");
 MODULE_DESCRIPTION("Chrontel ch7006 TV encoder driver");
 MODULE_LICENSE("GPL and additional rights");
 
-module_init(ch7006_init);
-module_exit(ch7006_exit);
diff --git a/drivers/gpu/drm/i2c/sil164_drv.c b/drivers/gpu/drm/i2c/sil164_drv.c
index 002ce78..2d217ba 100644
--- a/drivers/gpu/drm/i2c/sil164_drv.c
+++ b/drivers/gpu/drm/i2c/sil164_drv.c
@@ -444,21 +444,9 @@ static struct drm_i2c_encoder_driver sil164_driver = {
 
 /* Module initialization */
 
-static int __init
-sil164_init(void)
-{
-	return drm_i2c_encoder_register(THIS_MODULE, &sil164_driver);
-}
-
-static void __exit
-sil164_exit(void)
-{
-	drm_i2c_encoder_unregister(&sil164_driver);
-}
+module_drm_i2c_encoder_driver(sil164_driver);
 
 MODULE_AUTHOR("Francisco Jerez <currojerez@riseup.net>");
 MODULE_DESCRIPTION("Silicon Image sil164 TMDS transmitter driver");
 MODULE_LICENSE("GPL and additional rights");
 
-module_init(sil164_init);
-module_exit(sil164_exit);
diff --git a/drivers/gpu/drm/i2c/tda998x_drv.c b/drivers/gpu/drm/i2c/tda998x_drv.c
index 424228b..2d77a5a 100644
--- a/drivers/gpu/drm/i2c/tda998x_drv.c
+++ b/drivers/gpu/drm/i2c/tda998x_drv.c
@@ -1620,23 +1620,8 @@ static struct drm_i2c_encoder_driver tda998x_driver = {
 
 /* Module initialization */
 
-static int __init
-tda998x_init(void)
-{
-	DBG("");
-	return drm_i2c_encoder_register(THIS_MODULE, &tda998x_driver);
-}
-
-static void __exit
-tda998x_exit(void)
-{
-	DBG("");
-	drm_i2c_encoder_unregister(&tda998x_driver);
-}
+module_drm_i2c_encoder_driver(tda998x_driver);
 
 MODULE_AUTHOR("Rob Clark <robdclark@gmail.com");
 MODULE_DESCRIPTION("NXP Semiconductors TDA998X HDMI Encoder");
 MODULE_LICENSE("GPL");
-
-module_init(tda998x_init);
-module_exit(tda998x_exit);
diff --git a/include/drm/drm_encoder_slave.h b/include/drm/drm_encoder_slave.h
index 8b9cc36..d80dc9d 100644
--- a/include/drm/drm_encoder_slave.h
+++ b/include/drm/drm_encoder_slave.h
@@ -138,16 +138,20 @@ static inline struct i2c_client *drm_i2c_encoder_get_client(struct drm_encoder *
 }
 
 /**
- * drm_i2c_encoder_register - Register an I2C encoder driver
+ * __drm_i2c_encoder_register - Register an I2C encoder driver
  * @owner:	Module containing the driver.
  * @driver:	Driver to be registered.
  */
-static inline int drm_i2c_encoder_register(struct module *owner,
-					   struct drm_i2c_encoder_driver *driver)
+static inline int __drm_i2c_encoder_register(struct module *owner,
+					     struct drm_i2c_encoder_driver *driver)
 {
 	return i2c_register_driver(owner, &driver->i2c_driver);
 }
 
+/* use a define to avoid include chaining to get THIS_MODULE */
+#define drm_i2c_encoder_register(driver) \
+	__drm_i2c_encoder_register(THIS_MODULE, driver)
+
 /**
  * drm_i2c_encoder_unregister - Unregister an I2C encoder driver
  * @driver:	Driver to be unregistered.
@@ -159,7 +163,6 @@ static inline void drm_i2c_encoder_unregister(struct drm_i2c_encoder_driver *dri
 
 void drm_i2c_encoder_destroy(struct drm_encoder *encoder);
 
-
 /*
  * Wrapper fxns which can be plugged in to drm_encoder_helper_funcs:
  */
@@ -178,5 +181,17 @@ enum drm_connector_status drm_i2c_encoder_detect(struct drm_encoder *encoder,
 void drm_i2c_encoder_save(struct drm_encoder *encoder);
 void drm_i2c_encoder_restore(struct drm_encoder *encoder);
 
+/**
+ * module_drm_i2c_encoder_driver() - Helper macro for registering a I2C
+ * Encoder driver
+ * @__drm_i2c_encoder_driver: drm_i2c_encoder_driver struct
+ *
+ * Helper macro for I2C Encoder 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_drm_i2c_encoder_driver(__drm_i2c_encoder_driver) \
+	module_driver(__drm_i2c_encoder_driver, drm_i2c_encoder_register, \
+			drm_i2c_encoder_unregister)
 
 #endif
-- 
1.9.1

             reply	other threads:[~2015-10-22 18:32 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-22 18:30 Andrew F. Davis [this message]
2015-10-22 18:30 ` [PATCH] drm: Add helper macro for drm_i2c_encoder_driver boilerplate Andrew F. Davis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1445538612-3633-1-git-send-email-afd@ti.com \
    --to=afd@ti.com \
    --cc=airlied@linux.ie \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=lars@metafoo.de \
    --cc=laurent.pinchart+renesas@ideasonboard.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rmk+kernel@arm.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.