drm/tinydrm: Move tinydrm_spi_transfer()
authorNoralf Trønnes <noralf@tronnes.org>
Fri, 19 Jul 2019 15:59:12 +0000 (17:59 +0200)
committerNoralf Trønnes <noralf@tronnes.org>
Tue, 23 Jul 2019 13:47:33 +0000 (15:47 +0200)
This is only used by mipi-dbi drivers so move it there.

The reason this isn't moved to the SPI subsystem is that it will in a
later patch pass a dummy rx buffer for SPI controllers that need this.
Low memory boards (64MB) can run into a problem allocating such a "large"
contiguous buffer on every transfer after a long up time.
This leaves a very specific use case, so we'll keep the function here.
mipi-dbi will first go through a refactoring though, before this will
be done.

Remove SPI todo entry now that we're done with the tinydrm.ko SPI code.

v2: Drop moving the mipi_dbi_spi_init() declaration (Sam)

Cc: David Lechner <david@lechnology.com>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Acked-by: : David Lechner <david@lechnology.com>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20190719155916.62465-8-noralf@tronnes.org
Documentation/gpu/tinydrm.rst
Documentation/gpu/todo.rst
drivers/gpu/drm/tinydrm/core/Makefile
drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c [deleted file]
drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
drivers/gpu/drm/tinydrm/ili9225.c
drivers/gpu/drm/tinydrm/mipi-dbi.c
include/drm/tinydrm/mipi-dbi.h
include/drm/tinydrm/tinydrm-helpers.h

index 33a41544f659fba73a0f88547d876cf6809c64af..2c2860fa1510886755525082d28b58c93655837f 100644 (file)
@@ -11,9 +11,6 @@ Helpers
 .. kernel-doc:: include/drm/tinydrm/tinydrm-helpers.h
    :internal:
 
-.. kernel-doc:: drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c
-   :export:
-
 .. kernel-doc:: drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
    :export:
 
index a38639e96e8b6cda1a9945abcdaed1c2a9772592..688b4adbbf628394edf3e84c7d2f10cd9681415f 100644 (file)
@@ -443,9 +443,6 @@ tinydrm
 Tinydrm is the helper driver for really simple fb drivers. The goal is to make
 those drivers as simple as possible, so lots of room for refactoring:
 
-- spi helpers, probably best put into spi core/helper code. Thierry said
-  the spi maintainer is fast&reactive, so shouldn't be a big issue.
-
 - extract the mipi-dbi helper (well, the non-tinydrm specific parts at
   least) into a separate helper, like we have for mipi-dsi already. Or follow
   one of the ideas for having a shared dsi/dbi helper, abstracting away the
index 01065e920aea617718a9efd556046f08de5c7905..78e179127e551a181710846b7e3e3d101e221546 100644 (file)
@@ -1,4 +1,4 @@
 # SPDX-License-Identifier: GPL-2.0-only
-tinydrm-y := tinydrm-pipe.o tinydrm-helpers.o
+tinydrm-y := tinydrm-pipe.o
 
 obj-$(CONFIG_DRM_TINYDRM) += tinydrm.o
diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c
deleted file mode 100644 (file)
index d95eb50..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-/*
- * Copyright (C) 2016 Noralf Trønnes
- */
-
-#include <linux/backlight.h>
-#include <linux/dma-buf.h>
-#include <linux/module.h>
-#include <linux/pm.h>
-#include <linux/spi/spi.h>
-#include <linux/swab.h>
-
-#include <drm/drm_device.h>
-#include <drm/drm_drv.h>
-#include <drm/drm_fourcc.h>
-#include <drm/drm_framebuffer.h>
-#include <drm/drm_print.h>
-#include <drm/drm_rect.h>
-#include <drm/tinydrm/tinydrm-helpers.h>
-
-#if IS_ENABLED(CONFIG_SPI)
-
-/**
- * tinydrm_spi_transfer - SPI transfer helper
- * @spi: SPI device
- * @speed_hz: Override speed (optional)
- * @bpw: Bits per word
- * @buf: Buffer to transfer
- * @len: Buffer length
- *
- * This SPI transfer helper breaks up the transfer of @buf into chunks which
- * the SPI controller driver can handle.
- *
- * Returns:
- * Zero on success, negative error code on failure.
- */
-int tinydrm_spi_transfer(struct spi_device *spi, u32 speed_hz,
-                        u8 bpw, const void *buf, size_t len)
-{
-       size_t max_chunk = spi_max_transfer_size(spi);
-       struct spi_transfer tr = {
-               .bits_per_word = bpw,
-               .speed_hz = speed_hz,
-       };
-       struct spi_message m;
-       size_t chunk;
-       int ret;
-
-       spi_message_init_with_transfers(&m, &tr, 1);
-
-       while (len) {
-               chunk = min(len, max_chunk);
-
-               tr.tx_buf = buf;
-               tr.len = chunk;
-               buf += chunk;
-               len -= chunk;
-
-               ret = spi_sync(spi, &m);
-               if (ret)
-                       return ret;
-       }
-
-       return 0;
-}
-EXPORT_SYMBOL(tinydrm_spi_transfer);
-
-#endif /* CONFIG_SPI */
-
-MODULE_LICENSE("GPL");
index ed798fd9515271ccb7c5c1681fe37353caf3c304..a62d1dfe87f8f9894e52bb3092ec8f33ac3ce7df 100644 (file)
@@ -3,6 +3,8 @@
  * Copyright (C) 2016 Noralf Trønnes
  */
 
+#include <linux/module.h>
+
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_drv.h>
 #include <drm/drm_gem_framebuffer_helper.h>
@@ -177,3 +179,5 @@ int tinydrm_display_pipe_init(struct drm_device *drm,
                                            format_count, modifiers, connector);
 }
 EXPORT_SYMBOL(tinydrm_display_pipe_init);
+
+MODULE_LICENSE("GPL");
index 21677e3ed38ba5dbba3c3e3f20202b25ec2b5943..62f29b2faf74f64eec7c53a059978b5940f82571 100644 (file)
@@ -27,7 +27,6 @@
 #include <drm/drm_rect.h>
 #include <drm/drm_vblank.h>
 #include <drm/tinydrm/mipi-dbi.h>
-#include <drm/tinydrm/tinydrm-helpers.h>
 
 #define ILI9225_DRIVER_READ_CODE       0x00
 #define ILI9225_DRIVER_OUTPUT_CONTROL  0x01
@@ -323,7 +322,7 @@ static int ili9225_dbi_command(struct mipi_dbi *mipi, u8 *cmd, u8 *par,
 
        gpiod_set_value_cansleep(mipi->dc, 0);
        speed_hz = mipi_dbi_spi_cmd_max_speed(spi, 1);
-       ret = tinydrm_spi_transfer(spi, speed_hz, 8, cmd, 1);
+       ret = mipi_dbi_spi_transfer(spi, speed_hz, 8, cmd, 1);
        if (ret || !num)
                return ret;
 
@@ -333,7 +332,7 @@ static int ili9225_dbi_command(struct mipi_dbi *mipi, u8 *cmd, u8 *par,
        gpiod_set_value_cansleep(mipi->dc, 1);
        speed_hz = mipi_dbi_spi_cmd_max_speed(spi, num);
 
-       return tinydrm_spi_transfer(spi, speed_hz, bpw, par, num);
+       return mipi_dbi_spi_transfer(spi, speed_hz, bpw, par, num);
 }
 
 static const struct drm_simple_display_pipe_funcs ili9225_pipe_funcs = {
index 8fb6ce4ca6fcb90f61dbe96727e48b29adcdec10..6a8f2d66377fd9fda1d9bdab2c93cdf49b24d32d 100644 (file)
@@ -926,7 +926,7 @@ static int mipi_dbi_typec3_command(struct mipi_dbi *mipi, u8 *cmd,
 
        gpiod_set_value_cansleep(mipi->dc, 0);
        speed_hz = mipi_dbi_spi_cmd_max_speed(spi, 1);
-       ret = tinydrm_spi_transfer(spi, speed_hz, 8, cmd, 1);
+       ret = mipi_dbi_spi_transfer(spi, speed_hz, 8, cmd, 1);
        if (ret || !num)
                return ret;
 
@@ -936,7 +936,7 @@ static int mipi_dbi_typec3_command(struct mipi_dbi *mipi, u8 *cmd,
        gpiod_set_value_cansleep(mipi->dc, 1);
        speed_hz = mipi_dbi_spi_cmd_max_speed(spi, num);
 
-       return tinydrm_spi_transfer(spi, speed_hz, bpw, par, num);
+       return mipi_dbi_spi_transfer(spi, speed_hz, bpw, par, num);
 }
 
 /**
@@ -1007,6 +1007,51 @@ int mipi_dbi_spi_init(struct spi_device *spi, struct mipi_dbi *mipi,
 }
 EXPORT_SYMBOL(mipi_dbi_spi_init);
 
+/**
+ * mipi_dbi_spi_transfer - SPI transfer helper
+ * @spi: SPI device
+ * @speed_hz: Override speed (optional)
+ * @bpw: Bits per word
+ * @buf: Buffer to transfer
+ * @len: Buffer length
+ *
+ * This SPI transfer helper breaks up the transfer of @buf into chunks which
+ * the SPI controller driver can handle.
+ *
+ * Returns:
+ * Zero on success, negative error code on failure.
+ */
+int mipi_dbi_spi_transfer(struct spi_device *spi, u32 speed_hz,
+                         u8 bpw, const void *buf, size_t len)
+{
+       size_t max_chunk = spi_max_transfer_size(spi);
+       struct spi_transfer tr = {
+               .bits_per_word = bpw,
+               .speed_hz = speed_hz,
+       };
+       struct spi_message m;
+       size_t chunk;
+       int ret;
+
+       spi_message_init_with_transfers(&m, &tr, 1);
+
+       while (len) {
+               chunk = min(len, max_chunk);
+
+               tr.tx_buf = buf;
+               tr.len = chunk;
+               buf += chunk;
+               len -= chunk;
+
+               ret = spi_sync(spi, &m);
+               if (ret)
+                       return ret;
+       }
+
+       return 0;
+}
+EXPORT_SYMBOL(mipi_dbi_spi_transfer);
+
 #endif /* CONFIG_SPI */
 
 #ifdef CONFIG_DEBUG_FS
index 51fc667beef7647c545e8598f61b1afc6492c87e..35a1413f21229e2fbada2c8cf29557c53a7b6eca 100644 (file)
@@ -83,7 +83,10 @@ void mipi_dbi_hw_reset(struct mipi_dbi *mipi);
 bool mipi_dbi_display_is_on(struct mipi_dbi *mipi);
 int mipi_dbi_poweron_reset(struct mipi_dbi *mipi);
 int mipi_dbi_poweron_conditional_reset(struct mipi_dbi *mipi);
+
 u32 mipi_dbi_spi_cmd_max_speed(struct spi_device *spi, size_t len);
+int mipi_dbi_spi_transfer(struct spi_device *spi, u32 speed_hz,
+                         u8 bpw, const void *buf, size_t len);
 
 int mipi_dbi_command_read(struct mipi_dbi *mipi, u8 cmd, u8 *val);
 int mipi_dbi_command_buf(struct mipi_dbi *mipi, u8 cmd, u8 *data, size_t len);
index 708c5a7d51e0c990e2fbbfe61d1c39585c8ead64..8c5d20efeaa18111c061fa9e35d1d4251d7df7cc 100644 (file)
@@ -13,8 +13,6 @@ struct drm_framebuffer;
 struct drm_rect;
 struct drm_simple_display_pipe;
 struct drm_simple_display_pipe_funcs;
-struct spi_transfer;
-struct spi_device;
 struct device;
 
 /**
@@ -41,7 +39,4 @@ int tinydrm_display_pipe_init(struct drm_device *drm,
                              const struct drm_display_mode *mode,
                              unsigned int rotation);
 
-int tinydrm_spi_transfer(struct spi_device *spi, u32 speed_hz,
-                        u8 bpw, const void *buf, size_t len);
-
 #endif /* __LINUX_TINYDRM_HELPERS_H */