linux-fbdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 00/20] Make some spi device drivers return zero in .remove()
@ 2021-10-12 15:39 Uwe Kleine-König
  2021-10-12 15:39 ` [PATCH v2 19/20] staging: fbtft: Make fbtft_remove_common() return void Uwe Kleine-König
  0 siblings, 1 reply; 3+ messages in thread
From: Uwe Kleine-König @ 2021-10-12 15:39 UTC (permalink / raw)
  To: Alexandre Torgue, Arnd Bergmann, Bartosz Golaszewski,
	Dmitry Torokhov, Eric Piel, Greg Kroah-Hartman, Guenter Roeck,
	Hans de Goede, Jarkko Sakkinen, Jason Gunthorpe, Jean Delvare,
	Jiri Slaby, Lee Jones, Linus Walleij, Mark Gross,
	Mauro Carvalho Chehab, Maxime Coquelin, Michael Hennerich,
	Miquel Raynal, Peter Huewe, Richard Weinberger, Thierry Reding,
	Vignesh Raghavendra, Yasunari Takiguchi
  Cc: Andy Shevchenko, Colin Ian King, Dan Carpenter, Fabio Estevam,
	Heiko Schocher, Len Baker, Mark Brown, Phil Reid, Sam Ravnborg,
	Tudor Ambarus, dri-devel, kernel, linux-fbdev, linux-gpio,
	linux-hwmon, linux-input, linux-integrity, linux-kernel,
	linux-media, linux-mtd, linux-serial, linux-spi, linux-staging,
	linux-stm32, platform-driver-x86

Hello,

this is v2 of my quest to make spi remove callbacks return void. Today
they return an int, but the only result of returning a non-zero value is
a warning message. So it's a bad idea to return an error code in the
expectation that not freeing some resources is ok then. The same holds
true for i2c and platform devices which benefit en passant for a few
drivers.

The patches in this series address some of the spi drivers that might
return non-zero and adapt them accordingly to return zero instead. For
most drivers it's just about not hiding the fact that they already
return zero.

Given that there are quite some more patches of this type to create
before I can change the spi remove callback, I suggest the respective
subsystem maintainers pick up these patches. There are no
interdependencies in this series.

Compared to (implicit) v1

 - I fixed a few compiler issues (this series it build tested with an
   allmoddefconfig on arm64, m68k, powerpc, riscv, s390, sparc64 and
   x86_64).
 - A few new patches (2x gpio, 2x misc, 4x mtd)
 - One patch already landed in next, this one I dropped. The drm/panel
   patch as claimed to applied, too, but not yet in next. It's included
   here, but I assume I was just too impatient and this one should be
   ignored.

Full range-diff below.

Best regards
Uwe

Uwe Kleine-König (20):
  drm/panel: s6e63m0: Make s6e63m0_remove() return void
  gpio: max730x: Make __max730x_remove() return void
  gpio: mc33880: Drop if with an always false condition
  hwmon: max31722: Warn about failure to put device in stand-by in
    .remove()
  input: adxl34xx: Make adxl34x_remove() return void
  input: touchscreen: tsc200x: Make tsc200x_remove() return void
  media: cxd2880: Eliminate dead code
  mfd: mc13xxx: Make mc13xxx_common_exit() return void
  mfd: stmpe: Make stmpe_remove() return void
  mfd: tps65912: Make tps65912_device_exit() return void
  misc: ad525x_dpot: Make ad_dpot_remove() return void
  misc: lis3lv02d: Make lis3lv02d_remove_fs() return void
  mtd: dataflash: Warn about failure to unregister mtd device
  mtd: mchp23k256: Warn about failure to unregister mtd device
  mtd: mchp48l640: Warn about failure to unregister mtd device
  mtd: sst25l: Warn about failure to unregister mtd device
  serial: max310x: Make max310x_remove() return void
  serial: sc16is7xx: Make sc16is7xx_remove() return void
  staging: fbtft: Make fbtft_remove_common() return void
  tpm: st33zp24: Make st33zp24_remove() return void

 drivers/char/tpm/st33zp24/i2c.c                   |  5 +----
 drivers/char/tpm/st33zp24/spi.c                   |  5 +----
 drivers/char/tpm/st33zp24/st33zp24.c              |  3 +--
 drivers/char/tpm/st33zp24/st33zp24.h              |  2 +-
 drivers/gpio/gpio-max7300.c                       |  4 +++-
 drivers/gpio/gpio-max7301.c                       |  4 +++-
 drivers/gpio/gpio-max730x.c                       |  6 +-----
 drivers/gpio/gpio-mc33880.c                       |  2 --
 drivers/gpu/drm/panel/panel-samsung-s6e63m0-dsi.c |  3 ++-
 drivers/gpu/drm/panel/panel-samsung-s6e63m0-spi.c |  3 ++-
 drivers/gpu/drm/panel/panel-samsung-s6e63m0.c     |  4 +---
 drivers/gpu/drm/panel/panel-samsung-s6e63m0.h     |  2 +-
 drivers/hwmon/max31722.c                          |  8 +++++++-
 drivers/input/misc/adxl34x-i2c.c                  |  4 +++-
 drivers/input/misc/adxl34x-spi.c                  |  4 +++-
 drivers/input/misc/adxl34x.c                      |  4 +---
 drivers/input/misc/adxl34x.h                      |  2 +-
 drivers/input/touchscreen/tsc2004.c               |  4 +++-
 drivers/input/touchscreen/tsc2005.c               |  4 +++-
 drivers/input/touchscreen/tsc200x-core.c          |  4 +---
 drivers/input/touchscreen/tsc200x-core.h          |  2 +-
 drivers/media/spi/cxd2880-spi.c                   | 13 +------------
 drivers/mfd/mc13xxx-core.c                        |  4 +---
 drivers/mfd/mc13xxx-i2c.c                         |  3 ++-
 drivers/mfd/mc13xxx-spi.c                         |  3 ++-
 drivers/mfd/mc13xxx.h                             |  2 +-
 drivers/mfd/stmpe-i2c.c                           |  4 +++-
 drivers/mfd/stmpe-spi.c                           |  4 +++-
 drivers/mfd/stmpe.c                               |  4 +---
 drivers/mfd/stmpe.h                               |  2 +-
 drivers/mfd/tps65912-core.c                       |  4 +---
 drivers/mfd/tps65912-i2c.c                        |  4 +++-
 drivers/mfd/tps65912-spi.c                        |  4 +++-
 drivers/misc/ad525x_dpot-i2c.c                    |  3 ++-
 drivers/misc/ad525x_dpot-spi.c                    |  3 ++-
 drivers/misc/ad525x_dpot.c                        |  4 +---
 drivers/misc/ad525x_dpot.h                        |  2 +-
 drivers/misc/lis3lv02d/lis3lv02d.c                |  3 +--
 drivers/misc/lis3lv02d/lis3lv02d.h                |  2 +-
 drivers/misc/lis3lv02d/lis3lv02d_spi.c            |  4 +++-
 drivers/mtd/devices/mchp23k256.c                  |  9 ++++++++-
 drivers/mtd/devices/mchp48l640.c                  |  8 +++++++-
 drivers/mtd/devices/mtd_dataflash.c               |  5 ++++-
 drivers/mtd/devices/sst25l.c                      |  8 +++++++-
 drivers/platform/x86/hp_accel.c                   |  3 ++-
 drivers/staging/fbtft/fbtft-core.c                |  8 +-------
 drivers/staging/fbtft/fbtft.h                     |  8 +++++---
 drivers/tty/serial/max310x.c                      |  7 +++----
 drivers/tty/serial/sc16is7xx.c                    | 12 +++++++-----
 include/linux/mfd/tps65912.h                      |  2 +-
 include/linux/spi/max7301.h                       |  2 +-
 51 files changed, 119 insertions(+), 104 deletions(-)

Range-diff against v1:
 1:  73a1a54d9ea0 =  1:  87fd7940fbfd drm/panel: s6e63m0: Make s6e63m0_remove() return void
 2:  3bcc8e8bd1a3 <  -:  ------------ hwmon: adt7x10: Make adt7x10_remove() return void
 -:  ------------ >  2:  305311d63bbb gpio: max730x: Make __max730x_remove() return void
 -:  ------------ >  3:  0cafc31ea5c5 gpio: mc33880: Drop if with an always false condition
 3:  07f067732aa9 !  4:  f39467b50f06 hwmon: max31722: Warn about failure to put device in stand-by in .remove()
    @@ Commit message
         nothing happens apart from emitting a generic error message. Make this
         error message more device specific and return zero instead.
     
    -    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
         Acked-by: Michael Hennerich <michael.hennerich@analog.com>
    +    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
     
      ## drivers/hwmon/max31722.c ##
     @@ drivers/hwmon/max31722.c: static int max31722_probe(struct spi_device *spi)
 4:  0b0a5497d105 =  5:  de3a78214008 input: adxl34xx: Make adxl34x_remove() return void
 5:  0d4f14bc2dd6 !  6:  9629ac3f9e13 input: touchscreen: tsc200x: Make tsc200x_remove() return void
    @@ drivers/input/touchscreen/tsc2005.c: static int tsc2005_probe(struct spi_device
     -	return tsc200x_remove(&spi->dev);
     +	tsc200x_remove(&spi->dev);
     +
    -+	return 0
    ++	return 0;
      }
      
      #ifdef CONFIG_OF
 6:  a68bbd23223b =  7:  1aab41df9262 media: cxd2880: Eliminate dead code
 7:  3801b37ac18f !  8:  745d1a5f840e mfd: mc13xxx: Make mc13xxx_common_exit() return void
    @@ drivers/mfd/mc13xxx-spi.c: static int mc13xxx_spi_probe(struct spi_device *spi)
      {
     -	return mc13xxx_common_exit(&spi->dev);
     +	mc13xxx_common_exit(&spi->dev);
    -+	return 0
    ++	return 0;
      }
      
      static struct spi_driver mc13xxx_spi_driver = {
 8:  22159093ce71 =  9:  7ee04277db66 mfd: stmpe: Make stmpe_remove() return void
 9:  f91da216c752 = 10:  4a21c90a57f8 mfd: tps65912: Make tps65912_device_exit() return void
 -:  ------------ > 11:  f92aa824fd1c misc: ad525x_dpot: Make ad_dpot_remove() return void
 -:  ------------ > 12:  5b2fccd09a24 misc: lis3lv02d: Make lis3lv02d_remove_fs() return void
 -:  ------------ > 13:  609ab18323fc mtd: dataflash: Warn about failure to unregister mtd device
 -:  ------------ > 14:  3b220d5fa547 mtd: mchp23k256: Warn about failure to unregister mtd device
 -:  ------------ > 15:  baf6f4b3a8c7 mtd: mchp48l640: Warn about failure to unregister mtd device
 -:  ------------ > 16:  edf3788a30b0 mtd: sst25l: Warn about failure to unregister mtd device
10:  f2def77b74d1 ! 17:  614f7c001377 serial: max310x: Make max310x_remove() return void
    @@ drivers/tty/serial/max310x.c: static int max310x_spi_probe(struct spi_device *sp
      {
     -	return max310x_remove(&spi->dev);
     +	max310x_remove(&spi->dev);
    -+	return 0
    ++	return 0;
      }
      
      static const struct spi_device_id max310x_id_table[] = {
11:  283e4bbeff38 ! 18:  35d1f5b36de5 serial: sc16is7xx: Make sc16is7xx_remove() return void
    @@ drivers/tty/serial/sc16is7xx.c: static int sc16is7xx_probe(struct device *dev,
      {
      	struct sc16is7xx_port *s = dev_get_drvdata(dev);
      	int i;
    +@@ drivers/tty/serial/sc16is7xx.c: static int sc16is7xx_remove(struct device *dev)
    + 	kthread_stop(s->kworker_task);
    + 
    + 	clk_disable_unprepare(s->clk);
    +-
    +-	return 0;
    + }
    + 
    + static const struct of_device_id __maybe_unused sc16is7xx_dt_ids[] = {
     @@ drivers/tty/serial/sc16is7xx.c: static int sc16is7xx_spi_probe(struct spi_device *spi)
      
      static int sc16is7xx_spi_remove(struct spi_device *spi)
12:  5093fbdceee5 ! 19:  d9ec9a96fbb8 staging: fbtft: Make fbtft_remove_common() return void
    @@ drivers/staging/fbtft/fbtft-core.c: EXPORT_SYMBOL(fbtft_probe_common);
      
     
      ## drivers/staging/fbtft/fbtft.h ##
    +@@ drivers/staging/fbtft/fbtft.h: void fbtft_unregister_backlight(struct fbtft_par *par);
    + int fbtft_init_display(struct fbtft_par *par);
    + int fbtft_probe_common(struct fbtft_display *display, struct spi_device *sdev,
    + 		       struct platform_device *pdev);
    +-int fbtft_remove_common(struct device *dev, struct fb_info *info);
    ++void fbtft_remove_common(struct device *dev, struct fb_info *info);
    + 
    + /* fbtft-io.c */
    + int fbtft_write_spi(struct fbtft_par *par, void *buf, size_t len);
     @@ drivers/staging/fbtft/fbtft.h: static int fbtft_driver_remove_spi(struct spi_device *spi)                 \
      {                                                                          \
      	struct fb_info *info = spi_get_drvdata(spi);                       \
13:  9156e6380a5e = 20:  89d0b85968a9 tpm: st33zp24: Make st33zp24_remove() return void

base-commit: 9e1ff307c779ce1f0f810c7ecce3d95bbae40896
-- 
2.30.2


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

* [PATCH v2 19/20] staging: fbtft: Make fbtft_remove_common() return void
  2021-10-12 15:39 [PATCH v2 00/20] Make some spi device drivers return zero in .remove() Uwe Kleine-König
@ 2021-10-12 15:39 ` Uwe Kleine-König
  2021-10-12 18:41   ` Andy Shevchenko
  0 siblings, 1 reply; 3+ messages in thread
From: Uwe Kleine-König @ 2021-10-12 15:39 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Andy Shevchenko, Len Baker, Mark Brown, Phil Reid, dri-devel,
	kernel, linux-fbdev, linux-spi, linux-staging

fbtft_remove_common() is only called with a non-NULL fb_info. (All
callers are in remove callbacks and the matching probe callbacks set
driver data accordingly.) So fbtft_remove_common() always returns zero.
Make it return void instead which makes it easier to see in the callers
that there is no error to handle.

Also the return value of platform and spi remove callbacks is ignored
anyway and not freeing resources in .remove() is a bad idea.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
 drivers/staging/fbtft/fbtft-core.c | 8 +-------
 drivers/staging/fbtft/fbtft.h      | 8 +++++---
 2 files changed, 6 insertions(+), 10 deletions(-)

diff --git a/drivers/staging/fbtft/fbtft-core.c b/drivers/staging/fbtft/fbtft-core.c
index ed992ca605eb..9c9eab1182a6 100644
--- a/drivers/staging/fbtft/fbtft-core.c
+++ b/drivers/staging/fbtft/fbtft-core.c
@@ -1318,23 +1318,17 @@ EXPORT_SYMBOL(fbtft_probe_common);
  * @info: Framebuffer
  *
  * Unregisters and releases the framebuffer
- *
- * Return: 0 if successful, negative if error
  */
-int fbtft_remove_common(struct device *dev, struct fb_info *info)
+void fbtft_remove_common(struct device *dev, struct fb_info *info)
 {
 	struct fbtft_par *par;
 
-	if (!info)
-		return -EINVAL;
 	par = info->par;
 	if (par)
 		fbtft_par_dbg(DEBUG_DRIVER_INIT_FUNCTIONS, par,
 			      "%s()\n", __func__);
 	fbtft_unregister_framebuffer(info);
 	fbtft_framebuffer_release(info);
-
-	return 0;
 }
 EXPORT_SYMBOL(fbtft_remove_common);
 
diff --git a/drivers/staging/fbtft/fbtft.h b/drivers/staging/fbtft/fbtft.h
index 76f8c090a837..6869f3603b0e 100644
--- a/drivers/staging/fbtft/fbtft.h
+++ b/drivers/staging/fbtft/fbtft.h
@@ -252,7 +252,7 @@ void fbtft_unregister_backlight(struct fbtft_par *par);
 int fbtft_init_display(struct fbtft_par *par);
 int fbtft_probe_common(struct fbtft_display *display, struct spi_device *sdev,
 		       struct platform_device *pdev);
-int fbtft_remove_common(struct device *dev, struct fb_info *info);
+void fbtft_remove_common(struct device *dev, struct fb_info *info);
 
 /* fbtft-io.c */
 int fbtft_write_spi(struct fbtft_par *par, void *buf, size_t len);
@@ -283,7 +283,8 @@ static int fbtft_driver_remove_spi(struct spi_device *spi)                 \
 {                                                                          \
 	struct fb_info *info = spi_get_drvdata(spi);                       \
 									   \
-	return fbtft_remove_common(&spi->dev, info);                       \
+	fbtft_remove_common(&spi->dev, info);                              \
+	return 0;                                                          \
 }                                                                          \
 									   \
 static int fbtft_driver_probe_pdev(struct platform_device *pdev)           \
@@ -295,7 +296,8 @@ static int fbtft_driver_remove_pdev(struct platform_device *pdev)          \
 {                                                                          \
 	struct fb_info *info = platform_get_drvdata(pdev);                 \
 									   \
-	return fbtft_remove_common(&pdev->dev, info);                      \
+	fbtft_remove_common(&pdev->dev, info);                             \
+	return 0;                                                          \
 }                                                                          \
 									   \
 static const struct of_device_id dt_ids[] = {                              \
-- 
2.30.2


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

* Re: [PATCH v2 19/20] staging: fbtft: Make fbtft_remove_common() return void
  2021-10-12 15:39 ` [PATCH v2 19/20] staging: fbtft: Make fbtft_remove_common() return void Uwe Kleine-König
@ 2021-10-12 18:41   ` Andy Shevchenko
  0 siblings, 0 replies; 3+ messages in thread
From: Andy Shevchenko @ 2021-10-12 18:41 UTC (permalink / raw)
  To: Uwe Kleine-König
  Cc: Greg Kroah-Hartman, Andy Shevchenko, Len Baker, Mark Brown,
	Phil Reid, dri-devel, Sascha Hauer, open list:FRAMEBUFFER LAYER,
	linux-spi, linux-staging

On Tue, Oct 12, 2021 at 6:40 PM Uwe Kleine-König
<u.kleine-koenig@pengutronix.de> wrote:
>
> fbtft_remove_common() is only called with a non-NULL fb_info. (All
> callers are in remove callbacks and the matching probe callbacks set
> driver data accordingly.) So fbtft_remove_common() always returns zero.
> Make it return void instead which makes it easier to see in the callers
> that there is no error to handle.
>
> Also the return value of platform and spi remove callbacks is ignored
> anyway and not freeing resources in .remove() is a bad idea.

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

> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
> ---
>  drivers/staging/fbtft/fbtft-core.c | 8 +-------
>  drivers/staging/fbtft/fbtft.h      | 8 +++++---
>  2 files changed, 6 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/staging/fbtft/fbtft-core.c b/drivers/staging/fbtft/fbtft-core.c
> index ed992ca605eb..9c9eab1182a6 100644
> --- a/drivers/staging/fbtft/fbtft-core.c
> +++ b/drivers/staging/fbtft/fbtft-core.c
> @@ -1318,23 +1318,17 @@ EXPORT_SYMBOL(fbtft_probe_common);
>   * @info: Framebuffer
>   *
>   * Unregisters and releases the framebuffer
> - *
> - * Return: 0 if successful, negative if error
>   */
> -int fbtft_remove_common(struct device *dev, struct fb_info *info)
> +void fbtft_remove_common(struct device *dev, struct fb_info *info)
>  {
>         struct fbtft_par *par;
>
> -       if (!info)
> -               return -EINVAL;
>         par = info->par;
>         if (par)
>                 fbtft_par_dbg(DEBUG_DRIVER_INIT_FUNCTIONS, par,
>                               "%s()\n", __func__);
>         fbtft_unregister_framebuffer(info);
>         fbtft_framebuffer_release(info);
> -
> -       return 0;
>  }
>  EXPORT_SYMBOL(fbtft_remove_common);
>
> diff --git a/drivers/staging/fbtft/fbtft.h b/drivers/staging/fbtft/fbtft.h
> index 76f8c090a837..6869f3603b0e 100644
> --- a/drivers/staging/fbtft/fbtft.h
> +++ b/drivers/staging/fbtft/fbtft.h
> @@ -252,7 +252,7 @@ void fbtft_unregister_backlight(struct fbtft_par *par);
>  int fbtft_init_display(struct fbtft_par *par);
>  int fbtft_probe_common(struct fbtft_display *display, struct spi_device *sdev,
>                        struct platform_device *pdev);
> -int fbtft_remove_common(struct device *dev, struct fb_info *info);
> +void fbtft_remove_common(struct device *dev, struct fb_info *info);
>
>  /* fbtft-io.c */
>  int fbtft_write_spi(struct fbtft_par *par, void *buf, size_t len);
> @@ -283,7 +283,8 @@ static int fbtft_driver_remove_spi(struct spi_device *spi)                 \
>  {                                                                          \
>         struct fb_info *info = spi_get_drvdata(spi);                       \
>                                                                            \
> -       return fbtft_remove_common(&spi->dev, info);                       \
> +       fbtft_remove_common(&spi->dev, info);                              \
> +       return 0;                                                          \
>  }                                                                          \
>                                                                            \
>  static int fbtft_driver_probe_pdev(struct platform_device *pdev)           \
> @@ -295,7 +296,8 @@ static int fbtft_driver_remove_pdev(struct platform_device *pdev)          \
>  {                                                                          \
>         struct fb_info *info = platform_get_drvdata(pdev);                 \
>                                                                            \
> -       return fbtft_remove_common(&pdev->dev, info);                      \
> +       fbtft_remove_common(&pdev->dev, info);                             \
> +       return 0;                                                          \
>  }                                                                          \
>                                                                            \
>  static const struct of_device_id dt_ids[] = {                              \
> --
> 2.30.2
>


-- 
With Best Regards,
Andy Shevchenko

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

end of thread, other threads:[~2021-10-12 15:42 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-12 15:39 [PATCH v2 00/20] Make some spi device drivers return zero in .remove() Uwe Kleine-König
2021-10-12 15:39 ` [PATCH v2 19/20] staging: fbtft: Make fbtft_remove_common() return void Uwe Kleine-König
2021-10-12 18:41   ` Andy Shevchenko

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