Hello.

On 09/19/2016 03:49 PM, Wolfram Sang wrote:

We need to add R1 without CRC support, refactor the bus width routine a
little and extend a quirk check. To support "non-removable;" we need a
workaround which will be hopefully removed when reworking PM soon.

Signed-off-by: Wolfram Sang <wsa+rene...@sang-engineering.com>
---
 drivers/mmc/host/tmio_mmc.h     |  3 +++
 drivers/mmc/host/tmio_mmc_pio.c | 38 ++++++++++++++++++++++++++------------
 2 files changed, 29 insertions(+), 12 deletions(-)

diff --git a/drivers/mmc/host/tmio_mmc.h b/drivers/mmc/host/tmio_mmc.h
index 4b501f2d529f6e..637581faf756b1 100644
--- a/drivers/mmc/host/tmio_mmc.h
+++ b/drivers/mmc/host/tmio_mmc.h
@@ -79,6 +79,9 @@
 #define        CLK_CTL_DIV_MASK        0xff
 #define        CLK_CTL_SCLKEN          BIT(8)

+#define CARD_OPT_WIDTH8                BIT(13)
+#define CARD_OPT_WIDTH         BIT(15)
+
 #define TMIO_BBS               512             /* Boot block size */

 /* Definitions for values the CTRL_SDIO_STATUS register can take. */
diff --git a/drivers/mmc/host/tmio_mmc_pio.c b/drivers/mmc/host/tmio_mmc_pio.c
index 46b5a456243b84..a0f05eb4f34490 100644
--- a/drivers/mmc/host/tmio_mmc_pio.c
+++ b/drivers/mmc/host/tmio_mmc_pio.c
[...]
@@ -922,14 +925,16 @@ static void tmio_mmc_power_off(struct tmio_mmc_host *host)
 static void tmio_mmc_set_bus_width(struct tmio_mmc_host *host,
                                unsigned char bus_width)
 {
-       switch (bus_width) {
-       case MMC_BUS_WIDTH_1:
-               sd_ctrl_write16(host, CTL_SD_MEM_CARD_OPT, 0x80e0);
-               break;
-       case MMC_BUS_WIDTH_4:
-               sd_ctrl_write16(host, CTL_SD_MEM_CARD_OPT, 0x00e0);
-               break;
-       }
+       u16 reg = sd_ctrl_read16(host, CTL_SD_MEM_CARD_OPT)
+                               & ~(CARD_OPT_WIDTH | CARD_OPT_WIDTH8);
+
+       /* reg now applies to MMC_BUS_WIDTH_4 */
+       if (bus_width == MMC_BUS_WIDTH_1)
+               reg |= CARD_OPT_WIDTH;
+       else if (bus_width == MMC_BUS_WIDTH_8)
+               reg |= CARD_OPT_WIDTH8;

   Why not *switch*?

[...]

MBR, Sergei

Reply via email to