dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] pwm: Manage owner assignment implicitly for drivers
@ 2023-08-04 14:27 Uwe Kleine-König
  2023-08-04 14:27 ` [PATCH v2 1/2] " Uwe Kleine-König
  2023-08-08 13:18 ` [PATCH v2 0/2] " Linus Walleij
  0 siblings, 2 replies; 11+ messages in thread
From: Uwe Kleine-König @ 2023-08-04 14:27 UTC (permalink / raw)
  To: Thierry Reding, Laurent Pinchart
  Cc: dri-devel, Conor Dooley, Pavel Machek, Nobuhiro Iwamatsu,
	linux-stm32, Jerome Brunet, linux-samsung-soc, Robert Foss,
	Samuel Holland, Sean Anderson, Kevin Hilman, Hammer Hsieh,
	NXP Linux Team, linux-sunxi, Sascha Hauer, Andy Shevchenko,
	Alex Elder, Scott Branden, Daire McNamara, Greg Kroah-Hartman,
	Michael Walle, Pengutronix Kernel Team, Claudiu Beznea,
	Alexandre Belloni, Alim Akhtar, Guenter Roeck, chrome-platform,
	Bjorn Andersson, Chunyan Zhang, Bartosz Golaszewski, Lee Jones,
	Jonathan Hunter, linux-rockchip, Martin Blumenstingl, linux-gpio,
	Fabrice Gasnier, linux-rpi-kernel, linux-amlogic, Michal Simek,
	linux-arm-kernel, Neil Armstrong, greybus-dev, Hector Martin,
	Douglas Anderson, Maxime Coquelin, Matthias Brugger,
	Andrzej Hajda, Alyssa Rosenzweig, Alexander Shiyan, linux-staging,
	Jernej Skrabec, Luca Weiss, Chen-Yu Tsai,
	Broadcom internal kernel review list, Orson Zhai, linux-pwm,
	Jonas Karlman, Ray Jui, Jonathan Neuschäfer,
	Vladimir Zapolskiy, Baolin Wang, asahi, Shawn Guo,
	Anjelique Melendez, Alexandre Torgue, linux-mips, Paul Cercueil,
	linux-riscv, linux-leds, Florian Fainelli, Sven Peter,
	Johan Hovold, linux-mediatek, Paul Walmsley, linux-tegra,
	AngeloGioacchino Del Regno, Nicolas Ferre, Krzysztof Kozlowski,
	Palmer Dabbelt, Dmitry Baryshkov

Hello,

(implicit) v1 of this series can be found at
https://lore.kernel.org/linux-pwm/20230803140633.138165-1-u.kleine-koenig@pengutronix.de .

Changes since then only affect documentation that I missed to adapt before.
Thanks to Laurent for catching that

Best regards
Uwe

Uwe Kleine-König (2):
  pwm: Manage owner assignment implicitly for drivers
  pwm: crc: Allow compilation as module and with COMPILE_TEST

 drivers/gpio/gpio-mvebu.c             |  1 -
 drivers/gpu/drm/bridge/ti-sn65dsi86.c |  1 -
 drivers/leds/rgb/leds-qcom-lpg.c      |  1 -
 drivers/pwm/Kconfig                   |  4 ++--
 drivers/pwm/core.c                    | 24 ++++++++++++++----------
 drivers/pwm/pwm-ab8500.c              |  1 -
 drivers/pwm/pwm-apple.c               |  1 -
 drivers/pwm/pwm-atmel-hlcdc.c         |  1 -
 drivers/pwm/pwm-atmel-tcb.c           |  1 -
 drivers/pwm/pwm-atmel.c               |  1 -
 drivers/pwm/pwm-bcm-iproc.c           |  1 -
 drivers/pwm/pwm-bcm-kona.c            |  1 -
 drivers/pwm/pwm-bcm2835.c             |  1 -
 drivers/pwm/pwm-berlin.c              |  1 -
 drivers/pwm/pwm-brcmstb.c             |  1 -
 drivers/pwm/pwm-clk.c                 |  1 -
 drivers/pwm/pwm-clps711x.c            |  1 -
 drivers/pwm/pwm-crc.c                 |  5 ++++-
 drivers/pwm/pwm-cros-ec.c             |  1 -
 drivers/pwm/pwm-dwc.c                 |  1 -
 drivers/pwm/pwm-ep93xx.c              |  1 -
 drivers/pwm/pwm-fsl-ftm.c             |  1 -
 drivers/pwm/pwm-hibvt.c               |  1 -
 drivers/pwm/pwm-img.c                 |  1 -
 drivers/pwm/pwm-imx-tpm.c             |  1 -
 drivers/pwm/pwm-imx1.c                |  1 -
 drivers/pwm/pwm-imx27.c               |  1 -
 drivers/pwm/pwm-intel-lgm.c           |  1 -
 drivers/pwm/pwm-iqs620a.c             |  1 -
 drivers/pwm/pwm-jz4740.c              |  1 -
 drivers/pwm/pwm-keembay.c             |  1 -
 drivers/pwm/pwm-lp3943.c              |  1 -
 drivers/pwm/pwm-lpc18xx-sct.c         |  1 -
 drivers/pwm/pwm-lpc32xx.c             |  1 -
 drivers/pwm/pwm-lpss.c                |  1 -
 drivers/pwm/pwm-mediatek.c            |  1 -
 drivers/pwm/pwm-meson.c               |  1 -
 drivers/pwm/pwm-microchip-core.c      |  1 -
 drivers/pwm/pwm-mtk-disp.c            |  1 -
 drivers/pwm/pwm-mxs.c                 |  1 -
 drivers/pwm/pwm-ntxec.c               |  1 -
 drivers/pwm/pwm-omap-dmtimer.c        |  1 -
 drivers/pwm/pwm-pca9685.c             |  1 -
 drivers/pwm/pwm-pxa.c                 |  1 -
 drivers/pwm/pwm-raspberrypi-poe.c     |  1 -
 drivers/pwm/pwm-rcar.c                |  1 -
 drivers/pwm/pwm-renesas-tpu.c         |  1 -
 drivers/pwm/pwm-rockchip.c            |  1 -
 drivers/pwm/pwm-rz-mtu3.c             |  1 -
 drivers/pwm/pwm-samsung.c             |  1 -
 drivers/pwm/pwm-sifive.c              |  1 -
 drivers/pwm/pwm-sl28cpld.c            |  1 -
 drivers/pwm/pwm-spear.c               |  1 -
 drivers/pwm/pwm-sprd.c                |  1 -
 drivers/pwm/pwm-sti.c                 |  1 -
 drivers/pwm/pwm-stm32-lp.c            |  1 -
 drivers/pwm/pwm-stm32.c               |  1 -
 drivers/pwm/pwm-stmpe.c               |  1 -
 drivers/pwm/pwm-sun4i.c               |  1 -
 drivers/pwm/pwm-sunplus.c             |  1 -
 drivers/pwm/pwm-tegra.c               |  1 -
 drivers/pwm/pwm-tiecap.c              |  1 -
 drivers/pwm/pwm-tiehrpwm.c            |  1 -
 drivers/pwm/pwm-twl-led.c             |  2 --
 drivers/pwm/pwm-twl.c                 |  2 --
 drivers/pwm/pwm-visconti.c            |  1 -
 drivers/pwm/pwm-vt8500.c              |  1 -
 drivers/pwm/pwm-xilinx.c              |  1 -
 drivers/staging/greybus/pwm.c         |  1 -
 include/linux/pwm.h                   | 10 ++++++----
 70 files changed, 26 insertions(+), 85 deletions(-)


base-commit: 3ccb179aa40d931eb00ef8910d7b812a95659563
-- 
2.40.1


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

* [PATCH v2 1/2] pwm: Manage owner assignment implicitly for drivers
  2023-08-04 14:27 [PATCH v2 0/2] pwm: Manage owner assignment implicitly for drivers Uwe Kleine-König
@ 2023-08-04 14:27 ` Uwe Kleine-König
  2023-08-04 18:51   ` Andy Shevchenko
                     ` (7 more replies)
  2023-08-08 13:18 ` [PATCH v2 0/2] " Linus Walleij
  1 sibling, 8 replies; 11+ messages in thread
From: Uwe Kleine-König @ 2023-08-04 14:27 UTC (permalink / raw)
  To: Thierry Reding, Laurent Pinchart
  Cc: dri-devel, Conor Dooley, Pavel Machek, Nobuhiro Iwamatsu,
	linux-stm32, Jerome Brunet, linux-samsung-soc, Robert Foss,
	Samuel Holland, Sean Anderson, Kevin Hilman, Hammer Hsieh,
	NXP Linux Team, linux-sunxi, Sascha Hauer, Andy Shevchenko,
	Alex Elder, Scott Branden, Daire McNamara, Greg Kroah-Hartman,
	Michael Walle, Pengutronix Kernel Team, Claudiu Beznea,
	Alexandre Belloni, Alim Akhtar, Guenter Roeck, chrome-platform,
	Bjorn Andersson, Chunyan Zhang, Bartosz Golaszewski, Lee Jones,
	Jonathan Hunter, linux-rockchip, Martin Blumenstingl, linux-gpio,
	Fabrice Gasnier, linux-rpi-kernel, linux-amlogic, Michal Simek,
	linux-arm-kernel, Neil Armstrong, greybus-dev, Hector Martin,
	Douglas Anderson, Maxime Coquelin, Matthias Brugger,
	Andrzej Hajda, Alyssa Rosenzweig, Alexander Shiyan, linux-staging,
	Jernej Skrabec, Luca Weiss, Chen-Yu Tsai,
	Broadcom internal kernel review list, Orson Zhai, linux-pwm,
	Jonas Karlman, Ray Jui, Jonathan Neuschäfer,
	Vladimir Zapolskiy, Baolin Wang, asahi, Shawn Guo,
	Anjelique Melendez, Alexandre Torgue, linux-mips, Paul Cercueil,
	linux-riscv, linux-leds, Florian Fainelli, Sven Peter,
	Johan Hovold, linux-mediatek, Paul Walmsley, linux-tegra,
	AngeloGioacchino Del Regno, Nicolas Ferre, Krzysztof Kozlowski,
	Palmer Dabbelt, Dmitry Baryshkov

Instead of requiring each driver to care for assigning the owner member
of struct pwm_ops, handle that implicitly using a macro. Note that the
owner member has to be moved to struct pwm_chip, as the ops structure
usually lives in read-only memory and so cannot be modified.

The upside is that new lowlevel drivers cannot forget the assignment and
save one line each. The pwm-crc driver didn't assign .owner, that's not
a problem in practise though as the driver cannot be compiled as a
module.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
 drivers/gpio/gpio-mvebu.c             |  1 -
 drivers/gpu/drm/bridge/ti-sn65dsi86.c |  1 -
 drivers/leds/rgb/leds-qcom-lpg.c      |  1 -
 drivers/pwm/core.c                    | 24 ++++++++++++++----------
 drivers/pwm/pwm-ab8500.c              |  1 -
 drivers/pwm/pwm-apple.c               |  1 -
 drivers/pwm/pwm-atmel-hlcdc.c         |  1 -
 drivers/pwm/pwm-atmel-tcb.c           |  1 -
 drivers/pwm/pwm-atmel.c               |  1 -
 drivers/pwm/pwm-bcm-iproc.c           |  1 -
 drivers/pwm/pwm-bcm-kona.c            |  1 -
 drivers/pwm/pwm-bcm2835.c             |  1 -
 drivers/pwm/pwm-berlin.c              |  1 -
 drivers/pwm/pwm-brcmstb.c             |  1 -
 drivers/pwm/pwm-clk.c                 |  1 -
 drivers/pwm/pwm-clps711x.c            |  1 -
 drivers/pwm/pwm-cros-ec.c             |  1 -
 drivers/pwm/pwm-dwc.c                 |  1 -
 drivers/pwm/pwm-ep93xx.c              |  1 -
 drivers/pwm/pwm-fsl-ftm.c             |  1 -
 drivers/pwm/pwm-hibvt.c               |  1 -
 drivers/pwm/pwm-img.c                 |  1 -
 drivers/pwm/pwm-imx-tpm.c             |  1 -
 drivers/pwm/pwm-imx1.c                |  1 -
 drivers/pwm/pwm-imx27.c               |  1 -
 drivers/pwm/pwm-intel-lgm.c           |  1 -
 drivers/pwm/pwm-iqs620a.c             |  1 -
 drivers/pwm/pwm-jz4740.c              |  1 -
 drivers/pwm/pwm-keembay.c             |  1 -
 drivers/pwm/pwm-lp3943.c              |  1 -
 drivers/pwm/pwm-lpc18xx-sct.c         |  1 -
 drivers/pwm/pwm-lpc32xx.c             |  1 -
 drivers/pwm/pwm-lpss.c                |  1 -
 drivers/pwm/pwm-mediatek.c            |  1 -
 drivers/pwm/pwm-meson.c               |  1 -
 drivers/pwm/pwm-microchip-core.c      |  1 -
 drivers/pwm/pwm-mtk-disp.c            |  1 -
 drivers/pwm/pwm-mxs.c                 |  1 -
 drivers/pwm/pwm-ntxec.c               |  1 -
 drivers/pwm/pwm-omap-dmtimer.c        |  1 -
 drivers/pwm/pwm-pca9685.c             |  1 -
 drivers/pwm/pwm-pxa.c                 |  1 -
 drivers/pwm/pwm-raspberrypi-poe.c     |  1 -
 drivers/pwm/pwm-rcar.c                |  1 -
 drivers/pwm/pwm-renesas-tpu.c         |  1 -
 drivers/pwm/pwm-rockchip.c            |  1 -
 drivers/pwm/pwm-rz-mtu3.c             |  1 -
 drivers/pwm/pwm-samsung.c             |  1 -
 drivers/pwm/pwm-sifive.c              |  1 -
 drivers/pwm/pwm-sl28cpld.c            |  1 -
 drivers/pwm/pwm-spear.c               |  1 -
 drivers/pwm/pwm-sprd.c                |  1 -
 drivers/pwm/pwm-sti.c                 |  1 -
 drivers/pwm/pwm-stm32-lp.c            |  1 -
 drivers/pwm/pwm-stm32.c               |  1 -
 drivers/pwm/pwm-stmpe.c               |  1 -
 drivers/pwm/pwm-sun4i.c               |  1 -
 drivers/pwm/pwm-sunplus.c             |  1 -
 drivers/pwm/pwm-tegra.c               |  1 -
 drivers/pwm/pwm-tiecap.c              |  1 -
 drivers/pwm/pwm-tiehrpwm.c            |  1 -
 drivers/pwm/pwm-twl-led.c             |  2 --
 drivers/pwm/pwm-twl.c                 |  2 --
 drivers/pwm/pwm-visconti.c            |  1 -
 drivers/pwm/pwm-vt8500.c              |  1 -
 drivers/pwm/pwm-xilinx.c              |  1 -
 drivers/staging/greybus/pwm.c         |  1 -
 include/linux/pwm.h                   | 10 ++++++----
 68 files changed, 20 insertions(+), 82 deletions(-)

diff --git a/drivers/gpio/gpio-mvebu.c b/drivers/gpio/gpio-mvebu.c
index a68f682aec01..b2e6b54e2559 100644
--- a/drivers/gpio/gpio-mvebu.c
+++ b/drivers/gpio/gpio-mvebu.c
@@ -756,7 +756,6 @@ static const struct pwm_ops mvebu_pwm_ops = {
 	.free = mvebu_pwm_free,
 	.get_state = mvebu_pwm_get_state,
 	.apply = mvebu_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static void __maybe_unused mvebu_pwm_suspend(struct mvebu_gpio_chip *mvchip)
diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
index c499a14d0b98..53d133d18c18 100644
--- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c
+++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
@@ -1571,7 +1571,6 @@ static const struct pwm_ops ti_sn_pwm_ops = {
 	.free = ti_sn_pwm_free,
 	.apply = ti_sn_pwm_apply,
 	.get_state = ti_sn_pwm_get_state,
-	.owner = THIS_MODULE,
 };
 
 static int ti_sn_pwm_probe(struct auxiliary_device *adev,
diff --git a/drivers/leds/rgb/leds-qcom-lpg.c b/drivers/leds/rgb/leds-qcom-lpg.c
index 59581b3e25ca..d7ae30ebb34a 100644
--- a/drivers/leds/rgb/leds-qcom-lpg.c
+++ b/drivers/leds/rgb/leds-qcom-lpg.c
@@ -1086,7 +1086,6 @@ static const struct pwm_ops lpg_pwm_ops = {
 	.request = lpg_pwm_request,
 	.apply = lpg_pwm_apply,
 	.get_state = lpg_pwm_get_state,
-	.owner = THIS_MODULE,
 };
 
 static int lpg_add_pwm(struct lpg *lpg)
diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
index dc66e3405bf5..a2824eb4e236 100644
--- a/drivers/pwm/core.c
+++ b/drivers/pwm/core.c
@@ -89,13 +89,13 @@ static int pwm_device_request(struct pwm_device *pwm, const char *label)
 	if (test_bit(PWMF_REQUESTED, &pwm->flags))
 		return -EBUSY;
 
-	if (!try_module_get(pwm->chip->ops->owner))
+	if (!try_module_get(pwm->chip->owner))
 		return -ENODEV;
 
 	if (pwm->chip->ops->request) {
 		err = pwm->chip->ops->request(pwm->chip, pwm);
 		if (err) {
-			module_put(pwm->chip->ops->owner);
+			module_put(pwm->chip->owner);
 			return err;
 		}
 	}
@@ -253,14 +253,16 @@ static bool pwm_ops_check(const struct pwm_chip *chip)
 }
 
 /**
- * pwmchip_add() - register a new PWM chip
+ * __pwmchip_add() - register a new PWM chip
  * @chip: the PWM chip to add
+ * @owner: reference to the module providing the chip.
  *
- * Register a new PWM chip.
+ * Register a new PWM chip. @owner is supposed to be THIS_MODULE, use the
+ * pwmchip_add wrapper to do this right.
  *
  * Returns: 0 on success or a negative error code on failure.
  */
-int pwmchip_add(struct pwm_chip *chip)
+int __pwmchip_add(struct pwm_chip *chip, struct module *owner)
 {
 	struct pwm_device *pwm;
 	unsigned int i;
@@ -272,6 +274,8 @@ int pwmchip_add(struct pwm_chip *chip)
 	if (!pwm_ops_check(chip))
 		return -EINVAL;
 
+	chip->owner = owner;
+
 	chip->pwms = kcalloc(chip->npwm, sizeof(*pwm), GFP_KERNEL);
 	if (!chip->pwms)
 		return -ENOMEM;
@@ -306,7 +310,7 @@ int pwmchip_add(struct pwm_chip *chip)
 
 	return 0;
 }
-EXPORT_SYMBOL_GPL(pwmchip_add);
+EXPORT_SYMBOL_GPL(__pwmchip_add);
 
 /**
  * pwmchip_remove() - remove a PWM chip
@@ -338,17 +342,17 @@ static void devm_pwmchip_remove(void *data)
 	pwmchip_remove(chip);
 }
 
-int devm_pwmchip_add(struct device *dev, struct pwm_chip *chip)
+int __devm_pwmchip_add(struct device *dev, struct pwm_chip *chip, struct module *owner)
 {
 	int ret;
 
-	ret = pwmchip_add(chip);
+	ret = __pwmchip_add(chip, owner);
 	if (ret)
 		return ret;
 
 	return devm_add_action_or_reset(dev, devm_pwmchip_remove, chip);
 }
-EXPORT_SYMBOL_GPL(devm_pwmchip_add);
+EXPORT_SYMBOL_GPL(__devm_pwmchip_add);
 
 /**
  * pwm_request_from_chip() - request a PWM device relative to a PWM chip
@@ -979,7 +983,7 @@ void pwm_put(struct pwm_device *pwm)
 	pwm_set_chip_data(pwm, NULL);
 	pwm->label = NULL;
 
-	module_put(pwm->chip->ops->owner);
+	module_put(pwm->chip->owner);
 out:
 	mutex_unlock(&pwm_lock);
 }
diff --git a/drivers/pwm/pwm-ab8500.c b/drivers/pwm/pwm-ab8500.c
index 583a7d69c741..670d33daea84 100644
--- a/drivers/pwm/pwm-ab8500.c
+++ b/drivers/pwm/pwm-ab8500.c
@@ -181,7 +181,6 @@ static int ab8500_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
 static const struct pwm_ops ab8500_pwm_ops = {
 	.apply = ab8500_pwm_apply,
 	.get_state = ab8500_pwm_get_state,
-	.owner = THIS_MODULE,
 };
 
 static int ab8500_pwm_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-apple.c b/drivers/pwm/pwm-apple.c
index 8e7d67fb5fbe..4d755b628d9e 100644
--- a/drivers/pwm/pwm-apple.c
+++ b/drivers/pwm/pwm-apple.c
@@ -99,7 +99,6 @@ static int apple_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
 static const struct pwm_ops apple_pwm_ops = {
 	.apply = apple_pwm_apply,
 	.get_state = apple_pwm_get_state,
-	.owner = THIS_MODULE,
 };
 
 static int apple_pwm_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-atmel-hlcdc.c b/drivers/pwm/pwm-atmel-hlcdc.c
index e271d920151e..07920e034757 100644
--- a/drivers/pwm/pwm-atmel-hlcdc.c
+++ b/drivers/pwm/pwm-atmel-hlcdc.c
@@ -170,7 +170,6 @@ static int atmel_hlcdc_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 
 static const struct pwm_ops atmel_hlcdc_pwm_ops = {
 	.apply = atmel_hlcdc_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static const struct atmel_hlcdc_pwm_errata atmel_hlcdc_pwm_at91sam9x5_errata = {
diff --git a/drivers/pwm/pwm-atmel-tcb.c b/drivers/pwm/pwm-atmel-tcb.c
index c00dd37c5fbd..98b33c016c3c 100644
--- a/drivers/pwm/pwm-atmel-tcb.c
+++ b/drivers/pwm/pwm-atmel-tcb.c
@@ -364,7 +364,6 @@ static const struct pwm_ops atmel_tcb_pwm_ops = {
 	.request = atmel_tcb_pwm_request,
 	.free = atmel_tcb_pwm_free,
 	.apply = atmel_tcb_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static struct atmel_tcb_config tcb_rm9200_config = {
diff --git a/drivers/pwm/pwm-atmel.c b/drivers/pwm/pwm-atmel.c
index 1f73325d1bea..e452f7b4a098 100644
--- a/drivers/pwm/pwm-atmel.c
+++ b/drivers/pwm/pwm-atmel.c
@@ -402,7 +402,6 @@ static int atmel_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
 static const struct pwm_ops atmel_pwm_ops = {
 	.apply = atmel_pwm_apply,
 	.get_state = atmel_pwm_get_state,
-	.owner = THIS_MODULE,
 };
 
 static const struct atmel_pwm_data atmel_sam9rl_pwm_data = {
diff --git a/drivers/pwm/pwm-bcm-iproc.c b/drivers/pwm/pwm-bcm-iproc.c
index 7d70b6f186a6..1da902440df2 100644
--- a/drivers/pwm/pwm-bcm-iproc.c
+++ b/drivers/pwm/pwm-bcm-iproc.c
@@ -183,7 +183,6 @@ static int iproc_pwmc_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 static const struct pwm_ops iproc_pwm_ops = {
 	.apply = iproc_pwmc_apply,
 	.get_state = iproc_pwmc_get_state,
-	.owner = THIS_MODULE,
 };
 
 static int iproc_pwmc_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-bcm-kona.c b/drivers/pwm/pwm-bcm-kona.c
index e5b00cc9f7a7..15d6ed03c3ce 100644
--- a/drivers/pwm/pwm-bcm-kona.c
+++ b/drivers/pwm/pwm-bcm-kona.c
@@ -269,7 +269,6 @@ static int kona_pwmc_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 
 static const struct pwm_ops kona_pwm_ops = {
 	.apply = kona_pwmc_apply,
-	.owner = THIS_MODULE,
 };
 
 static int kona_pwmc_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-bcm2835.c b/drivers/pwm/pwm-bcm2835.c
index bdfc2a5ec0d6..af318a35d510 100644
--- a/drivers/pwm/pwm-bcm2835.c
+++ b/drivers/pwm/pwm-bcm2835.c
@@ -129,7 +129,6 @@ static const struct pwm_ops bcm2835_pwm_ops = {
 	.request = bcm2835_pwm_request,
 	.free = bcm2835_pwm_free,
 	.apply = bcm2835_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static int bcm2835_pwm_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-berlin.c b/drivers/pwm/pwm-berlin.c
index 0971c666afd1..6a6641fc4fa1 100644
--- a/drivers/pwm/pwm-berlin.c
+++ b/drivers/pwm/pwm-berlin.c
@@ -205,7 +205,6 @@ static const struct pwm_ops berlin_pwm_ops = {
 	.request = berlin_pwm_request,
 	.free = berlin_pwm_free,
 	.apply = berlin_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static const struct of_device_id berlin_pwm_match[] = {
diff --git a/drivers/pwm/pwm-brcmstb.c b/drivers/pwm/pwm-brcmstb.c
index a3faa9a3de7c..96967f8a8dad 100644
--- a/drivers/pwm/pwm-brcmstb.c
+++ b/drivers/pwm/pwm-brcmstb.c
@@ -220,7 +220,6 @@ static int brcmstb_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 
 static const struct pwm_ops brcmstb_pwm_ops = {
 	.apply = brcmstb_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static const struct of_device_id brcmstb_pwm_of_match[] = {
diff --git a/drivers/pwm/pwm-clk.c b/drivers/pwm/pwm-clk.c
index 0ee4d2aee4df..9dd88b386907 100644
--- a/drivers/pwm/pwm-clk.c
+++ b/drivers/pwm/pwm-clk.c
@@ -77,7 +77,6 @@ static int pwm_clk_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 
 static const struct pwm_ops pwm_clk_ops = {
 	.apply = pwm_clk_apply,
-	.owner = THIS_MODULE,
 };
 
 static int pwm_clk_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-clps711x.c b/drivers/pwm/pwm-clps711x.c
index b0d91142da8d..42179b3f7ec3 100644
--- a/drivers/pwm/pwm-clps711x.c
+++ b/drivers/pwm/pwm-clps711x.c
@@ -72,7 +72,6 @@ static int clps711x_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 static const struct pwm_ops clps711x_pwm_ops = {
 	.request = clps711x_pwm_request,
 	.apply = clps711x_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static struct pwm_device *clps711x_pwm_xlate(struct pwm_chip *chip,
diff --git a/drivers/pwm/pwm-cros-ec.c b/drivers/pwm/pwm-cros-ec.c
index baaac0c33aa0..500504c7d459 100644
--- a/drivers/pwm/pwm-cros-ec.c
+++ b/drivers/pwm/pwm-cros-ec.c
@@ -241,7 +241,6 @@ static const struct pwm_ops cros_ec_pwm_ops = {
 	.free = cros_ec_pwm_free,
 	.get_state	= cros_ec_pwm_get_state,
 	.apply		= cros_ec_pwm_apply,
-	.owner		= THIS_MODULE,
 };
 
 /*
diff --git a/drivers/pwm/pwm-dwc.c b/drivers/pwm/pwm-dwc.c
index 3bbb26c862c3..53fe00ccd47e 100644
--- a/drivers/pwm/pwm-dwc.c
+++ b/drivers/pwm/pwm-dwc.c
@@ -195,7 +195,6 @@ static int dwc_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
 static const struct pwm_ops dwc_pwm_ops = {
 	.apply = dwc_pwm_apply,
 	.get_state = dwc_pwm_get_state,
-	.owner = THIS_MODULE,
 };
 
 static struct dwc_pwm *dwc_pwm_alloc(struct device *dev)
diff --git a/drivers/pwm/pwm-ep93xx.c b/drivers/pwm/pwm-ep93xx.c
index c45a75e65c86..51e072572a87 100644
--- a/drivers/pwm/pwm-ep93xx.c
+++ b/drivers/pwm/pwm-ep93xx.c
@@ -159,7 +159,6 @@ static const struct pwm_ops ep93xx_pwm_ops = {
 	.request = ep93xx_pwm_request,
 	.free = ep93xx_pwm_free,
 	.apply = ep93xx_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static int ep93xx_pwm_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-fsl-ftm.c b/drivers/pwm/pwm-fsl-ftm.c
index b7c6045c5d08..d1b6d1aa4773 100644
--- a/drivers/pwm/pwm-fsl-ftm.c
+++ b/drivers/pwm/pwm-fsl-ftm.c
@@ -350,7 +350,6 @@ static const struct pwm_ops fsl_pwm_ops = {
 	.request = fsl_pwm_request,
 	.free = fsl_pwm_free,
 	.apply = fsl_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static int fsl_pwm_init(struct fsl_pwm_chip *fpc)
diff --git a/drivers/pwm/pwm-hibvt.c b/drivers/pwm/pwm-hibvt.c
index f7ba6fe9a349..c435776e2f78 100644
--- a/drivers/pwm/pwm-hibvt.c
+++ b/drivers/pwm/pwm-hibvt.c
@@ -185,7 +185,6 @@ static const struct pwm_ops hibvt_pwm_ops = {
 	.get_state = hibvt_pwm_get_state,
 	.apply = hibvt_pwm_apply,
 
-	.owner = THIS_MODULE,
 };
 
 static int hibvt_pwm_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-img.c b/drivers/pwm/pwm-img.c
index 326af85888e7..116fa060e302 100644
--- a/drivers/pwm/pwm-img.c
+++ b/drivers/pwm/pwm-img.c
@@ -208,7 +208,6 @@ static int img_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 
 static const struct pwm_ops img_pwm_ops = {
 	.apply = img_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static const struct img_pwm_soc_data pistachio_pwm = {
diff --git a/drivers/pwm/pwm-imx-tpm.c b/drivers/pwm/pwm-imx-tpm.c
index 98ab65c89685..fe8bf598d388 100644
--- a/drivers/pwm/pwm-imx-tpm.c
+++ b/drivers/pwm/pwm-imx-tpm.c
@@ -332,7 +332,6 @@ static const struct pwm_ops imx_tpm_pwm_ops = {
 	.free = pwm_imx_tpm_free,
 	.get_state = pwm_imx_tpm_get_state,
 	.apply = pwm_imx_tpm_apply,
-	.owner = THIS_MODULE,
 };
 
 static int pwm_imx_tpm_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-imx1.c b/drivers/pwm/pwm-imx1.c
index 0651983bed19..d175d895f22a 100644
--- a/drivers/pwm/pwm-imx1.c
+++ b/drivers/pwm/pwm-imx1.c
@@ -146,7 +146,6 @@ static int pwm_imx1_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 
 static const struct pwm_ops pwm_imx1_ops = {
 	.apply = pwm_imx1_apply,
-	.owner = THIS_MODULE,
 };
 
 static const struct of_device_id pwm_imx1_dt_ids[] = {
diff --git a/drivers/pwm/pwm-imx27.c b/drivers/pwm/pwm-imx27.c
index 29a3089c534c..7d9bc43f12b0 100644
--- a/drivers/pwm/pwm-imx27.c
+++ b/drivers/pwm/pwm-imx27.c
@@ -296,7 +296,6 @@ static int pwm_imx27_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 static const struct pwm_ops pwm_imx27_ops = {
 	.apply = pwm_imx27_apply,
 	.get_state = pwm_imx27_get_state,
-	.owner = THIS_MODULE,
 };
 
 static const struct of_device_id pwm_imx27_dt_ids[] = {
diff --git a/drivers/pwm/pwm-intel-lgm.c b/drivers/pwm/pwm-intel-lgm.c
index 0cd7dd548e82..54ecae7f937e 100644
--- a/drivers/pwm/pwm-intel-lgm.c
+++ b/drivers/pwm/pwm-intel-lgm.c
@@ -107,7 +107,6 @@ static int lgm_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
 static const struct pwm_ops lgm_pwm_ops = {
 	.get_state = lgm_pwm_get_state,
 	.apply = lgm_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static void lgm_pwm_init(struct lgm_pwm_chip *pc)
diff --git a/drivers/pwm/pwm-iqs620a.c b/drivers/pwm/pwm-iqs620a.c
index 47b3141135f3..378ab036edfe 100644
--- a/drivers/pwm/pwm-iqs620a.c
+++ b/drivers/pwm/pwm-iqs620a.c
@@ -166,7 +166,6 @@ static int iqs620_pwm_notifier(struct notifier_block *notifier,
 static const struct pwm_ops iqs620_pwm_ops = {
 	.apply = iqs620_pwm_apply,
 	.get_state = iqs620_pwm_get_state,
-	.owner = THIS_MODULE,
 };
 
 static void iqs620_pwm_notifier_unregister(void *context)
diff --git a/drivers/pwm/pwm-jz4740.c b/drivers/pwm/pwm-jz4740.c
index ef1293f2a897..cb384e6a1d91 100644
--- a/drivers/pwm/pwm-jz4740.c
+++ b/drivers/pwm/pwm-jz4740.c
@@ -216,7 +216,6 @@ static const struct pwm_ops jz4740_pwm_ops = {
 	.request = jz4740_pwm_request,
 	.free = jz4740_pwm_free,
 	.apply = jz4740_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static int jz4740_pwm_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-keembay.c b/drivers/pwm/pwm-keembay.c
index ac02d8bb4a0b..ac824ecc3f64 100644
--- a/drivers/pwm/pwm-keembay.c
+++ b/drivers/pwm/pwm-keembay.c
@@ -178,7 +178,6 @@ static int keembay_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 }
 
 static const struct pwm_ops keembay_pwm_ops = {
-	.owner = THIS_MODULE,
 	.apply = keembay_pwm_apply,
 	.get_state = keembay_pwm_get_state,
 };
diff --git a/drivers/pwm/pwm-lp3943.c b/drivers/pwm/pwm-lp3943.c
index 4b133a17f4be..a1a106747372 100644
--- a/drivers/pwm/pwm-lp3943.c
+++ b/drivers/pwm/pwm-lp3943.c
@@ -216,7 +216,6 @@ static const struct pwm_ops lp3943_pwm_ops = {
 	.request	= lp3943_pwm_request,
 	.free		= lp3943_pwm_free,
 	.apply		= lp3943_pwm_apply,
-	.owner		= THIS_MODULE,
 };
 
 static int lp3943_pwm_parse_dt(struct device *dev,
diff --git a/drivers/pwm/pwm-lpc18xx-sct.c b/drivers/pwm/pwm-lpc18xx-sct.c
index 7a19a840bca5..ef7d0da137ed 100644
--- a/drivers/pwm/pwm-lpc18xx-sct.c
+++ b/drivers/pwm/pwm-lpc18xx-sct.c
@@ -341,7 +341,6 @@ static const struct pwm_ops lpc18xx_pwm_ops = {
 	.apply = lpc18xx_pwm_apply,
 	.request = lpc18xx_pwm_request,
 	.free = lpc18xx_pwm_free,
-	.owner = THIS_MODULE,
 };
 
 static const struct of_device_id lpc18xx_pwm_of_match[] = {
diff --git a/drivers/pwm/pwm-lpc32xx.c b/drivers/pwm/pwm-lpc32xx.c
index 806f0bb3ad6d..78f664e41e6e 100644
--- a/drivers/pwm/pwm-lpc32xx.c
+++ b/drivers/pwm/pwm-lpc32xx.c
@@ -115,7 +115,6 @@ static int lpc32xx_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 
 static const struct pwm_ops lpc32xx_pwm_ops = {
 	.apply = lpc32xx_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static int lpc32xx_pwm_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-lpss.c b/drivers/pwm/pwm-lpss.c
index 23fe332b2394..a6ea3ce7e019 100644
--- a/drivers/pwm/pwm-lpss.c
+++ b/drivers/pwm/pwm-lpss.c
@@ -243,7 +243,6 @@ static int pwm_lpss_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
 static const struct pwm_ops pwm_lpss_ops = {
 	.apply = pwm_lpss_apply,
 	.get_state = pwm_lpss_get_state,
-	.owner = THIS_MODULE,
 };
 
 struct pwm_lpss_chip *devm_pwm_lpss_probe(struct device *dev, void __iomem *base,
diff --git a/drivers/pwm/pwm-mediatek.c b/drivers/pwm/pwm-mediatek.c
index 6adb0ed01906..373abfd25acb 100644
--- a/drivers/pwm/pwm-mediatek.c
+++ b/drivers/pwm/pwm-mediatek.c
@@ -229,7 +229,6 @@ static int pwm_mediatek_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 
 static const struct pwm_ops pwm_mediatek_ops = {
 	.apply = pwm_mediatek_apply,
-	.owner = THIS_MODULE,
 };
 
 static int pwm_mediatek_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-meson.c b/drivers/pwm/pwm-meson.c
index 25519cddc2a9..5bea53243ed2 100644
--- a/drivers/pwm/pwm-meson.c
+++ b/drivers/pwm/pwm-meson.c
@@ -335,7 +335,6 @@ static const struct pwm_ops meson_pwm_ops = {
 	.free = meson_pwm_free,
 	.apply = meson_pwm_apply,
 	.get_state = meson_pwm_get_state,
-	.owner = THIS_MODULE,
 };
 
 static const char * const pwm_meson8b_parent_names[] = {
diff --git a/drivers/pwm/pwm-microchip-core.c b/drivers/pwm/pwm-microchip-core.c
index e7525c98105e..c0c53968f3e9 100644
--- a/drivers/pwm/pwm-microchip-core.c
+++ b/drivers/pwm/pwm-microchip-core.c
@@ -435,7 +435,6 @@ static int mchp_core_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm
 static const struct pwm_ops mchp_core_pwm_ops = {
 	.apply = mchp_core_pwm_apply,
 	.get_state = mchp_core_pwm_get_state,
-	.owner = THIS_MODULE,
 };
 
 static const struct of_device_id mchp_core_of_match[] = {
diff --git a/drivers/pwm/pwm-mtk-disp.c b/drivers/pwm/pwm-mtk-disp.c
index a83bd6e18b07..7748e3eaa818 100644
--- a/drivers/pwm/pwm-mtk-disp.c
+++ b/drivers/pwm/pwm-mtk-disp.c
@@ -227,7 +227,6 @@ static int mtk_disp_pwm_get_state(struct pwm_chip *chip,
 static const struct pwm_ops mtk_disp_pwm_ops = {
 	.apply = mtk_disp_pwm_apply,
 	.get_state = mtk_disp_pwm_get_state,
-	.owner = THIS_MODULE,
 };
 
 static int mtk_disp_pwm_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-mxs.c b/drivers/pwm/pwm-mxs.c
index 766dbc58dad8..1b5e787d78f1 100644
--- a/drivers/pwm/pwm-mxs.c
+++ b/drivers/pwm/pwm-mxs.c
@@ -115,7 +115,6 @@ static int mxs_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 
 static const struct pwm_ops mxs_pwm_ops = {
 	.apply = mxs_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static int mxs_pwm_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-ntxec.c b/drivers/pwm/pwm-ntxec.c
index 7514ea384ec5..78606039eda2 100644
--- a/drivers/pwm/pwm-ntxec.c
+++ b/drivers/pwm/pwm-ntxec.c
@@ -126,7 +126,6 @@ static int ntxec_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm_dev,
 }
 
 static const struct pwm_ops ntxec_pwm_ops = {
-	.owner = THIS_MODULE,
 	.apply = ntxec_pwm_apply,
 	/*
 	 * No .get_state callback, because the current state cannot be read
diff --git a/drivers/pwm/pwm-omap-dmtimer.c b/drivers/pwm/pwm-omap-dmtimer.c
index 4889fbd8a431..40a46138ebbb 100644
--- a/drivers/pwm/pwm-omap-dmtimer.c
+++ b/drivers/pwm/pwm-omap-dmtimer.c
@@ -311,7 +311,6 @@ static int pwm_omap_dmtimer_apply(struct pwm_chip *chip,
 
 static const struct pwm_ops pwm_omap_dmtimer_ops = {
 	.apply = pwm_omap_dmtimer_apply,
-	.owner = THIS_MODULE,
 };
 
 static int pwm_omap_dmtimer_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-pca9685.c b/drivers/pwm/pwm-pca9685.c
index 3038a68412a7..e79b1de8c4d8 100644
--- a/drivers/pwm/pwm-pca9685.c
+++ b/drivers/pwm/pwm-pca9685.c
@@ -505,7 +505,6 @@ static const struct pwm_ops pca9685_pwm_ops = {
 	.get_state = pca9685_pwm_get_state,
 	.request = pca9685_pwm_request,
 	.free = pca9685_pwm_free,
-	.owner = THIS_MODULE,
 };
 
 static const struct regmap_config pca9685_regmap_i2c_config = {
diff --git a/drivers/pwm/pwm-pxa.c b/drivers/pwm/pwm-pxa.c
index 1e475ed10180..faf6b35b9336 100644
--- a/drivers/pwm/pwm-pxa.c
+++ b/drivers/pwm/pwm-pxa.c
@@ -135,7 +135,6 @@ static int pxa_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 
 static const struct pwm_ops pxa_pwm_ops = {
 	.apply = pxa_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 #ifdef CONFIG_OF
diff --git a/drivers/pwm/pwm-raspberrypi-poe.c b/drivers/pwm/pwm-raspberrypi-poe.c
index 2939b71a7ba7..1ad814fdec6b 100644
--- a/drivers/pwm/pwm-raspberrypi-poe.c
+++ b/drivers/pwm/pwm-raspberrypi-poe.c
@@ -135,7 +135,6 @@ static int raspberrypi_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 static const struct pwm_ops raspberrypi_pwm_ops = {
 	.get_state = raspberrypi_pwm_get_state,
 	.apply = raspberrypi_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static int raspberrypi_pwm_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-rcar.c b/drivers/pwm/pwm-rcar.c
index 5b5f357c44de..13269f55fccf 100644
--- a/drivers/pwm/pwm-rcar.c
+++ b/drivers/pwm/pwm-rcar.c
@@ -198,7 +198,6 @@ static const struct pwm_ops rcar_pwm_ops = {
 	.request = rcar_pwm_request,
 	.free = rcar_pwm_free,
 	.apply = rcar_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static int rcar_pwm_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-renesas-tpu.c b/drivers/pwm/pwm-renesas-tpu.c
index d7311614c846..1b004e01829a 100644
--- a/drivers/pwm/pwm-renesas-tpu.c
+++ b/drivers/pwm/pwm-renesas-tpu.c
@@ -431,7 +431,6 @@ static const struct pwm_ops tpu_pwm_ops = {
 	.request = tpu_pwm_request,
 	.free = tpu_pwm_free,
 	.apply = tpu_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 /* -----------------------------------------------------------------------------
diff --git a/drivers/pwm/pwm-rockchip.c b/drivers/pwm/pwm-rockchip.c
index 03ee18fb82d5..cce4381e188a 100644
--- a/drivers/pwm/pwm-rockchip.c
+++ b/drivers/pwm/pwm-rockchip.c
@@ -228,7 +228,6 @@ static int rockchip_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 static const struct pwm_ops rockchip_pwm_ops = {
 	.get_state = rockchip_pwm_get_state,
 	.apply = rockchip_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static const struct rockchip_pwm_data pwm_data_v1 = {
diff --git a/drivers/pwm/pwm-rz-mtu3.c b/drivers/pwm/pwm-rz-mtu3.c
index a56cecb0e46e..bdda315b3bd3 100644
--- a/drivers/pwm/pwm-rz-mtu3.c
+++ b/drivers/pwm/pwm-rz-mtu3.c
@@ -438,7 +438,6 @@ static const struct pwm_ops rz_mtu3_pwm_ops = {
 	.free = rz_mtu3_pwm_free,
 	.get_state = rz_mtu3_pwm_get_state,
 	.apply = rz_mtu3_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static int rz_mtu3_pwm_pm_runtime_suspend(struct device *dev)
diff --git a/drivers/pwm/pwm-samsung.c b/drivers/pwm/pwm-samsung.c
index e8828f57ab15..08a903257383 100644
--- a/drivers/pwm/pwm-samsung.c
+++ b/drivers/pwm/pwm-samsung.c
@@ -475,7 +475,6 @@ static const struct pwm_ops pwm_samsung_ops = {
 	.request	= pwm_samsung_request,
 	.free		= pwm_samsung_free,
 	.apply		= pwm_samsung_apply,
-	.owner		= THIS_MODULE,
 };
 
 #ifdef CONFIG_OF
diff --git a/drivers/pwm/pwm-sifive.c b/drivers/pwm/pwm-sifive.c
index eabddb7c7820..089e50bdbbf0 100644
--- a/drivers/pwm/pwm-sifive.c
+++ b/drivers/pwm/pwm-sifive.c
@@ -203,7 +203,6 @@ static const struct pwm_ops pwm_sifive_ops = {
 	.free = pwm_sifive_free,
 	.get_state = pwm_sifive_get_state,
 	.apply = pwm_sifive_apply,
-	.owner = THIS_MODULE,
 };
 
 static int pwm_sifive_clock_notifier(struct notifier_block *nb,
diff --git a/drivers/pwm/pwm-sl28cpld.c b/drivers/pwm/pwm-sl28cpld.c
index 9e42e3a74ad6..88b01ff9e460 100644
--- a/drivers/pwm/pwm-sl28cpld.c
+++ b/drivers/pwm/pwm-sl28cpld.c
@@ -200,7 +200,6 @@ static int sl28cpld_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 static const struct pwm_ops sl28cpld_pwm_ops = {
 	.apply = sl28cpld_pwm_apply,
 	.get_state = sl28cpld_pwm_get_state,
-	.owner = THIS_MODULE,
 };
 
 static int sl28cpld_pwm_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-spear.c b/drivers/pwm/pwm-spear.c
index 4e1cfd8d7c03..2cbc34cf6799 100644
--- a/drivers/pwm/pwm-spear.c
+++ b/drivers/pwm/pwm-spear.c
@@ -189,7 +189,6 @@ static int spear_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 
 static const struct pwm_ops spear_pwm_ops = {
 	.apply = spear_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static int spear_pwm_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-sprd.c b/drivers/pwm/pwm-sprd.c
index 1499c8c1fe37..dfda2152a7c1 100644
--- a/drivers/pwm/pwm-sprd.c
+++ b/drivers/pwm/pwm-sprd.c
@@ -210,7 +210,6 @@ static int sprd_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 static const struct pwm_ops sprd_pwm_ops = {
 	.apply = sprd_pwm_apply,
 	.get_state = sprd_pwm_get_state,
-	.owner = THIS_MODULE,
 };
 
 static int sprd_pwm_clk_init(struct sprd_pwm_chip *spc)
diff --git a/drivers/pwm/pwm-sti.c b/drivers/pwm/pwm-sti.c
index b1d1373648a3..5756f2e3b3c0 100644
--- a/drivers/pwm/pwm-sti.c
+++ b/drivers/pwm/pwm-sti.c
@@ -420,7 +420,6 @@ static const struct pwm_ops sti_pwm_ops = {
 	.capture = sti_pwm_capture,
 	.apply = sti_pwm_apply,
 	.free = sti_pwm_free,
-	.owner = THIS_MODULE,
 };
 
 static irqreturn_t sti_pwm_interrupt(int irq, void *data)
diff --git a/drivers/pwm/pwm-stm32-lp.c b/drivers/pwm/pwm-stm32-lp.c
index bb3a045a7334..b67974cc1872 100644
--- a/drivers/pwm/pwm-stm32-lp.c
+++ b/drivers/pwm/pwm-stm32-lp.c
@@ -189,7 +189,6 @@ static int stm32_pwm_lp_get_state(struct pwm_chip *chip,
 }
 
 static const struct pwm_ops stm32_pwm_lp_ops = {
-	.owner = THIS_MODULE,
 	.apply = stm32_pwm_lp_apply,
 	.get_state = stm32_pwm_lp_get_state,
 };
diff --git a/drivers/pwm/pwm-stm32.c b/drivers/pwm/pwm-stm32.c
index 3d6be7749e23..3303a754ea02 100644
--- a/drivers/pwm/pwm-stm32.c
+++ b/drivers/pwm/pwm-stm32.c
@@ -487,7 +487,6 @@ static int stm32_pwm_apply_locked(struct pwm_chip *chip, struct pwm_device *pwm,
 }
 
 static const struct pwm_ops stm32pwm_ops = {
-	.owner = THIS_MODULE,
 	.apply = stm32_pwm_apply_locked,
 	.capture = IS_ENABLED(CONFIG_DMA_ENGINE) ? stm32_pwm_capture : NULL,
 };
diff --git a/drivers/pwm/pwm-stmpe.c b/drivers/pwm/pwm-stmpe.c
index e205405c4828..a46f5b4dd816 100644
--- a/drivers/pwm/pwm-stmpe.c
+++ b/drivers/pwm/pwm-stmpe.c
@@ -287,7 +287,6 @@ static int stmpe_24xx_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 
 static const struct pwm_ops stmpe_24xx_pwm_ops = {
 	.apply = stmpe_24xx_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static int __init stmpe_pwm_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-sun4i.c b/drivers/pwm/pwm-sun4i.c
index c84fcf1a13dc..1a439025540d 100644
--- a/drivers/pwm/pwm-sun4i.c
+++ b/drivers/pwm/pwm-sun4i.c
@@ -325,7 +325,6 @@ static int sun4i_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 static const struct pwm_ops sun4i_pwm_ops = {
 	.apply = sun4i_pwm_apply,
 	.get_state = sun4i_pwm_get_state,
-	.owner = THIS_MODULE,
 };
 
 static const struct sun4i_pwm_data sun4i_pwm_dual_nobypass = {
diff --git a/drivers/pwm/pwm-sunplus.c b/drivers/pwm/pwm-sunplus.c
index 7705c7b86c3a..773e2f80526e 100644
--- a/drivers/pwm/pwm-sunplus.c
+++ b/drivers/pwm/pwm-sunplus.c
@@ -163,7 +163,6 @@ static int sunplus_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
 static const struct pwm_ops sunplus_pwm_ops = {
 	.apply = sunplus_pwm_apply,
 	.get_state = sunplus_pwm_get_state,
-	.owner = THIS_MODULE,
 };
 
 static void sunplus_pwm_clk_release(void *data)
diff --git a/drivers/pwm/pwm-tegra.c b/drivers/pwm/pwm-tegra.c
index a169a34e0778..39ea51e08c94 100644
--- a/drivers/pwm/pwm-tegra.c
+++ b/drivers/pwm/pwm-tegra.c
@@ -268,7 +268,6 @@ static int tegra_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 
 static const struct pwm_ops tegra_pwm_ops = {
 	.apply = tegra_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static int tegra_pwm_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-tiecap.c b/drivers/pwm/pwm-tiecap.c
index 8c94b266c1b2..11e3549cf103 100644
--- a/drivers/pwm/pwm-tiecap.c
+++ b/drivers/pwm/pwm-tiecap.c
@@ -205,7 +205,6 @@ static int ecap_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 
 static const struct pwm_ops ecap_pwm_ops = {
 	.apply = ecap_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static const struct of_device_id ecap_of_match[] = {
diff --git a/drivers/pwm/pwm-tiehrpwm.c b/drivers/pwm/pwm-tiehrpwm.c
index ecbfd7e954ec..66ac2655845f 100644
--- a/drivers/pwm/pwm-tiehrpwm.c
+++ b/drivers/pwm/pwm-tiehrpwm.c
@@ -437,7 +437,6 @@ static int ehrpwm_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 static const struct pwm_ops ehrpwm_pwm_ops = {
 	.free = ehrpwm_pwm_free,
 	.apply = ehrpwm_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static const struct of_device_id ehrpwm_of_match[] = {
diff --git a/drivers/pwm/pwm-twl-led.c b/drivers/pwm/pwm-twl-led.c
index 8fb84b441853..625233f4703a 100644
--- a/drivers/pwm/pwm-twl-led.c
+++ b/drivers/pwm/pwm-twl-led.c
@@ -189,7 +189,6 @@ static int twl4030_pwmled_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 
 static const struct pwm_ops twl4030_pwmled_ops = {
 	.apply = twl4030_pwmled_apply,
-	.owner = THIS_MODULE,
 };
 
 static int twl6030_pwmled_config(struct pwm_chip *chip, struct pwm_device *pwm,
@@ -342,7 +341,6 @@ static const struct pwm_ops twl6030_pwmled_ops = {
 	.apply = twl6030_pwmled_apply,
 	.request = twl6030_pwmled_request,
 	.free = twl6030_pwmled_free,
-	.owner = THIS_MODULE,
 };
 
 static int twl_pwmled_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-twl.c b/drivers/pwm/pwm-twl.c
index 86567add79db..603d31f27470 100644
--- a/drivers/pwm/pwm-twl.c
+++ b/drivers/pwm/pwm-twl.c
@@ -333,12 +333,10 @@ static const struct pwm_ops twl4030_pwm_ops = {
 	.apply = twl4030_pwm_apply,
 	.request = twl4030_pwm_request,
 	.free = twl4030_pwm_free,
-	.owner = THIS_MODULE,
 };
 
 static const struct pwm_ops twl6030_pwm_ops = {
 	.apply = twl6030_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static int twl_pwm_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-visconti.c b/drivers/pwm/pwm-visconti.c
index 7f7591a2384c..8d736d558122 100644
--- a/drivers/pwm/pwm-visconti.c
+++ b/drivers/pwm/pwm-visconti.c
@@ -129,7 +129,6 @@ static int visconti_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
 static const struct pwm_ops visconti_pwm_ops = {
 	.apply = visconti_pwm_apply,
 	.get_state = visconti_pwm_get_state,
-	.owner = THIS_MODULE,
 };
 
 static int visconti_pwm_probe(struct platform_device *pdev)
diff --git a/drivers/pwm/pwm-vt8500.c b/drivers/pwm/pwm-vt8500.c
index 6d46db51daac..a96c7f5d9099 100644
--- a/drivers/pwm/pwm-vt8500.c
+++ b/drivers/pwm/pwm-vt8500.c
@@ -221,7 +221,6 @@ static int vt8500_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 
 static const struct pwm_ops vt8500_pwm_ops = {
 	.apply = vt8500_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static const struct of_device_id vt8500_pwm_dt_ids[] = {
diff --git a/drivers/pwm/pwm-xilinx.c b/drivers/pwm/pwm-xilinx.c
index 85153ee90809..5f3c2a6fed11 100644
--- a/drivers/pwm/pwm-xilinx.c
+++ b/drivers/pwm/pwm-xilinx.c
@@ -198,7 +198,6 @@ static int xilinx_pwm_get_state(struct pwm_chip *chip,
 static const struct pwm_ops xilinx_pwm_ops = {
 	.apply = xilinx_pwm_apply,
 	.get_state = xilinx_pwm_get_state,
-	.owner = THIS_MODULE,
 };
 
 static const struct regmap_config xilinx_pwm_regmap_config = {
diff --git a/drivers/staging/greybus/pwm.c b/drivers/staging/greybus/pwm.c
index c483e1f0738e..4fdff84ec2e7 100644
--- a/drivers/staging/greybus/pwm.c
+++ b/drivers/staging/greybus/pwm.c
@@ -259,7 +259,6 @@ static const struct pwm_ops gb_pwm_ops = {
 	.request = gb_pwm_request,
 	.free = gb_pwm_free,
 	.apply = gb_pwm_apply,
-	.owner = THIS_MODULE,
 };
 
 static int gb_pwm_probe(struct gbphy_device *gbphy_dev,
diff --git a/include/linux/pwm.h b/include/linux/pwm.h
index d2f9f690a9c1..56e3b7a09824 100644
--- a/include/linux/pwm.h
+++ b/include/linux/pwm.h
@@ -267,7 +267,6 @@ struct pwm_capture {
  * @get_state: get the current PWM state. This function is only
  *	       called once per PWM device when the PWM chip is
  *	       registered.
- * @owner: helps prevent removal of modules exporting active PWMs
  */
 struct pwm_ops {
 	int (*request)(struct pwm_chip *chip, struct pwm_device *pwm);
@@ -278,13 +277,13 @@ struct pwm_ops {
 		     const struct pwm_state *state);
 	int (*get_state)(struct pwm_chip *chip, struct pwm_device *pwm,
 			 struct pwm_state *state);
-	struct module *owner;
 };
 
 /**
  * struct pwm_chip - abstract a PWM controller
  * @dev: device providing the PWMs
  * @ops: callbacks for this PWM controller
+ * @owner: module providing this chip
  * @base: number of first PWM controlled by this chip
  * @npwm: number of PWMs controlled by this chip
  * @of_xlate: request a PWM device given a device tree PWM specifier
@@ -295,6 +294,7 @@ struct pwm_ops {
 struct pwm_chip {
 	struct device *dev;
 	const struct pwm_ops *ops;
+	struct module *owner;
 	int base;
 	unsigned int npwm;
 
@@ -386,10 +386,12 @@ int pwm_capture(struct pwm_device *pwm, struct pwm_capture *result,
 int pwm_set_chip_data(struct pwm_device *pwm, void *data);
 void *pwm_get_chip_data(struct pwm_device *pwm);
 
-int pwmchip_add(struct pwm_chip *chip);
+int __pwmchip_add(struct pwm_chip *chip, struct module *owner);
+#define pwmchip_add(chip) __pwmchip_add(chip, THIS_MODULE)
 void pwmchip_remove(struct pwm_chip *chip);
 
-int devm_pwmchip_add(struct device *dev, struct pwm_chip *chip);
+int __devm_pwmchip_add(struct device *dev, struct pwm_chip *chip, struct module *owner);
+#define devm_pwmchip_add(dev, chip) __devm_pwmchip_add(dev, chip, THIS_MODULE)
 
 struct pwm_device *pwm_request_from_chip(struct pwm_chip *chip,
 					 unsigned int index,
-- 
2.40.1


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

* Re: [PATCH v2 1/2] pwm: Manage owner assignment implicitly for drivers
  2023-08-04 14:27 ` [PATCH v2 1/2] " Uwe Kleine-König
@ 2023-08-04 18:51   ` Andy Shevchenko
  2023-08-04 18:56   ` Florian Fainelli
                     ` (6 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Andy Shevchenko @ 2023-08-04 18:51 UTC (permalink / raw)
  To: Uwe Kleine-König
  Cc: dri-devel, Conor Dooley, Pavel Machek, Nobuhiro Iwamatsu,
	linux-stm32, Jerome Brunet, linux-samsung-soc, Robert Foss,
	Samuel Holland, Sean Anderson, Kevin Hilman, Hammer Hsieh,
	NXP Linux Team, linux-sunxi, Sascha Hauer, Andy Shevchenko,
	Alex Elder, Scott Branden, Daire McNamara, Greg Kroah-Hartman,
	Michael Walle, Pengutronix Kernel Team, Claudiu Beznea,
	Alexandre Belloni, Alim Akhtar, Thierry Reding, Guenter Roeck,
	chrome-platform, Bjorn Andersson, Chunyan Zhang,
	Bartosz Golaszewski, Lee Jones, Jonathan Hunter, linux-rockchip,
	Martin Blumenstingl, linux-gpio, Fabrice Gasnier,
	linux-rpi-kernel, linux-amlogic, Michal Simek, linux-arm-kernel,
	Neil Armstrong, greybus-dev, Hector Martin, Douglas Anderson,
	Maxime Coquelin, Matthias Brugger, Laurent Pinchart,
	Andrzej Hajda, Alyssa Rosenzweig, Alexander Shiyan, linux-staging,
	Jernej Skrabec, Luca Weiss, Chen-Yu Tsai,
	Broadcom internal kernel review list, Orson Zhai, linux-pwm,
	Jonas Karlman, Ray Jui, Jonathan Neuschäfer,
	Vladimir Zapolskiy, Baolin Wang, asahi, Shawn Guo,
	Anjelique Melendez, Alexandre Torgue, linux-mips, Paul Cercueil,
	linux-riscv, linux-leds, Florian Fainelli, Sven Peter,
	Johan Hovold, linux-mediatek, Paul Walmsley, linux-tegra,
	AngeloGioacchino Del Regno, Nicolas Ferre, Krzysztof Kozlowski,
	Palmer Dabbelt, Dmitry Baryshkov

On Fri, Aug 4, 2023 at 5:28 PM Uwe Kleine-König
<u.kleine-koenig@pengutronix.de> wrote:
>
> Instead of requiring each driver to care for assigning the owner member
> of struct pwm_ops, handle that implicitly using a macro. Note that the
> owner member has to be moved to struct pwm_chip, as the ops structure
> usually lives in read-only memory and so cannot be modified.
>
> The upside is that new lowlevel drivers cannot forget the assignment and

low level

> save one line each. The pwm-crc driver didn't assign .owner, that's not
> a problem in practise though as the driver cannot be compiled as a
> module.

...

>  drivers/pwm/pwm-lpss.c                |  1 -

Acked-by: Andy Shevchenko <andy.shevchenko@gmail.com> # Intel LPSS

-- 
With Best Regards,
Andy Shevchenko

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

* Re: [PATCH v2 1/2] pwm: Manage owner assignment implicitly for drivers
  2023-08-04 14:27 ` [PATCH v2 1/2] " Uwe Kleine-König
  2023-08-04 18:51   ` Andy Shevchenko
@ 2023-08-04 18:56   ` Florian Fainelli
  2023-08-04 19:06   ` Jernej Škrabec
                     ` (5 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Florian Fainelli @ 2023-08-04 18:56 UTC (permalink / raw)
  To: Uwe Kleine-König, Thierry Reding, Laurent Pinchart
  Cc: Alexandre Belloni, linux-staging, Andrzej Hajda,
	Greg Kroah-Hartman, Alexandre Torgue, Johan Hovold, Nicolas Ferre,
	Paul Cercueil, linux-tegra, Conor Dooley, Pavel Machek,
	linux-amlogic, Guenter Roeck, chrome-platform, Nobuhiro Iwamatsu,
	Michal Simek, linux-riscv, Alyssa Rosenzweig, Jerome Brunet,
	Luca Weiss, linux-samsung-soc, Robert Foss, linux-stm32,
	Alexander Shiyan, Samuel Holland, Sean Anderson,
	Bartosz Golaszewski, Lee Jones, Michael Walle, Jernej Skrabec,
	Jonathan Hunter, Hammer Hsieh, linux-rockchip, Chen-Yu Tsai,
	Broadcom internal kernel review list, NXP Linux Team, linux-leds,
	Orson Zhai, Alim Akhtar, linux-mips, linux-sunxi, Maxime Coquelin,
	linux-pwm, Pengutronix Kernel Team, Jonas Karlman,
	Martin Blumenstingl, Ray Jui, Sascha Hauer,
	Jonathan Neuschäfer, Vladimir Zapolskiy, linux-gpio,
	Fabrice Gasnier, linux-mediatek, dri-devel, Sven Peter,
	Paul Walmsley, Matthias Brugger, Bjorn Andersson,
	linux-arm-kernel, AngeloGioacchino Del Regno, Andy Shevchenko,
	Neil Armstrong, Alex Elder, Baolin Wang, Scott Branden,
	greybus-dev, Daire McNamara, Chunyan Zhang, Hector Martin,
	Douglas Anderson, Krzysztof Kozlowski, Palmer Dabbelt, asahi,
	Kevin Hilman, Dmitry Baryshkov, Shawn Guo, Claudiu Beznea,
	Anjelique Melendez, linux-rpi-kernel

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

On 8/4/23 07:27, Uwe Kleine-König wrote:
> Instead of requiring each driver to care for assigning the owner member
> of struct pwm_ops, handle that implicitly using a macro. Note that the
> owner member has to be moved to struct pwm_chip, as the ops structure
> usually lives in read-only memory and so cannot be modified.
> 
> The upside is that new lowlevel drivers cannot forget the assignment and
> save one line each. The pwm-crc driver didn't assign .owner, that's not
> a problem in practise though as the driver cannot be compiled as a
> module.
> 
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> > ---

>   drivers/pwm/pwm-bcm-iproc.c           |  1 -
>   drivers/pwm/pwm-bcm-kona.c            |  1 -
>   drivers/pwm/pwm-bcm2835.c             |  1 -
>   drivers/pwm/pwm-brcmstb.c             |  1 -

Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com> # 
pwm-{bcm,brcm}*.c
-- 
Florian


[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4221 bytes --]

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

* Re: [PATCH v2 1/2] pwm: Manage owner assignment implicitly for drivers
  2023-08-04 14:27 ` [PATCH v2 1/2] " Uwe Kleine-König
  2023-08-04 18:51   ` Andy Shevchenko
  2023-08-04 18:56   ` Florian Fainelli
@ 2023-08-04 19:06   ` Jernej Škrabec
  2023-08-05 20:36   ` Andi Shyti
                     ` (4 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Jernej Škrabec @ 2023-08-04 19:06 UTC (permalink / raw)
  To: Thierry Reding, Laurent Pinchart, Uwe Kleine-König
  Cc: Alexandre Belloni, linux-staging, Andrzej Hajda,
	Greg Kroah-Hartman, Alexandre Torgue, Johan Hovold, Nicolas Ferre,
	Paul Cercueil, linux-tegra, Conor Dooley, Pavel Machek,
	linux-amlogic, Guenter Roeck, chrome-platform, Nobuhiro Iwamatsu,
	Michal Simek, linux-riscv, Alyssa Rosenzweig, Jerome Brunet,
	Luca Weiss, linux-samsung-soc, Robert Foss, linux-stm32,
	Florian Fainelli, Samuel Holland, Sean Anderson,
	Bartosz Golaszewski, Lee Jones, Michael Walle, Jonathan Hunter,
	Hammer Hsieh, linux-rockchip, Chen-Yu Tsai,
	Broadcom internal kernel review list, NXP Linux Team, linux-leds,
	Orson Zhai, Alim Akhtar, linux-mips, linux-sunxi, Maxime Coquelin,
	linux-pwm, Pengutronix Kernel Team, Jonas Karlman,
	Martin Blumenstingl, Ray Jui, Sascha Hauer,
	Jonathan Neuschäfer, Vladimir Zapolskiy, linux-gpio,
	Fabrice Gasnier, linux-mediatek, Baolin Wang, Sven Peter,
	Paul Walmsley, Matthias Brugger, Bjorn Andersson,
	linux-arm-kernel, AngeloGioacchino Del Regno, Andy Shevchenko,
	Neil Armstrong, Alex Elder, Alexander Shiyan, Scott Branden,
	greybus-dev, Daire McNamara, Chunyan Zhang, dri-devel,
	Hector Martin, Douglas Anderson, Krzysztof Kozlowski,
	Palmer Dabbelt, asahi, Kevin Hilman, Dmitry Baryshkov, Shawn Guo,
	Claudiu Beznea, Anjelique Melendez, linux-rpi-kernel

Dne petek, 04. avgust 2023 ob 16:27:06 CEST je Uwe Kleine-König napisal(a):
> Instead of requiring each driver to care for assigning the owner member
> of struct pwm_ops, handle that implicitly using a macro. Note that the
> owner member has to be moved to struct pwm_chip, as the ops structure
> usually lives in read-only memory and so cannot be modified.
> 
> The upside is that new lowlevel drivers cannot forget the assignment and
> save one line each. The pwm-crc driver didn't assign .owner, that's not
> a problem in practise though as the driver cannot be compiled as a
> module.
> 
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
> ---
>  drivers/gpio/gpio-mvebu.c             |  1 -
>  drivers/gpu/drm/bridge/ti-sn65dsi86.c |  1 -
>  drivers/leds/rgb/leds-qcom-lpg.c      |  1 -
>  drivers/pwm/core.c                    | 24 ++++++++++++++----------
>  drivers/pwm/pwm-ab8500.c              |  1 -
>  drivers/pwm/pwm-apple.c               |  1 -
>  drivers/pwm/pwm-atmel-hlcdc.c         |  1 -
>  drivers/pwm/pwm-atmel-tcb.c           |  1 -
>  drivers/pwm/pwm-atmel.c               |  1 -
>  drivers/pwm/pwm-bcm-iproc.c           |  1 -
>  drivers/pwm/pwm-bcm-kona.c            |  1 -
>  drivers/pwm/pwm-bcm2835.c             |  1 -
>  drivers/pwm/pwm-berlin.c              |  1 -
>  drivers/pwm/pwm-brcmstb.c             |  1 -
>  drivers/pwm/pwm-clk.c                 |  1 -
>  drivers/pwm/pwm-clps711x.c            |  1 -
>  drivers/pwm/pwm-cros-ec.c             |  1 -
>  drivers/pwm/pwm-dwc.c                 |  1 -
>  drivers/pwm/pwm-ep93xx.c              |  1 -
>  drivers/pwm/pwm-fsl-ftm.c             |  1 -
>  drivers/pwm/pwm-hibvt.c               |  1 -
>  drivers/pwm/pwm-img.c                 |  1 -
>  drivers/pwm/pwm-imx-tpm.c             |  1 -
>  drivers/pwm/pwm-imx1.c                |  1 -
>  drivers/pwm/pwm-imx27.c               |  1 -
>  drivers/pwm/pwm-intel-lgm.c           |  1 -
>  drivers/pwm/pwm-iqs620a.c             |  1 -
>  drivers/pwm/pwm-jz4740.c              |  1 -
>  drivers/pwm/pwm-keembay.c             |  1 -
>  drivers/pwm/pwm-lp3943.c              |  1 -
>  drivers/pwm/pwm-lpc18xx-sct.c         |  1 -
>  drivers/pwm/pwm-lpc32xx.c             |  1 -
>  drivers/pwm/pwm-lpss.c                |  1 -
>  drivers/pwm/pwm-mediatek.c            |  1 -
>  drivers/pwm/pwm-meson.c               |  1 -
>  drivers/pwm/pwm-microchip-core.c      |  1 -
>  drivers/pwm/pwm-mtk-disp.c            |  1 -
>  drivers/pwm/pwm-mxs.c                 |  1 -
>  drivers/pwm/pwm-ntxec.c               |  1 -
>  drivers/pwm/pwm-omap-dmtimer.c        |  1 -
>  drivers/pwm/pwm-pca9685.c             |  1 -
>  drivers/pwm/pwm-pxa.c                 |  1 -
>  drivers/pwm/pwm-raspberrypi-poe.c     |  1 -
>  drivers/pwm/pwm-rcar.c                |  1 -
>  drivers/pwm/pwm-renesas-tpu.c         |  1 -
>  drivers/pwm/pwm-rockchip.c            |  1 -
>  drivers/pwm/pwm-rz-mtu3.c             |  1 -
>  drivers/pwm/pwm-samsung.c             |  1 -
>  drivers/pwm/pwm-sifive.c              |  1 -
>  drivers/pwm/pwm-sl28cpld.c            |  1 -
>  drivers/pwm/pwm-spear.c               |  1 -
>  drivers/pwm/pwm-sprd.c                |  1 -
>  drivers/pwm/pwm-sti.c                 |  1 -
>  drivers/pwm/pwm-stm32-lp.c            |  1 -
>  drivers/pwm/pwm-stm32.c               |  1 -
>  drivers/pwm/pwm-stmpe.c               |  1 -
>  drivers/pwm/pwm-sun4i.c               |  1 -

For sun4i:
Acked-by: Jernej Skrabec <jernej.skrabec@gmail.com>

Best regards,
Jernej

>  drivers/pwm/pwm-sunplus.c             |  1 -
>  drivers/pwm/pwm-tegra.c               |  1 -
>  drivers/pwm/pwm-tiecap.c              |  1 -
>  drivers/pwm/pwm-tiehrpwm.c            |  1 -
>  drivers/pwm/pwm-twl-led.c             |  2 --
>  drivers/pwm/pwm-twl.c                 |  2 --
>  drivers/pwm/pwm-visconti.c            |  1 -
>  drivers/pwm/pwm-vt8500.c              |  1 -
>  drivers/pwm/pwm-xilinx.c              |  1 -
>  drivers/staging/greybus/pwm.c         |  1 -
>  include/linux/pwm.h                   | 10 ++++++----




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

* Re: [PATCH v2 1/2] pwm: Manage owner assignment implicitly for drivers
  2023-08-04 14:27 ` [PATCH v2 1/2] " Uwe Kleine-König
                     ` (2 preceding siblings ...)
  2023-08-04 19:06   ` Jernej Škrabec
@ 2023-08-05 20:36   ` Andi Shyti
  2023-08-07  0:46   ` nobuhiro1.iwamatsu
                     ` (3 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Andi Shyti @ 2023-08-05 20:36 UTC (permalink / raw)
  To: Uwe Kleine-König
  Cc: dri-devel, Conor Dooley, Pavel Machek, Nobuhiro Iwamatsu,
	linux-stm32, Jerome Brunet, linux-samsung-soc, Robert Foss,
	Samuel Holland, Sean Anderson, Kevin Hilman, Hammer Hsieh,
	NXP Linux Team, linux-sunxi, Sascha Hauer, Andy Shevchenko,
	Alex Elder, Scott Branden, Daire McNamara, Greg Kroah-Hartman,
	Michael Walle, Pengutronix Kernel Team, Claudiu Beznea,
	Alexandre Belloni, Alim Akhtar, Thierry Reding, Guenter Roeck,
	chrome-platform, Bjorn Andersson, Chunyan Zhang,
	Bartosz Golaszewski, Lee Jones, Jonathan Hunter, linux-rockchip,
	Martin Blumenstingl, linux-gpio, Fabrice Gasnier,
	linux-rpi-kernel, linux-amlogic, Michal Simek, linux-arm-kernel,
	Neil Armstrong, greybus-dev, Hector Martin, Douglas Anderson,
	Maxime Coquelin, Matthias Brugger, Laurent Pinchart,
	Andrzej Hajda, Alyssa Rosenzweig, Alexander Shiyan, linux-staging,
	Jernej Skrabec, Luca Weiss, Chen-Yu Tsai,
	Broadcom internal kernel review list, Orson Zhai, linux-pwm,
	Jonas Karlman, Ray Jui, Jonathan Neuschäfer,
	Vladimir Zapolskiy, Baolin Wang, asahi, Shawn Guo,
	Anjelique Melendez, Alexandre Torgue, linux-mips, Paul Cercueil,
	linux-riscv, linux-leds, Florian Fainelli, Sven Peter,
	Johan Hovold, linux-mediatek, Paul Walmsley, linux-tegra,
	AngeloGioacchino Del Regno, Nicolas Ferre, Krzysztof Kozlowski,
	Palmer Dabbelt, Dmitry Baryshkov

Hi Uwe,

On Fri, Aug 04, 2023 at 04:27:06PM +0200, Uwe Kleine-König wrote:
> Instead of requiring each driver to care for assigning the owner member
> of struct pwm_ops, handle that implicitly using a macro. Note that the
> owner member has to be moved to struct pwm_chip, as the ops structure
> usually lives in read-only memory and so cannot be modified.
> 
> The upside is that new lowlevel drivers cannot forget the assignment and
> save one line each. The pwm-crc driver didn't assign .owner, that's not
> a problem in practise though as the driver cannot be compiled as a

/practise/practice/

> module.
> 
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>

Acked-by: Andi Shyti <andi.shyti@kernel.org> 

Thanks,
Andi

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

* RE: [PATCH v2 1/2] pwm: Manage owner assignment implicitly for drivers
  2023-08-04 14:27 ` [PATCH v2 1/2] " Uwe Kleine-König
                     ` (3 preceding siblings ...)
  2023-08-05 20:36   ` Andi Shyti
@ 2023-08-07  0:46   ` nobuhiro1.iwamatsu
  2023-08-09 12:29   ` Heiko Stuebner
                     ` (2 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: nobuhiro1.iwamatsu @ 2023-08-07  0:46 UTC (permalink / raw)
  To: u.kleine-koenig, thierry.reding, Laurent.pinchart
  Cc: alexandre.belloni, linux-staging, andrzej.hajda, gregkh,
	alexandre.torgue, dri-devel, nicolas.ferre, paul, linux-tegra,
	conor.dooley, pavel, linux-amlogic, groeck, chrome-platform,
	johan, michal.simek, linux-riscv, alyssa, jbrunet, luca,
	linux-samsung-soc, rfoss, linux-stm32, florian.fainelli, samuel,
	sean.anderson, brgl, lee, michael, jernej.skrabec, jonathanh,
	hammerh0314, linux-rockchip, wens, bcm-kernel-feedback-list,
	linux-imx, linux-leds, orsonzhai, alim.akhtar, linux-mips,
	linux-sunxi, mcoquelin.stm32, linux-pwm, kernel, jonas,
	martin.blumenstingl, rjui, s.hauer, j.neuschaefer, vz, linux-gpio,
	fabrice.gasnier, linux-mediatek, baolin.wang, sven, paul.walmsley,
	matthias.bgg, quic_bjorande, linux-arm-kernel,
	angelogioacchino.delregno, andy, neil.armstrong, elder, shc_work,
	sbranden, greybus-dev, daire.mcnamara, zhang.lyra, marcan,
	dianders, krzysztof.kozlowski, palmer, asahi, khilman,
	dmitry.baryshkov, shawnguo, claudiu.beznea, quic_amelende,
	linux-rpi-kernel

Hi Uwe,

> -----Original Message-----
> From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
> Sent: Friday, August 4, 2023 11:27 PM
> To: Thierry Reding <thierry.reding@gmail.com>; Laurent Pinchart
> <Laurent.pinchart@ideasonboard.com>
> Cc: Linus Walleij <linus.walleij@linaro.org>; Bartosz Golaszewski
> <brgl@bgdev.pl>; Andy Shevchenko <andy@kernel.org>; Douglas Anderson
> <dianders@chromium.org>; Andrzej Hajda <andrzej.hajda@intel.com>; Neil
> Armstrong <neil.armstrong@linaro.org>; Robert Foss <rfoss@kernel.org>;
> Jonas Karlman <jonas@kwiboo.se>; Jernej Skrabec
> <jernej.skrabec@gmail.com>; David Airlie <airlied@gmail.com>; Daniel Vetter
> <daniel@ffwll.ch>; Pavel Machek <pavel@ucw.cz>; Lee Jones
> <lee@kernel.org>; Hector Martin <marcan@marcan.st>; Sven Peter
> <sven@svenpeter.dev>; Alyssa Rosenzweig <alyssa@rosenzweig.io>; Nicolas
> Ferre <nicolas.ferre@microchip.com>; Alexandre Belloni
> <alexandre.belloni@bootlin.com>; Claudiu Beznea
> <claudiu.beznea@microchip.com>; Ray Jui <rjui@broadcom.com>; Scott
> Branden <sbranden@broadcom.com>; Broadcom internal kernel review list
> <bcm-kernel-feedback-list@broadcom.com>; Florian Fainelli
> <florian.fainelli@broadcom.com>; Alexander Shiyan <shc_work@mail.ru>;
> Benson Leung <bleung@chromium.org>; Guenter Roeck
> <groeck@chromium.org>; Shawn Guo <shawnguo@kernel.org>; Sascha
> Hauer <s.hauer@pengutronix.de>; Pengutronix Kernel Team
> <kernel@pengutronix.de>; Fabio Estevam <festevam@gmail.com>; NXP
> Linux Team <linux-imx@nxp.com>; Paul Cercueil <paul@crapouillou.net>;
> Vladimir Zapolskiy <vz@mleia.com>; Kevin Hilman <khilman@baylibre.com>;
> Jerome Brunet <jbrunet@baylibre.com>; Martin Blumenstingl
> <martin.blumenstingl@googlemail.com>; Conor Dooley
> <conor.dooley@microchip.com>; Daire McNamara
> <daire.mcnamara@microchip.com>; Matthias Brugger
> <matthias.bgg@gmail.com>; AngeloGioacchino Del Regno
> <angelogioacchino.delregno@collabora.com>; Jonathan Neuschäfer
> <j.neuschaefer@gmx.net>; Heiko Stuebner <heiko@sntech.de>; Krzysztof
> Kozlowski <krzysztof.kozlowski@linaro.org>; Alim Akhtar
> <alim.akhtar@samsung.com>; Palmer Dabbelt <palmer@dabbelt.com>; Paul
> Walmsley <paul.walmsley@sifive.com>; Michael Walle <michael@walle.cc>;
> Orson Zhai <orsonzhai@gmail.com>; Baolin Wang
> <baolin.wang@linux.alibaba.com>; Chunyan Zhang
> <zhang.lyra@gmail.com>; Fabrice Gasnier <fabrice.gasnier@foss.st.com>;
> Maxime Coquelin <mcoquelin.stm32@gmail.com>; Alexandre Torgue
> <alexandre.torgue@foss.st.com>; Chen-Yu Tsai <wens@csie.org>; Samuel
> Holland <samuel@sholland.org>; Hammer Hsieh
> <hammerh0314@gmail.com>; Jonathan Hunter <jonathanh@nvidia.com>;
> iwamatsu nobuhiro(岩松 信洋 ○DITC□DIT○OST)
> <nobuhiro1.iwamatsu@toshiba.co.jp>; Sean Anderson
> <sean.anderson@seco.com>; Michal Simek <michal.simek@amd.com>;
> Johan Hovold <johan@kernel.org>; Alex Elder <elder@kernel.org>; Greg
> Kroah-Hartman <gregkh@linuxfoundation.org>; Anjelique Melendez
> <quic_amelende@quicinc.com>; Dmitry Baryshkov
> <dmitry.baryshkov@linaro.org>; Luca Weiss <luca@z3ntu.xyz>; Bjorn
> Andersson <quic_bjorande@quicinc.com>; linux-pwm@vger.kernel.org;
> linux-gpio@vger.kernel.org; dri-devel@lists.freedesktop.org;
> linux-leds@vger.kernel.org; asahi@lists.linux.dev;
> linux-arm-kernel@lists.infradead.org; linux-rpi-kernel@lists.infradead.org;
> chrome-platform@lists.linux.dev; linux-mips@vger.kernel.org;
> linux-amlogic@lists.infradead.org; linux-riscv@lists.infradead.org;
> linux-mediatek@lists.infradead.org; linux-rockchip@lists.infradead.org;
> linux-samsung-soc@vger.kernel.org;
> linux-stm32@st-md-mailman.stormreply.com; linux-sunxi@lists.linux.dev;
> linux-tegra@vger.kernel.org; greybus-dev@lists.linaro.org;
> linux-staging@lists.linux.dev
> Subject: [PATCH v2 1/2] pwm: Manage owner assignment implicitly for drivers
> 
> Instead of requiring each driver to care for assigning the owner member of
> struct pwm_ops, handle that implicitly using a macro. Note that the owner
> member has to be moved to struct pwm_chip, as the ops structure usually lives
> in read-only memory and so cannot be modified.
> 
> The upside is that new lowlevel drivers cannot forget the assignment and save
> one line each. The pwm-crc driver didn't assign .owner, that's not a problem in
> practise though as the driver cannot be compiled as a module.
> 
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
> ---
>  drivers/gpio/gpio-mvebu.c             |  1 -
>  drivers/gpu/drm/bridge/ti-sn65dsi86.c |  1 -
>  drivers/leds/rgb/leds-qcom-lpg.c      |  1 -
>  drivers/pwm/core.c                    | 24
> ++++++++++++++----------
>  drivers/pwm/pwm-ab8500.c              |  1 -
>  drivers/pwm/pwm-apple.c               |  1 -
>  drivers/pwm/pwm-atmel-hlcdc.c         |  1 -
>  drivers/pwm/pwm-atmel-tcb.c           |  1 -
>  drivers/pwm/pwm-atmel.c               |  1 -
>  drivers/pwm/pwm-bcm-iproc.c           |  1 -
>  drivers/pwm/pwm-bcm-kona.c            |  1 -
>  drivers/pwm/pwm-bcm2835.c             |  1 -
>  drivers/pwm/pwm-berlin.c              |  1 -
>  drivers/pwm/pwm-brcmstb.c             |  1 -
>  drivers/pwm/pwm-clk.c                 |  1 -
>  drivers/pwm/pwm-clps711x.c            |  1 -
>  drivers/pwm/pwm-cros-ec.c             |  1 -
>  drivers/pwm/pwm-dwc.c                 |  1 -
>  drivers/pwm/pwm-ep93xx.c              |  1 -
>  drivers/pwm/pwm-fsl-ftm.c             |  1 -
>  drivers/pwm/pwm-hibvt.c               |  1 -
>  drivers/pwm/pwm-img.c                 |  1 -
>  drivers/pwm/pwm-imx-tpm.c             |  1 -
>  drivers/pwm/pwm-imx1.c                |  1 -
>  drivers/pwm/pwm-imx27.c               |  1 -
>  drivers/pwm/pwm-intel-lgm.c           |  1 -
>  drivers/pwm/pwm-iqs620a.c             |  1 -
>  drivers/pwm/pwm-jz4740.c              |  1 -
>  drivers/pwm/pwm-keembay.c             |  1 -
>  drivers/pwm/pwm-lp3943.c              |  1 -
>  drivers/pwm/pwm-lpc18xx-sct.c         |  1 -
>  drivers/pwm/pwm-lpc32xx.c             |  1 -
>  drivers/pwm/pwm-lpss.c                |  1 -
>  drivers/pwm/pwm-mediatek.c            |  1 -
>  drivers/pwm/pwm-meson.c               |  1 -
>  drivers/pwm/pwm-microchip-core.c      |  1 -
>  drivers/pwm/pwm-mtk-disp.c            |  1 -
>  drivers/pwm/pwm-mxs.c                 |  1 -
>  drivers/pwm/pwm-ntxec.c               |  1 -
>  drivers/pwm/pwm-omap-dmtimer.c        |  1 -
>  drivers/pwm/pwm-pca9685.c             |  1 -
>  drivers/pwm/pwm-pxa.c                 |  1 -
>  drivers/pwm/pwm-raspberrypi-poe.c     |  1 -
>  drivers/pwm/pwm-rcar.c                |  1 -
>  drivers/pwm/pwm-renesas-tpu.c         |  1 -
>  drivers/pwm/pwm-rockchip.c            |  1 -
>  drivers/pwm/pwm-rz-mtu3.c             |  1 -
>  drivers/pwm/pwm-samsung.c             |  1 -
>  drivers/pwm/pwm-sifive.c              |  1 -
>  drivers/pwm/pwm-sl28cpld.c            |  1 -
>  drivers/pwm/pwm-spear.c               |  1 -
>  drivers/pwm/pwm-sprd.c                |  1 -
>  drivers/pwm/pwm-sti.c                 |  1 -
>  drivers/pwm/pwm-stm32-lp.c            |  1 -
>  drivers/pwm/pwm-stm32.c               |  1 -
>  drivers/pwm/pwm-stmpe.c               |  1 -
>  drivers/pwm/pwm-sun4i.c               |  1 -
>  drivers/pwm/pwm-sunplus.c             |  1 -
>  drivers/pwm/pwm-tegra.c               |  1 -
>  drivers/pwm/pwm-tiecap.c              |  1 -
>  drivers/pwm/pwm-tiehrpwm.c            |  1 -
>  drivers/pwm/pwm-twl-led.c             |  2 --
>  drivers/pwm/pwm-twl.c                 |  2 --
>  drivers/pwm/pwm-visconti.c            |  1 -

For Visconti:
Acked-by: Nobuhiro Iwamatsu <nobuhiro1.iwamatsu@toshiba.co.jp >

Best regards,
  Nobuhiro


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

* Re: [PATCH v2 0/2] pwm: Manage owner assignment implicitly for drivers
  2023-08-04 14:27 [PATCH v2 0/2] pwm: Manage owner assignment implicitly for drivers Uwe Kleine-König
  2023-08-04 14:27 ` [PATCH v2 1/2] " Uwe Kleine-König
@ 2023-08-08 13:18 ` Linus Walleij
  1 sibling, 0 replies; 11+ messages in thread
From: Linus Walleij @ 2023-08-08 13:18 UTC (permalink / raw)
  To: Uwe Kleine-König
  Cc: dri-devel, Conor Dooley, Pavel Machek, Nobuhiro Iwamatsu,
	linux-stm32, Jerome Brunet, linux-samsung-soc, Robert Foss,
	Samuel Holland, Sean Anderson, Kevin Hilman, Hammer Hsieh,
	NXP Linux Team, linux-sunxi, Sascha Hauer, Andy Shevchenko,
	Alex Elder, Scott Branden, Daire McNamara, Greg Kroah-Hartman,
	Michael Walle, Pengutronix Kernel Team, Claudiu Beznea,
	Alexandre Belloni, Alim Akhtar, Thierry Reding, Guenter Roeck,
	chrome-platform, Bjorn Andersson, Chunyan Zhang,
	Bartosz Golaszewski, Lee Jones, Jonathan Hunter, linux-rockchip,
	Martin Blumenstingl, linux-gpio, Fabrice Gasnier,
	linux-rpi-kernel, linux-amlogic, Michal Simek, linux-arm-kernel,
	Neil Armstrong, greybus-dev, Hector Martin, Douglas Anderson,
	Maxime Coquelin, Matthias Brugger, Laurent Pinchart,
	Andrzej Hajda, Alyssa Rosenzweig, Alexander Shiyan, linux-staging,
	Jernej Skrabec, Luca Weiss, Chen-Yu Tsai,
	Broadcom internal kernel review list, Orson Zhai, linux-pwm,
	Jonas Karlman, Ray Jui, Jonathan Neuschäfer,
	Vladimir Zapolskiy, Baolin Wang, asahi, Shawn Guo,
	Anjelique Melendez, Alexandre Torgue, linux-mips, Paul Cercueil,
	linux-riscv, linux-leds, Florian Fainelli, Sven Peter,
	Johan Hovold, linux-mediatek, Paul Walmsley, linux-tegra,
	AngeloGioacchino Del Regno, Nicolas Ferre, Krzysztof Kozlowski,
	Palmer Dabbelt, Dmitry Baryshkov

On Fri, Aug 4, 2023 at 4:28 PM Uwe Kleine-König
<u.kleine-koenig@pengutronix.de> wrote:

> (implicit) v1 of this series can be found at
> https://lore.kernel.org/linux-pwm/20230803140633.138165-1-u.kleine-koenig@pengutronix.de .
>
> Changes since then only affect documentation that I missed to adapt before.
> Thanks to Laurent for catching that
>
> Best regards
> Uwe
>
> Uwe Kleine-König (2):
>   pwm: Manage owner assignment implicitly for drivers
>   pwm: crc: Allow compilation as module and with COMPILE_TEST

Clearly the right thing to do! Nice patches.
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

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

* Re: [PATCH v2 1/2] pwm: Manage owner assignment implicitly for drivers
  2023-08-04 14:27 ` [PATCH v2 1/2] " Uwe Kleine-König
                     ` (4 preceding siblings ...)
  2023-08-07  0:46   ` nobuhiro1.iwamatsu
@ 2023-08-09 12:29   ` Heiko Stuebner
  2023-08-09 13:38   ` Michael Walle
  2023-08-14  7:41   ` Neil Armstrong
  7 siblings, 0 replies; 11+ messages in thread
From: Heiko Stuebner @ 2023-08-09 12:29 UTC (permalink / raw)
  To: Thierry Reding, Laurent Pinchart, Uwe Kleine-König
  Cc: Alexandre Belloni, linux-staging, Andrzej Hajda,
	Greg Kroah-Hartman, Alexandre Torgue, Johan Hovold, Nicolas Ferre,
	Paul Cercueil, linux-tegra, Conor Dooley, Pavel Machek,
	linux-amlogic, Guenter Roeck, chrome-platform, Nobuhiro Iwamatsu,
	Michal Simek, linux-riscv, Alyssa Rosenzweig, Jerome Brunet,
	Luca Weiss, linux-samsung-soc, Robert Foss, Florian Fainelli,
	Samuel Holland, Sean Anderson, Bartosz Golaszewski, Lee Jones,
	Michael Walle, Jernej Skrabec, Jonathan Hunter, Hammer Hsieh,
	linux-rockchip, Chen-Yu Tsai,
	Broadcom internal kernel review list, NXP Linux Team, linux-leds,
	Orson Zhai, Alim Akhtar, linux-mips, linux-sunxi, Maxime Coquelin,
	linux-pwm, Pengutronix Kernel Team, Jonas Karlman,
	Martin Blumenstingl, Ray Jui, Sascha Hauer,
	Jonathan Neuschäfer, Vladimir Zapolskiy, linux-gpio,
	Fabrice Gasnier, linux-mediatek, Baolin Wang, Sven Peter,
	Paul Walmsley, Matthias Brugger, Bjorn Andersson,
	linux-arm-kernel, AngeloGioacchino Del Regno, Andy Shevchenko,
	Neil Armstrong, Alex Elder, Alexander Shiyan, Scott Branden,
	greybus-dev, Daire McNamara, Chunyan Zhang, dri-devel,
	Hector Martin, linux-stm32, Douglas Anderson, Krzysztof Kozlowski,
	Palmer Dabbelt, asahi, Kevin Hilman, Dmitry Baryshkov, Shawn Guo,
	Claudiu Beznea, Anjelique Melendez, linux-rpi-kernel

Am Freitag, 4. August 2023, 16:27:06 CEST schrieb Uwe Kleine-König:
> Instead of requiring each driver to care for assigning the owner member
> of struct pwm_ops, handle that implicitly using a macro. Note that the
> owner member has to be moved to struct pwm_chip, as the ops structure
> usually lives in read-only memory and so cannot be modified.
> 
> The upside is that new lowlevel drivers cannot forget the assignment and
> save one line each. The pwm-crc driver didn't assign .owner, that's not
> a problem in practise though as the driver cannot be compiled as a
> module.
> 
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
> ---

>  drivers/pwm/pwm-rockchip.c            |  1 -

Acked-by: Heiko Stuebner <heiko@sntech.de> #pwm-rockchip




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

* Re: [PATCH v2 1/2] pwm: Manage owner assignment implicitly for drivers
  2023-08-04 14:27 ` [PATCH v2 1/2] " Uwe Kleine-König
                     ` (5 preceding siblings ...)
  2023-08-09 12:29   ` Heiko Stuebner
@ 2023-08-09 13:38   ` Michael Walle
  2023-08-14  7:41   ` Neil Armstrong
  7 siblings, 0 replies; 11+ messages in thread
From: Michael Walle @ 2023-08-09 13:38 UTC (permalink / raw)
  To: Uwe Kleine-König
  Cc: dri-devel, Conor Dooley, Pavel Machek, Nobuhiro Iwamatsu,
	linux-stm32, Jerome Brunet, linux-samsung-soc, Robert Foss,
	Samuel Holland, Sean Anderson, Kevin Hilman, Hammer Hsieh,
	NXP Linux Team, linux-sunxi, Sascha Hauer, Andy Shevchenko,
	Alex Elder, Scott Branden, Daire McNamara, Greg Kroah-Hartman,
	Pengutronix Kernel Team, Claudiu Beznea, Alexandre Belloni,
	Alim Akhtar, Thierry Reding, Guenter Roeck, chrome-platform,
	Bjorn Andersson, Chunyan Zhang, Bartosz Golaszewski, Lee Jones,
	Jonathan Hunter, linux-rockchip, Martin Blumenstingl, linux-gpio,
	Fabrice Gasnier, linux-rpi-kernel, linux-amlogic, Michal Simek,
	linux-arm-kernel, Neil Armstrong, greybus-dev, Hector Martin,
	Douglas Anderson, Maxime Coquelin, Matthias Brugger,
	Laurent Pinchart, Andrzej Hajda, Alyssa Rosenzweig,
	Alexander Shiyan, linux-staging, Jernej Skrabec, Luca Weiss,
	Chen-Yu Tsai, Broadcom internal kernel review list, Orson Zhai,
	linux-pwm, Jonas Karlman, Ray Jui, Jonathan Neuschäfer,
	Vladimir Zapolskiy, Baolin Wang, asahi, Shawn Guo,
	Anjelique Melendez, Alexandre Torgue, linux-mips, Paul Cercueil,
	linux-riscv, linux-leds, Florian Fainelli, Sven Peter,
	Johan Hovold, linux-mediatek, Paul Walmsley, linux-tegra,
	AngeloGioacchino Del Regno, Nicolas Ferre, Krzysztof Kozlowski,
	Palmer Dabbelt, Dmitry Baryshkov

Hi,

> Instead of requiring each driver to care for assigning the owner member
> of struct pwm_ops, handle that implicitly using a macro. Note that the
> owner member has to be moved to struct pwm_chip, as the ops structure
> usually lives in read-only memory and so cannot be modified.
> 
> The upside is that new lowlevel drivers cannot forget the assignment 
> and
> save one line each. The pwm-crc driver didn't assign .owner, that's not
> a problem in practise though as the driver cannot be compiled as a
> module.
> 
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>

...

>  drivers/pwm/pwm-sl28cpld.c            |  1 -

Acked-by: Michael Walle <michael@walle.cc>

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

* Re: [PATCH v2 1/2] pwm: Manage owner assignment implicitly for drivers
  2023-08-04 14:27 ` [PATCH v2 1/2] " Uwe Kleine-König
                     ` (6 preceding siblings ...)
  2023-08-09 13:38   ` Michael Walle
@ 2023-08-14  7:41   ` Neil Armstrong
  7 siblings, 0 replies; 11+ messages in thread
From: Neil Armstrong @ 2023-08-14  7:41 UTC (permalink / raw)
  To: Uwe Kleine-König, Thierry Reding, Laurent Pinchart
  Cc: Alexandre Belloni, linux-staging, Andrzej Hajda,
	Greg Kroah-Hartman, Alexandre Torgue, Johan Hovold, Nicolas Ferre,
	Paul Cercueil, linux-tegra, Conor Dooley, Pavel Machek,
	linux-amlogic, Guenter Roeck, chrome-platform, Nobuhiro Iwamatsu,
	Michal Simek, linux-riscv, Alyssa Rosenzweig, Jerome Brunet,
	Luca Weiss, linux-samsung-soc, Robert Foss, linux-stm32,
	Florian Fainelli, Samuel Holland, Sean Anderson,
	Bartosz Golaszewski, Lee Jones, Michael Walle, Jernej Skrabec,
	Jonathan Hunter, Hammer Hsieh, linux-rockchip, Chen-Yu Tsai,
	Broadcom internal kernel review list, NXP Linux Team, linux-leds,
	Orson Zhai, Alim Akhtar, linux-mips, linux-sunxi, linux-pwm,
	Pengutronix Kernel Team, Jonas Karlman, Martin Blumenstingl,
	Ray Jui, Sascha Hauer, Jonathan Neuschäfer,
	Vladimir Zapolskiy, linux-gpio, Fabrice Gasnier, linux-mediatek,
	Baolin Wang, Sven Peter, Paul Walmsley, Matthias Brugger,
	Bjorn Andersson, linux-arm-kernel, AngeloGioacchino Del Regno,
	Andy Shevchenko, Maxime Coquelin, Alex Elder, Alexander Shiyan,
	Scott Branden, greybus-dev, Daire McNamara, Chunyan Zhang,
	dri-devel, Hector Martin, Douglas Anderson, Krzysztof Kozlowski,
	Palmer Dabbelt, asahi, Kevin Hilman, Dmitry Baryshkov, Shawn Guo,
	Claudiu Beznea, Anjelique Melendez, linux-rpi-kernel

On 04/08/2023 16:27, Uwe Kleine-König wrote:
> Instead of requiring each driver to care for assigning the owner member
> of struct pwm_ops, handle that implicitly using a macro. Note that the
> owner member has to be moved to struct pwm_chip, as the ops structure
> usually lives in read-only memory and so cannot be modified.
> 
> The upside is that new lowlevel drivers cannot forget the assignment and
> save one line each. The pwm-crc driver didn't assign .owner, that's not
> a problem in practise though as the driver cannot be compiled as a
> module.
> 
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
> ---
>   drivers/gpio/gpio-mvebu.c             |  1 -
>   drivers/gpu/drm/bridge/ti-sn65dsi86.c |  1 -
>   drivers/leds/rgb/leds-qcom-lpg.c      |  1 -
>   drivers/pwm/core.c                    | 24 ++++++++++++++----------
>   drivers/pwm/pwm-ab8500.c              |  1 -
>   drivers/pwm/pwm-apple.c               |  1 -
>   drivers/pwm/pwm-atmel-hlcdc.c         |  1 -
>   drivers/pwm/pwm-atmel-tcb.c           |  1 -
>   drivers/pwm/pwm-atmel.c               |  1 -
>   drivers/pwm/pwm-bcm-iproc.c           |  1 -
>   drivers/pwm/pwm-bcm-kona.c            |  1 -
>   drivers/pwm/pwm-bcm2835.c             |  1 -
>   drivers/pwm/pwm-berlin.c              |  1 -
>   drivers/pwm/pwm-brcmstb.c             |  1 -
>   drivers/pwm/pwm-clk.c                 |  1 -
>   drivers/pwm/pwm-clps711x.c            |  1 -
>   drivers/pwm/pwm-cros-ec.c             |  1 -
>   drivers/pwm/pwm-dwc.c                 |  1 -
>   drivers/pwm/pwm-ep93xx.c              |  1 -
>   drivers/pwm/pwm-fsl-ftm.c             |  1 -
>   drivers/pwm/pwm-hibvt.c               |  1 -
>   drivers/pwm/pwm-img.c                 |  1 -
>   drivers/pwm/pwm-imx-tpm.c             |  1 -
>   drivers/pwm/pwm-imx1.c                |  1 -
>   drivers/pwm/pwm-imx27.c               |  1 -
>   drivers/pwm/pwm-intel-lgm.c           |  1 -
>   drivers/pwm/pwm-iqs620a.c             |  1 -
>   drivers/pwm/pwm-jz4740.c              |  1 -
>   drivers/pwm/pwm-keembay.c             |  1 -
>   drivers/pwm/pwm-lp3943.c              |  1 -
>   drivers/pwm/pwm-lpc18xx-sct.c         |  1 -
>   drivers/pwm/pwm-lpc32xx.c             |  1 -
>   drivers/pwm/pwm-lpss.c                |  1 -
>   drivers/pwm/pwm-mediatek.c            |  1 -
>   drivers/pwm/pwm-meson.c               |  1 -

Acked-by: Neil Armstrong <neil.armstrong@linaro.org> # pwm-meson

>   drivers/pwm/pwm-microchip-core.c      |  1 -
>   drivers/pwm/pwm-mtk-disp.c            |  1 -
>   drivers/pwm/pwm-mxs.c                 |  1 -
>   drivers/pwm/pwm-ntxec.c               |  1 -
>   drivers/pwm/pwm-omap-dmtimer.c        |  1 -
>   drivers/pwm/pwm-pca9685.c             |  1 -
>   drivers/pwm/pwm-pxa.c                 |  1 -
>   drivers/pwm/pwm-raspberrypi-poe.c     |  1 -
>   drivers/pwm/pwm-rcar.c                |  1 -
>   drivers/pwm/pwm-renesas-tpu.c         |  1 -
>   drivers/pwm/pwm-rockchip.c            |  1 -
>   drivers/pwm/pwm-rz-mtu3.c             |  1 -
>   drivers/pwm/pwm-samsung.c             |  1 -
>   drivers/pwm/pwm-sifive.c              |  1 -
>   drivers/pwm/pwm-sl28cpld.c            |  1 -
>   drivers/pwm/pwm-spear.c               |  1 -
>   drivers/pwm/pwm-sprd.c                |  1 -
>   drivers/pwm/pwm-sti.c                 |  1 -
>   drivers/pwm/pwm-stm32-lp.c            |  1 -
>   drivers/pwm/pwm-stm32.c               |  1 -
>   drivers/pwm/pwm-stmpe.c               |  1 -
>   drivers/pwm/pwm-sun4i.c               |  1 -
>   drivers/pwm/pwm-sunplus.c             |  1 -
>   drivers/pwm/pwm-tegra.c               |  1 -
>   drivers/pwm/pwm-tiecap.c              |  1 -
>   drivers/pwm/pwm-tiehrpwm.c            |  1 -
>   drivers/pwm/pwm-twl-led.c             |  2 --
>   drivers/pwm/pwm-twl.c                 |  2 --
>   drivers/pwm/pwm-visconti.c            |  1 -
>   drivers/pwm/pwm-vt8500.c              |  1 -
>   drivers/pwm/pwm-xilinx.c              |  1 -
>   drivers/staging/greybus/pwm.c         |  1 -
>   include/linux/pwm.h                   | 10 ++++++----
>   68 files changed, 20 insertions(+), 82 deletions(-)
> 

<snip>

> diff --git a/drivers/pwm/pwm-meson.c b/drivers/pwm/pwm-meson.c
> index 25519cddc2a9..5bea53243ed2 100644
> --- a/drivers/pwm/pwm-meson.c
> +++ b/drivers/pwm/pwm-meson.c
> @@ -335,7 +335,6 @@ static const struct pwm_ops meson_pwm_ops = {
>   	.free = meson_pwm_free,
>   	.apply = meson_pwm_apply,
>   	.get_state = meson_pwm_get_state,
> -	.owner = THIS_MODULE,
>   };
>   
>   static const char * const pwm_meson8b_parent_names[] = {

<snip>


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

end of thread, other threads:[~2023-08-14  7:41 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-04 14:27 [PATCH v2 0/2] pwm: Manage owner assignment implicitly for drivers Uwe Kleine-König
2023-08-04 14:27 ` [PATCH v2 1/2] " Uwe Kleine-König
2023-08-04 18:51   ` Andy Shevchenko
2023-08-04 18:56   ` Florian Fainelli
2023-08-04 19:06   ` Jernej Škrabec
2023-08-05 20:36   ` Andi Shyti
2023-08-07  0:46   ` nobuhiro1.iwamatsu
2023-08-09 12:29   ` Heiko Stuebner
2023-08-09 13:38   ` Michael Walle
2023-08-14  7:41   ` Neil Armstrong
2023-08-08 13:18 ` [PATCH v2 0/2] " Linus Walleij

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox