All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 00/22] mfd: demodularization of non-modular drivers
@ 2018-12-03  4:23 ` Paul Gortmaker
  0 siblings, 0 replies; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones
  Cc: linux-kernel, Paul Gortmaker, Arnd Bergmann, Cory Maccarrone,
	David Dajun Chen, Dong Aisheng, Eric Miao, Graeme Gregory,
	Guennadi Liakhovetski, Haojian Zhuang, Jin Park,
	Jorge Eduardo Candelaria, Laxman Dewangan, Linus Walleij,
	Mark Brown, Mattias Nilsson, Michael Hennerich, Mike Rapoport,
	Tony Lindgren, Venu Byravarasu, linux-omap, patches,
	Support Opensource

[v1 --> v2: add some more commits as requested by Lee (MFD maintainer),
 update the 00/NN text; re-do build and link testing on new linux-next. ]

This group of MFD drivers are all controlled by "bool" Kconfig settings,
but contain various amounts of largely pointless uses of infrastructure
related to modular operations, even though they can't be built modular.

We can easily remove/replace all of it.  We are trying to make driver
code consistent with the Makefiles/Kconfigs that control them.  This
means not using modular functions/macros for drivers that can never be
built as a module.  Some of the downfalls this oversight leads to are:

 (1) it is easy to accidentally write unused module_exit and remove code
 (2) it can be misleading when reading the source, thinking it can be
     modular when the Makefile and/or Kconfig prohibit it
 (3) it requires the include of the module.h header file which in turn
     includes nearly everything else, thus adding a lot of CPP overhead.
 (4) it gets copied/replicated into other drivers and spreads quickly.

What we see in current drivers falls into one or more of the following
categories:

1) include of <linux/module.h> when it simply isn't needed

2) Use of MODULE_LICENSE, MODULE_DEVICE_TABLE,  MODULE_AUTHOR etc. 
   macros that are no-ops for non-modular drivers.

3) Creation of a module_exit() function that will be compiled and
   linked in but never actually called for non-modular drivers.

4) Addition of a platform_driver ".remove" function that is bound
   into the struct but will never be called for non-module use cases.

Solution to #1 --> #3 is simple ; we just delete the related code.

The solution to #4 is similar - we delete the ".remove" function and
the binding into the platform_driver struct.  However, since the same
".remove" function could also be triggered by an "unbind" (such as for
pass-through of a device to a guest instance)  - so we also explicitly
disable any unbind for the driver.

The unbind mask allows us to ensure we will see if there was some odd
corner case out there that was relying on it.  Typically it would be a
multi-port ethernet card passing a port through to a guest, so a
sensible use case in MFD drivers seems highly unlikely.  This same
solution has already been used in multiple other mainline subsystems.

Build testing was done on drivers/mfd for allyesconfig on x86_64, ARM
and ARM-64 on a recent linux-next checkout.

Paul.

---

Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Cory Maccarrone <darkstar6262@gmail.com>
Cc: David Dajun Chen <dchen@diasemi.com>
Cc: Dong Aisheng <dong.aisheng@linaro.org>
Cc: Eric Miao <eric.miao@marvell.com>
Cc: Graeme Gregory <gg@slimlogic.co.uk>
Cc: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Cc: Haojian Zhuang <haojian.zhuang@marvell.com>
Cc: Jin Park <jinyoungp@nvidia.com>
Cc: Jorge Eduardo Candelaria <jedu@slimlogic.co.uk>
Cc: Laxman Dewangan <ldewangan@nvidia.com>
Cc: Lee Jones <lee.jones@linaro.org>
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cc: Mattias Nilsson <mattias.i.nilsson@stericsson.com>
Cc: Michael Hennerich <michael.hennerich@analog.com>
Cc: Mike Rapoport <mike@compulab.co.il>
Cc: Tony Lindgren <tony@atomide.com>
Cc: Venu Byravarasu <vbyravarasu@nvidia.com>
Cc: linux-omap@vger.kernel.org
Cc: patches@opensource.cirrus.com
Cc: Support Opensource <support.opensource@diasemi.com>


Paul Gortmaker (22):
  mfd: aat2870-core: Make it explicitly non-modular
  mfd: adp5520: Make it explicitly non-modular
  mfd: as3711: Make it explicitly non-modular
  mfd: da903x: Make it explicitly non-modular
  mfd: da9052-*: Make it explicitly non-modular
  mfd: da9055-i2c: Make it explicitly non-modular
  mfd: da9055-core: make it explicitly non-modular
  mfd: db8500-prcmu: drop unused MODULE_ tags from non-modular code
  mfd: htc-i2cpld: Make it explicitly non-modular
  mfd: max8925-core: drop unused MODULE_ tags from non-modular code
  mfd: rc5t583: Make it explicitly non-modular
  mfd: sta2x11: drop unused MODULE_ tags from non-modular code
  mfd: syscon: Make it explicitly non-modular
  mfd: tps65090: Make it explicitly non-modular
  mfd: tps65910: Make it explicitly non-modular
  mfd: tps80031: Make it explicitly non-modular
  mfd: wm831x-spi: Make it explicitly non-modular
  mfd: wm831x-i2c: Make it explicitly non-modular
  mfd: wm831x-core: drop unused MODULE_ tags from non-modular code
  mfd: wm8350-i2c: Make it explicitly non-modular
  mfd: wm8350-core: drop unused MODULE_ tags from non-modular code
  mfd: wm8400-core: Make it explicitly non-modular

 drivers/mfd/aat2870-core.c        | 40 +++------------------------------------
 drivers/mfd/adp5520.c             | 30 +++++++----------------------
 drivers/mfd/as3711.c              | 14 --------------
 drivers/mfd/da903x.c              | 26 +++----------------------
 drivers/mfd/da9052-core.c         | 11 -----------
 drivers/mfd/da9052-i2c.c          | 22 ++-------------------
 drivers/mfd/da9052-irq.c          |  1 -
 drivers/mfd/da9052-spi.c          | 22 ++-------------------
 drivers/mfd/da9055-core.c         | 13 ++-----------
 drivers/mfd/da9055-i2c.c          | 24 ++---------------------
 drivers/mfd/db8500-prcmu.c        | 10 ++++------
 drivers/mfd/htc-i2cpld.c          | 18 +-----------------
 drivers/mfd/max8925-core.c        |  7 +------
 drivers/mfd/rc5t583.c             | 14 --------------
 drivers/mfd/sta2x11-mfd.c         | 10 ++++------
 drivers/mfd/syscon.c              | 12 +-----------
 drivers/mfd/tps65090.c            | 30 +++++------------------------
 drivers/mfd/tps65910.c            | 18 +-----------------
 drivers/mfd/tps80031.c            | 37 ++----------------------------------
 drivers/mfd/wm831x-core.c         |  7 ++-----
 drivers/mfd/wm831x-i2c.c          | 20 ++------------------
 drivers/mfd/wm831x-spi.c          | 24 ++---------------------
 drivers/mfd/wm8350-core.c         |  6 ++----
 drivers/mfd/wm8350-i2c.c          | 24 +----------------------
 drivers/mfd/wm8400-core.c         | 18 +++---------------
 include/linux/mfd/da9052/da9052.h |  1 -
 26 files changed, 52 insertions(+), 407 deletions(-)

-- 
2.7.4


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

* [PATCH v2 00/22] mfd: demodularization of non-modular drivers
@ 2018-12-03  4:23 ` Paul Gortmaker
  0 siblings, 0 replies; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones
  Cc: linux-kernel, Paul Gortmaker, Arnd Bergmann, Cory Maccarrone,
	David Dajun Chen, Dong Aisheng, Eric Miao, Graeme Gregory,
	Guennadi Liakhovetski, Haojian Zhuang, Jin Park,
	Jorge Eduardo Candelaria, Laxman Dewangan, Linus Walleij,
	Mark Brown, Mattias Nilsson, Michael Hennerich, Mike Rapoport,
	Tony

[v1 --> v2: add some more commits as requested by Lee (MFD maintainer),
 update the 00/NN text; re-do build and link testing on new linux-next. ]

This group of MFD drivers are all controlled by "bool" Kconfig settings,
but contain various amounts of largely pointless uses of infrastructure
related to modular operations, even though they can't be built modular.

We can easily remove/replace all of it.  We are trying to make driver
code consistent with the Makefiles/Kconfigs that control them.  This
means not using modular functions/macros for drivers that can never be
built as a module.  Some of the downfalls this oversight leads to are:

 (1) it is easy to accidentally write unused module_exit and remove code
 (2) it can be misleading when reading the source, thinking it can be
     modular when the Makefile and/or Kconfig prohibit it
 (3) it requires the include of the module.h header file which in turn
     includes nearly everything else, thus adding a lot of CPP overhead.
 (4) it gets copied/replicated into other drivers and spreads quickly.

What we see in current drivers falls into one or more of the following
categories:

1) include of <linux/module.h> when it simply isn't needed

2) Use of MODULE_LICENSE, MODULE_DEVICE_TABLE,  MODULE_AUTHOR etc. 
   macros that are no-ops for non-modular drivers.

3) Creation of a module_exit() function that will be compiled and
   linked in but never actually called for non-modular drivers.

4) Addition of a platform_driver ".remove" function that is bound
   into the struct but will never be called for non-module use cases.

Solution to #1 --> #3 is simple ; we just delete the related code.

The solution to #4 is similar - we delete the ".remove" function and
the binding into the platform_driver struct.  However, since the same
".remove" function could also be triggered by an "unbind" (such as for
pass-through of a device to a guest instance)  - so we also explicitly
disable any unbind for the driver.

The unbind mask allows us to ensure we will see if there was some odd
corner case out there that was relying on it.  Typically it would be a
multi-port ethernet card passing a port through to a guest, so a
sensible use case in MFD drivers seems highly unlikely.  This same
solution has already been used in multiple other mainline subsystems.

Build testing was done on drivers/mfd for allyesconfig on x86_64, ARM
and ARM-64 on a recent linux-next checkout.

Paul.

---

Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Cory Maccarrone <darkstar6262@gmail.com>
Cc: David Dajun Chen <dchen@diasemi.com>
Cc: Dong Aisheng <dong.aisheng@linaro.org>
Cc: Eric Miao <eric.miao@marvell.com>
Cc: Graeme Gregory <gg@slimlogic.co.uk>
Cc: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Cc: Haojian Zhuang <haojian.zhuang@marvell.com>
Cc: Jin Park <jinyoungp@nvidia.com>
Cc: Jorge Eduardo Candelaria <jedu@slimlogic.co.uk>
Cc: Laxman Dewangan <ldewangan@nvidia.com>
Cc: Lee Jones <lee.jones@linaro.org>
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cc: Mattias Nilsson <mattias.i.nilsson@stericsson.com>
Cc: Michael Hennerich <michael.hennerich@analog.com>
Cc: Mike Rapoport <mike@compulab.co.il>
Cc: Tony Lindgren <tony@atomide.com>
Cc: Venu Byravarasu <vbyravarasu@nvidia.com>
Cc: linux-omap@vger.kernel.org
Cc: patches@opensource.cirrus.com
Cc: Support Opensource <support.opensource@diasemi.com>


Paul Gortmaker (22):
  mfd: aat2870-core: Make it explicitly non-modular
  mfd: adp5520: Make it explicitly non-modular
  mfd: as3711: Make it explicitly non-modular
  mfd: da903x: Make it explicitly non-modular
  mfd: da9052-*: Make it explicitly non-modular
  mfd: da9055-i2c: Make it explicitly non-modular
  mfd: da9055-core: make it explicitly non-modular
  mfd: db8500-prcmu: drop unused MODULE_ tags from non-modular code
  mfd: htc-i2cpld: Make it explicitly non-modular
  mfd: max8925-core: drop unused MODULE_ tags from non-modular code
  mfd: rc5t583: Make it explicitly non-modular
  mfd: sta2x11: drop unused MODULE_ tags from non-modular code
  mfd: syscon: Make it explicitly non-modular
  mfd: tps65090: Make it explicitly non-modular
  mfd: tps65910: Make it explicitly non-modular
  mfd: tps80031: Make it explicitly non-modular
  mfd: wm831x-spi: Make it explicitly non-modular
  mfd: wm831x-i2c: Make it explicitly non-modular
  mfd: wm831x-core: drop unused MODULE_ tags from non-modular code
  mfd: wm8350-i2c: Make it explicitly non-modular
  mfd: wm8350-core: drop unused MODULE_ tags from non-modular code
  mfd: wm8400-core: Make it explicitly non-modular

 drivers/mfd/aat2870-core.c        | 40 +++------------------------------------
 drivers/mfd/adp5520.c             | 30 +++++++----------------------
 drivers/mfd/as3711.c              | 14 --------------
 drivers/mfd/da903x.c              | 26 +++----------------------
 drivers/mfd/da9052-core.c         | 11 -----------
 drivers/mfd/da9052-i2c.c          | 22 ++-------------------
 drivers/mfd/da9052-irq.c          |  1 -
 drivers/mfd/da9052-spi.c          | 22 ++-------------------
 drivers/mfd/da9055-core.c         | 13 ++-----------
 drivers/mfd/da9055-i2c.c          | 24 ++---------------------
 drivers/mfd/db8500-prcmu.c        | 10 ++++------
 drivers/mfd/htc-i2cpld.c          | 18 +-----------------
 drivers/mfd/max8925-core.c        |  7 +------
 drivers/mfd/rc5t583.c             | 14 --------------
 drivers/mfd/sta2x11-mfd.c         | 10 ++++------
 drivers/mfd/syscon.c              | 12 +-----------
 drivers/mfd/tps65090.c            | 30 +++++------------------------
 drivers/mfd/tps65910.c            | 18 +-----------------
 drivers/mfd/tps80031.c            | 37 ++----------------------------------
 drivers/mfd/wm831x-core.c         |  7 ++-----
 drivers/mfd/wm831x-i2c.c          | 20 ++------------------
 drivers/mfd/wm831x-spi.c          | 24 ++---------------------
 drivers/mfd/wm8350-core.c         |  6 ++----
 drivers/mfd/wm8350-i2c.c          | 24 +----------------------
 drivers/mfd/wm8400-core.c         | 18 +++---------------
 include/linux/mfd/da9052/da9052.h |  1 -
 26 files changed, 52 insertions(+), 407 deletions(-)

-- 
2.7.4

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

* [PATCH 01/22] mfd: aat2870-core: Make it explicitly non-modular
  2018-12-03  4:23 ` Paul Gortmaker
  (?)
@ 2018-12-03  4:23 ` Paul Gortmaker
  -1 siblings, 0 replies; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones; +Cc: linux-kernel, Paul Gortmaker, Jin Park

The Kconfig currently controlling compilation of this code is:

drivers/mfd/Kconfig:config MFD_AAT2870_CORE
drivers/mfd/Kconfig:    bool "AnalogicTech AAT2870"

...meaning that it currently is not being built as a module by anyone.

Lets remove the modular code that is essentially orphaned, so that
when reading the driver there is no doubt it is builtin-only.

We explicitly disallow a driver unbind, since that doesn't have a
sensible use case anyway, and it allows us to drop the ".remove"
code for non-modular drivers.

Since module_init was not in use by this code, the init ordering
remains unchanged with this commit.

Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code.

We also delete the MODULE_LICENSE tag etc. since all that information
is already contained at the top of the file in the comments.

Cc: Lee Jones <lee.jones@linaro.org>
Cc: Jin Park <jinyoungp@nvidia.com>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 drivers/mfd/aat2870-core.c | 40 +++-------------------------------------
 1 file changed, 3 insertions(+), 37 deletions(-)

diff --git a/drivers/mfd/aat2870-core.c b/drivers/mfd/aat2870-core.c
index 3ba19a45f199..9d3d90d386c2 100644
--- a/drivers/mfd/aat2870-core.c
+++ b/drivers/mfd/aat2870-core.c
@@ -20,7 +20,6 @@
  */
 
 #include <linux/kernel.h>
-#include <linux/module.h>
 #include <linux/init.h>
 #include <linux/debugfs.h>
 #include <linux/slab.h>
@@ -349,18 +348,10 @@ static void aat2870_init_debugfs(struct aat2870_data *aat2870)
 			 "Failed to create debugfs register file\n");
 }
 
-static void aat2870_uninit_debugfs(struct aat2870_data *aat2870)
-{
-	debugfs_remove_recursive(aat2870->dentry_root);
-}
 #else
 static inline void aat2870_init_debugfs(struct aat2870_data *aat2870)
 {
 }
-
-static inline void aat2870_uninit_debugfs(struct aat2870_data *aat2870)
-{
-}
 #endif /* CONFIG_DEBUG_FS */
 
 static int aat2870_i2c_probe(struct i2c_client *client,
@@ -440,20 +431,6 @@ static int aat2870_i2c_probe(struct i2c_client *client,
 	return ret;
 }
 
-static int aat2870_i2c_remove(struct i2c_client *client)
-{
-	struct aat2870_data *aat2870 = i2c_get_clientdata(client);
-
-	aat2870_uninit_debugfs(aat2870);
-
-	mfd_remove_devices(aat2870->dev);
-	aat2870_disable(aat2870);
-	if (aat2870->uninit)
-		aat2870->uninit(aat2870);
-
-	return 0;
-}
-
 #ifdef CONFIG_PM_SLEEP
 static int aat2870_i2c_suspend(struct device *dev)
 {
@@ -492,15 +469,14 @@ static const struct i2c_device_id aat2870_i2c_id_table[] = {
 	{ "aat2870", 0 },
 	{ }
 };
-MODULE_DEVICE_TABLE(i2c, aat2870_i2c_id_table);
 
 static struct i2c_driver aat2870_i2c_driver = {
 	.driver = {
-		.name	= "aat2870",
-		.pm	= &aat2870_pm_ops,
+		.name			= "aat2870",
+		.pm			= &aat2870_pm_ops,
+		.suppress_bind_attrs	= true,
 	},
 	.probe		= aat2870_i2c_probe,
-	.remove		= aat2870_i2c_remove,
 	.id_table	= aat2870_i2c_id_table,
 };
 
@@ -509,13 +485,3 @@ static int __init aat2870_init(void)
 	return i2c_add_driver(&aat2870_i2c_driver);
 }
 subsys_initcall(aat2870_init);
-
-static void __exit aat2870_exit(void)
-{
-	i2c_del_driver(&aat2870_i2c_driver);
-}
-module_exit(aat2870_exit);
-
-MODULE_DESCRIPTION("Core support for the AnalogicTech AAT2870");
-MODULE_LICENSE("GPL");
-MODULE_AUTHOR("Jin Park <jinyoungp@nvidia.com>");
-- 
2.7.4


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

* [PATCH 02/22] mfd: adp5520: Make it explicitly non-modular
  2018-12-03  4:23 ` Paul Gortmaker
  (?)
  (?)
@ 2018-12-03  4:23 ` Paul Gortmaker
  -1 siblings, 0 replies; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones; +Cc: linux-kernel, Paul Gortmaker, Michael Hennerich

The Makefile/Kconfig currently controlling compilation of this code is:

drivers/mfd/Makefile:obj-$(CONFIG_PMIC_ADP5520) += adp5520.o
drivers/mfd/Kconfig:config PMIC_ADP5520
drivers/mfd/Kconfig:    bool "Analog Devices ADP5520/01 MFD PMIC Core Support"

...meaning that it currently is not being built as a module by anyone.

Lets remove the modular code that is essentially orphaned, so that
when reading the driver there is no doubt it is builtin-only.

We explicitly disallow a driver unbind, since that doesn't have a
sensible use case anyway, and it allows us to drop the ".remove"
code for non-modular drivers.

Since module_i2c_driver() uses the same init level priority as
builtin_i2c_driver() the init ordering remains unchanged with
this commit.

Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code.

We also delete the MODULE_LICENSE tag etc. since all that information
was (or is now) contained at the top of the file in the comments.

Cc: Michael Hennerich <michael.hennerich@analog.com>
Cc: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 drivers/mfd/adp5520.c | 30 +++++++-----------------------
 1 file changed, 7 insertions(+), 23 deletions(-)

diff --git a/drivers/mfd/adp5520.c b/drivers/mfd/adp5520.c
index be0497b96720..2cdd39cb8a18 100644
--- a/drivers/mfd/adp5520.c
+++ b/drivers/mfd/adp5520.c
@@ -7,6 +7,8 @@
  *
  * Copyright 2009 Analog Devices Inc.
  *
+ * Author: Michael Hennerich <michael.hennerich@analog.com>
+ *
  * Derived from da903x:
  * Copyright (C) 2008 Compulab, Ltd.
  *	Mike Rapoport <mike@compulab.co.il>
@@ -18,7 +20,7 @@
  */
 
 #include <linux/kernel.h>
-#include <linux/module.h>
+#include <linux/init.h>
 #include <linux/platform_device.h>
 #include <linux/slab.h>
 #include <linux/interrupt.h>
@@ -304,18 +306,6 @@ static int adp5520_probe(struct i2c_client *client,
 	return ret;
 }
 
-static int adp5520_remove(struct i2c_client *client)
-{
-	struct adp5520_chip *chip = dev_get_drvdata(&client->dev);
-
-	if (chip->irq)
-		free_irq(chip->irq, chip);
-
-	adp5520_remove_subdevs(chip);
-	adp5520_write(chip->dev, ADP5520_MODE_STATUS, 0);
-	return 0;
-}
-
 #ifdef CONFIG_PM_SLEEP
 static int adp5520_suspend(struct device *dev)
 {
@@ -346,20 +336,14 @@ static const struct i2c_device_id adp5520_id[] = {
 	{ "pmic-adp5501", ID_ADP5501 },
 	{ }
 };
-MODULE_DEVICE_TABLE(i2c, adp5520_id);
 
 static struct i2c_driver adp5520_driver = {
 	.driver = {
-		.name	= "adp5520",
-		.pm	= &adp5520_pm,
+		.name			= "adp5520",
+		.pm			= &adp5520_pm,
+		.suppress_bind_attrs	= true,
 	},
 	.probe		= adp5520_probe,
-	.remove		= adp5520_remove,
 	.id_table	= adp5520_id,
 };
-
-module_i2c_driver(adp5520_driver);
-
-MODULE_AUTHOR("Michael Hennerich <michael.hennerich@analog.com>");
-MODULE_DESCRIPTION("ADP5520(01) PMIC-MFD Driver");
-MODULE_LICENSE("GPL");
+builtin_i2c_driver(adp5520_driver);
-- 
2.7.4


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

* [PATCH 03/22] mfd: as3711: Make it explicitly non-modular
  2018-12-03  4:23 ` Paul Gortmaker
                   ` (2 preceding siblings ...)
  (?)
@ 2018-12-03  4:23 ` Paul Gortmaker
  -1 siblings, 0 replies; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones; +Cc: linux-kernel, Paul Gortmaker, Guennadi Liakhovetski

The Kconfig currently controlling compilation of this code is:

drivers/mfd/Kconfig:config MFD_AS3711
drivers/mfd/Kconfig:    bool "AMS AS3711"

...meaning that it currently is not being built as a module by anyone.

Lets remove the modular code that is essentially orphaned, so that
when reading the driver there is no doubt it is builtin-only.

Since module_init was not in use by this code, the init ordering
remains unchanged with this commit.

We don't replace module.h with init.h since the file already has that.

Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code.

We also delete the MODULE_LICENSE tag etc. since all that information
is already contained at the top of the file in the comments.

Cc: Lee Jones <lee.jones@linaro.org>
Cc: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 drivers/mfd/as3711.c | 14 --------------
 1 file changed, 14 deletions(-)

diff --git a/drivers/mfd/as3711.c b/drivers/mfd/as3711.c
index 67b12417585d..7a74a874b93c 100644
--- a/drivers/mfd/as3711.c
+++ b/drivers/mfd/as3711.c
@@ -16,7 +16,6 @@
 #include <linux/kernel.h>
 #include <linux/mfd/as3711.h>
 #include <linux/mfd/core.h>
-#include <linux/module.h>
 #include <linux/of.h>
 #include <linux/regmap.h>
 #include <linux/slab.h>
@@ -118,7 +117,6 @@ static const struct of_device_id as3711_of_match[] = {
 	{.compatible = "ams,as3711",},
 	{}
 };
-MODULE_DEVICE_TABLE(of, as3711_of_match);
 #endif
 
 static int as3711_i2c_probe(struct i2c_client *client,
@@ -202,8 +200,6 @@ static const struct i2c_device_id as3711_i2c_id[] = {
 	{}
 };
 
-MODULE_DEVICE_TABLE(i2c, as3711_i2c_id);
-
 static struct i2c_driver as3711_i2c_driver = {
 	.driver = {
 		   .name = "as3711",
@@ -219,13 +215,3 @@ static int __init as3711_i2c_init(void)
 }
 /* Initialise early */
 subsys_initcall(as3711_i2c_init);
-
-static void __exit as3711_i2c_exit(void)
-{
-	i2c_del_driver(&as3711_i2c_driver);
-}
-module_exit(as3711_i2c_exit);
-
-MODULE_AUTHOR("Guennadi Liakhovetski <g.liakhovetski@gmx.de>");
-MODULE_DESCRIPTION("AS3711 PMIC driver");
-MODULE_LICENSE("GPL v2");
-- 
2.7.4


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

* [PATCH 04/22] mfd: da903x: Make it explicitly non-modular
  2018-12-03  4:23 ` Paul Gortmaker
                   ` (3 preceding siblings ...)
  (?)
@ 2018-12-03  4:23 ` Paul Gortmaker
  -1 siblings, 0 replies; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones
  Cc: linux-kernel, Paul Gortmaker, Support Opensource, Eric Miao,
	Mike Rapoport

The Kconfig currently controlling compilation of this code is:

drivers/mfd/Kconfig:config PMIC_DA903X
drivers/mfd/Kconfig-    bool "Dialog Semiconductor DA9030/DA9034 PMIC Support"

...meaning that it currently is not being built as a module by anyone.

Lets remove the modular code that is essentially orphaned, so that
when reading the driver there is no doubt it is builtin-only.

We explicitly disallow a driver unbind, since that doesn't have a
sensible use case anyway, and it allows us to drop the ".remove"
code for non-modular drivers.

Since module_init was not in use by this code, the init ordering
remains unchanged with this commit.

We replace module.h with init.h and export.h ; the latter since this
file does export some syms.

Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code.

We also delete the MODULE_LICENSE tag etc. since all that information
is already contained at the top of the file in the comments.

Cc: Support Opensource <support.opensource@diasemi.com>
Cc: Lee Jones <lee.jones@linaro.org>
Cc: Eric Miao <eric.miao@marvell.com>
Cc: Mike Rapoport <mike@compulab.co.il>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 drivers/mfd/da903x.c | 26 +++-----------------------
 1 file changed, 3 insertions(+), 23 deletions(-)

diff --git a/drivers/mfd/da903x.c b/drivers/mfd/da903x.c
index 09f367571c58..78edb0558a0f 100644
--- a/drivers/mfd/da903x.c
+++ b/drivers/mfd/da903x.c
@@ -13,7 +13,7 @@
  */
 
 #include <linux/kernel.h>
-#include <linux/module.h>
+#include <linux/init.h>
 #include <linux/interrupt.h>
 #include <linux/platform_device.h>
 #include <linux/i2c.h>
@@ -446,7 +446,6 @@ static const struct i2c_device_id da903x_id_table[] = {
 	{ "da9034", 1 },
 	{ },
 };
-MODULE_DEVICE_TABLE(i2c, da903x_id_table);
 
 static int __remove_subdev(struct device *dev, void *unused)
 {
@@ -535,20 +534,12 @@ static int da903x_probe(struct i2c_client *client,
 	return da903x_add_subdevs(chip, pdata);
 }
 
-static int da903x_remove(struct i2c_client *client)
-{
-	struct da903x_chip *chip = i2c_get_clientdata(client);
-
-	da903x_remove_subdevs(chip);
-	return 0;
-}
-
 static struct i2c_driver da903x_driver = {
 	.driver	= {
-		.name	= "da903x",
+		.name			= "da903x",
+		.suppress_bind_attrs	= true,
 	},
 	.probe		= da903x_probe,
-	.remove		= da903x_remove,
 	.id_table	= da903x_id_table,
 };
 
@@ -557,14 +548,3 @@ static int __init da903x_init(void)
 	return i2c_add_driver(&da903x_driver);
 }
 subsys_initcall(da903x_init);
-
-static void __exit da903x_exit(void)
-{
-	i2c_del_driver(&da903x_driver);
-}
-module_exit(da903x_exit);
-
-MODULE_DESCRIPTION("PMIC Driver for Dialog Semiconductor DA9034");
-MODULE_AUTHOR("Eric Miao <eric.miao@marvell.com>");
-MODULE_AUTHOR("Mike Rapoport <mike@compulab.co.il>");
-MODULE_LICENSE("GPL v2");
-- 
2.7.4


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

* [PATCH 05/22] mfd: da9052-*: Make it explicitly non-modular
  2018-12-03  4:23 ` Paul Gortmaker
                   ` (4 preceding siblings ...)
  (?)
@ 2018-12-03  4:23 ` Paul Gortmaker
  -1 siblings, 0 replies; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones
  Cc: linux-kernel, Paul Gortmaker, Support Opensource, David Dajun Chen

The Kconfigis currently controlling compilation of this code are:

mfd/Kconfig:config MFD_DA9052_SPI
mfd/Kconfig:    bool "Dialog Semiconductor DA9052/53 PMIC variants with SPI"

mfd/Kconfig:config MFD_DA9052_I2C
mfd/Kconfig:    bool "Dialog Semiconductor DA9052/53 PMIC variants with I2C"

drivers/mfd/Kconfig:config PMIC_DA9052
drivers/mfd/Kconfig:    bool

...meaning that this code is currently not being built as a module.

Lets remove the modular code that is essentially orphaned, so that
when reading the driver there is no doubt it is builtin-only.
In doing so, da9052_device_exit() becomes orphaned, so it gets
removed as well.

We explicitly disallow a driver unbind, since that doesn't have a
sensible use case anyway, and it allows us to drop the ".remove"
code for non-modular drivers.

Since module_init was not in use by this code, the init ordering
remains unchanged with this commit.

We replace module.h with init.h where required, i.e. if the the file
did not include that already.

We also delete the MODULE_LICENSE tag etc. since all that information
is already contained at the top of the files in the comments.

Cc: Support Opensource <support.opensource@diasemi.com>
Cc: Lee Jones <lee.jones@linaro.org>
Cc: David Dajun Chen <dchen@diasemi.com>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 drivers/mfd/da9052-core.c         | 11 -----------
 drivers/mfd/da9052-i2c.c          | 22 ++--------------------
 drivers/mfd/da9052-irq.c          |  1 -
 drivers/mfd/da9052-spi.c          | 22 ++--------------------
 include/linux/mfd/da9052/da9052.h |  1 -
 5 files changed, 4 insertions(+), 53 deletions(-)

diff --git a/drivers/mfd/da9052-core.c b/drivers/mfd/da9052-core.c
index 433add43a0a9..96da73ce5ae4 100644
--- a/drivers/mfd/da9052-core.c
+++ b/drivers/mfd/da9052-core.c
@@ -17,7 +17,6 @@
 #include <linux/interrupt.h>
 #include <linux/mfd/core.h>
 #include <linux/slab.h>
-#include <linux/module.h>
 #include <linux/property.h>
 
 #include <linux/mfd/da9052/da9052.h>
@@ -648,13 +647,3 @@ int da9052_device_init(struct da9052 *da9052, u8 chip_id)
 
 	return ret;
 }
-
-void da9052_device_exit(struct da9052 *da9052)
-{
-	mfd_remove_devices(da9052->dev);
-	da9052_irq_exit(da9052);
-}
-
-MODULE_AUTHOR("David Dajun Chen <dchen@diasemi.com>");
-MODULE_DESCRIPTION("DA9052 MFD Core");
-MODULE_LICENSE("GPL");
diff --git a/drivers/mfd/da9052-i2c.c b/drivers/mfd/da9052-i2c.c
index 578e881067a5..cf881907b4b3 100644
--- a/drivers/mfd/da9052-i2c.c
+++ b/drivers/mfd/da9052-i2c.c
@@ -13,7 +13,7 @@
  */
 
 #include <linux/device.h>
-#include <linux/module.h>
+#include <linux/init.h>
 #include <linux/input.h>
 #include <linux/mfd/core.h>
 #include <linux/i2c.h>
@@ -177,20 +177,12 @@ static int da9052_i2c_probe(struct i2c_client *client,
 	return da9052_device_init(da9052, id->driver_data);
 }
 
-static int da9052_i2c_remove(struct i2c_client *client)
-{
-	struct da9052 *da9052 = i2c_get_clientdata(client);
-
-	da9052_device_exit(da9052);
-	return 0;
-}
-
 static struct i2c_driver da9052_i2c_driver = {
 	.probe = da9052_i2c_probe,
-	.remove = da9052_i2c_remove,
 	.id_table = da9052_i2c_id,
 	.driver = {
 		.name = "da9052",
+		.suppress_bind_attrs = true,
 #ifdef CONFIG_OF
 		.of_match_table = dialog_dt_ids,
 #endif
@@ -210,13 +202,3 @@ static int __init da9052_i2c_init(void)
 	return 0;
 }
 subsys_initcall(da9052_i2c_init);
-
-static void __exit da9052_i2c_exit(void)
-{
-	i2c_del_driver(&da9052_i2c_driver);
-}
-module_exit(da9052_i2c_exit);
-
-MODULE_AUTHOR("David Dajun Chen <dchen@diasemi.com>");
-MODULE_DESCRIPTION("I2C driver for Dialog DA9052 PMIC");
-MODULE_LICENSE("GPL");
diff --git a/drivers/mfd/da9052-irq.c b/drivers/mfd/da9052-irq.c
index cd4ca849ca44..6e0db46f71a9 100644
--- a/drivers/mfd/da9052-irq.c
+++ b/drivers/mfd/da9052-irq.c
@@ -20,7 +20,6 @@
 #include <linux/irq.h>
 #include <linux/irqdomain.h>
 #include <linux/slab.h>
-#include <linux/module.h>
 
 #include <linux/mfd/da9052/da9052.h>
 #include <linux/mfd/da9052/reg.h>
diff --git a/drivers/mfd/da9052-spi.c b/drivers/mfd/da9052-spi.c
index fdae1288bc6d..8532afa567a1 100644
--- a/drivers/mfd/da9052-spi.c
+++ b/drivers/mfd/da9052-spi.c
@@ -13,7 +13,7 @@
  */
 
 #include <linux/device.h>
-#include <linux/module.h>
+#include <linux/init.h>
 #include <linux/input.h>
 #include <linux/mfd/core.h>
 #include <linux/spi/spi.h>
@@ -60,14 +60,6 @@ static int da9052_spi_probe(struct spi_device *spi)
 	return da9052_device_init(da9052, id->driver_data);
 }
 
-static int da9052_spi_remove(struct spi_device *spi)
-{
-	struct da9052 *da9052 = spi_get_drvdata(spi);
-
-	da9052_device_exit(da9052);
-	return 0;
-}
-
 static const struct spi_device_id da9052_spi_id[] = {
 	{"da9052", DA9052},
 	{"da9053-aa", DA9053_AA},
@@ -79,10 +71,10 @@ static const struct spi_device_id da9052_spi_id[] = {
 
 static struct spi_driver da9052_spi_driver = {
 	.probe = da9052_spi_probe,
-	.remove = da9052_spi_remove,
 	.id_table = da9052_spi_id,
 	.driver = {
 		.name = "da9052",
+		.suppress_bind_attrs = true,
 	},
 };
 
@@ -99,13 +91,3 @@ static int __init da9052_spi_init(void)
 	return 0;
 }
 subsys_initcall(da9052_spi_init);
-
-static void __exit da9052_spi_exit(void)
-{
-	spi_unregister_driver(&da9052_spi_driver);
-}
-module_exit(da9052_spi_exit);
-
-MODULE_AUTHOR("David Dajun Chen <dchen@diasemi.com>");
-MODULE_DESCRIPTION("SPI driver for Dialog DA9052 PMIC");
-MODULE_LICENSE("GPL");
diff --git a/include/linux/mfd/da9052/da9052.h b/include/linux/mfd/da9052/da9052.h
index ae5b663836d0..7951642e2ba0 100644
--- a/include/linux/mfd/da9052/da9052.h
+++ b/include/linux/mfd/da9052/da9052.h
@@ -215,7 +215,6 @@ static inline int da9052_reg_update(struct da9052 *da9052, unsigned char reg,
 }
 
 int da9052_device_init(struct da9052 *da9052, u8 chip_id);
-void da9052_device_exit(struct da9052 *da9052);
 
 extern const struct regmap_config da9052_regmap_config;
 
-- 
2.7.4


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

* [PATCH 06/22] mfd: da9055-i2c: Make it explicitly non-modular
  2018-12-03  4:23 ` Paul Gortmaker
                   ` (5 preceding siblings ...)
  (?)
@ 2018-12-03  4:23 ` Paul Gortmaker
  -1 siblings, 0 replies; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones
  Cc: linux-kernel, Paul Gortmaker, Support Opensource, David Dajun Chen

The Makefile/Kconfig currently controlling compilation of this code is:

drivers/mfd/Makefile:da9055-objs := da9055-core.o da9055-i2c.o
drivers/mfd/Makefile:obj-$(CONFIG_MFD_DA9055)   += da9055.o

...meaning that it currently is not being built as a module by anyone.

Lets remove the modular code that is essentially orphaned, so that
when reading the driver there is no doubt it is builtin-only.

We explicitly disallow a driver unbind, since that doesn't have a
sensible use case anyway, and it allows us to drop the ".remove"
code for non-modular drivers.

Since module_init was not in use by this code, the init ordering
remains unchanged with this commit.

Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code.

We also delete the MODULE_LICENSE tag etc. since all that information
is already contained at the top of the file in the comments.

Cc: Support Opensource <support.opensource@diasemi.com>
Cc: Lee Jones <lee.jones@linaro.org>
Cc: David Dajun Chen <dchen@diasemi.com>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 drivers/mfd/da9055-i2c.c | 24 ++----------------------
 1 file changed, 2 insertions(+), 22 deletions(-)

diff --git a/drivers/mfd/da9055-i2c.c b/drivers/mfd/da9055-i2c.c
index 8169a5c2fa20..f4573feb9f8c 100644
--- a/drivers/mfd/da9055-i2c.c
+++ b/drivers/mfd/da9055-i2c.c
@@ -11,7 +11,7 @@
  *
  */
 
-#include <linux/module.h>
+#include <linux/init.h>
 #include <linux/device.h>
 #include <linux/i2c.h>
 #include <linux/err.h>
@@ -46,15 +46,6 @@ static int da9055_i2c_probe(struct i2c_client *i2c,
 	return da9055_device_init(da9055);
 }
 
-static int da9055_i2c_remove(struct i2c_client *i2c)
-{
-	struct da9055 *da9055 = i2c_get_clientdata(i2c);
-
-	da9055_device_exit(da9055);
-
-	return 0;
-}
-
 /*
  * DO NOT change the device Ids. The naming is intentionally specific as both
  * the PMIC and CODEC parts of this chip are instantiated separately as I2C
@@ -66,7 +57,6 @@ static const struct i2c_device_id da9055_i2c_id[] = {
 	{"da9055-pmic", 0},
 	{ }
 };
-MODULE_DEVICE_TABLE(i2c, da9055_i2c_id);
 
 static const struct of_device_id da9055_of_match[] = {
 	{ .compatible = "dlg,da9055-pmic", },
@@ -75,11 +65,11 @@ static const struct of_device_id da9055_of_match[] = {
 
 static struct i2c_driver da9055_i2c_driver = {
 	.probe = da9055_i2c_probe,
-	.remove = da9055_i2c_remove,
 	.id_table = da9055_i2c_id,
 	.driver = {
 		.name = "da9055-pmic",
 		.of_match_table = of_match_ptr(da9055_of_match),
+		.suppress_bind_attrs = true,
 	},
 };
 
@@ -96,13 +86,3 @@ static int __init da9055_i2c_init(void)
 	return 0;
 }
 subsys_initcall(da9055_i2c_init);
-
-static void __exit da9055_i2c_exit(void)
-{
-	i2c_del_driver(&da9055_i2c_driver);
-}
-module_exit(da9055_i2c_exit);
-
-MODULE_AUTHOR("David Dajun Chen <dchen@diasemi.com>");
-MODULE_DESCRIPTION("I2C driver for Dialog DA9055 PMIC");
-MODULE_LICENSE("GPL");
-- 
2.7.4


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

* [PATCH 07/22] mfd: da9055-core: make it explicitly non-modular
  2018-12-03  4:23 ` Paul Gortmaker
                   ` (6 preceding siblings ...)
  (?)
@ 2018-12-03  4:23 ` Paul Gortmaker
  -1 siblings, 0 replies; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones; +Cc: linux-kernel, Paul Gortmaker, Support Opensource

The Kconfig currently controlling compilation of this code is:

drivers/mfd/Kconfig:config MFD_DA9055
drivers/mfd/Kconfig-    bool "Dialog Semiconductor DA9055 PMIC Support"

...meaning that it currently is not being built as a module by anyone.

Lets remove the modular code that is essentially orphaned, so that
when reading the driver there is no doubt it is builtin-only.

The exit function deleted here wasn't even registered with module_exit,
so it truly was dead code.

We also delete the MODULE_LICENSE tag etc. since all that information
is already contained at the top of the file in the comments.

We replace module.h with init.h and export.h ; the latter since the
file does export some symbols

Cc: Support Opensource <support.opensource@diasemi.com>
Cc: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 drivers/mfd/da9055-core.c | 13 ++-----------
 1 file changed, 2 insertions(+), 11 deletions(-)

diff --git a/drivers/mfd/da9055-core.c b/drivers/mfd/da9055-core.c
index 177e65a12c12..b55f13061547 100644
--- a/drivers/mfd/da9055-core.c
+++ b/drivers/mfd/da9055-core.c
@@ -11,7 +11,8 @@
  *  option) any later version.
  */
 
-#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/export.h>
 #include <linux/device.h>
 #include <linux/input.h>
 #include <linux/irq.h>
@@ -416,13 +417,3 @@ int da9055_device_init(struct da9055 *da9055)
 	mfd_remove_devices(da9055->dev);
 	return ret;
 }
-
-void da9055_device_exit(struct da9055 *da9055)
-{
-	regmap_del_irq_chip(da9055->chip_irq, da9055->irq_data);
-	mfd_remove_devices(da9055->dev);
-}
-
-MODULE_DESCRIPTION("Core support for the DA9055 PMIC");
-MODULE_LICENSE("GPL");
-MODULE_AUTHOR("David Dajun Chen <dchen@diasemi.com>");
-- 
2.7.4


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

* [PATCH 08/22] mfd: db8500-prcmu: drop unused MODULE_ tags from non-modular code
  2018-12-03  4:23 ` Paul Gortmaker
                   ` (7 preceding siblings ...)
  (?)
@ 2018-12-03  4:23 ` Paul Gortmaker
  2018-12-07 12:25   ` Linus Walleij
  -1 siblings, 1 reply; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones; +Cc: linux-kernel, Paul Gortmaker, Linus Walleij, Mattias Nilsson

The Kconfig currently controlling compilation of this code is:

drivers/mfd/Kconfig:config MFD_DB8500_PRCMU
drivers/mfd/Kconfig:    bool "ST-Ericsson DB8500 Power Reset Control Management Unit"

...meaning that it currently is not being built as a module by anyone.

Lets remove the couple traces of modular infrastructure use, so that
when reading the driver there is no doubt it is builtin-only.

We delete the MODULE_LICENSE tag etc. since all that information
is already contained at the top of the file in the comments.

We replace module.h with init.h and export.h ; the latter since the
file does export some symbols.

Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Lee Jones <lee.jones@linaro.org>
Cc: Mattias Nilsson <mattias.i.nilsson@stericsson.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 drivers/mfd/db8500-prcmu.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/mfd/db8500-prcmu.c b/drivers/mfd/db8500-prcmu.c
index aec20e1c7d3d..65666b624ae8 100644
--- a/drivers/mfd/db8500-prcmu.c
+++ b/drivers/mfd/db8500-prcmu.c
@@ -1,4 +1,6 @@
 /*
+ * DB8500 PRCM Unit driver
+ *
  * Copyright (C) STMicroelectronics 2009
  * Copyright (C) ST-Ericsson SA 2010
  *
@@ -10,7 +12,8 @@
  * U8500 PRCM Unit interface driver
  *
  */
-#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/export.h>
 #include <linux/kernel.h>
 #include <linux/delay.h>
 #include <linux/errno.h>
@@ -3188,9 +3191,4 @@ static int __init db8500_prcmu_init(void)
 {
 	return platform_driver_register(&db8500_prcmu_driver);
 }
-
 core_initcall(db8500_prcmu_init);
-
-MODULE_AUTHOR("Mattias Nilsson <mattias.i.nilsson@stericsson.com>");
-MODULE_DESCRIPTION("DB8500 PRCM Unit driver");
-MODULE_LICENSE("GPL v2");
-- 
2.7.4


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

* [PATCH 09/22] mfd: htc-i2cpld: Make it explicitly non-modular
  2018-12-03  4:23 ` Paul Gortmaker
                   ` (8 preceding siblings ...)
  (?)
@ 2018-12-03  4:23 ` Paul Gortmaker
  -1 siblings, 0 replies; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones; +Cc: linux-kernel, Paul Gortmaker, Cory Maccarrone

The Kconfig for this option is currently:

config HTC_I2CPLD
        bool "HTC I2C PLD chip support"

...meaning that it currently is not being built as a module by anyone.
Lets remove the modular code that is essentially orphaned, so that
when reading the driver there is no doubt it is builtin-only.

Since module_init translates to device_initcall in the non-modular
case, the init ordering remains unchanged with this commit.

We also delete the MODULE_LICENSE tag etc. since all that information
is already contained at the top of the file in the comments.

Cc: Cory Maccarrone <darkstar6262@gmail.com>
Cc: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 drivers/mfd/htc-i2cpld.c | 18 +-----------------
 1 file changed, 1 insertion(+), 17 deletions(-)

diff --git a/drivers/mfd/htc-i2cpld.c b/drivers/mfd/htc-i2cpld.c
index 01572b5e79e8..af3c66355270 100644
--- a/drivers/mfd/htc-i2cpld.c
+++ b/drivers/mfd/htc-i2cpld.c
@@ -27,7 +27,6 @@
 
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/module.h>
 #include <linux/interrupt.h>
 #include <linux/platform_device.h>
 #include <linux/i2c.h>
@@ -614,8 +613,6 @@ static const struct i2c_device_id htcpld_chip_id[] = {
 	{ "htcpld-chip", 0 },
 	{ }
 };
-MODULE_DEVICE_TABLE(i2c, htcpld_chip_id);
-
 
 static struct i2c_driver htcpld_chip_driver = {
 	.driver = {
@@ -643,17 +640,4 @@ static int __init htcpld_core_init(void)
 	/* Probe for our chips */
 	return platform_driver_probe(&htcpld_core_driver, htcpld_core_probe);
 }
-
-static void __exit htcpld_core_exit(void)
-{
-	i2c_del_driver(&htcpld_chip_driver);
-	platform_driver_unregister(&htcpld_core_driver);
-}
-
-module_init(htcpld_core_init);
-module_exit(htcpld_core_exit);
-
-MODULE_AUTHOR("Cory Maccarrone <darkstar6262@gmail.com>");
-MODULE_DESCRIPTION("I2C HTC PLD Driver");
-MODULE_LICENSE("GPL");
-
+device_initcall(htcpld_core_init);
-- 
2.7.4


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

* [PATCH 10/22] mfd: max8925-core: drop unused MODULE_ tags from non-modular code
  2018-12-03  4:23 ` Paul Gortmaker
                   ` (9 preceding siblings ...)
  (?)
@ 2018-12-03  4:23 ` Paul Gortmaker
  -1 siblings, 0 replies; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones; +Cc: linux-kernel, Paul Gortmaker, Haojian Zhuang

The Kconfig currently controlling compilation of this code is:

drivers/mfd/Kconfig:config MFD_MAX8925
drivers/mfd/Kconfig:    bool "Maxim Semiconductor MAX8925 PMIC Support"

...meaning that it currently is not being built as a module by anyone.

Lets remove the couple traces of modular infrastructure use, so that
when reading the driver there is no doubt it is builtin-only.

We delete the MODULE_LICENSE tag etc. since all that information
is already contained at the top of the file in the comments.

Cc: Lee Jones <lee.jones@linaro.org>
Cc: Haojian Zhuang <haojian.zhuang@marvell.com>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 drivers/mfd/max8925-core.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/drivers/mfd/max8925-core.c b/drivers/mfd/max8925-core.c
index fd8b15cd84fd..87c724ba9793 100644
--- a/drivers/mfd/max8925-core.c
+++ b/drivers/mfd/max8925-core.c
@@ -10,7 +10,7 @@
  */
 
 #include <linux/kernel.h>
-#include <linux/module.h>
+#include <linux/init.h>
 #include <linux/i2c.h>
 #include <linux/irq.h>
 #include <linux/interrupt.h>
@@ -919,8 +919,3 @@ void max8925_device_exit(struct max8925_chip *chip)
 		free_irq(chip->tsc_irq, chip);
 	mfd_remove_devices(chip->dev);
 }
-
-
-MODULE_DESCRIPTION("PMIC Driver for Maxim MAX8925");
-MODULE_AUTHOR("Haojian Zhuang <haojian.zhuang@marvell.com");
-MODULE_LICENSE("GPL");
-- 
2.7.4


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

* [PATCH 11/22] mfd: rc5t583: Make it explicitly non-modular
  2018-12-03  4:23 ` Paul Gortmaker
                   ` (10 preceding siblings ...)
  (?)
@ 2018-12-03  4:23 ` Paul Gortmaker
  -1 siblings, 0 replies; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones; +Cc: linux-kernel, Paul Gortmaker, Laxman Dewangan

The Kconfig currently controlling compilation of this code is:

drivers/mfd/Kconfig:config MFD_RC5T583
drivers/mfd/Kconfig:    bool "Ricoh RC5T583 Power Management system device"

...meaning that it currently is not being built as a module by anyone.

Lets remove the modular code that is essentially orphaned, so that
when reading the driver there is no doubt it is builtin-only.

Since module_init was not in use by this code, the init ordering
remains unchanged with this commit.

Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code.

We also delete the MODULE_LICENSE tag etc. since all that information
is already contained at the top of the file in the comments.

Cc: Lee Jones <lee.jones@linaro.org>
Cc: Laxman Dewangan <ldewangan@nvidia.com>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 drivers/mfd/rc5t583.c | 14 --------------
 1 file changed, 14 deletions(-)

diff --git a/drivers/mfd/rc5t583.c b/drivers/mfd/rc5t583.c
index fd46de02b715..c5cc5cb3dde7 100644
--- a/drivers/mfd/rc5t583.c
+++ b/drivers/mfd/rc5t583.c
@@ -23,7 +23,6 @@
 #include <linux/interrupt.h>
 #include <linux/irq.h>
 #include <linux/kernel.h>
-#include <linux/module.h>
 #include <linux/init.h>
 #include <linux/err.h>
 #include <linux/slab.h>
@@ -298,8 +297,6 @@ static const struct i2c_device_id rc5t583_i2c_id[] = {
 	{}
 };
 
-MODULE_DEVICE_TABLE(i2c, rc5t583_i2c_id);
-
 static struct i2c_driver rc5t583_i2c_driver = {
 	.driver = {
 		   .name = "rc5t583",
@@ -313,14 +310,3 @@ static int __init rc5t583_i2c_init(void)
 	return i2c_add_driver(&rc5t583_i2c_driver);
 }
 subsys_initcall(rc5t583_i2c_init);
-
-static void __exit rc5t583_i2c_exit(void)
-{
-	i2c_del_driver(&rc5t583_i2c_driver);
-}
-
-module_exit(rc5t583_i2c_exit);
-
-MODULE_AUTHOR("Laxman Dewangan <ldewangan@nvidia.com>");
-MODULE_DESCRIPTION("RICOH RC5T583 power management system device driver");
-MODULE_LICENSE("GPL v2");
-- 
2.7.4


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

* [PATCH 12/22] mfd: sta2x11: drop unused MODULE_ tags from non-modular code
  2018-12-03  4:23 ` Paul Gortmaker
                   ` (11 preceding siblings ...)
  (?)
@ 2018-12-03  4:23 ` Paul Gortmaker
  2018-12-03 11:14   ` Lee Jones
  -1 siblings, 1 reply; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones; +Cc: linux-kernel, Paul Gortmaker

The Kconfig currently controlling compilation of this code is:

drivers/mfd/Kconfig:config MFD_STA2X11
drivers/mfd/Kconfig:    bool "STMicroelectronics STA2X11"

...meaning that it currently is not being built as a module by anyone.

Lets remove the couple traces of modular infrastructure use, so that
when reading the driver there is no doubt it is builtin-only.

We delete the MODULE_LICENSE tag etc. since all that information
is already contained at the top of the file in the comments.

We replace module.h with init.h and export.h ; the latter since the
file does export some symbols.

Cc: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 drivers/mfd/sta2x11-mfd.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/mfd/sta2x11-mfd.c b/drivers/mfd/sta2x11-mfd.c
index 3aeafa228baf..cab9aabcaa1f 100644
--- a/drivers/mfd/sta2x11-mfd.c
+++ b/drivers/mfd/sta2x11-mfd.c
@@ -1,4 +1,6 @@
 /*
+ * STA2x11 mfd for GPIO, SCTL and APBREG
+ *
  * Copyright (c) 2009-2011 Wind River Systems, Inc.
  * Copyright (c) 2011 ST Microelectronics (Alessandro Rubini, Davide Ciminaghi)
  *
@@ -18,7 +20,8 @@
  */
 
 #include <linux/kernel.h>
-#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/export.h>
 #include <linux/spinlock.h>
 #include <linux/errno.h>
 #include <linux/device.h>
@@ -653,8 +656,3 @@ static int __init sta2x11_mfd_init(void)
  */
 subsys_initcall(sta2x11_drivers_init);
 rootfs_initcall(sta2x11_mfd_init);
-
-MODULE_LICENSE("GPL v2");
-MODULE_AUTHOR("Wind River");
-MODULE_DESCRIPTION("STA2x11 mfd for GPIO, SCTL and APBREG");
-MODULE_DEVICE_TABLE(pci, sta2x11_mfd_tbl);
-- 
2.7.4


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

* [PATCH 13/22] mfd: syscon: Make it explicitly non-modular
  2018-12-03  4:23 ` Paul Gortmaker
                   ` (12 preceding siblings ...)
  (?)
@ 2018-12-03  4:23 ` Paul Gortmaker
  -1 siblings, 0 replies; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones; +Cc: linux-kernel, Paul Gortmaker, Arnd Bergmann, Dong Aisheng

The Kconfig currently controlling compilation of this code is:

drivers/mfd/Kconfig:config MFD_SYSCON
drivers/mfd/Kconfig:    bool "System Controller Register R/W Based on Regmap"

...meaning that it currently is not being built as a module by anyone.

Lets remove the modular code that is essentially orphaned, so that
when reading the driver there is no doubt it is builtin-only.

Since module_init was not in use by this code, the init ordering
remains unchanged with this commit.

We also delete the MODULE_LICENSE tag etc. since all that information
is already contained at the top of the file in the comments.

Cc: Lee Jones <lee.jones@linaro.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Dong Aisheng <dong.aisheng@linaro.org>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 drivers/mfd/syscon.c | 12 +-----------
 1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/drivers/mfd/syscon.c b/drivers/mfd/syscon.c
index b6d05cd934e6..0ecdffb3d967 100644
--- a/drivers/mfd/syscon.c
+++ b/drivers/mfd/syscon.c
@@ -15,7 +15,7 @@
 #include <linux/err.h>
 #include <linux/hwspinlock.h>
 #include <linux/io.h>
-#include <linux/module.h>
+#include <linux/init.h>
 #include <linux/list.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
@@ -272,13 +272,3 @@ static int __init syscon_init(void)
 	return platform_driver_register(&syscon_driver);
 }
 postcore_initcall(syscon_init);
-
-static void __exit syscon_exit(void)
-{
-	platform_driver_unregister(&syscon_driver);
-}
-module_exit(syscon_exit);
-
-MODULE_AUTHOR("Dong Aisheng <dong.aisheng@linaro.org>");
-MODULE_DESCRIPTION("System Control driver");
-MODULE_LICENSE("GPL v2");
-- 
2.7.4


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

* [PATCH 14/22] mfd: tps65090: Make it explicitly non-modular
  2018-12-03  4:23 ` Paul Gortmaker
                   ` (13 preceding siblings ...)
  (?)
@ 2018-12-03  4:23 ` Paul Gortmaker
  -1 siblings, 0 replies; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones; +Cc: linux-kernel, Paul Gortmaker, Venu Byravarasu

The Kconfig currently controlling compilation of this code is:

drivers/mfd/Kconfig:config MFD_TPS65090
drivers/mfd/Kconfig:    bool "TI TPS65090 Power Management chips"

...meaning that it currently is not being built as a module by anyone.

Lets remove the modular code that is essentially orphaned, so that
when reading the driver there is no doubt it is builtin-only.

We explicitly disallow a driver unbind, since that doesn't have a
sensible use case anyway, and it allows us to drop the ".remove"
code for non-modular drivers.

Since module_init was not in use by this code, the init ordering
remains unchanged with this commit.

Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code.

We also delete the MODULE_LICENSE tag etc. since all that information
was (or is now) contained at the top of the file in the comments.

Cc: Lee Jones <lee.jones@linaro.org>
Cc: Venu Byravarasu <vbyravarasu@nvidia.com>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 drivers/mfd/tps65090.c | 30 +++++-------------------------
 1 file changed, 5 insertions(+), 25 deletions(-)

diff --git a/drivers/mfd/tps65090.c b/drivers/mfd/tps65090.c
index f13e4cd06e89..6968df4d7828 100644
--- a/drivers/mfd/tps65090.c
+++ b/drivers/mfd/tps65090.c
@@ -2,7 +2,9 @@
  * Core driver for TI TPS65090 PMIC family
  *
  * Copyright (c) 2012, NVIDIA CORPORATION.  All rights reserved.
-
+ *
+ * Author: Venu Byravarasu <vbyravarasu@nvidia.com>
+ *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms and conditions of the GNU General Public License,
  * version 2, as published by the Free Software Foundation.
@@ -19,7 +21,7 @@
 #include <linux/interrupt.h>
 #include <linux/irq.h>
 #include <linux/kernel.h>
-#include <linux/module.h>
+#include <linux/init.h>
 #include <linux/mutex.h>
 #include <linux/slab.h>
 #include <linux/i2c.h>
@@ -171,7 +173,6 @@ static const struct of_device_id tps65090_of_match[] = {
 	{ .compatible = "ti,tps65090",},
 	{},
 };
-MODULE_DEVICE_TABLE(of, tps65090_of_match);
 #endif
 
 static int tps65090_i2c_probe(struct i2c_client *client,
@@ -236,30 +237,19 @@ static int tps65090_i2c_probe(struct i2c_client *client,
 	return ret;
 }
 
-static int tps65090_i2c_remove(struct i2c_client *client)
-{
-	struct tps65090 *tps65090 = i2c_get_clientdata(client);
-
-	mfd_remove_devices(tps65090->dev);
-	if (client->irq)
-		regmap_del_irq_chip(client->irq, tps65090->irq_data);
-
-	return 0;
-}
 
 static const struct i2c_device_id tps65090_id_table[] = {
 	{ "tps65090", 0 },
 	{ },
 };
-MODULE_DEVICE_TABLE(i2c, tps65090_id_table);
 
 static struct i2c_driver tps65090_driver = {
 	.driver	= {
 		.name	= "tps65090",
+		.suppress_bind_attrs = true,
 		.of_match_table = of_match_ptr(tps65090_of_match),
 	},
 	.probe		= tps65090_i2c_probe,
-	.remove		= tps65090_i2c_remove,
 	.id_table	= tps65090_id_table,
 };
 
@@ -268,13 +258,3 @@ static int __init tps65090_init(void)
 	return i2c_add_driver(&tps65090_driver);
 }
 subsys_initcall(tps65090_init);
-
-static void __exit tps65090_exit(void)
-{
-	i2c_del_driver(&tps65090_driver);
-}
-module_exit(tps65090_exit);
-
-MODULE_DESCRIPTION("TPS65090 core driver");
-MODULE_AUTHOR("Venu Byravarasu <vbyravarasu@nvidia.com>");
-MODULE_LICENSE("GPL v2");
-- 
2.7.4


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

* [PATCH 15/22] mfd: tps65910: Make it explicitly non-modular
  2018-12-03  4:23 ` Paul Gortmaker
@ 2018-12-03  4:23   ` Paul Gortmaker
  -1 siblings, 0 replies; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones
  Cc: linux-kernel, Paul Gortmaker, Tony Lindgren, Graeme Gregory,
	Jorge Eduardo Candelaria, linux-omap

The Kconfig currently controlling compilation of this code is:

drivers/mfd/Kconfig:config MFD_TPS65910
drivers/mfd/Kconfig-    bool "TI TPS65910 Power Management chip"

...meaning that it currently is not being built as a module by anyone.

Lets remove the modular code that is essentially orphaned, so that
when reading the driver there is no doubt it is builtin-only.

Since module_init was not in use by this code, the init ordering
remains unchanged with this commit.

We don't replace module.h with init.h since the file already has that.
We do delete an unused moduleparam.h include though.

Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code.

We also delete the MODULE_LICENSE tag etc. since all that information
was (or is now) contained at the top of the file in the comments.

Cc: Tony Lindgren <tony@atomide.com>
Cc: Lee Jones <lee.jones@linaro.org>
Cc: Graeme Gregory <gg@slimlogic.co.uk>
Cc: Jorge Eduardo Candelaria <jedu@slimlogic.co.uk>
Cc: linux-omap@vger.kernel.org
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 drivers/mfd/tps65910.c | 18 +-----------------
 1 file changed, 1 insertion(+), 17 deletions(-)

diff --git a/drivers/mfd/tps65910.c b/drivers/mfd/tps65910.c
index bf16cbe6fd88..aa3d472a10ff 100644
--- a/drivers/mfd/tps65910.c
+++ b/drivers/mfd/tps65910.c
@@ -1,5 +1,5 @@
 /*
- * tps65910.c  --  TI TPS6591x
+ * tps65910.c  --  TI TPS6591x chip family multi-function driver
  *
  * Copyright 2010 Texas Instruments Inc.
  *
@@ -13,8 +13,6 @@
  *
  */
 
-#include <linux/module.h>
-#include <linux/moduleparam.h>
 #include <linux/init.h>
 #include <linux/err.h>
 #include <linux/slab.h>
@@ -374,7 +372,6 @@ static const struct of_device_id tps65910_of_match[] = {
 	{ .compatible = "ti,tps65911", .data = (void *)TPS65911},
 	{ },
 };
-MODULE_DEVICE_TABLE(of, tps65910_of_match);
 
 static struct tps65910_board *tps65910_parse_dt(struct i2c_client *client,
 						unsigned long *chip_id)
@@ -527,8 +524,6 @@ static const struct i2c_device_id tps65910_i2c_id[] = {
        { "tps65911", TPS65911 },
        { }
 };
-MODULE_DEVICE_TABLE(i2c, tps65910_i2c_id);
-
 
 static struct i2c_driver tps65910_i2c_driver = {
 	.driver = {
@@ -545,14 +540,3 @@ static int __init tps65910_i2c_init(void)
 }
 /* init early so consumer devices can complete system boot */
 subsys_initcall(tps65910_i2c_init);
-
-static void __exit tps65910_i2c_exit(void)
-{
-	i2c_del_driver(&tps65910_i2c_driver);
-}
-module_exit(tps65910_i2c_exit);
-
-MODULE_AUTHOR("Graeme Gregory <gg@slimlogic.co.uk>");
-MODULE_AUTHOR("Jorge Eduardo Candelaria <jedu@slimlogic.co.uk>");
-MODULE_DESCRIPTION("TPS6591x chip family multi-function driver");
-MODULE_LICENSE("GPL");
-- 
2.7.4


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

* [PATCH 15/22] mfd: tps65910: Make it explicitly non-modular
@ 2018-12-03  4:23   ` Paul Gortmaker
  0 siblings, 0 replies; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones
  Cc: linux-kernel, Paul Gortmaker, Tony Lindgren, Graeme Gregory,
	Jorge Eduardo Candelaria, linux-omap

The Kconfig currently controlling compilation of this code is:

drivers/mfd/Kconfig:config MFD_TPS65910
drivers/mfd/Kconfig-    bool "TI TPS65910 Power Management chip"

...meaning that it currently is not being built as a module by anyone.

Lets remove the modular code that is essentially orphaned, so that
when reading the driver there is no doubt it is builtin-only.

Since module_init was not in use by this code, the init ordering
remains unchanged with this commit.

We don't replace module.h with init.h since the file already has that.
We do delete an unused moduleparam.h include though.

Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code.

We also delete the MODULE_LICENSE tag etc. since all that information
was (or is now) contained at the top of the file in the comments.

Cc: Tony Lindgren <tony@atomide.com>
Cc: Lee Jones <lee.jones@linaro.org>
Cc: Graeme Gregory <gg@slimlogic.co.uk>
Cc: Jorge Eduardo Candelaria <jedu@slimlogic.co.uk>
Cc: linux-omap@vger.kernel.org
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 drivers/mfd/tps65910.c | 18 +-----------------
 1 file changed, 1 insertion(+), 17 deletions(-)

diff --git a/drivers/mfd/tps65910.c b/drivers/mfd/tps65910.c
index bf16cbe6fd88..aa3d472a10ff 100644
--- a/drivers/mfd/tps65910.c
+++ b/drivers/mfd/tps65910.c
@@ -1,5 +1,5 @@
 /*
- * tps65910.c  --  TI TPS6591x
+ * tps65910.c  --  TI TPS6591x chip family multi-function driver
  *
  * Copyright 2010 Texas Instruments Inc.
  *
@@ -13,8 +13,6 @@
  *
  */
 
-#include <linux/module.h>
-#include <linux/moduleparam.h>
 #include <linux/init.h>
 #include <linux/err.h>
 #include <linux/slab.h>
@@ -374,7 +372,6 @@ static const struct of_device_id tps65910_of_match[] = {
 	{ .compatible = "ti,tps65911", .data = (void *)TPS65911},
 	{ },
 };
-MODULE_DEVICE_TABLE(of, tps65910_of_match);
 
 static struct tps65910_board *tps65910_parse_dt(struct i2c_client *client,
 						unsigned long *chip_id)
@@ -527,8 +524,6 @@ static const struct i2c_device_id tps65910_i2c_id[] = {
        { "tps65911", TPS65911 },
        { }
 };
-MODULE_DEVICE_TABLE(i2c, tps65910_i2c_id);
-
 
 static struct i2c_driver tps65910_i2c_driver = {
 	.driver = {
@@ -545,14 +540,3 @@ static int __init tps65910_i2c_init(void)
 }
 /* init early so consumer devices can complete system boot */
 subsys_initcall(tps65910_i2c_init);
-
-static void __exit tps65910_i2c_exit(void)
-{
-	i2c_del_driver(&tps65910_i2c_driver);
-}
-module_exit(tps65910_i2c_exit);
-
-MODULE_AUTHOR("Graeme Gregory <gg@slimlogic.co.uk>");
-MODULE_AUTHOR("Jorge Eduardo Candelaria <jedu@slimlogic.co.uk>");
-MODULE_DESCRIPTION("TPS6591x chip family multi-function driver");
-MODULE_LICENSE("GPL");
-- 
2.7.4

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

* [PATCH 16/22] mfd: tps80031: Make it explicitly non-modular
  2018-12-03  4:23 ` Paul Gortmaker
                   ` (15 preceding siblings ...)
  (?)
@ 2018-12-03  4:23 ` Paul Gortmaker
  -1 siblings, 0 replies; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones; +Cc: linux-kernel, Paul Gortmaker, Laxman Dewangan

The Kconfig currently controlling compilation of this code is:

drivers/mfd/Kconfig:config MFD_TPS80031
drivers/mfd/Kconfig:    bool "TI TPS80031/TPS80032 Power Management chips"

...meaning that it currently is not being built as a module by anyone.

Lets remove the modular code that is essentially orphaned, so that
when reading the driver there is no doubt it is builtin-only.

We explicitly disallow a driver unbind, since that doesn't have a
sensible use case anyway, and it allows us to drop the ".remove"
code for non-modular drivers.

Since module_init was not in use by this code, the init ordering
remains unchanged with this commit.

We don't replace module.h with init.h since the file already has that.

Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code.

We also delete the MODULE_LICENSE tag etc. since all that information
is already contained at the top of the file in the comments.

Cc: Lee Jones <lee.jones@linaro.org>
Cc: Laxman Dewangan <ldewangan@nvidia.com>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 drivers/mfd/tps80031.c | 37 ++-----------------------------------
 1 file changed, 2 insertions(+), 35 deletions(-)

diff --git a/drivers/mfd/tps80031.c b/drivers/mfd/tps80031.c
index 608c7f77830e..865257ade8ac 100644
--- a/drivers/mfd/tps80031.c
+++ b/drivers/mfd/tps80031.c
@@ -30,7 +30,6 @@
 #include <linux/irq.h>
 #include <linux/mfd/core.h>
 #include <linux/mfd/tps80031.h>
-#include <linux/module.h>
 #include <linux/pm.h>
 #include <linux/regmap.h>
 #include <linux/slab.h>
@@ -516,40 +515,18 @@ static int tps80031_probe(struct i2c_client *client,
 	return ret;
 }
 
-static int tps80031_remove(struct i2c_client *client)
-{
-	struct tps80031 *tps80031 = i2c_get_clientdata(client);
-	int i;
-
-	if (tps80031_power_off_dev == tps80031) {
-		tps80031_power_off_dev = NULL;
-		pm_power_off = NULL;
-	}
-
-	mfd_remove_devices(tps80031->dev);
-
-	regmap_del_irq_chip(client->irq, tps80031->irq_data);
-
-	for (i = 0; i < TPS80031_NUM_SLAVES; i++) {
-		if (tps80031->clients[i] != client)
-			i2c_unregister_device(tps80031->clients[i]);
-	}
-	return 0;
-}
-
 static const struct i2c_device_id tps80031_id_table[] = {
 	{ "tps80031", TPS80031 },
 	{ "tps80032", TPS80032 },
 	{ }
 };
-MODULE_DEVICE_TABLE(i2c, tps80031_id_table);
 
 static struct i2c_driver tps80031_driver = {
 	.driver	= {
-		.name	= "tps80031",
+		.name			= "tps80031",
+		.suppress_bind_attrs	= true,
 	},
 	.probe		= tps80031_probe,
-	.remove		= tps80031_remove,
 	.id_table	= tps80031_id_table,
 };
 
@@ -558,13 +535,3 @@ static int __init tps80031_init(void)
 	return i2c_add_driver(&tps80031_driver);
 }
 subsys_initcall(tps80031_init);
-
-static void __exit tps80031_exit(void)
-{
-	i2c_del_driver(&tps80031_driver);
-}
-module_exit(tps80031_exit);
-
-MODULE_AUTHOR("Laxman Dewangan <ldewangan@nvidia.com>");
-MODULE_DESCRIPTION("TPS80031 core driver");
-MODULE_LICENSE("GPL v2");
-- 
2.7.4


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

* [PATCH 17/22] mfd: wm831x-spi: Make it explicitly non-modular
  2018-12-03  4:23 ` Paul Gortmaker
                   ` (16 preceding siblings ...)
  (?)
@ 2018-12-03  4:23 ` Paul Gortmaker
  -1 siblings, 0 replies; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones; +Cc: linux-kernel, Paul Gortmaker, patches

The Kconfig currently controlling compilation of this code is:

drivers/mfd/Kconfig:config MFD_WM831X_SPI
drivers/mfd/Kconfig:    bool "Wolfson Microelectronics WM831x/2x PMICs with SPI"

...meaning that it currently is not being built as a module by anyone.

Lets remove the modular code that is essentially orphaned, so that
when reading the driver there is no doubt it is builtin-only.

We explicitly disallow a driver unbind, since that doesn't have a
sensible use case anyway, and it allows us to drop the ".remove"
code for non-modular drivers.

Since module_init was not in use by this code, the init ordering
remains unchanged with this commit.

Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code.

We also delete the MODULE_LICENSE tag etc. since all that information
is already contained at the top of the file in the comments.

Cc: Lee Jones <lee.jones@linaro.org>
Cc: patches@opensource.cirrus.com
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 drivers/mfd/wm831x-spi.c | 24 ++----------------------
 1 file changed, 2 insertions(+), 22 deletions(-)

diff --git a/drivers/mfd/wm831x-spi.c b/drivers/mfd/wm831x-spi.c
index 018ce652ae57..dd4dab419940 100644
--- a/drivers/mfd/wm831x-spi.c
+++ b/drivers/mfd/wm831x-spi.c
@@ -13,7 +13,7 @@
  */
 
 #include <linux/kernel.h>
-#include <linux/module.h>
+#include <linux/init.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
 #include <linux/pm.h>
@@ -67,15 +67,6 @@ static int wm831x_spi_probe(struct spi_device *spi)
 	return wm831x_device_init(wm831x, spi->irq);
 }
 
-static int wm831x_spi_remove(struct spi_device *spi)
-{
-	struct wm831x *wm831x = spi_get_drvdata(spi);
-
-	wm831x_device_exit(wm831x);
-
-	return 0;
-}
-
 static int wm831x_spi_suspend(struct device *dev)
 {
 	struct wm831x *wm831x = dev_get_drvdata(dev);
@@ -108,17 +99,16 @@ static const struct spi_device_id wm831x_spi_ids[] = {
 	{ "wm8326", WM8326 },
 	{ },
 };
-MODULE_DEVICE_TABLE(spi, wm831x_spi_ids);
 
 static struct spi_driver wm831x_spi_driver = {
 	.driver = {
 		.name	= "wm831x",
 		.pm	= &wm831x_spi_pm,
 		.of_match_table = of_match_ptr(wm831x_of_match),
+		.suppress_bind_attrs = true,
 	},
 	.id_table	= wm831x_spi_ids,
 	.probe		= wm831x_spi_probe,
-	.remove		= wm831x_spi_remove,
 };
 
 static int __init wm831x_spi_init(void)
@@ -132,13 +122,3 @@ static int __init wm831x_spi_init(void)
 	return 0;
 }
 subsys_initcall(wm831x_spi_init);
-
-static void __exit wm831x_spi_exit(void)
-{
-	spi_unregister_driver(&wm831x_spi_driver);
-}
-module_exit(wm831x_spi_exit);
-
-MODULE_DESCRIPTION("SPI support for WM831x/2x AudioPlus PMICs");
-MODULE_LICENSE("GPL");
-MODULE_AUTHOR("Mark Brown");
-- 
2.7.4


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

* [PATCH 18/22] mfd: wm831x-i2c: Make it explicitly non-modular
  2018-12-03  4:23 ` Paul Gortmaker
                   ` (17 preceding siblings ...)
  (?)
@ 2018-12-03  4:23 ` Paul Gortmaker
  2018-12-05 11:38   ` Charles Keepax
  -1 siblings, 1 reply; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones; +Cc: linux-kernel, Paul Gortmaker, patches

The Kconfig currently controlling compilation of this code is:

drivers/mfd/Kconfig:config MFD_WM831X_I2C
drivers/mfd/Kconfig:    bool "Wolfson Microelectronics WM831x/2x PMICs with I2C"

...meaning that it currently is not being built as a module by anyone.

Lets remove the modular code that is essentially orphaned, so that
when reading the driver there is no doubt it is builtin-only.

We explicitly disallow a driver unbind, since that doesn't have a
sensible use case anyway, and it allows us to drop the ".remove"
code for non-modular drivers.

Since module_init was not in use by this code, the init ordering
remains unchanged with this commit.

Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code.

Cc: Lee Jones <lee.jones@linaro.org>
Cc: patches@opensource.cirrus.com
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 drivers/mfd/wm831x-i2c.c | 20 ++------------------
 1 file changed, 2 insertions(+), 18 deletions(-)

diff --git a/drivers/mfd/wm831x-i2c.c b/drivers/mfd/wm831x-i2c.c
index 22f7054d1b28..0f3af42f7268 100644
--- a/drivers/mfd/wm831x-i2c.c
+++ b/drivers/mfd/wm831x-i2c.c
@@ -13,7 +13,7 @@
  */
 
 #include <linux/kernel.h>
-#include <linux/module.h>
+#include <linux/init.h>
 #include <linux/i2c.h>
 #include <linux/delay.h>
 #include <linux/mfd/core.h>
@@ -68,15 +68,6 @@ static int wm831x_i2c_probe(struct i2c_client *i2c,
 	return wm831x_device_init(wm831x, i2c->irq);
 }
 
-static int wm831x_i2c_remove(struct i2c_client *i2c)
-{
-	struct wm831x *wm831x = i2c_get_clientdata(i2c);
-
-	wm831x_device_exit(wm831x);
-
-	return 0;
-}
-
 static int wm831x_i2c_suspend(struct device *dev)
 {
 	struct wm831x *wm831x = dev_get_drvdata(dev);
@@ -103,7 +94,6 @@ static const struct i2c_device_id wm831x_i2c_id[] = {
 	{ "wm8326", WM8326 },
 	{ }
 };
-MODULE_DEVICE_TABLE(i2c, wm831x_i2c_id);
 
 static const struct dev_pm_ops wm831x_pm_ops = {
 	.suspend = wm831x_i2c_suspend,
@@ -115,9 +105,9 @@ static struct i2c_driver wm831x_i2c_driver = {
 		.name = "wm831x",
 		.pm = &wm831x_pm_ops,
 		.of_match_table = of_match_ptr(wm831x_of_match),
+		.suppress_bind_attrs = true,
 	},
 	.probe = wm831x_i2c_probe,
-	.remove = wm831x_i2c_remove,
 	.id_table = wm831x_i2c_id,
 };
 
@@ -132,9 +122,3 @@ static int __init wm831x_i2c_init(void)
 	return ret;
 }
 subsys_initcall(wm831x_i2c_init);
-
-static void __exit wm831x_i2c_exit(void)
-{
-	i2c_del_driver(&wm831x_i2c_driver);
-}
-module_exit(wm831x_i2c_exit);
-- 
2.7.4


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

* [PATCH 19/22] mfd: wm831x-core: drop unused MODULE_ tags from non-modular code
  2018-12-03  4:23 ` Paul Gortmaker
                   ` (18 preceding siblings ...)
  (?)
@ 2018-12-03  4:23 ` Paul Gortmaker
  2018-12-05 11:36   ` Charles Keepax
  -1 siblings, 1 reply; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones; +Cc: linux-kernel, Paul Gortmaker, patches

The Kconfig currently controlling compilation of this code is:

drivers/mfd/Kconfig:config MFD_WM831X
drivers/mfd/Kconfig:    bool

...meaning that it currently is not being built as a module by anyone.

Lets remove the couple traces of modular infrastructure use, so that
when reading the driver there is no doubt it is builtin-only.

We delete the MODULE_LICENSE tag etc. since all that information
is already contained at the top of the file in the comments.

Cc: Lee Jones <lee.jones@linaro.org>
Cc: patches@opensource.cirrus.com
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 drivers/mfd/wm831x-core.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/mfd/wm831x-core.c b/drivers/mfd/wm831x-core.c
index e70d35ef5c6d..d64214c78cba 100644
--- a/drivers/mfd/wm831x-core.c
+++ b/drivers/mfd/wm831x-core.c
@@ -13,7 +13,8 @@
  */
 
 #include <linux/kernel.h>
-#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/export.h>
 #include <linux/bcd.h>
 #include <linux/delay.h>
 #include <linux/mfd/core.h>
@@ -1944,7 +1945,3 @@ void wm831x_device_shutdown(struct wm831x *wm831x)
 	}
 }
 EXPORT_SYMBOL_GPL(wm831x_device_shutdown);
-
-MODULE_DESCRIPTION("Core support for the WM831X AudioPlus PMIC");
-MODULE_LICENSE("GPL");
-MODULE_AUTHOR("Mark Brown");
-- 
2.7.4


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

* [PATCH 20/22] mfd: wm8350-i2c: Make it explicitly non-modular
  2018-12-03  4:23 ` Paul Gortmaker
                   ` (19 preceding siblings ...)
  (?)
@ 2018-12-03  4:23 ` Paul Gortmaker
  2018-12-05 11:39   ` Charles Keepax
  -1 siblings, 1 reply; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones; +Cc: linux-kernel, Paul Gortmaker, patches

The Kconfig currently controlling compilation of this code is:

drivers/mfd/Kconfig:config MFD_WM8350_I2C
drivers/mfd/Kconfig:    bool "Wolfson Microelectronics WM8350 with I2C"

...meaning that it currently is not being built as a module by anyone.

Lets remove the modular code that is essentially orphaned, so that
when reading the driver there is no doubt it is builtin-only.

We explicitly disallow a driver unbind, since that doesn't have a
sensible use case anyway, and it allows us to drop the ".remove"
code for non-modular drivers.

Since module_init was not in use by this code, the init ordering
remains unchanged with this commit.

We don't replace module.h with init.h since the file already has that.
But we do delete an unused moduleparam.h

Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code.

We also delete the MODULE_LICENSE tag etc. since all that information
is already contained at the top of the file in the comments.

Cc: Lee Jones <lee.jones@linaro.org>
Cc: patches@opensource.cirrus.com
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 drivers/mfd/wm8350-i2c.c | 24 +-----------------------
 1 file changed, 1 insertion(+), 23 deletions(-)

diff --git a/drivers/mfd/wm8350-i2c.c b/drivers/mfd/wm8350-i2c.c
index 9358f03b7938..b4194e068e1b 100644
--- a/drivers/mfd/wm8350-i2c.c
+++ b/drivers/mfd/wm8350-i2c.c
@@ -13,8 +13,6 @@
  *
  */
 
-#include <linux/module.h>
-#include <linux/moduleparam.h>
 #include <linux/err.h>
 #include <linux/init.h>
 #include <linux/i2c.h>
@@ -48,30 +46,19 @@ static int wm8350_i2c_probe(struct i2c_client *i2c,
 	return wm8350_device_init(wm8350, i2c->irq, pdata);
 }
 
-static int wm8350_i2c_remove(struct i2c_client *i2c)
-{
-	struct wm8350 *wm8350 = i2c_get_clientdata(i2c);
-
-	wm8350_device_exit(wm8350);
-
-	return 0;
-}
-
 static const struct i2c_device_id wm8350_i2c_id[] = {
 	{ "wm8350", 0 },
 	{ "wm8351", 0 },
 	{ "wm8352", 0 },
 	{ }
 };
-MODULE_DEVICE_TABLE(i2c, wm8350_i2c_id);
-
 
 static struct i2c_driver wm8350_i2c_driver = {
 	.driver = {
 		   .name = "wm8350",
+		   .suppress_bind_attrs = true,
 	},
 	.probe = wm8350_i2c_probe,
-	.remove = wm8350_i2c_remove,
 	.id_table = wm8350_i2c_id,
 };
 
@@ -81,12 +68,3 @@ static int __init wm8350_i2c_init(void)
 }
 /* init early so consumer devices can complete system boot */
 subsys_initcall(wm8350_i2c_init);
-
-static void __exit wm8350_i2c_exit(void)
-{
-	i2c_del_driver(&wm8350_i2c_driver);
-}
-module_exit(wm8350_i2c_exit);
-
-MODULE_DESCRIPTION("I2C support for the WM8350 AudioPlus PMIC");
-MODULE_LICENSE("GPL");
-- 
2.7.4


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

* [PATCH 21/22] mfd: wm8350-core: drop unused MODULE_ tags from non-modular code
  2018-12-03  4:23 ` Paul Gortmaker
                   ` (20 preceding siblings ...)
  (?)
@ 2018-12-03  4:23 ` Paul Gortmaker
  2018-12-05 11:39   ` Charles Keepax
  -1 siblings, 1 reply; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones; +Cc: linux-kernel, Paul Gortmaker, Linus Walleij, patches

The Kconfig currently controlling compilation of this code is:

drivers/mfd/Kconfig:config MFD_WM8350
drivers/mfd/Kconfig:    bool

...meaning that it currently is not being built as a module by anyone.

Lets remove the couple traces of modular infrastructure use, so that
when reading the driver there is no doubt it is builtin-only.

We delete the MODULE_LICENSE tag etc. since all that information
is already contained at the top of the file in the comments.

We replace module.h with init.h and export.h ; the latter since the
file does export some symbols.

Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Lee Jones <lee.jones@linaro.org>
Cc: patches@opensource.cirrus.com
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 drivers/mfd/wm8350-core.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/mfd/wm8350-core.c b/drivers/mfd/wm8350-core.c
index 8a07c5634aee..e6434a4d7439 100644
--- a/drivers/mfd/wm8350-core.c
+++ b/drivers/mfd/wm8350-core.c
@@ -13,7 +13,8 @@
  */
 
 #include <linux/kernel.h>
-#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/export.h>
 #include <linux/slab.h>
 #include <linux/bug.h>
 #include <linux/device.h>
@@ -466,6 +467,3 @@ void wm8350_device_exit(struct wm8350 *wm8350)
 	wm8350_irq_exit(wm8350);
 }
 EXPORT_SYMBOL_GPL(wm8350_device_exit);
-
-MODULE_DESCRIPTION("WM8350 AudioPlus PMIC core driver");
-MODULE_LICENSE("GPL");
-- 
2.7.4


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

* [PATCH 22/22] mfd: wm8400-core: Make it explicitly non-modular
  2018-12-03  4:23 ` Paul Gortmaker
                   ` (21 preceding siblings ...)
  (?)
@ 2018-12-03  4:23 ` Paul Gortmaker
  2018-12-05 11:41   ` Charles Keepax
  -1 siblings, 1 reply; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03  4:23 UTC (permalink / raw)
  To: Lee Jones; +Cc: linux-kernel, Paul Gortmaker, Mark Brown, patches

The Kconfig currently controlling compilation of this code is:

drivers/mfd/Kconfig:config MFD_WM8400
drivers/mfd/Kconfig:    bool "Wolfson Microelectronics WM8400"

...meaning that it currently is not being built as a module by anyone.

Lets remove the modular code that is essentially orphaned, so that
when reading the driver there is no doubt it is builtin-only.

Since module_init was not in use by this code, the init ordering
remains unchanged with this commit.

A trivial function rename from wm8400_module_init to the name
wm8400_driver_init is also done to reduce possible confusion.

Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code.

We also delete the MODULE_LICENSE tag etc. since all that information
is already contained at the top of the file in the comments.

Cc: Lee Jones <lee.jones@linaro.org>
Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cc: patches@opensource.cirrus.com
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 drivers/mfd/wm8400-core.c | 18 +++---------------
 1 file changed, 3 insertions(+), 15 deletions(-)

diff --git a/drivers/mfd/wm8400-core.c b/drivers/mfd/wm8400-core.c
index 8a98a2fc74e1..79756c83f5f0 100644
--- a/drivers/mfd/wm8400-core.c
+++ b/drivers/mfd/wm8400-core.c
@@ -12,7 +12,7 @@
  *
  */
 
-#include <linux/module.h>
+#include <linux/init.h>
 #include <linux/bug.h>
 #include <linux/err.h>
 #include <linux/i2c.h>
@@ -150,7 +150,6 @@ static const struct i2c_device_id wm8400_i2c_id[] = {
        { "wm8400", 0 },
        { }
 };
-MODULE_DEVICE_TABLE(i2c, wm8400_i2c_id);
 
 static struct i2c_driver wm8400_i2c_driver = {
 	.driver = {
@@ -161,7 +160,7 @@ static struct i2c_driver wm8400_i2c_driver = {
 };
 #endif
 
-static int __init wm8400_module_init(void)
+static int __init wm8400_driver_init(void)
 {
 	int ret = -ENODEV;
 
@@ -173,15 +172,4 @@ static int __init wm8400_module_init(void)
 
 	return ret;
 }
-subsys_initcall(wm8400_module_init);
-
-static void __exit wm8400_module_exit(void)
-{
-#if IS_ENABLED(CONFIG_I2C)
-	i2c_del_driver(&wm8400_i2c_driver);
-#endif
-}
-module_exit(wm8400_module_exit);
-
-MODULE_LICENSE("GPL");
-MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.com>");
+subsys_initcall(wm8400_driver_init);
-- 
2.7.4


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

* Re: [PATCH 12/22] mfd: sta2x11: drop unused MODULE_ tags from non-modular code
  2018-12-03  4:23 ` [PATCH 12/22] mfd: sta2x11: drop unused MODULE_ tags from non-modular code Paul Gortmaker
@ 2018-12-03 11:14   ` Lee Jones
  2018-12-03 15:07     ` Paul Gortmaker
  2018-12-07 16:39     ` Alessandro Rubini
  0 siblings, 2 replies; 51+ messages in thread
From: Lee Jones @ 2018-12-03 11:14 UTC (permalink / raw)
  To: Paul Gortmaker; +Cc: linux-kernel

On Sun, 02 Dec 2018, Paul Gortmaker wrote:

> The Kconfig currently controlling compilation of this code is:
> 
> drivers/mfd/Kconfig:config MFD_STA2X11
> drivers/mfd/Kconfig:    bool "STMicroelectronics STA2X11"
> 
> ...meaning that it currently is not being built as a module by anyone.
> 
> Lets remove the couple traces of modular infrastructure use, so that
> when reading the driver there is no doubt it is builtin-only.
> 
> We delete the MODULE_LICENSE tag etc. since all that information
> is already contained at the top of the file in the comments.
> 
> We replace module.h with init.h and export.h ; the latter since the
> file does export some symbols.
> 
> Cc: Lee Jones <lee.jones@linaro.org>

I think you should add some of the driver developers.

> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
> ---
>  drivers/mfd/sta2x11-mfd.c | 10 ++++------
>  1 file changed, 4 insertions(+), 6 deletions(-)

-- 
Lee Jones [李琼斯]
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

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

* Re: [PATCH 12/22] mfd: sta2x11: drop unused MODULE_ tags from non-modular code
  2018-12-03 11:14   ` Lee Jones
@ 2018-12-03 15:07     ` Paul Gortmaker
  2018-12-04  9:23       ` Davide Ciminaghi
  2018-12-07 16:39     ` Alessandro Rubini
  1 sibling, 1 reply; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-03 15:07 UTC (permalink / raw)
  To: Lee Jones; +Cc: linux-kernel, Alessandro Rubini, Davide Ciminaghi

[Re: [PATCH 12/22] mfd: sta2x11: drop unused MODULE_ tags from non-modular code] On 03/12/2018 (Mon 11:14) Lee Jones wrote:

> On Sun, 02 Dec 2018, Paul Gortmaker wrote:
> 
> > The Kconfig currently controlling compilation of this code is:
> > 
> > drivers/mfd/Kconfig:config MFD_STA2X11
> > drivers/mfd/Kconfig:    bool "STMicroelectronics STA2X11"
> > 
> > ...meaning that it currently is not being built as a module by anyone.
> > 
> > Lets remove the couple traces of modular infrastructure use, so that
> > when reading the driver there is no doubt it is builtin-only.

[...]

> > Cc: Lee Jones <lee.jones@linaro.org>
> 
> I think you should add some of the driver developers.

Fair point, but note that get_maintainers doesn't list any developers,
and neither of the driver authors put an e-mail address in the driver.

   
   $ gm drivers/mfd/sta2x11-mfd.c
   ------------------------------------------------------
   Lee Jones <lee.jones@linaro.org> (supporter:MULTIFUNCTION DEVICES (MFD))
   linux-kernel@vger.kernel.org (open list)
   ------------------------------------------------------
   Cc: Lee Jones <lee.jones@linaro.org>
   Cc: linux-kernel@vger.kernel.org
   ------------------------------------------------------
   $ 

Looking in git history, I was able to find two e-mail, but one hasn't
been used in 5+ years, so hopefully it is still active.  I have added
both to the Cc: of this e-mail and added them to the commit below.

Alessandro, Davide - you can find additional context regarding why we
are making these changes in the [00/22] e-mail that can be found here:

https://lore.kernel.org/lkml/1543811009-15112-1-git-send-email-paul.gortmaker@windriver.com/

Thanks,
Paul.

--

From 34742ffbf343abca07f9d0d680ebfebaedd993c9 Mon Sep 17 00:00:00 2001
From: Paul Gortmaker <paul.gortmaker@windriver.com>
Date: Wed, 6 Jul 2016 16:46:39 -0400
Subject: [PATCH] mfd: sta2x11: drop unused MODULE_ tags from non-modular code

The Kconfig currently controlling compilation of this code is:

drivers/mfd/Kconfig:config MFD_STA2X11
drivers/mfd/Kconfig:    bool "STMicroelectronics STA2X11"

...meaning that it currently is not being built as a module by anyone.

Lets remove the couple traces of modular infrastructure use, so that
when reading the driver there is no doubt it is builtin-only.

We delete the MODULE_LICENSE tag etc. since all that information
is already contained at the top of the file in the comments.

Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code.

We replace module.h with init.h and export.h ; the latter since the
file does export some symbols.

Cc: Lee Jones <lee.jones@linaro.org>
Cc: Alessandro Rubini <rubini@gnudd.com>
Cc: Davide Ciminaghi <ciminaghi@gnudd.com>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>

diff --git a/drivers/mfd/sta2x11-mfd.c b/drivers/mfd/sta2x11-mfd.c
index 3aeafa228baf..cab9aabcaa1f 100644
--- a/drivers/mfd/sta2x11-mfd.c
+++ b/drivers/mfd/sta2x11-mfd.c
@@ -1,4 +1,6 @@
 /*
+ * STA2x11 mfd for GPIO, SCTL and APBREG
+ *
  * Copyright (c) 2009-2011 Wind River Systems, Inc.
  * Copyright (c) 2011 ST Microelectronics (Alessandro Rubini, Davide Ciminaghi)
  *
@@ -18,7 +20,8 @@
  */
 
 #include <linux/kernel.h>
-#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/export.h>
 #include <linux/spinlock.h>
 #include <linux/errno.h>
 #include <linux/device.h>
@@ -653,8 +656,3 @@ static int __init sta2x11_mfd_init(void)
  */
 subsys_initcall(sta2x11_drivers_init);
 rootfs_initcall(sta2x11_mfd_init);
-
-MODULE_LICENSE("GPL v2");
-MODULE_AUTHOR("Wind River");
-MODULE_DESCRIPTION("STA2x11 mfd for GPIO, SCTL and APBREG");
-MODULE_DEVICE_TABLE(pci, sta2x11_mfd_tbl);
-- 
2.7.4


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

* Re: [PATCH 12/22] mfd: sta2x11: drop unused MODULE_ tags from non-modular code
  2018-12-03 15:07     ` Paul Gortmaker
@ 2018-12-04  9:23       ` Davide Ciminaghi
  0 siblings, 0 replies; 51+ messages in thread
From: Davide Ciminaghi @ 2018-12-04  9:23 UTC (permalink / raw)
  To: Paul Gortmaker; +Cc: Lee Jones, linux-kernel, Alessandro Rubini

On Mon, Dec 03, 2018 at 10:07:56AM -0500, Paul Gortmaker wrote:
> [Re: [PATCH 12/22] mfd: sta2x11: drop unused MODULE_ tags from non-modular code] On 03/12/2018 (Mon 11:14) Lee Jones wrote:
> 
> > On Sun, 02 Dec 2018, Paul Gortmaker wrote:
> > 
.....
> 
> Looking in git history, I was able to find two e-mail, but one hasn't
> been used in 5+ years, so hopefully it is still active.  I have added
> both to the Cc: of this e-mail and added them to the commit below.
> 
> Alessandro, Davide - you can find additional context regarding why we
> are making these changes in the [00/22] e-mail that can be found here:
> 
Hi,

the patch is OK for me.
I think Alessandro is travelling, he'll reply as soon as he's back to work.


Thanks and regards
Davide

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

* Re: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
  2018-12-03  4:23 ` Paul Gortmaker
@ 2018-12-05 11:35   ` Charles Keepax
  -1 siblings, 0 replies; 51+ messages in thread
From: Charles Keepax @ 2018-12-05 11:35 UTC (permalink / raw)
  To: Paul Gortmaker
  Cc: Lee Jones, linux-kernel, Arnd Bergmann, Cory Maccarrone,
	David Dajun Chen, Dong Aisheng, Eric Miao, Graeme Gregory,
	Guennadi Liakhovetski, Haojian Zhuang, Jin Park,
	Jorge Eduardo Candelaria, Laxman Dewangan, Linus Walleij,
	Mark Brown, Mattias Nilsson, Michael Hennerich, Mike Rapoport,
	Tony Lindgren, Venu Byravarasu, linux-omap, patches,
	Support Opensource

On Sun, Dec 02, 2018 at 11:23:07PM -0500, Paul Gortmaker wrote:
> The solution to #4 is similar - we delete the ".remove" function and
> the binding into the platform_driver struct.  However, since the same
> ".remove" function could also be triggered by an "unbind" (such as for
> pass-through of a device to a guest instance)  - so we also explicitly
> disable any unbind for the driver.
> 
> The unbind mask allows us to ensure we will see if there was some odd
> corner case out there that was relying on it.  Typically it would be a
> multi-port ethernet card passing a port through to a guest, so a
> sensible use case in MFD drivers seems highly unlikely.  This same
> solution has already been used in multiple other mainline subsystems.
> 

I guess if this is a general direction thing, but it does seem
that module unload is not the only reason one might ever unbind a
driver. So are we sure we want to remove the option to unbind
these drivers? Certainly for testing it is sometimes useful.

Thanks,
Charles

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

* Re: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
@ 2018-12-05 11:35   ` Charles Keepax
  0 siblings, 0 replies; 51+ messages in thread
From: Charles Keepax @ 2018-12-05 11:35 UTC (permalink / raw)
  To: Paul Gortmaker
  Cc: Lee Jones, linux-kernel, Arnd Bergmann, Cory Maccarrone,
	David Dajun Chen, Dong Aisheng, Eric Miao, Graeme Gregory,
	Guennadi Liakhovetski, Haojian Zhuang, Jin Park,
	Jorge Eduardo Candelaria, Laxman Dewangan, Linus Walleij,
	Mark Brown, Mattias Nilsson, Michael Hennerich, Mike Rapoport,
	Tony Lindgren

On Sun, Dec 02, 2018 at 11:23:07PM -0500, Paul Gortmaker wrote:
> The solution to #4 is similar - we delete the ".remove" function and
> the binding into the platform_driver struct.  However, since the same
> ".remove" function could also be triggered by an "unbind" (such as for
> pass-through of a device to a guest instance)  - so we also explicitly
> disable any unbind for the driver.
> 
> The unbind mask allows us to ensure we will see if there was some odd
> corner case out there that was relying on it.  Typically it would be a
> multi-port ethernet card passing a port through to a guest, so a
> sensible use case in MFD drivers seems highly unlikely.  This same
> solution has already been used in multiple other mainline subsystems.
> 

I guess if this is a general direction thing, but it does seem
that module unload is not the only reason one might ever unbind a
driver. So are we sure we want to remove the option to unbind
these drivers? Certainly for testing it is sometimes useful.

Thanks,
Charles

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

* Re: [PATCH 19/22] mfd: wm831x-core: drop unused MODULE_ tags from non-modular code
  2018-12-03  4:23 ` [PATCH 19/22] mfd: wm831x-core: drop unused MODULE_ tags from non-modular code Paul Gortmaker
@ 2018-12-05 11:36   ` Charles Keepax
  0 siblings, 0 replies; 51+ messages in thread
From: Charles Keepax @ 2018-12-05 11:36 UTC (permalink / raw)
  To: Paul Gortmaker; +Cc: Lee Jones, linux-kernel, patches

On Sun, Dec 02, 2018 at 11:23:26PM -0500, Paul Gortmaker wrote:
> The Kconfig currently controlling compilation of this code is:
> 
> drivers/mfd/Kconfig:config MFD_WM831X
> drivers/mfd/Kconfig:    bool
> 
> ...meaning that it currently is not being built as a module by anyone.
> 
> Lets remove the couple traces of modular infrastructure use, so that
> when reading the driver there is no doubt it is builtin-only.
> 
> We delete the MODULE_LICENSE tag etc. since all that information
> is already contained at the top of the file in the comments.
> 
> Cc: Lee Jones <lee.jones@linaro.org>
> Cc: patches@opensource.cirrus.com
> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
> ---

Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com>

Thanks,
Charles

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

* Re: [PATCH 18/22] mfd: wm831x-i2c: Make it explicitly non-modular
  2018-12-03  4:23 ` [PATCH 18/22] mfd: wm831x-i2c: " Paul Gortmaker
@ 2018-12-05 11:38   ` Charles Keepax
  2018-12-07 18:16     ` Paul Gortmaker
  0 siblings, 1 reply; 51+ messages in thread
From: Charles Keepax @ 2018-12-05 11:38 UTC (permalink / raw)
  To: Paul Gortmaker; +Cc: Lee Jones, linux-kernel, patches

On Sun, Dec 02, 2018 at 11:23:25PM -0500, Paul Gortmaker wrote:
> The Kconfig currently controlling compilation of this code is:
> 
> drivers/mfd/Kconfig:config MFD_WM831X_I2C
> drivers/mfd/Kconfig:    bool "Wolfson Microelectronics WM831x/2x PMICs with I2C"
> 
> ...meaning that it currently is not being built as a module by anyone.
> 
> Lets remove the modular code that is essentially orphaned, so that
> when reading the driver there is no doubt it is builtin-only.
> 
> We explicitly disallow a driver unbind, since that doesn't have a
> sensible use case anyway, and it allows us to drop the ".remove"
> code for non-modular drivers.
> 
> Since module_init was not in use by this code, the init ordering
> remains unchanged with this commit.
> 
> Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code.
> 
> Cc: Lee Jones <lee.jones@linaro.org>
> Cc: patches@opensource.cirrus.com
> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
> ---
> -static int wm831x_i2c_remove(struct i2c_client *i2c)
> -{
> -	struct wm831x *wm831x = i2c_get_clientdata(i2c);
> -
> -	wm831x_device_exit(wm831x);

These patches remove the only callers of wm831x_device_exit, so I
guess we should probably remove that function too?

Thanks,
Charles

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

* Re: [PATCH 20/22] mfd: wm8350-i2c: Make it explicitly non-modular
  2018-12-03  4:23 ` [PATCH 20/22] mfd: wm8350-i2c: Make it explicitly non-modular Paul Gortmaker
@ 2018-12-05 11:39   ` Charles Keepax
  0 siblings, 0 replies; 51+ messages in thread
From: Charles Keepax @ 2018-12-05 11:39 UTC (permalink / raw)
  To: Paul Gortmaker; +Cc: Lee Jones, linux-kernel, patches

On Sun, Dec 02, 2018 at 11:23:27PM -0500, Paul Gortmaker wrote:
> The Kconfig currently controlling compilation of this code is:
> 
> drivers/mfd/Kconfig:config MFD_WM8350_I2C
> drivers/mfd/Kconfig:    bool "Wolfson Microelectronics WM8350 with I2C"
> 
> ...meaning that it currently is not being built as a module by anyone.
> 
> Lets remove the modular code that is essentially orphaned, so that
> when reading the driver there is no doubt it is builtin-only.
> 
> We explicitly disallow a driver unbind, since that doesn't have a
> sensible use case anyway, and it allows us to drop the ".remove"
> code for non-modular drivers.
> 
> Since module_init was not in use by this code, the init ordering
> remains unchanged with this commit.
> 
> We don't replace module.h with init.h since the file already has that.
> But we do delete an unused moduleparam.h
> 
> Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code.
> 
> We also delete the MODULE_LICENSE tag etc. since all that information
> is already contained at the top of the file in the comments.
> 
> Cc: Lee Jones <lee.jones@linaro.org>
> Cc: patches@opensource.cirrus.com
> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
> ---
> -static int wm8350_i2c_remove(struct i2c_client *i2c)
> -{
> -	struct wm8350 *wm8350 = i2c_get_clientdata(i2c);
> -
> -	wm8350_device_exit(wm8350);
> -
> -	return 0;
> -}

Likewise here it removes the only caller of wm8350_device_exit.

Thanks,
Charles

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

* Re: [PATCH 21/22] mfd: wm8350-core: drop unused MODULE_ tags from non-modular code
  2018-12-03  4:23 ` [PATCH 21/22] mfd: wm8350-core: drop unused MODULE_ tags from non-modular code Paul Gortmaker
@ 2018-12-05 11:39   ` Charles Keepax
  0 siblings, 0 replies; 51+ messages in thread
From: Charles Keepax @ 2018-12-05 11:39 UTC (permalink / raw)
  To: Paul Gortmaker; +Cc: Lee Jones, linux-kernel, Linus Walleij, patches

On Sun, Dec 02, 2018 at 11:23:28PM -0500, Paul Gortmaker wrote:
> The Kconfig currently controlling compilation of this code is:
> 
> drivers/mfd/Kconfig:config MFD_WM8350
> drivers/mfd/Kconfig:    bool
> 
> ...meaning that it currently is not being built as a module by anyone.
> 
> Lets remove the couple traces of modular infrastructure use, so that
> when reading the driver there is no doubt it is builtin-only.
> 
> We delete the MODULE_LICENSE tag etc. since all that information
> is already contained at the top of the file in the comments.
> 
> We replace module.h with init.h and export.h ; the latter since the
> file does export some symbols.
> 
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Cc: Lee Jones <lee.jones@linaro.org>
> Cc: patches@opensource.cirrus.com
> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
> ---

Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com>

Thanks,
Charles

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

* Re: [PATCH 22/22] mfd: wm8400-core: Make it explicitly non-modular
  2018-12-03  4:23 ` [PATCH 22/22] mfd: wm8400-core: Make it explicitly non-modular Paul Gortmaker
@ 2018-12-05 11:41   ` Charles Keepax
  0 siblings, 0 replies; 51+ messages in thread
From: Charles Keepax @ 2018-12-05 11:41 UTC (permalink / raw)
  To: Paul Gortmaker; +Cc: Lee Jones, linux-kernel, Mark Brown, patches

On Sun, Dec 02, 2018 at 11:23:29PM -0500, Paul Gortmaker wrote:
> The Kconfig currently controlling compilation of this code is:
> 
> drivers/mfd/Kconfig:config MFD_WM8400
> drivers/mfd/Kconfig:    bool "Wolfson Microelectronics WM8400"
> 
> ...meaning that it currently is not being built as a module by anyone.
> 
> Lets remove the modular code that is essentially orphaned, so that
> when reading the driver there is no doubt it is builtin-only.
> 
> Since module_init was not in use by this code, the init ordering
> remains unchanged with this commit.
> 
> A trivial function rename from wm8400_module_init to the name
> wm8400_driver_init is also done to reduce possible confusion.
> 
> Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code.
> 
> We also delete the MODULE_LICENSE tag etc. since all that information
> is already contained at the top of the file in the comments.
> 
> Cc: Lee Jones <lee.jones@linaro.org>
> Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
> Cc: patches@opensource.cirrus.com
> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
> ---

Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com>

Thanks,
Charles

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

* Re: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
  2018-12-05 11:35   ` Charles Keepax
@ 2018-12-05 11:48     ` Linus Walleij
  -1 siblings, 0 replies; 51+ messages in thread
From: Linus Walleij @ 2018-12-05 11:48 UTC (permalink / raw)
  To: Charles Keepax
  Cc: Paul Gortmaker, Lee Jones, linux-kernel, Arnd Bergmann,
	Cory Maccarrone, David Dajun Chen, Dong Aisheng, Eric Miao,
	Graeme Gregory, Guennadi Liakhovetski, Haojian Zhuang, jinyoungp,
	Jorge Eduardo Candelaria, Laxman Dewangan, Mark Brown,
	Mattias NILSSON, Michael Hennerich, Mike Rapoport,
	ext Tony Lindgren, Venu Byravarasu, Linux-OMAP, patches,
	Support Opensource

On Wed, Dec 5, 2018 at 12:36 PM Charles Keepax
<ckeepax@opensource.cirrus.com> wrote:
> On Sun, Dec 02, 2018 at 11:23:07PM -0500, Paul Gortmaker wrote:
> > The solution to #4 is similar - we delete the ".remove" function and
> > the binding into the platform_driver struct.  However, since the same
> > ".remove" function could also be triggered by an "unbind" (such as for
> > pass-through of a device to a guest instance)  - so we also explicitly
> > disable any unbind for the driver.
> >
> > The unbind mask allows us to ensure we will see if there was some odd
> > corner case out there that was relying on it.  Typically it would be a
> > multi-port ethernet card passing a port through to a guest, so a
> > sensible use case in MFD drivers seems highly unlikely.  This same
> > solution has already been used in multiple other mainline subsystems.
> >
>
> I guess if this is a general direction thing, but it does seem
> that module unload is not the only reason one might ever unbind a
> driver. So are we sure we want to remove the option to unbind
> these drivers? Certainly for testing it is sometimes useful.

I personally never understood why these attributes are even
present on non-modular drivers.

If testing is about exercising unbind/bind to reintialize
the code through a new call to .probe(), why would the developer
not take it all the way through and make it a module?
It just looks like a half-measure.

Yours,
Linus Walleij

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

* Re: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
@ 2018-12-05 11:48     ` Linus Walleij
  0 siblings, 0 replies; 51+ messages in thread
From: Linus Walleij @ 2018-12-05 11:48 UTC (permalink / raw)
  To: Charles Keepax
  Cc: Paul Gortmaker, Lee Jones, linux-kernel, Arnd Bergmann,
	Cory Maccarrone, David Dajun Chen, Dong Aisheng, Eric Miao,
	Graeme Gregory, Guennadi Liakhovetski, Haojian Zhuang, jinyoungp,
	Jorge Eduardo Candelaria, Laxman Dewangan, Mark Brown,
	Mattias NILSSON, Michael Hennerich, Mike Rapoport

On Wed, Dec 5, 2018 at 12:36 PM Charles Keepax
<ckeepax@opensource.cirrus.com> wrote:
> On Sun, Dec 02, 2018 at 11:23:07PM -0500, Paul Gortmaker wrote:
> > The solution to #4 is similar - we delete the ".remove" function and
> > the binding into the platform_driver struct.  However, since the same
> > ".remove" function could also be triggered by an "unbind" (such as for
> > pass-through of a device to a guest instance)  - so we also explicitly
> > disable any unbind for the driver.
> >
> > The unbind mask allows us to ensure we will see if there was some odd
> > corner case out there that was relying on it.  Typically it would be a
> > multi-port ethernet card passing a port through to a guest, so a
> > sensible use case in MFD drivers seems highly unlikely.  This same
> > solution has already been used in multiple other mainline subsystems.
> >
>
> I guess if this is a general direction thing, but it does seem
> that module unload is not the only reason one might ever unbind a
> driver. So are we sure we want to remove the option to unbind
> these drivers? Certainly for testing it is sometimes useful.

I personally never understood why these attributes are even
present on non-modular drivers.

If testing is about exercising unbind/bind to reintialize
the code through a new call to .probe(), why would the developer
not take it all the way through and make it a module?
It just looks like a half-measure.

Yours,
Linus Walleij

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

* Re: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
  2018-12-03  4:23 ` Paul Gortmaker
@ 2018-12-05 11:50   ` Linus Walleij
  -1 siblings, 0 replies; 51+ messages in thread
From: Linus Walleij @ 2018-12-05 11:50 UTC (permalink / raw)
  To: Paul Gortmaker
  Cc: Lee Jones, linux-kernel, Arnd Bergmann, Cory Maccarrone,
	David Dajun Chen, Dong Aisheng, Eric Miao, Graeme Gregory,
	Guennadi Liakhovetski, Haojian Zhuang, jinyoungp,
	Jorge Eduardo Candelaria, Laxman Dewangan, Mark Brown,
	Mattias NILSSON, Michael Hennerich, Mike Rapoport,
	ext Tony Lindgren, Venu Byravarasu, Linux-OMAP, patches,
	Support Opensource

On Mon, Dec 3, 2018 at 5:24 AM Paul Gortmaker
<paul.gortmaker@windriver.com> wrote:

> [v1 --> v2: add some more commits as requested by Lee (MFD maintainer),
>  update the 00/NN text; re-do build and link testing on new linux-next. ]
>
> This group of MFD drivers are all controlled by "bool" Kconfig settings,
> but contain various amounts of largely pointless uses of infrastructure
> related to modular operations, even though they can't be built modular.
>
> We can easily remove/replace all of it.  We are trying to make driver
> code consistent with the Makefiles/Kconfigs that control them.  This
> means not using modular functions/macros for drivers that can never be
> built as a module.  Some of the downfalls this oversight leads to are:

This series:
Acked-by: Linus Walleij <linus.walleij@linaro.org>

IMO it is clearly the right thing to do, moving a whole bunch
of clutter out of the way so we can see clearly and the effect
of getting rid of the <linux/module.h> is a substantial improvement
in its own right.

Yours.
Linus Walleij

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

* Re: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
@ 2018-12-05 11:50   ` Linus Walleij
  0 siblings, 0 replies; 51+ messages in thread
From: Linus Walleij @ 2018-12-05 11:50 UTC (permalink / raw)
  To: Paul Gortmaker
  Cc: Lee Jones, linux-kernel, Arnd Bergmann, Cory Maccarrone,
	David Dajun Chen, Dong Aisheng, Eric Miao, Graeme Gregory,
	Guennadi Liakhovetski, Haojian Zhuang, jinyoungp,
	Jorge Eduardo Candelaria, Laxman Dewangan, Mark Brown,
	Mattias NILSSON, Michael Hennerich, Mike Rapoport,
	ext Tony Lindgren, Ve

On Mon, Dec 3, 2018 at 5:24 AM Paul Gortmaker
<paul.gortmaker@windriver.com> wrote:

> [v1 --> v2: add some more commits as requested by Lee (MFD maintainer),
>  update the 00/NN text; re-do build and link testing on new linux-next. ]
>
> This group of MFD drivers are all controlled by "bool" Kconfig settings,
> but contain various amounts of largely pointless uses of infrastructure
> related to modular operations, even though they can't be built modular.
>
> We can easily remove/replace all of it.  We are trying to make driver
> code consistent with the Makefiles/Kconfigs that control them.  This
> means not using modular functions/macros for drivers that can never be
> built as a module.  Some of the downfalls this oversight leads to are:

This series:
Acked-by: Linus Walleij <linus.walleij@linaro.org>

IMO it is clearly the right thing to do, moving a whole bunch
of clutter out of the way so we can see clearly and the effect
of getting rid of the <linux/module.h> is a substantial improvement
in its own right.

Yours.
Linus Walleij

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

* RE: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
  2018-12-03  4:23 ` Paul Gortmaker
@ 2018-12-05 12:01   ` Steve Twiss
  -1 siblings, 0 replies; 51+ messages in thread
From: Steve Twiss @ 2018-12-05 12:01 UTC (permalink / raw)
  To: Paul Gortmaker, Lee Jones
  Cc: linux-kernel, Arnd Bergmann, Cory Maccarrone, David Dajun Chen,
	Dong Aisheng, Eric Miao, Graeme Gregory, Guennadi Liakhovetski,
	Haojian Zhuang, Jin Park, Jorge Eduardo Candelaria,
	Laxman Dewangan, Linus Walleij, Mark Brown, Mattias Nilsson,
	Michael Hennerich, Mike Rapoport, Tony Lindgren, Venu Byravarasu,
	linux-omap, patches, Support Opensource

Hi Paul,

On 03 December 2018 04:23, Paul Gortmaker wrote:

> Subject: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
> 
> [v1 --> v2: add some more commits as requested by Lee (MFD maintainer),
>  update the 00/NN text; re-do build and link testing on new linux-next. ]
> 
> This group of MFD drivers are all controlled by "bool" Kconfig settings,
> but contain various amounts of largely pointless uses of infrastructure
> related to modular operations, even though they can't be built modular.
> 
> We can easily remove/replace all of it.  We are trying to make driver
> code consistent with the Makefiles/Kconfigs that control them. 

For the DA9052 and DA9055, changes:

-  drivers/mfd/da9052-core.c         | 11 -----------
-  drivers/mfd/da9052-i2c.c          | 22 ++-------------------
-  drivers/mfd/da9052-irq.c          |  1 -
-  drivers/mfd/da9052-spi.c          | 22 ++-------------------
-  drivers/mfd/da9055-core.c         | 13 ++-----------
-  drivers/mfd/da9055-i2c.c          | 24 ++---------------------

The responsibility can fall back to Dialog for these changes. We will
submit Kconfig patches for these and make them explicitly non-modular.
This will remove the ambiguity caused by the Kconfig bool options.

Regards,
Steve

> This
> means not using modular functions/macros for drivers that can never be
> built as a module.  Some of the downfalls this oversight leads to are:
> 
>  (1) it is easy to accidentally write unused module_exit and remove code
>  (2) it can be misleading when reading the source, thinking it can be
>      modular when the Makefile and/or Kconfig prohibit it
>  (3) it requires the include of the module.h header file which in turn
>      includes nearly everything else, thus adding a lot of CPP overhead.
>  (4) it gets copied/replicated into other drivers and spreads quickly.
> 
> What we see in current drivers falls into one or more of the following
> categories:
> 
> 1) include of <linux/module.h> when it simply isn't needed
> 
> 2) Use of MODULE_LICENSE, MODULE_DEVICE_TABLE,  MODULE_AUTHOR etc.
>    macros that are no-ops for non-modular drivers.
> 
> 3) Creation of a module_exit() function that will be compiled and
>    linked in but never actually called for non-modular drivers.
> 
> 4) Addition of a platform_driver ".remove" function that is bound
>    into the struct but will never be called for non-module use cases.
> 
> Solution to #1 --> #3 is simple ; we just delete the related code.
> 
> The solution to #4 is similar - we delete the ".remove" function and
> the binding into the platform_driver struct.  However, since the same
> ".remove" function could also be triggered by an "unbind" (such as for
> pass-through of a device to a guest instance)  - so we also explicitly
> disable any unbind for the driver.
> 
> The unbind mask allows us to ensure we will see if there was some odd
> corner case out there that was relying on it.  Typically it would be a
> multi-port ethernet card passing a port through to a guest, so a
> sensible use case in MFD drivers seems highly unlikely.  This same
> solution has already been used in multiple other mainline subsystems.
> 
> Build testing was done on drivers/mfd for allyesconfig on x86_64, ARM
> and ARM-64 on a recent linux-next checkout.
> 
> Paul.
> 
> ---
> 
> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: Cory Maccarrone <darkstar6262@gmail.com>
> Cc: David Dajun Chen <dchen@diasemi.com>
> Cc: Dong Aisheng <dong.aisheng@linaro.org>
> Cc: Eric Miao <eric.miao@marvell.com>
> Cc: Graeme Gregory <gg@slimlogic.co.uk>
> Cc: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
> Cc: Haojian Zhuang <haojian.zhuang@marvell.com>
> Cc: Jin Park <jinyoungp@nvidia.com>
> Cc: Jorge Eduardo Candelaria <jedu@slimlogic.co.uk>
> Cc: Laxman Dewangan <ldewangan@nvidia.com>
> Cc: Lee Jones <lee.jones@linaro.org>
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
> Cc: Mattias Nilsson <mattias.i.nilsson@stericsson.com>
> Cc: Michael Hennerich <michael.hennerich@analog.com>
> Cc: Mike Rapoport <mike@compulab.co.il>
> Cc: Tony Lindgren <tony@atomide.com>
> Cc: Venu Byravarasu <vbyravarasu@nvidia.com>
> Cc: linux-omap@vger.kernel.org
> Cc: patches@opensource.cirrus.com
> Cc: Support Opensource <support.opensource@diasemi.com>
> 
> 
> Paul Gortmaker (22):
>   mfd: aat2870-core: Make it explicitly non-modular
>   mfd: adp5520: Make it explicitly non-modular
>   mfd: as3711: Make it explicitly non-modular
>   mfd: da903x: Make it explicitly non-modular
>   mfd: da9052-*: Make it explicitly non-modular
>   mfd: da9055-i2c: Make it explicitly non-modular
>   mfd: da9055-core: make it explicitly non-modular
>   mfd: db8500-prcmu: drop unused MODULE_ tags from non-modular code
>   mfd: htc-i2cpld: Make it explicitly non-modular
>   mfd: max8925-core: drop unused MODULE_ tags from non-modular code
>   mfd: rc5t583: Make it explicitly non-modular
>   mfd: sta2x11: drop unused MODULE_ tags from non-modular code
>   mfd: syscon: Make it explicitly non-modular
>   mfd: tps65090: Make it explicitly non-modular
>   mfd: tps65910: Make it explicitly non-modular
>   mfd: tps80031: Make it explicitly non-modular
>   mfd: wm831x-spi: Make it explicitly non-modular
>   mfd: wm831x-i2c: Make it explicitly non-modular
>   mfd: wm831x-core: drop unused MODULE_ tags from non-modular code
>   mfd: wm8350-i2c: Make it explicitly non-modular
>   mfd: wm8350-core: drop unused MODULE_ tags from non-modular code
>   mfd: wm8400-core: Make it explicitly non-modular
> 
>  drivers/mfd/aat2870-core.c        | 40 +++------------------------------------
>  drivers/mfd/adp5520.c             | 30 +++++++----------------------
>  drivers/mfd/as3711.c              | 14 --------------
>  drivers/mfd/da903x.c              | 26 +++----------------------
>  drivers/mfd/da9052-core.c         | 11 -----------
>  drivers/mfd/da9052-i2c.c          | 22 ++-------------------
>  drivers/mfd/da9052-irq.c          |  1 -
>  drivers/mfd/da9052-spi.c          | 22 ++-------------------
>  drivers/mfd/da9055-core.c         | 13 ++-----------
>  drivers/mfd/da9055-i2c.c          | 24 ++---------------------
>  drivers/mfd/db8500-prcmu.c        | 10 ++++------
>  drivers/mfd/htc-i2cpld.c          | 18 +-----------------
>  drivers/mfd/max8925-core.c        |  7 +------
>  drivers/mfd/rc5t583.c             | 14 --------------
>  drivers/mfd/sta2x11-mfd.c         | 10 ++++------
>  drivers/mfd/syscon.c              | 12 +-----------
>  drivers/mfd/tps65090.c            | 30 +++++------------------------
>  drivers/mfd/tps65910.c            | 18 +-----------------
>  drivers/mfd/tps80031.c            | 37 ++----------------------------------
>  drivers/mfd/wm831x-core.c         |  7 ++-----
>  drivers/mfd/wm831x-i2c.c          | 20 ++------------------
>  drivers/mfd/wm831x-spi.c          | 24 ++---------------------
>  drivers/mfd/wm8350-core.c         |  6 ++----
>  drivers/mfd/wm8350-i2c.c          | 24 +----------------------
>  drivers/mfd/wm8400-core.c         | 18 +++---------------
>  include/linux/mfd/da9052/da9052.h |  1 -
>  26 files changed, 52 insertions(+), 407 deletions(-)
> 
> --
> 2.7.4


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

* RE: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
@ 2018-12-05 12:01   ` Steve Twiss
  0 siblings, 0 replies; 51+ messages in thread
From: Steve Twiss @ 2018-12-05 12:01 UTC (permalink / raw)
  To: Paul Gortmaker, Lee Jones
  Cc: linux-kernel, Arnd Bergmann, Cory Maccarrone, David Dajun Chen,
	Dong Aisheng, Eric Miao, Graeme Gregory, Guennadi Liakhovetski,
	Haojian Zhuang, Jin Park, Jorge Eduardo Candelaria,
	Laxman Dewangan, Linus Walleij, Mark Brown, Mattias Nilsson,
	Michael Hennerich, Mike Rapoport

Hi Paul,

On 03 December 2018 04:23, Paul Gortmaker wrote:

> Subject: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
> 
> [v1 --> v2: add some more commits as requested by Lee (MFD maintainer),
>  update the 00/NN text; re-do build and link testing on new linux-next. ]
> 
> This group of MFD drivers are all controlled by "bool" Kconfig settings,
> but contain various amounts of largely pointless uses of infrastructure
> related to modular operations, even though they can't be built modular.
> 
> We can easily remove/replace all of it.  We are trying to make driver
> code consistent with the Makefiles/Kconfigs that control them. 

For the DA9052 and DA9055, changes:

-  drivers/mfd/da9052-core.c         | 11 -----------
-  drivers/mfd/da9052-i2c.c          | 22 ++-------------------
-  drivers/mfd/da9052-irq.c          |  1 -
-  drivers/mfd/da9052-spi.c          | 22 ++-------------------
-  drivers/mfd/da9055-core.c         | 13 ++-----------
-  drivers/mfd/da9055-i2c.c          | 24 ++---------------------

The responsibility can fall back to Dialog for these changes. We will
submit Kconfig patches for these and make them explicitly non-modular.
This will remove the ambiguity caused by the Kconfig bool options.

Regards,
Steve

> This
> means not using modular functions/macros for drivers that can never be
> built as a module.  Some of the downfalls this oversight leads to are:
> 
>  (1) it is easy to accidentally write unused module_exit and remove code
>  (2) it can be misleading when reading the source, thinking it can be
>      modular when the Makefile and/or Kconfig prohibit it
>  (3) it requires the include of the module.h header file which in turn
>      includes nearly everything else, thus adding a lot of CPP overhead.
>  (4) it gets copied/replicated into other drivers and spreads quickly.
> 
> What we see in current drivers falls into one or more of the following
> categories:
> 
> 1) include of <linux/module.h> when it simply isn't needed
> 
> 2) Use of MODULE_LICENSE, MODULE_DEVICE_TABLE,  MODULE_AUTHOR etc.
>    macros that are no-ops for non-modular drivers.
> 
> 3) Creation of a module_exit() function that will be compiled and
>    linked in but never actually called for non-modular drivers.
> 
> 4) Addition of a platform_driver ".remove" function that is bound
>    into the struct but will never be called for non-module use cases.
> 
> Solution to #1 --> #3 is simple ; we just delete the related code.
> 
> The solution to #4 is similar - we delete the ".remove" function and
> the binding into the platform_driver struct.  However, since the same
> ".remove" function could also be triggered by an "unbind" (such as for
> pass-through of a device to a guest instance)  - so we also explicitly
> disable any unbind for the driver.
> 
> The unbind mask allows us to ensure we will see if there was some odd
> corner case out there that was relying on it.  Typically it would be a
> multi-port ethernet card passing a port through to a guest, so a
> sensible use case in MFD drivers seems highly unlikely.  This same
> solution has already been used in multiple other mainline subsystems.
> 
> Build testing was done on drivers/mfd for allyesconfig on x86_64, ARM
> and ARM-64 on a recent linux-next checkout.
> 
> Paul.
> 
> ---
> 
> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: Cory Maccarrone <darkstar6262@gmail.com>
> Cc: David Dajun Chen <dchen@diasemi.com>
> Cc: Dong Aisheng <dong.aisheng@linaro.org>
> Cc: Eric Miao <eric.miao@marvell.com>
> Cc: Graeme Gregory <gg@slimlogic.co.uk>
> Cc: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
> Cc: Haojian Zhuang <haojian.zhuang@marvell.com>
> Cc: Jin Park <jinyoungp@nvidia.com>
> Cc: Jorge Eduardo Candelaria <jedu@slimlogic.co.uk>
> Cc: Laxman Dewangan <ldewangan@nvidia.com>
> Cc: Lee Jones <lee.jones@linaro.org>
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
> Cc: Mattias Nilsson <mattias.i.nilsson@stericsson.com>
> Cc: Michael Hennerich <michael.hennerich@analog.com>
> Cc: Mike Rapoport <mike@compulab.co.il>
> Cc: Tony Lindgren <tony@atomide.com>
> Cc: Venu Byravarasu <vbyravarasu@nvidia.com>
> Cc: linux-omap@vger.kernel.org
> Cc: patches@opensource.cirrus.com
> Cc: Support Opensource <support.opensource@diasemi.com>
> 
> 
> Paul Gortmaker (22):
>   mfd: aat2870-core: Make it explicitly non-modular
>   mfd: adp5520: Make it explicitly non-modular
>   mfd: as3711: Make it explicitly non-modular
>   mfd: da903x: Make it explicitly non-modular
>   mfd: da9052-*: Make it explicitly non-modular
>   mfd: da9055-i2c: Make it explicitly non-modular
>   mfd: da9055-core: make it explicitly non-modular
>   mfd: db8500-prcmu: drop unused MODULE_ tags from non-modular code
>   mfd: htc-i2cpld: Make it explicitly non-modular
>   mfd: max8925-core: drop unused MODULE_ tags from non-modular code
>   mfd: rc5t583: Make it explicitly non-modular
>   mfd: sta2x11: drop unused MODULE_ tags from non-modular code
>   mfd: syscon: Make it explicitly non-modular
>   mfd: tps65090: Make it explicitly non-modular
>   mfd: tps65910: Make it explicitly non-modular
>   mfd: tps80031: Make it explicitly non-modular
>   mfd: wm831x-spi: Make it explicitly non-modular
>   mfd: wm831x-i2c: Make it explicitly non-modular
>   mfd: wm831x-core: drop unused MODULE_ tags from non-modular code
>   mfd: wm8350-i2c: Make it explicitly non-modular
>   mfd: wm8350-core: drop unused MODULE_ tags from non-modular code
>   mfd: wm8400-core: Make it explicitly non-modular
> 
>  drivers/mfd/aat2870-core.c        | 40 +++------------------------------------
>  drivers/mfd/adp5520.c             | 30 +++++++----------------------
>  drivers/mfd/as3711.c              | 14 --------------
>  drivers/mfd/da903x.c              | 26 +++----------------------
>  drivers/mfd/da9052-core.c         | 11 -----------
>  drivers/mfd/da9052-i2c.c          | 22 ++-------------------
>  drivers/mfd/da9052-irq.c          |  1 -
>  drivers/mfd/da9052-spi.c          | 22 ++-------------------
>  drivers/mfd/da9055-core.c         | 13 ++-----------
>  drivers/mfd/da9055-i2c.c          | 24 ++---------------------
>  drivers/mfd/db8500-prcmu.c        | 10 ++++------
>  drivers/mfd/htc-i2cpld.c          | 18 +-----------------
>  drivers/mfd/max8925-core.c        |  7 +------
>  drivers/mfd/rc5t583.c             | 14 --------------
>  drivers/mfd/sta2x11-mfd.c         | 10 ++++------
>  drivers/mfd/syscon.c              | 12 +-----------
>  drivers/mfd/tps65090.c            | 30 +++++------------------------
>  drivers/mfd/tps65910.c            | 18 +-----------------
>  drivers/mfd/tps80031.c            | 37 ++----------------------------------
>  drivers/mfd/wm831x-core.c         |  7 ++-----
>  drivers/mfd/wm831x-i2c.c          | 20 ++------------------
>  drivers/mfd/wm831x-spi.c          | 24 ++---------------------
>  drivers/mfd/wm8350-core.c         |  6 ++----
>  drivers/mfd/wm8350-i2c.c          | 24 +----------------------
>  drivers/mfd/wm8400-core.c         | 18 +++---------------
>  include/linux/mfd/da9052/da9052.h |  1 -
>  26 files changed, 52 insertions(+), 407 deletions(-)
> 
> --
> 2.7.4

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

* RE: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
  2018-12-05 12:01   ` Steve Twiss
@ 2018-12-05 12:12     ` Steve Twiss
  -1 siblings, 0 replies; 51+ messages in thread
From: Steve Twiss @ 2018-12-05 12:12 UTC (permalink / raw)
  To: Paul Gortmaker, Lee Jones
  Cc: linux-kernel, Arnd Bergmann, Cory Maccarrone, David Dajun Chen,
	Dong Aisheng, Eric Miao, Graeme Gregory, Guennadi Liakhovetski,
	Haojian Zhuang, Jin Park, Jorge Eduardo Candelaria,
	Laxman Dewangan, Linus Walleij, Mark Brown, Mattias Nilsson,
	Michael Hennerich, Mike Rapoport, Tony Lindgren, Venu Byravarasu,
	linux-omap, patches, Support Opensource

Sorry typo.
I meant modular.

On 05 December 2018 12:02, Steve Twiss wrote:

> Subject: RE: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
> 
> Hi Paul,
> 
> On 03 December 2018 04:23, Paul Gortmaker wrote:
> 
> > Subject: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
> >
> > [v1 --> v2: add some more commits as requested by Lee (MFD maintainer),
> >  update the 00/NN text; re-do build and link testing on new linux-next. ]
> >
> > This group of MFD drivers are all controlled by "bool" Kconfig settings,
> > but contain various amounts of largely pointless uses of infrastructure
> > related to modular operations, even though they can't be built modular.
> >
> > We can easily remove/replace all of it.  We are trying to make driver
> > code consistent with the Makefiles/Kconfigs that control them.
> 
> For the DA9052 and DA9055, changes:
> 
> -  drivers/mfd/da9052-core.c         | 11 -----------
> -  drivers/mfd/da9052-i2c.c          | 22 ++-------------------
> -  drivers/mfd/da9052-irq.c          |  1 -
> -  drivers/mfd/da9052-spi.c          | 22 ++-------------------
> -  drivers/mfd/da9055-core.c         | 13 ++-----------
> -  drivers/mfd/da9055-i2c.c          | 24 ++---------------------
> 
> The responsibility can fall back to Dialog for these changes. We will
> submit Kconfig patches for these and make them explicitly non-modular.

Sorry. I meant modular.

> This will remove the ambiguity caused by the Kconfig bool options.
> 
> Regards,
> Steve
> 
> > This
> > means not using modular functions/macros for drivers that can never be
> > built as a module.  Some of the downfalls this oversight leads to are:
> >
> >  (1) it is easy to accidentally write unused module_exit and remove code
> >  (2) it can be misleading when reading the source, thinking it can be
> >      modular when the Makefile and/or Kconfig prohibit it
> >  (3) it requires the include of the module.h header file which in turn
> >      includes nearly everything else, thus adding a lot of CPP overhead.
> >  (4) it gets copied/replicated into other drivers and spreads quickly.
> >
> > What we see in current drivers falls into one or more of the following
> > categories:
> >
> > 1) include of <linux/module.h> when it simply isn't needed
> >
> > 2) Use of MODULE_LICENSE, MODULE_DEVICE_TABLE,  MODULE_AUTHOR etc.
> >    macros that are no-ops for non-modular drivers.
> >
> > 3) Creation of a module_exit() function that will be compiled and
> >    linked in but never actually called for non-modular drivers.
> >
> > 4) Addition of a platform_driver ".remove" function that is bound
> >    into the struct but will never be called for non-module use cases.
> >
> > Solution to #1 --> #3 is simple ; we just delete the related code.
> >
> > The solution to #4 is similar - we delete the ".remove" function and
> > the binding into the platform_driver struct.  However, since the same
> > ".remove" function could also be triggered by an "unbind" (such as for
> > pass-through of a device to a guest instance)  - so we also explicitly
> > disable any unbind for the driver.
> >
> > The unbind mask allows us to ensure we will see if there was some odd
> > corner case out there that was relying on it.  Typically it would be a
> > multi-port ethernet card passing a port through to a guest, so a
> > sensible use case in MFD drivers seems highly unlikely.  This same
> > solution has already been used in multiple other mainline subsystems.
> >
> > Build testing was done on drivers/mfd for allyesconfig on x86_64, ARM
> > and ARM-64 on a recent linux-next checkout.
> >
> > Paul.
> >
> > ---
> >
> > Cc: Arnd Bergmann <arnd@arndb.de>
> > Cc: Cory Maccarrone <darkstar6262@gmail.com>
> > Cc: David Dajun Chen <dchen@diasemi.com>
> > Cc: Dong Aisheng <dong.aisheng@linaro.org>
> > Cc: Eric Miao <eric.miao@marvell.com>
> > Cc: Graeme Gregory <gg@slimlogic.co.uk>
> > Cc: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
> > Cc: Haojian Zhuang <haojian.zhuang@marvell.com>
> > Cc: Jin Park <jinyoungp@nvidia.com>
> > Cc: Jorge Eduardo Candelaria <jedu@slimlogic.co.uk>
> > Cc: Laxman Dewangan <ldewangan@nvidia.com>
> > Cc: Lee Jones <lee.jones@linaro.org>
> > Cc: Linus Walleij <linus.walleij@linaro.org>
> > Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
> > Cc: Mattias Nilsson <mattias.i.nilsson@stericsson.com>
> > Cc: Michael Hennerich <michael.hennerich@analog.com>
> > Cc: Mike Rapoport <mike@compulab.co.il>
> > Cc: Tony Lindgren <tony@atomide.com>
> > Cc: Venu Byravarasu <vbyravarasu@nvidia.com>
> > Cc: linux-omap@vger.kernel.org
> > Cc: patches@opensource.cirrus.com
> > Cc: Support Opensource <support.opensource@diasemi.com>
> >
> >
> > Paul Gortmaker (22):
> >   mfd: aat2870-core: Make it explicitly non-modular
> >   mfd: adp5520: Make it explicitly non-modular
> >   mfd: as3711: Make it explicitly non-modular
> >   mfd: da903x: Make it explicitly non-modular
> >   mfd: da9052-*: Make it explicitly non-modular
> >   mfd: da9055-i2c: Make it explicitly non-modular
> >   mfd: da9055-core: make it explicitly non-modular
> >   mfd: db8500-prcmu: drop unused MODULE_ tags from non-modular code
> >   mfd: htc-i2cpld: Make it explicitly non-modular
> >   mfd: max8925-core: drop unused MODULE_ tags from non-modular code
> >   mfd: rc5t583: Make it explicitly non-modular
> >   mfd: sta2x11: drop unused MODULE_ tags from non-modular code
> >   mfd: syscon: Make it explicitly non-modular
> >   mfd: tps65090: Make it explicitly non-modular
> >   mfd: tps65910: Make it explicitly non-modular
> >   mfd: tps80031: Make it explicitly non-modular
> >   mfd: wm831x-spi: Make it explicitly non-modular
> >   mfd: wm831x-i2c: Make it explicitly non-modular
> >   mfd: wm831x-core: drop unused MODULE_ tags from non-modular code
> >   mfd: wm8350-i2c: Make it explicitly non-modular
> >   mfd: wm8350-core: drop unused MODULE_ tags from non-modular code
> >   mfd: wm8400-core: Make it explicitly non-modular
> >
> >  drivers/mfd/aat2870-core.c        | 40 +++------------------------------------
> >  drivers/mfd/adp5520.c             | 30 +++++++----------------------
> >  drivers/mfd/as3711.c              | 14 --------------
> >  drivers/mfd/da903x.c              | 26 +++----------------------
> >  drivers/mfd/da9052-core.c         | 11 -----------
> >  drivers/mfd/da9052-i2c.c          | 22 ++-------------------
> >  drivers/mfd/da9052-irq.c          |  1 -
> >  drivers/mfd/da9052-spi.c          | 22 ++-------------------
> >  drivers/mfd/da9055-core.c         | 13 ++-----------
> >  drivers/mfd/da9055-i2c.c          | 24 ++---------------------
> >  drivers/mfd/db8500-prcmu.c        | 10 ++++------
> >  drivers/mfd/htc-i2cpld.c          | 18 +-----------------
> >  drivers/mfd/max8925-core.c        |  7 +------
> >  drivers/mfd/rc5t583.c             | 14 --------------
> >  drivers/mfd/sta2x11-mfd.c         | 10 ++++------
> >  drivers/mfd/syscon.c              | 12 +-----------
> >  drivers/mfd/tps65090.c            | 30 +++++------------------------
> >  drivers/mfd/tps65910.c            | 18 +-----------------
> >  drivers/mfd/tps80031.c            | 37 ++----------------------------------
> >  drivers/mfd/wm831x-core.c         |  7 ++-----
> >  drivers/mfd/wm831x-i2c.c          | 20 ++------------------
> >  drivers/mfd/wm831x-spi.c          | 24 ++---------------------
> >  drivers/mfd/wm8350-core.c         |  6 ++----
> >  drivers/mfd/wm8350-i2c.c          | 24 +----------------------
> >  drivers/mfd/wm8400-core.c         | 18 +++---------------
> >  include/linux/mfd/da9052/da9052.h |  1 -
> >  26 files changed, 52 insertions(+), 407 deletions(-)
> >
> > --
> > 2.7.4


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

* RE: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
@ 2018-12-05 12:12     ` Steve Twiss
  0 siblings, 0 replies; 51+ messages in thread
From: Steve Twiss @ 2018-12-05 12:12 UTC (permalink / raw)
  To: Paul Gortmaker, Lee Jones
  Cc: linux-kernel, Arnd Bergmann, Cory Maccarrone, David Dajun Chen,
	Dong Aisheng, Eric Miao, Graeme Gregory, Guennadi Liakhovetski,
	Haojian Zhuang, Jin Park, Jorge Eduardo Candelaria,
	Laxman Dewangan, Linus Walleij, Mark Brown, Mattias Nilsson,
	Michael Hennerich, Mike Rapoport

Sorry typo.
I meant modular.

On 05 December 2018 12:02, Steve Twiss wrote:

> Subject: RE: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
> 
> Hi Paul,
> 
> On 03 December 2018 04:23, Paul Gortmaker wrote:
> 
> > Subject: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
> >
> > [v1 --> v2: add some more commits as requested by Lee (MFD maintainer),
> >  update the 00/NN text; re-do build and link testing on new linux-next. ]
> >
> > This group of MFD drivers are all controlled by "bool" Kconfig settings,
> > but contain various amounts of largely pointless uses of infrastructure
> > related to modular operations, even though they can't be built modular.
> >
> > We can easily remove/replace all of it.  We are trying to make driver
> > code consistent with the Makefiles/Kconfigs that control them.
> 
> For the DA9052 and DA9055, changes:
> 
> -  drivers/mfd/da9052-core.c         | 11 -----------
> -  drivers/mfd/da9052-i2c.c          | 22 ++-------------------
> -  drivers/mfd/da9052-irq.c          |  1 -
> -  drivers/mfd/da9052-spi.c          | 22 ++-------------------
> -  drivers/mfd/da9055-core.c         | 13 ++-----------
> -  drivers/mfd/da9055-i2c.c          | 24 ++---------------------
> 
> The responsibility can fall back to Dialog for these changes. We will
> submit Kconfig patches for these and make them explicitly non-modular.

Sorry. I meant modular.

> This will remove the ambiguity caused by the Kconfig bool options.
> 
> Regards,
> Steve
> 
> > This
> > means not using modular functions/macros for drivers that can never be
> > built as a module.  Some of the downfalls this oversight leads to are:
> >
> >  (1) it is easy to accidentally write unused module_exit and remove code
> >  (2) it can be misleading when reading the source, thinking it can be
> >      modular when the Makefile and/or Kconfig prohibit it
> >  (3) it requires the include of the module.h header file which in turn
> >      includes nearly everything else, thus adding a lot of CPP overhead.
> >  (4) it gets copied/replicated into other drivers and spreads quickly.
> >
> > What we see in current drivers falls into one or more of the following
> > categories:
> >
> > 1) include of <linux/module.h> when it simply isn't needed
> >
> > 2) Use of MODULE_LICENSE, MODULE_DEVICE_TABLE,  MODULE_AUTHOR etc.
> >    macros that are no-ops for non-modular drivers.
> >
> > 3) Creation of a module_exit() function that will be compiled and
> >    linked in but never actually called for non-modular drivers.
> >
> > 4) Addition of a platform_driver ".remove" function that is bound
> >    into the struct but will never be called for non-module use cases.
> >
> > Solution to #1 --> #3 is simple ; we just delete the related code.
> >
> > The solution to #4 is similar - we delete the ".remove" function and
> > the binding into the platform_driver struct.  However, since the same
> > ".remove" function could also be triggered by an "unbind" (such as for
> > pass-through of a device to a guest instance)  - so we also explicitly
> > disable any unbind for the driver.
> >
> > The unbind mask allows us to ensure we will see if there was some odd
> > corner case out there that was relying on it.  Typically it would be a
> > multi-port ethernet card passing a port through to a guest, so a
> > sensible use case in MFD drivers seems highly unlikely.  This same
> > solution has already been used in multiple other mainline subsystems.
> >
> > Build testing was done on drivers/mfd for allyesconfig on x86_64, ARM
> > and ARM-64 on a recent linux-next checkout.
> >
> > Paul.
> >
> > ---
> >
> > Cc: Arnd Bergmann <arnd@arndb.de>
> > Cc: Cory Maccarrone <darkstar6262@gmail.com>
> > Cc: David Dajun Chen <dchen@diasemi.com>
> > Cc: Dong Aisheng <dong.aisheng@linaro.org>
> > Cc: Eric Miao <eric.miao@marvell.com>
> > Cc: Graeme Gregory <gg@slimlogic.co.uk>
> > Cc: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
> > Cc: Haojian Zhuang <haojian.zhuang@marvell.com>
> > Cc: Jin Park <jinyoungp@nvidia.com>
> > Cc: Jorge Eduardo Candelaria <jedu@slimlogic.co.uk>
> > Cc: Laxman Dewangan <ldewangan@nvidia.com>
> > Cc: Lee Jones <lee.jones@linaro.org>
> > Cc: Linus Walleij <linus.walleij@linaro.org>
> > Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
> > Cc: Mattias Nilsson <mattias.i.nilsson@stericsson.com>
> > Cc: Michael Hennerich <michael.hennerich@analog.com>
> > Cc: Mike Rapoport <mike@compulab.co.il>
> > Cc: Tony Lindgren <tony@atomide.com>
> > Cc: Venu Byravarasu <vbyravarasu@nvidia.com>
> > Cc: linux-omap@vger.kernel.org
> > Cc: patches@opensource.cirrus.com
> > Cc: Support Opensource <support.opensource@diasemi.com>
> >
> >
> > Paul Gortmaker (22):
> >   mfd: aat2870-core: Make it explicitly non-modular
> >   mfd: adp5520: Make it explicitly non-modular
> >   mfd: as3711: Make it explicitly non-modular
> >   mfd: da903x: Make it explicitly non-modular
> >   mfd: da9052-*: Make it explicitly non-modular
> >   mfd: da9055-i2c: Make it explicitly non-modular
> >   mfd: da9055-core: make it explicitly non-modular
> >   mfd: db8500-prcmu: drop unused MODULE_ tags from non-modular code
> >   mfd: htc-i2cpld: Make it explicitly non-modular
> >   mfd: max8925-core: drop unused MODULE_ tags from non-modular code
> >   mfd: rc5t583: Make it explicitly non-modular
> >   mfd: sta2x11: drop unused MODULE_ tags from non-modular code
> >   mfd: syscon: Make it explicitly non-modular
> >   mfd: tps65090: Make it explicitly non-modular
> >   mfd: tps65910: Make it explicitly non-modular
> >   mfd: tps80031: Make it explicitly non-modular
> >   mfd: wm831x-spi: Make it explicitly non-modular
> >   mfd: wm831x-i2c: Make it explicitly non-modular
> >   mfd: wm831x-core: drop unused MODULE_ tags from non-modular code
> >   mfd: wm8350-i2c: Make it explicitly non-modular
> >   mfd: wm8350-core: drop unused MODULE_ tags from non-modular code
> >   mfd: wm8400-core: Make it explicitly non-modular
> >
> >  drivers/mfd/aat2870-core.c        | 40 +++------------------------------------
> >  drivers/mfd/adp5520.c             | 30 +++++++----------------------
> >  drivers/mfd/as3711.c              | 14 --------------
> >  drivers/mfd/da903x.c              | 26 +++----------------------
> >  drivers/mfd/da9052-core.c         | 11 -----------
> >  drivers/mfd/da9052-i2c.c          | 22 ++-------------------
> >  drivers/mfd/da9052-irq.c          |  1 -
> >  drivers/mfd/da9052-spi.c          | 22 ++-------------------
> >  drivers/mfd/da9055-core.c         | 13 ++-----------
> >  drivers/mfd/da9055-i2c.c          | 24 ++---------------------
> >  drivers/mfd/db8500-prcmu.c        | 10 ++++------
> >  drivers/mfd/htc-i2cpld.c          | 18 +-----------------
> >  drivers/mfd/max8925-core.c        |  7 +------
> >  drivers/mfd/rc5t583.c             | 14 --------------
> >  drivers/mfd/sta2x11-mfd.c         | 10 ++++------
> >  drivers/mfd/syscon.c              | 12 +-----------
> >  drivers/mfd/tps65090.c            | 30 +++++------------------------
> >  drivers/mfd/tps65910.c            | 18 +-----------------
> >  drivers/mfd/tps80031.c            | 37 ++----------------------------------
> >  drivers/mfd/wm831x-core.c         |  7 ++-----
> >  drivers/mfd/wm831x-i2c.c          | 20 ++------------------
> >  drivers/mfd/wm831x-spi.c          | 24 ++---------------------
> >  drivers/mfd/wm8350-core.c         |  6 ++----
> >  drivers/mfd/wm8350-i2c.c          | 24 +----------------------
> >  drivers/mfd/wm8400-core.c         | 18 +++---------------
> >  include/linux/mfd/da9052/da9052.h |  1 -
> >  26 files changed, 52 insertions(+), 407 deletions(-)
> >
> > --
> > 2.7.4

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

* Re: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
  2018-12-05 11:48     ` Linus Walleij
@ 2018-12-05 13:40       ` Charles Keepax
  -1 siblings, 0 replies; 51+ messages in thread
From: Charles Keepax @ 2018-12-05 13:40 UTC (permalink / raw)
  To: Linus Walleij
  Cc: Paul Gortmaker, Lee Jones, linux-kernel, Arnd Bergmann,
	Cory Maccarrone, David Dajun Chen, Dong Aisheng, Eric Miao,
	Graeme Gregory, Guennadi Liakhovetski, Haojian Zhuang, jinyoungp,
	Jorge Eduardo Candelaria, Laxman Dewangan, Mark Brown,
	Mattias NILSSON, Michael Hennerich, Mike Rapoport,
	ext Tony Lindgren, Venu Byravarasu, Linux-OMAP, patches,
	Support Opensource

On Wed, Dec 05, 2018 at 12:48:47PM +0100, Linus Walleij wrote:
> On Wed, Dec 5, 2018 at 12:36 PM Charles Keepax
> <ckeepax@opensource.cirrus.com> wrote:
> > On Sun, Dec 02, 2018 at 11:23:07PM -0500, Paul Gortmaker wrote:
> > > The solution to #4 is similar - we delete the ".remove" function and
> > > the binding into the platform_driver struct.  However, since the same
> > > ".remove" function could also be triggered by an "unbind" (such as for
> > > pass-through of a device to a guest instance)  - so we also explicitly
> > > disable any unbind for the driver.
> > >
> > > The unbind mask allows us to ensure we will see if there was some odd
> > > corner case out there that was relying on it.  Typically it would be a
> > > multi-port ethernet card passing a port through to a guest, so a
> > > sensible use case in MFD drivers seems highly unlikely.  This same
> > > solution has already been used in multiple other mainline subsystems.
> > >
> >
> > I guess if this is a general direction thing, but it does seem
> > that module unload is not the only reason one might ever unbind a
> > driver. So are we sure we want to remove the option to unbind
> > these drivers? Certainly for testing it is sometimes useful.
> 
> I personally never understood why these attributes are even
> present on non-modular drivers.
> 
> If testing is about exercising unbind/bind to reintialize
> the code through a new call to .probe(), why would the developer
> not take it all the way through and make it a module?
> It just looks like a half-measure.
> 

Well I guess in someways it is a half-measure. I vaguely seem to
remember some dependency nightmare that can make it really hard
to have the MFD allowed as a module in some cases, I can't
remember the exact details but probably why some of these are not
modules.

I certainly don't strongly object to removing the ability to
unbind these drivers, just wanted to make sure everyone is
aligned that it's a good thing to do. Does kinda remove a couple
of debugging options (debugging things like drivers interfering
with each other) and the last chance restart the driver and see
if that helps rescue something.

Thanks,
Charles

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

* Re: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
@ 2018-12-05 13:40       ` Charles Keepax
  0 siblings, 0 replies; 51+ messages in thread
From: Charles Keepax @ 2018-12-05 13:40 UTC (permalink / raw)
  To: Linus Walleij
  Cc: Paul Gortmaker, Lee Jones, linux-kernel, Arnd Bergmann,
	Cory Maccarrone, David Dajun Chen, Dong Aisheng, Eric Miao,
	Graeme Gregory, Guennadi Liakhovetski, Haojian Zhuang, jinyoungp,
	Jorge Eduardo Candelaria, Laxman Dewangan, Mark Brown,
	Mattias NILSSON, Michael Hennerich, Mike Rapoport

On Wed, Dec 05, 2018 at 12:48:47PM +0100, Linus Walleij wrote:
> On Wed, Dec 5, 2018 at 12:36 PM Charles Keepax
> <ckeepax@opensource.cirrus.com> wrote:
> > On Sun, Dec 02, 2018 at 11:23:07PM -0500, Paul Gortmaker wrote:
> > > The solution to #4 is similar - we delete the ".remove" function and
> > > the binding into the platform_driver struct.  However, since the same
> > > ".remove" function could also be triggered by an "unbind" (such as for
> > > pass-through of a device to a guest instance)  - so we also explicitly
> > > disable any unbind for the driver.
> > >
> > > The unbind mask allows us to ensure we will see if there was some odd
> > > corner case out there that was relying on it.  Typically it would be a
> > > multi-port ethernet card passing a port through to a guest, so a
> > > sensible use case in MFD drivers seems highly unlikely.  This same
> > > solution has already been used in multiple other mainline subsystems.
> > >
> >
> > I guess if this is a general direction thing, but it does seem
> > that module unload is not the only reason one might ever unbind a
> > driver. So are we sure we want to remove the option to unbind
> > these drivers? Certainly for testing it is sometimes useful.
> 
> I personally never understood why these attributes are even
> present on non-modular drivers.
> 
> If testing is about exercising unbind/bind to reintialize
> the code through a new call to .probe(), why would the developer
> not take it all the way through and make it a module?
> It just looks like a half-measure.
> 

Well I guess in someways it is a half-measure. I vaguely seem to
remember some dependency nightmare that can make it really hard
to have the MFD allowed as a module in some cases, I can't
remember the exact details but probably why some of these are not
modules.

I certainly don't strongly object to removing the ability to
unbind these drivers, just wanted to make sure everyone is
aligned that it's a good thing to do. Does kinda remove a couple
of debugging options (debugging things like drivers interfering
with each other) and the last chance restart the driver and see
if that helps rescue something.

Thanks,
Charles

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

* Re: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
  2018-12-05 12:01   ` Steve Twiss
@ 2018-12-05 18:08     ` Paul Gortmaker
  -1 siblings, 0 replies; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-05 18:08 UTC (permalink / raw)
  To: Steve Twiss
  Cc: Lee Jones, linux-kernel, Arnd Bergmann, Cory Maccarrone,
	David Dajun Chen, Dong Aisheng, Eric Miao, Graeme Gregory,
	Guennadi Liakhovetski, Haojian Zhuang, Jin Park,
	Jorge Eduardo Candelaria, Laxman Dewangan, Linus Walleij,
	Mark Brown, Mattias Nilsson, Michael Hennerich, Mike Rapoport,
	Tony Lindgren, Venu Byravarasu, linux-omap, patches,
	Support Opensource

[RE: [PATCH v2 00/22] mfd: demodularization of non-modular drivers] On 05/12/2018 (Wed 12:01) Steve Twiss wrote:

> Hi Paul,
> 
> On 03 December 2018 04:23, Paul Gortmaker wrote:
> 
> > Subject: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
> > 
> > [v1 --> v2: add some more commits as requested by Lee (MFD maintainer),
> >  update the 00/NN text; re-do build and link testing on new linux-next. ]
> > 
> > This group of MFD drivers are all controlled by "bool" Kconfig settings,
> > but contain various amounts of largely pointless uses of infrastructure
> > related to modular operations, even though they can't be built modular.
> > 
> > We can easily remove/replace all of it.  We are trying to make driver
> > code consistent with the Makefiles/Kconfigs that control them. 
> 
> For the DA9052 and DA9055, changes:
> 
> -  drivers/mfd/da9052-core.c         | 11 -----------
> -  drivers/mfd/da9052-i2c.c          | 22 ++-------------------
> -  drivers/mfd/da9052-irq.c          |  1 -
> -  drivers/mfd/da9052-spi.c          | 22 ++-------------------
> -  drivers/mfd/da9055-core.c         | 13 ++-----------
> -  drivers/mfd/da9055-i2c.c          | 24 ++---------------------
> 
> The responsibility can fall back to Dialog for these changes. We will
> submit Kconfig patches for these and make them explicitly non-modular.
> This will remove the ambiguity caused by the Kconfig bool options.

[typo noted: non-modular ---> modular]

Great, I'll look forward to seeing those patches to convert  these
drivers to modular in the near future, and I'll not re-send mine.

Thanks,
P.
--


> 
> Regards,
> Steve
> 
> > This
> > means not using modular functions/macros for drivers that can never be
> > built as a module.  Some of the downfalls this oversight leads to are:
> > 
> >  (1) it is easy to accidentally write unused module_exit and remove code
> >  (2) it can be misleading when reading the source, thinking it can be
> >      modular when the Makefile and/or Kconfig prohibit it
> >  (3) it requires the include of the module.h header file which in turn
> >      includes nearly everything else, thus adding a lot of CPP overhead.
> >  (4) it gets copied/replicated into other drivers and spreads quickly.
> > 
> > What we see in current drivers falls into one or more of the following
> > categories:
> > 
> > 1) include of <linux/module.h> when it simply isn't needed
> > 
> > 2) Use of MODULE_LICENSE, MODULE_DEVICE_TABLE,  MODULE_AUTHOR etc.
> >    macros that are no-ops for non-modular drivers.
> > 
> > 3) Creation of a module_exit() function that will be compiled and
> >    linked in but never actually called for non-modular drivers.
> > 
> > 4) Addition of a platform_driver ".remove" function that is bound
> >    into the struct but will never be called for non-module use cases.
> > 
> > Solution to #1 --> #3 is simple ; we just delete the related code.
> > 
> > The solution to #4 is similar - we delete the ".remove" function and
> > the binding into the platform_driver struct.  However, since the same
> > ".remove" function could also be triggered by an "unbind" (such as for
> > pass-through of a device to a guest instance)  - so we also explicitly
> > disable any unbind for the driver.
> > 
> > The unbind mask allows us to ensure we will see if there was some odd
> > corner case out there that was relying on it.  Typically it would be a
> > multi-port ethernet card passing a port through to a guest, so a
> > sensible use case in MFD drivers seems highly unlikely.  This same
> > solution has already been used in multiple other mainline subsystems.
> > 
> > Build testing was done on drivers/mfd for allyesconfig on x86_64, ARM
> > and ARM-64 on a recent linux-next checkout.
> > 
> > Paul.
> > 
> > ---
> > 
> > Cc: Arnd Bergmann <arnd@arndb.de>
> > Cc: Cory Maccarrone <darkstar6262@gmail.com>
> > Cc: David Dajun Chen <dchen@diasemi.com>
> > Cc: Dong Aisheng <dong.aisheng@linaro.org>
> > Cc: Eric Miao <eric.miao@marvell.com>
> > Cc: Graeme Gregory <gg@slimlogic.co.uk>
> > Cc: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
> > Cc: Haojian Zhuang <haojian.zhuang@marvell.com>
> > Cc: Jin Park <jinyoungp@nvidia.com>
> > Cc: Jorge Eduardo Candelaria <jedu@slimlogic.co.uk>
> > Cc: Laxman Dewangan <ldewangan@nvidia.com>
> > Cc: Lee Jones <lee.jones@linaro.org>
> > Cc: Linus Walleij <linus.walleij@linaro.org>
> > Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
> > Cc: Mattias Nilsson <mattias.i.nilsson@stericsson.com>
> > Cc: Michael Hennerich <michael.hennerich@analog.com>
> > Cc: Mike Rapoport <mike@compulab.co.il>
> > Cc: Tony Lindgren <tony@atomide.com>
> > Cc: Venu Byravarasu <vbyravarasu@nvidia.com>
> > Cc: linux-omap@vger.kernel.org
> > Cc: patches@opensource.cirrus.com
> > Cc: Support Opensource <support.opensource@diasemi.com>
> > 
> > 
> > Paul Gortmaker (22):
> >   mfd: aat2870-core: Make it explicitly non-modular
> >   mfd: adp5520: Make it explicitly non-modular
> >   mfd: as3711: Make it explicitly non-modular
> >   mfd: da903x: Make it explicitly non-modular
> >   mfd: da9052-*: Make it explicitly non-modular
> >   mfd: da9055-i2c: Make it explicitly non-modular
> >   mfd: da9055-core: make it explicitly non-modular
> >   mfd: db8500-prcmu: drop unused MODULE_ tags from non-modular code
> >   mfd: htc-i2cpld: Make it explicitly non-modular
> >   mfd: max8925-core: drop unused MODULE_ tags from non-modular code
> >   mfd: rc5t583: Make it explicitly non-modular
> >   mfd: sta2x11: drop unused MODULE_ tags from non-modular code
> >   mfd: syscon: Make it explicitly non-modular
> >   mfd: tps65090: Make it explicitly non-modular
> >   mfd: tps65910: Make it explicitly non-modular
> >   mfd: tps80031: Make it explicitly non-modular
> >   mfd: wm831x-spi: Make it explicitly non-modular
> >   mfd: wm831x-i2c: Make it explicitly non-modular
> >   mfd: wm831x-core: drop unused MODULE_ tags from non-modular code
> >   mfd: wm8350-i2c: Make it explicitly non-modular
> >   mfd: wm8350-core: drop unused MODULE_ tags from non-modular code
> >   mfd: wm8400-core: Make it explicitly non-modular
> > 
> >  drivers/mfd/aat2870-core.c        | 40 +++------------------------------------
> >  drivers/mfd/adp5520.c             | 30 +++++++----------------------
> >  drivers/mfd/as3711.c              | 14 --------------
> >  drivers/mfd/da903x.c              | 26 +++----------------------
> >  drivers/mfd/da9052-core.c         | 11 -----------
> >  drivers/mfd/da9052-i2c.c          | 22 ++-------------------
> >  drivers/mfd/da9052-irq.c          |  1 -
> >  drivers/mfd/da9052-spi.c          | 22 ++-------------------
> >  drivers/mfd/da9055-core.c         | 13 ++-----------
> >  drivers/mfd/da9055-i2c.c          | 24 ++---------------------
> >  drivers/mfd/db8500-prcmu.c        | 10 ++++------
> >  drivers/mfd/htc-i2cpld.c          | 18 +-----------------
> >  drivers/mfd/max8925-core.c        |  7 +------
> >  drivers/mfd/rc5t583.c             | 14 --------------
> >  drivers/mfd/sta2x11-mfd.c         | 10 ++++------
> >  drivers/mfd/syscon.c              | 12 +-----------
> >  drivers/mfd/tps65090.c            | 30 +++++------------------------
> >  drivers/mfd/tps65910.c            | 18 +-----------------
> >  drivers/mfd/tps80031.c            | 37 ++----------------------------------
> >  drivers/mfd/wm831x-core.c         |  7 ++-----
> >  drivers/mfd/wm831x-i2c.c          | 20 ++------------------
> >  drivers/mfd/wm831x-spi.c          | 24 ++---------------------
> >  drivers/mfd/wm8350-core.c         |  6 ++----
> >  drivers/mfd/wm8350-i2c.c          | 24 +----------------------
> >  drivers/mfd/wm8400-core.c         | 18 +++---------------
> >  include/linux/mfd/da9052/da9052.h |  1 -
> >  26 files changed, 52 insertions(+), 407 deletions(-)
> > 
> > --
> > 2.7.4
> 

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

* Re: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
@ 2018-12-05 18:08     ` Paul Gortmaker
  0 siblings, 0 replies; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-05 18:08 UTC (permalink / raw)
  To: Steve Twiss
  Cc: Lee Jones, linux-kernel, Arnd Bergmann, Cory Maccarrone,
	David Dajun Chen, Dong Aisheng, Eric Miao, Graeme Gregory,
	Guennadi Liakhovetski, Haojian Zhuang, Jin Park,
	Jorge Eduardo Candelaria, Laxman Dewangan, Linus Walleij,
	Mark Brown, Mattias Nilsson, Michael Hennerich, Mike Rapoport

[RE: [PATCH v2 00/22] mfd: demodularization of non-modular drivers] On 05/12/2018 (Wed 12:01) Steve Twiss wrote:

> Hi Paul,
> 
> On 03 December 2018 04:23, Paul Gortmaker wrote:
> 
> > Subject: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
> > 
> > [v1 --> v2: add some more commits as requested by Lee (MFD maintainer),
> >  update the 00/NN text; re-do build and link testing on new linux-next. ]
> > 
> > This group of MFD drivers are all controlled by "bool" Kconfig settings,
> > but contain various amounts of largely pointless uses of infrastructure
> > related to modular operations, even though they can't be built modular.
> > 
> > We can easily remove/replace all of it.  We are trying to make driver
> > code consistent with the Makefiles/Kconfigs that control them. 
> 
> For the DA9052 and DA9055, changes:
> 
> -  drivers/mfd/da9052-core.c         | 11 -----------
> -  drivers/mfd/da9052-i2c.c          | 22 ++-------------------
> -  drivers/mfd/da9052-irq.c          |  1 -
> -  drivers/mfd/da9052-spi.c          | 22 ++-------------------
> -  drivers/mfd/da9055-core.c         | 13 ++-----------
> -  drivers/mfd/da9055-i2c.c          | 24 ++---------------------
> 
> The responsibility can fall back to Dialog for these changes. We will
> submit Kconfig patches for these and make them explicitly non-modular.
> This will remove the ambiguity caused by the Kconfig bool options.

[typo noted: non-modular ---> modular]

Great, I'll look forward to seeing those patches to convert  these
drivers to modular in the near future, and I'll not re-send mine.

Thanks,
P.
--


> 
> Regards,
> Steve
> 
> > This
> > means not using modular functions/macros for drivers that can never be
> > built as a module.  Some of the downfalls this oversight leads to are:
> > 
> >  (1) it is easy to accidentally write unused module_exit and remove code
> >  (2) it can be misleading when reading the source, thinking it can be
> >      modular when the Makefile and/or Kconfig prohibit it
> >  (3) it requires the include of the module.h header file which in turn
> >      includes nearly everything else, thus adding a lot of CPP overhead.
> >  (4) it gets copied/replicated into other drivers and spreads quickly.
> > 
> > What we see in current drivers falls into one or more of the following
> > categories:
> > 
> > 1) include of <linux/module.h> when it simply isn't needed
> > 
> > 2) Use of MODULE_LICENSE, MODULE_DEVICE_TABLE,  MODULE_AUTHOR etc.
> >    macros that are no-ops for non-modular drivers.
> > 
> > 3) Creation of a module_exit() function that will be compiled and
> >    linked in but never actually called for non-modular drivers.
> > 
> > 4) Addition of a platform_driver ".remove" function that is bound
> >    into the struct but will never be called for non-module use cases.
> > 
> > Solution to #1 --> #3 is simple ; we just delete the related code.
> > 
> > The solution to #4 is similar - we delete the ".remove" function and
> > the binding into the platform_driver struct.  However, since the same
> > ".remove" function could also be triggered by an "unbind" (such as for
> > pass-through of a device to a guest instance)  - so we also explicitly
> > disable any unbind for the driver.
> > 
> > The unbind mask allows us to ensure we will see if there was some odd
> > corner case out there that was relying on it.  Typically it would be a
> > multi-port ethernet card passing a port through to a guest, so a
> > sensible use case in MFD drivers seems highly unlikely.  This same
> > solution has already been used in multiple other mainline subsystems.
> > 
> > Build testing was done on drivers/mfd for allyesconfig on x86_64, ARM
> > and ARM-64 on a recent linux-next checkout.
> > 
> > Paul.
> > 
> > ---
> > 
> > Cc: Arnd Bergmann <arnd@arndb.de>
> > Cc: Cory Maccarrone <darkstar6262@gmail.com>
> > Cc: David Dajun Chen <dchen@diasemi.com>
> > Cc: Dong Aisheng <dong.aisheng@linaro.org>
> > Cc: Eric Miao <eric.miao@marvell.com>
> > Cc: Graeme Gregory <gg@slimlogic.co.uk>
> > Cc: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
> > Cc: Haojian Zhuang <haojian.zhuang@marvell.com>
> > Cc: Jin Park <jinyoungp@nvidia.com>
> > Cc: Jorge Eduardo Candelaria <jedu@slimlogic.co.uk>
> > Cc: Laxman Dewangan <ldewangan@nvidia.com>
> > Cc: Lee Jones <lee.jones@linaro.org>
> > Cc: Linus Walleij <linus.walleij@linaro.org>
> > Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
> > Cc: Mattias Nilsson <mattias.i.nilsson@stericsson.com>
> > Cc: Michael Hennerich <michael.hennerich@analog.com>
> > Cc: Mike Rapoport <mike@compulab.co.il>
> > Cc: Tony Lindgren <tony@atomide.com>
> > Cc: Venu Byravarasu <vbyravarasu@nvidia.com>
> > Cc: linux-omap@vger.kernel.org
> > Cc: patches@opensource.cirrus.com
> > Cc: Support Opensource <support.opensource@diasemi.com>
> > 
> > 
> > Paul Gortmaker (22):
> >   mfd: aat2870-core: Make it explicitly non-modular
> >   mfd: adp5520: Make it explicitly non-modular
> >   mfd: as3711: Make it explicitly non-modular
> >   mfd: da903x: Make it explicitly non-modular
> >   mfd: da9052-*: Make it explicitly non-modular
> >   mfd: da9055-i2c: Make it explicitly non-modular
> >   mfd: da9055-core: make it explicitly non-modular
> >   mfd: db8500-prcmu: drop unused MODULE_ tags from non-modular code
> >   mfd: htc-i2cpld: Make it explicitly non-modular
> >   mfd: max8925-core: drop unused MODULE_ tags from non-modular code
> >   mfd: rc5t583: Make it explicitly non-modular
> >   mfd: sta2x11: drop unused MODULE_ tags from non-modular code
> >   mfd: syscon: Make it explicitly non-modular
> >   mfd: tps65090: Make it explicitly non-modular
> >   mfd: tps65910: Make it explicitly non-modular
> >   mfd: tps80031: Make it explicitly non-modular
> >   mfd: wm831x-spi: Make it explicitly non-modular
> >   mfd: wm831x-i2c: Make it explicitly non-modular
> >   mfd: wm831x-core: drop unused MODULE_ tags from non-modular code
> >   mfd: wm8350-i2c: Make it explicitly non-modular
> >   mfd: wm8350-core: drop unused MODULE_ tags from non-modular code
> >   mfd: wm8400-core: Make it explicitly non-modular
> > 
> >  drivers/mfd/aat2870-core.c        | 40 +++------------------------------------
> >  drivers/mfd/adp5520.c             | 30 +++++++----------------------
> >  drivers/mfd/as3711.c              | 14 --------------
> >  drivers/mfd/da903x.c              | 26 +++----------------------
> >  drivers/mfd/da9052-core.c         | 11 -----------
> >  drivers/mfd/da9052-i2c.c          | 22 ++-------------------
> >  drivers/mfd/da9052-irq.c          |  1 -
> >  drivers/mfd/da9052-spi.c          | 22 ++-------------------
> >  drivers/mfd/da9055-core.c         | 13 ++-----------
> >  drivers/mfd/da9055-i2c.c          | 24 ++---------------------
> >  drivers/mfd/db8500-prcmu.c        | 10 ++++------
> >  drivers/mfd/htc-i2cpld.c          | 18 +-----------------
> >  drivers/mfd/max8925-core.c        |  7 +------
> >  drivers/mfd/rc5t583.c             | 14 --------------
> >  drivers/mfd/sta2x11-mfd.c         | 10 ++++------
> >  drivers/mfd/syscon.c              | 12 +-----------
> >  drivers/mfd/tps65090.c            | 30 +++++------------------------
> >  drivers/mfd/tps65910.c            | 18 +-----------------
> >  drivers/mfd/tps80031.c            | 37 ++----------------------------------
> >  drivers/mfd/wm831x-core.c         |  7 ++-----
> >  drivers/mfd/wm831x-i2c.c          | 20 ++------------------
> >  drivers/mfd/wm831x-spi.c          | 24 ++---------------------
> >  drivers/mfd/wm8350-core.c         |  6 ++----
> >  drivers/mfd/wm8350-i2c.c          | 24 +----------------------
> >  drivers/mfd/wm8400-core.c         | 18 +++---------------
> >  include/linux/mfd/da9052/da9052.h |  1 -
> >  26 files changed, 52 insertions(+), 407 deletions(-)
> > 
> > --
> > 2.7.4
> 

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

* Re: [PATCH 08/22] mfd: db8500-prcmu: drop unused MODULE_ tags from non-modular code
  2018-12-03  4:23 ` [PATCH 08/22] mfd: db8500-prcmu: drop unused MODULE_ tags from non-modular code Paul Gortmaker
@ 2018-12-07 12:25   ` Linus Walleij
  0 siblings, 0 replies; 51+ messages in thread
From: Linus Walleij @ 2018-12-07 12:25 UTC (permalink / raw)
  To: Paul Gortmaker; +Cc: Lee Jones, linux-kernel

On Mon, Dec 3, 2018 at 5:25 AM Paul Gortmaker
<paul.gortmaker@windriver.com> wrote:

> The Kconfig currently controlling compilation of this code is:
>
> drivers/mfd/Kconfig:config MFD_DB8500_PRCMU
> drivers/mfd/Kconfig:    bool "ST-Ericsson DB8500 Power Reset Control Management Unit"
>
> ...meaning that it currently is not being built as a module by anyone.
>
> Lets remove the couple traces of modular infrastructure use, so that
> when reading the driver there is no doubt it is builtin-only.
>
> We delete the MODULE_LICENSE tag etc. since all that information
> is already contained at the top of the file in the comments.
>
> We replace module.h with init.h and export.h ; the latter since the
> file does export some symbols.
>
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Cc: Lee Jones <lee.jones@linaro.org>
> Cc: Mattias Nilsson <mattias.i.nilsson@stericsson.com>
> Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>

Reviewed-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

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

* Re: [PATCH 12/22] mfd: sta2x11: drop unused MODULE_ tags from non-modular code
  2018-12-03 11:14   ` Lee Jones
  2018-12-03 15:07     ` Paul Gortmaker
@ 2018-12-07 16:39     ` Alessandro Rubini
  1 sibling, 0 replies; 51+ messages in thread
From: Alessandro Rubini @ 2018-12-07 16:39 UTC (permalink / raw)
  To: paul.gortmaker; +Cc: lee.jones, linux-kernel, ciminaghi

> Subject: [PATCH] mfd: sta2x11: drop unused MODULE_ tags from non-modular code

Acked-by: Alessandro Rubini <rubini@gnudd.com>

> Alessandro, Davide - you can find additional context regarding why we
> are making these changes in the [00/22] e-mail that can be found here:
> https://lore.kernel.org/lkml/1543811009-15112-1-git-send-email-paul.gortmaker@windriver.com/

Thanks a lot for this extra link. Yes, I agree.

I set up this as a module because /sys/modules has much more than what
is actually a module, and the "module" concept brings it the idea
of module parameters, that are available for built-in code too, with
the module namespace.  But it's actually not used in this case.

Thanks
/alessandro

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

* Re: [PATCH 18/22] mfd: wm831x-i2c: Make it explicitly non-modular
  2018-12-05 11:38   ` Charles Keepax
@ 2018-12-07 18:16     ` Paul Gortmaker
  0 siblings, 0 replies; 51+ messages in thread
From: Paul Gortmaker @ 2018-12-07 18:16 UTC (permalink / raw)
  To: Charles Keepax; +Cc: Lee Jones, linux-kernel, patches

[Re: [PATCH 18/22] mfd: wm831x-i2c: Make it explicitly non-modular] On 05/12/2018 (Wed 11:38) Charles Keepax wrote:

> On Sun, Dec 02, 2018 at 11:23:25PM -0500, Paul Gortmaker wrote:

[...]

> > -static int wm831x_i2c_remove(struct i2c_client *i2c)
> > -{
> > -	struct wm831x *wm831x = i2c_get_clientdata(i2c);
> > -
> > -	wm831x_device_exit(wm831x);
> 
> These patches remove the only callers of wm831x_device_exit, so I
> guess we should probably remove that function too?

Agreed. I've ammended the 831x-core patch to remove this as well.
Thanks for spotting it.  Will send v3 shortly.

Paul.
--

> 
> Thanks,
> Charles

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

* RE: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
       [not found]   ` <20181207203021.GR23156@windriver.com>
@ 2019-08-07 10:43     ` Steve Twiss
  0 siblings, 0 replies; 51+ messages in thread
From: Steve Twiss @ 2019-08-07 10:43 UTC (permalink / raw)
  To: Paul Gortmaker; +Cc: linux-kernel

Hi Paul,

I will not be able to make these changes to support modularity any more.

Although the support.opensource@diasemi.com e-mail address for Support
is still working, I will not be able to review your patches if you were to re-send
them again.

Regards,
Stephen

On 07 December 2018 20:30, Paul Gortmaker 
> > On 03 December 2018 04:23, Paul Gortmaker wrote:
> > > Subject: [PATCH v2 00/22] mfd: demodularization of non-modular drivers
> > >
> > > [v1 --> v2: add some more commits as requested by Lee (MFD maintainer),
> > >  update the 00/NN text; re-do build and link testing on new linux-next. ]
> > >
> > > This group of MFD drivers are all controlled by "bool" Kconfig settings,
> > > but contain various amounts of largely pointless uses of infrastructure
> > > related to modular operations, even though they can't be built modular.
> > >
> > > We can easily remove/replace all of it.  We are trying to make driver
> > > code consistent with the Makefiles/Kconfigs that control them.
> >
> > For the DA9052 and DA9055, changes:
> >
> > -  drivers/mfd/da9052-core.c         | 11 -----------
> > -  drivers/mfd/da9052-i2c.c          | 22 ++-------------------
> > -  drivers/mfd/da9052-irq.c          |  1 -
> > -  drivers/mfd/da9052-spi.c          | 22 ++-------------------
> > -  drivers/mfd/da9055-core.c         | 13 ++-----------
> > -  drivers/mfd/da9055-i2c.c          | 24 ++---------------------
> >
> > The responsibility can fall back to Dialog for these changes. We will
> > submit Kconfig patches for these and make them explicitly non-modular.
> > This will remove the ambiguity caused by the Kconfig bool options.
> 
> Just FYI, I dropped the diasemi commits from my v3 send.
> 
> https://lore.kernel.org/lkml/1544213465-16259-1-git-send-email-
> paul.gortmaker@windriver.com/
> 
> Thanks for taking on the modular conversions.



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

end of thread, other threads:[~2019-08-07 10:43 UTC | newest]

Thread overview: 51+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-12-03  4:23 [PATCH v2 00/22] mfd: demodularization of non-modular drivers Paul Gortmaker
2018-12-03  4:23 ` Paul Gortmaker
2018-12-03  4:23 ` [PATCH 01/22] mfd: aat2870-core: Make it explicitly non-modular Paul Gortmaker
2018-12-03  4:23 ` [PATCH 02/22] mfd: adp5520: " Paul Gortmaker
2018-12-03  4:23 ` [PATCH 03/22] mfd: as3711: " Paul Gortmaker
2018-12-03  4:23 ` [PATCH 04/22] mfd: da903x: " Paul Gortmaker
2018-12-03  4:23 ` [PATCH 05/22] mfd: da9052-*: " Paul Gortmaker
2018-12-03  4:23 ` [PATCH 06/22] mfd: da9055-i2c: " Paul Gortmaker
2018-12-03  4:23 ` [PATCH 07/22] mfd: da9055-core: make " Paul Gortmaker
2018-12-03  4:23 ` [PATCH 08/22] mfd: db8500-prcmu: drop unused MODULE_ tags from non-modular code Paul Gortmaker
2018-12-07 12:25   ` Linus Walleij
2018-12-03  4:23 ` [PATCH 09/22] mfd: htc-i2cpld: Make it explicitly non-modular Paul Gortmaker
2018-12-03  4:23 ` [PATCH 10/22] mfd: max8925-core: drop unused MODULE_ tags from non-modular code Paul Gortmaker
2018-12-03  4:23 ` [PATCH 11/22] mfd: rc5t583: Make it explicitly non-modular Paul Gortmaker
2018-12-03  4:23 ` [PATCH 12/22] mfd: sta2x11: drop unused MODULE_ tags from non-modular code Paul Gortmaker
2018-12-03 11:14   ` Lee Jones
2018-12-03 15:07     ` Paul Gortmaker
2018-12-04  9:23       ` Davide Ciminaghi
2018-12-07 16:39     ` Alessandro Rubini
2018-12-03  4:23 ` [PATCH 13/22] mfd: syscon: Make it explicitly non-modular Paul Gortmaker
2018-12-03  4:23 ` [PATCH 14/22] mfd: tps65090: " Paul Gortmaker
2018-12-03  4:23 ` [PATCH 15/22] mfd: tps65910: " Paul Gortmaker
2018-12-03  4:23   ` Paul Gortmaker
2018-12-03  4:23 ` [PATCH 16/22] mfd: tps80031: " Paul Gortmaker
2018-12-03  4:23 ` [PATCH 17/22] mfd: wm831x-spi: " Paul Gortmaker
2018-12-03  4:23 ` [PATCH 18/22] mfd: wm831x-i2c: " Paul Gortmaker
2018-12-05 11:38   ` Charles Keepax
2018-12-07 18:16     ` Paul Gortmaker
2018-12-03  4:23 ` [PATCH 19/22] mfd: wm831x-core: drop unused MODULE_ tags from non-modular code Paul Gortmaker
2018-12-05 11:36   ` Charles Keepax
2018-12-03  4:23 ` [PATCH 20/22] mfd: wm8350-i2c: Make it explicitly non-modular Paul Gortmaker
2018-12-05 11:39   ` Charles Keepax
2018-12-03  4:23 ` [PATCH 21/22] mfd: wm8350-core: drop unused MODULE_ tags from non-modular code Paul Gortmaker
2018-12-05 11:39   ` Charles Keepax
2018-12-03  4:23 ` [PATCH 22/22] mfd: wm8400-core: Make it explicitly non-modular Paul Gortmaker
2018-12-05 11:41   ` Charles Keepax
2018-12-05 11:35 ` [PATCH v2 00/22] mfd: demodularization of non-modular drivers Charles Keepax
2018-12-05 11:35   ` Charles Keepax
2018-12-05 11:48   ` Linus Walleij
2018-12-05 11:48     ` Linus Walleij
2018-12-05 13:40     ` Charles Keepax
2018-12-05 13:40       ` Charles Keepax
2018-12-05 11:50 ` Linus Walleij
2018-12-05 11:50   ` Linus Walleij
2018-12-05 12:01 ` Steve Twiss
2018-12-05 12:01   ` Steve Twiss
2018-12-05 12:12   ` Steve Twiss
2018-12-05 12:12     ` Steve Twiss
2018-12-05 18:08   ` Paul Gortmaker
2018-12-05 18:08     ` Paul Gortmaker
     [not found]   ` <20181207203021.GR23156@windriver.com>
2019-08-07 10:43     ` Steve Twiss

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.