All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Vrabel <david.vrabel@csr.com>
To: Pierre Ossman <drzeus-list@drzeus.cx>
Cc: linux-kernel@vger.kernel.org
Subject: [patch 4/4] sdio: disable CD resistor
Date: Tue, 07 Aug 2007 13:55:59 +0100	[thread overview]
Message-ID: <46B86BDF.8050700@csr.com> (raw)
In-Reply-To: <46B86ADB.90000@csr.com>

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

-- 
David Vrabel, Software Engineer, Drivers group  Tel: +44 (0)1223 692562
CSR plc, Churchill House, Cambridge Business Park, Cowley Road, CB4 0WZ


.

[-- Attachment #2: sdio-disable-cd-resistor.patch --]
[-- Type: text/x-patch, Size: 2174 bytes --]

sdio: disable CD resistor

Disable the card detect resistor to ensure all data lines are equally loaded.
Not doing this can have a negative impact on buses with marginal signal
quality.

Signed-off-by: David Vrabel <david.vrabel@csr.com
---
Index: mmc/drivers/mmc/core/sdio.c
===================================================================
--- mmc.orig/drivers/mmc/core/sdio.c	2007-08-07 07:27:31.000000000 +0100
+++ mmc/drivers/mmc/core/sdio.c	2007-08-07 07:30:58.000000000 +0100
@@ -148,10 +148,25 @@
 	return ret;
 }
 
+static int sdio_modify_cccr(struct mmc_card *card, unsigned reg,
+	u8 val, u8 mask)
+{
+	u8 old;
+	int ret;
+
+	ret = mmc_io_rw_direct(card, 0, 0, reg, 0, &old);
+	if (ret)
+		return ret;
+
+	val = (old & ~mask) | val;
+
+	ret = mmc_io_rw_direct(card, 1, 0, reg, val, NULL);
+	return ret;
+}
+
 static int sdio_enable_wide(struct mmc_card *card)
 {
 	int ret;
-	u8 ctrl;
 
 	if (!(card->host->caps & MMC_CAP_4_BIT_DATA))
 		return 0;
@@ -159,13 +174,8 @@
 	if (card->cccr.low_speed && !card->cccr.wide_bus)
 		return 0;
 
-	ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl);
-	if (ret)
-		return ret;
-
-	ctrl |= SDIO_BUS_WIDTH_4BIT;
-
-	ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL);
+	ret = sdio_modify_cccr(card, SDIO_CCCR_IF, SDIO_BUS_WIDTH_4BIT,
+		SDIO_BUS_WIDTH_MASK);
 	if (ret)
 		return ret;
 
@@ -334,6 +344,15 @@
 	mmc_set_clock(host, card->cis.max_dtr);
 
 	/*
+	 * Disable Card Detect resistor on DAT3 so all data lines are
+	 * loaded the same.
+	 */
+	err = sdio_modify_cccr(card, SDIO_CCCR_IF, SDIO_BUS_CD_DISABLE,
+		SDIO_BUS_CD_DISABLE);
+	if (err)
+		goto remove;
+
+	/*
 	 * Switch to wider bus (if supported).
 	 */
 	err = sdio_enable_wide(card);
Index: mmc/include/linux/mmc/sdio.h
===================================================================
--- mmc.orig/include/linux/mmc/sdio.h	2007-08-07 07:27:30.000000000 +0100
+++ mmc/include/linux/mmc/sdio.h	2007-08-07 07:27:31.000000000 +0100
@@ -94,6 +94,7 @@
 
 #define  SDIO_BUS_WIDTH_1BIT	0x00
 #define  SDIO_BUS_WIDTH_4BIT	0x02
+#define  SDIO_BUS_WIDTH_MASK	0x03
 
 #define  SDIO_BUS_CD_DISABLE     0x80	/* disable pull-up on DAT3 (pin 1) */
 

  parent reply	other threads:[~2007-08-07 12:57 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-31 15:36 sdio: enhance IO_RW_EXTENDED support David Vrabel
2007-07-31 15:36 ` sdio: parameterize SDIO FBR register defines David Vrabel
2007-08-04 13:26   ` Pierre Ossman
2007-08-06 10:14     ` David Vrabel
2007-08-06 14:58       ` Pierre Ossman
2007-07-31 15:36 ` sdio: set the functions' block size David Vrabel
2007-08-04 13:30   ` Pierre Ossman
2007-08-06 10:04     ` David Vrabel
2007-07-31 15:36 ` sdio: extend sdio_readsb() and friends to handle any length of buffer David Vrabel
2007-08-04 13:35   ` Pierre Ossman
2007-08-04 13:23 ` sdio: enhance IO_RW_EXTENDED support Pierre Ossman
2007-08-06 10:31   ` David Vrabel
2007-08-06 15:12     ` Pierre Ossman
2007-08-06 15:32       ` David Vrabel
2007-08-06 18:06         ` Pierre Ossman
2007-08-06 20:01         ` Pierre Ossman
2007-08-07 12:51           ` David Vrabel
2007-08-07 12:53             ` [patch 1/4] sdio: parameterize SDIO FBR register defines David Vrabel
2007-08-07 12:54             ` [patch 2/4] sdio: set the functions' block size David Vrabel
2007-08-07 13:38               ` Pierre Ossman
2007-08-07 17:20                 ` David Vrabel
2007-08-07 17:54                   ` Pierre Ossman
2007-08-08  9:46                     ` David Vrabel
2007-08-08 10:06                       ` Pierre Ossman
2007-08-08 10:19                         ` David Vrabel
2007-08-07 12:55             ` [patch 3/4] sdio: extend sdio_readsb() and friends to handle any length of buffer David Vrabel
2007-08-07 13:42               ` Pierre Ossman
2007-08-07 20:17               ` Pierre Ossman
2007-08-08 10:19                 ` David Vrabel
2007-08-08 10:37                   ` Pierre Ossman
2007-08-08 13:22                     ` David Vrabel
2007-08-08 13:23                       ` [patch 1/3] sdio: add SDIO_FBR_BASE(f) macro David Vrabel
2007-08-08 13:23                       ` [patch 2/3] sdio: set the functions' block size David Vrabel
2007-08-08 13:24                       ` [patch 3/3] sdio: extend sdio_readsb() and friends to handle any length of buffer David Vrabel
2007-08-08 16:55                       ` [patch 3/4] " Pierre Ossman
2007-08-07 12:55             ` David Vrabel [this message]
2007-08-07 13:43               ` [patch 4/4] sdio: disable CD resistor Pierre Ossman
2007-08-07 14:46                 ` David Vrabel
2007-08-07 15:08                   ` Pierre Ossman
2007-08-07 13:33             ` sdio: enhance IO_RW_EXTENDED support Pierre Ossman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=46B86BDF.8050700@csr.com \
    --to=david.vrabel@csr.com \
    --cc=drzeus-list@drzeus.cx \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.