diff options
-rw-r--r-- | drivers/mmc/wbsd.c | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/drivers/mmc/wbsd.c b/drivers/mmc/wbsd.c index cf16e44c0301..c1dd6ad8dab3 100644 --- a/drivers/mmc/wbsd.c +++ b/drivers/mmc/wbsd.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * linux/drivers/mmc/wbsd.c - Winbond W83L51xD SD/MMC driver | 2 | * linux/drivers/mmc/wbsd.c - Winbond W83L51xD SD/MMC driver |
3 | * | 3 | * |
4 | * Copyright (C) 2004-2005 Pierre Ossman, All Rights Reserved. | 4 | * Copyright (C) 2004-2006 Pierre Ossman, All Rights Reserved. |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
@@ -910,6 +910,45 @@ static void wbsd_request(struct mmc_host *mmc, struct mmc_request *mrq) | |||
910 | */ | 910 | */ |
911 | if (cmd->data && (cmd->error == MMC_ERR_NONE)) { | 911 | if (cmd->data && (cmd->error == MMC_ERR_NONE)) { |
912 | /* | 912 | /* |
913 | * The hardware is so delightfully stupid that it has a list | ||
914 | * of "data" commands. If a command isn't on this list, it'll | ||
915 | * just go back to the idle state and won't send any data | ||
916 | * interrupts. | ||
917 | */ | ||
918 | switch (cmd->opcode) { | ||
919 | case 11: | ||
920 | case 17: | ||
921 | case 18: | ||
922 | case 20: | ||
923 | case 24: | ||
924 | case 25: | ||
925 | case 26: | ||
926 | case 27: | ||
927 | case 30: | ||
928 | case 42: | ||
929 | case 56: | ||
930 | break; | ||
931 | |||
932 | /* ACMDs. We don't keep track of state, so we just treat them | ||
933 | * like any other command. */ | ||
934 | case 51: | ||
935 | break; | ||
936 | |||
937 | default: | ||
938 | #ifdef CONFIG_MMC_DEBUG | ||
939 | printk(KERN_WARNING "%s: Data command %d is not " | ||
940 | "supported by this controller.\n", | ||
941 | mmc_hostname(host->mmc), cmd->opcode); | ||
942 | #endif | ||
943 | cmd->data->error = MMC_ERR_INVALID; | ||
944 | |||
945 | if (cmd->data->stop) | ||
946 | wbsd_send_command(host, cmd->data->stop); | ||
947 | |||
948 | goto done; | ||
949 | }; | ||
950 | |||
951 | /* | ||
913 | * Dirty fix for hardware bug. | 952 | * Dirty fix for hardware bug. |
914 | */ | 953 | */ |
915 | if (host->dma == -1) | 954 | if (host->dma == -1) |