[PATCH 08/18] header: Add sdio_retune*() functions

Hauke Mehrtens <[email protected]>
Newsgroups org.kernel.vger.backports
Message-ID <[email protected]>
The brcmfmac driver now uses new sdio_retune*() functions. They are
added with kernel 5.2-rc6 and are backported to kernel 4.19.56 and
5.1.15

sdio_retune_hold_now() and sdio_retune_release() should work like in the
upstream kernel, the implementation of mmc_retune_release() and
mmc_retune_hold() was copied to backports into these functions. On
kernel < 4.3 backporting this is not so easy, so just use an empty
implementation there.

It is not possible to backport sdio_retune_crc_disable() and
sdio_retune_crc_enable() because they need an additional member in a
structure, just add an empty implementation.

Signed-off-by: Hauke Mehrtens <[email protected]>
---
 .../backport-include/linux/mmc/sdio_func.h    | 76 +++++++++++++++++++
 1 file changed, 76 insertions(+)

diff --git a/backport/backport-include/linux/mmc/sdio_func.h b/backport/backport-include/linux/mmc/sdio_func.h
index 2d3e92b6..0a67f992 100644
--- a/backport/backport-include/linux/mmc/sdio_func.h
+++ b/backport/backport-include/linux/mmc/sdio_func.h
@@ -7,4 +7,80 @@
 #define dev_to_sdio_func(d)	container_of(d, struct sdio_func, dev)
 #endif
 
+#if LINUX_VERSION_IS_LESS(5,2,0) && \
+    !LINUX_VERSION_IN_RANGE(5,1,15, 5,2,0) && \
+    !LINUX_VERSION_IN_RANGE(4,19,56, 4,20,0)
+    
+#include <linux/mmc/card.h>
+#include <linux/mmc/host.h>
+
+/**
+ *	sdio_retune_hold_now - start deferring retuning requests till release
+ *	@func: SDIO function attached to host
+ *
+ *	This function can be called if it's currently a bad time to do
+ *	a retune of the SDIO card.  Retune requests made during this time
+ *	will be held and we'll actually do the retune sometime after the
+ *	release.
+ *
+ *	This function could be useful if an SDIO card is in a power state
+ *	where it can respond to a small subset of commands that doesn't
+ *	include the retuning command.  Care should be taken when using
+ *	this function since (presumably) the retuning request we might be
+ *	deferring was made for a good reason.
+ *
+ *	This function should be called while the host is claimed.
+ */
+#define sdio_retune_hold_now LINUX_BACKPORT(sdio_retune_hold_now)
+#if LINUX_VERSION_IS_LESS(4,3,0)
+static inline void sdio_retune_hold_now(struct sdio_func *func)
+{
+}
+#else
+static inline void sdio_retune_hold_now(struct sdio_func *func)
+{
+	struct mmc_host *host = func->card->host;
+
+	host->retune_now = 0;
+	host->hold_retune += 1;
+}
+#endif /* < 4.3 */
+
+/**
+ *	sdio_retune_release - signal that it's OK to retune now
+ *	@func: SDIO function attached to host
+ *
+ *	This is the complement to sdio_retune_hold_now().  Calling this
+ *	function won't make a retune happen right away but will allow
+ *	them to be scheduled normally.
+ *
+ *	This function should be called while the host is claimed.
+ */
+#define sdio_retune_release LINUX_BACKPORT(sdio_retune_release)
+#if LINUX_VERSION_IS_LESS(4,3,0)
+static inline void sdio_retune_release(struct sdio_func *func)
+{
+}
+#else
+static inline void sdio_retune_release(struct sdio_func *func)
+{
+	struct mmc_host *host = func->card->host;
+
+	if (host->hold_retune)
+		host->hold_retune -= 1;
+	else
+		WARN_ON(1);
+}
+#endif
+
+#define sdio_retune_crc_disable LINUX_BACKPORT(sdio_retune_crc_disable)
+static inline void sdio_retune_crc_disable(struct sdio_func *func)
+{
+}
+#define sdio_retune_crc_enable LINUX_BACKPORT(sdio_retune_crc_enable)
+static inline void sdio_retune_crc_enable(struct sdio_func *func)
+{
+}
+#endif /* < 5.2 */
+
 #endif /* __BACKPORT_MMC_SDIO_FUNC_H */
-- 
2.20.1

--
To unsubscribe from this list: send the line "unsubscribe backports" in
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.