Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d23d4d4d authored by Noralf Trønnes's avatar Noralf Trønnes
Browse files

drm/tinydrm: Move tinydrm_spi_transfer()



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: default avatarSam Ravnborg <sam@ravnborg.org>
Acked-by: default avatar: David Lechner <david@lechnology.com>
Signed-off-by: default avatarNoralf Trønnes <noralf@tronnes.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20190719155916.62465-8-noralf@tronnes.org
parent 083a6c23
Loading
Loading
Loading
Loading
+0 −3
Original line number Original line Diff line number Diff line
@@ -11,9 +11,6 @@ Helpers
.. kernel-doc:: include/drm/tinydrm/tinydrm-helpers.h
.. kernel-doc:: include/drm/tinydrm/tinydrm-helpers.h
   :internal:
   :internal:


.. kernel-doc:: drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c
   :export:

.. kernel-doc:: drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
.. kernel-doc:: drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
   :export:
   :export:


+0 −3
Original line number Original line Diff line number Diff line
@@ -443,9 +443,6 @@ tinydrm
Tinydrm is the helper driver for really simple fb drivers. The goal is to make
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:
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
- 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
  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
  one of the ideas for having a shared dsi/dbi helper, abstracting away the
+1 −1
Original line number Original line Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0-only
# 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
obj-$(CONFIG_DRM_TINYDRM) += tinydrm.o
+0 −70
Original line number Original line Diff line number Diff line
// 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");
+4 −0
Original line number Original line Diff line number Diff line
@@ -3,6 +3,8 @@
 * Copyright (C) 2016 Noralf Trønnes
 * Copyright (C) 2016 Noralf Trønnes
 */
 */


#include <linux/module.h>

#include <drm/drm_atomic_helper.h>
#include <drm/drm_atomic_helper.h>
#include <drm/drm_drv.h>
#include <drm/drm_drv.h>
#include <drm/drm_gem_framebuffer_helper.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);
					    format_count, modifiers, connector);
}
}
EXPORT_SYMBOL(tinydrm_display_pipe_init);
EXPORT_SYMBOL(tinydrm_display_pipe_init);

MODULE_LICENSE("GPL");
Loading