.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
---|
1 | 2 | /* |
---|
2 | 3 | * linux/drivers/mmc/host/wbsd.c - Winbond W83L51xD SD/MMC driver |
---|
3 | 4 | * |
---|
4 | 5 | * Copyright (C) 2004-2007 Pierre Ossman, All Rights Reserved. |
---|
5 | | - * |
---|
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 |
---|
8 | | - * the Free Software Foundation; either version 2 of the License, or (at |
---|
9 | | - * your option) any later version. |
---|
10 | | - * |
---|
11 | 6 | * |
---|
12 | 7 | * Warning! |
---|
13 | 8 | * |
---|
.. | .. |
---|
33 | 28 | #include <linux/pnp.h> |
---|
34 | 29 | #include <linux/highmem.h> |
---|
35 | 30 | #include <linux/mmc/host.h> |
---|
| 31 | +#include <linux/mmc/mmc.h> |
---|
| 32 | +#include <linux/mmc/sd.h> |
---|
36 | 33 | #include <linux/scatterlist.h> |
---|
37 | 34 | #include <linux/slab.h> |
---|
38 | 35 | |
---|
.. | .. |
---|
775 | 772 | * interrupts. |
---|
776 | 773 | */ |
---|
777 | 774 | switch (cmd->opcode) { |
---|
778 | | - case 11: |
---|
779 | | - case 17: |
---|
780 | | - case 18: |
---|
781 | | - case 20: |
---|
782 | | - case 24: |
---|
783 | | - case 25: |
---|
784 | | - case 26: |
---|
785 | | - case 27: |
---|
786 | | - case 30: |
---|
787 | | - case 42: |
---|
788 | | - case 56: |
---|
| 775 | + case SD_SWITCH_VOLTAGE: |
---|
| 776 | + case MMC_READ_SINGLE_BLOCK: |
---|
| 777 | + case MMC_READ_MULTIPLE_BLOCK: |
---|
| 778 | + case MMC_WRITE_DAT_UNTIL_STOP: |
---|
| 779 | + case MMC_WRITE_BLOCK: |
---|
| 780 | + case MMC_WRITE_MULTIPLE_BLOCK: |
---|
| 781 | + case MMC_PROGRAM_CID: |
---|
| 782 | + case MMC_PROGRAM_CSD: |
---|
| 783 | + case MMC_SEND_WRITE_PROT: |
---|
| 784 | + case MMC_LOCK_UNLOCK: |
---|
| 785 | + case MMC_GEN_CMD: |
---|
789 | 786 | break; |
---|
790 | 787 | |
---|
791 | 788 | /* ACMDs. We don't keep track of state, so we just treat them |
---|
792 | 789 | * like any other command. */ |
---|
793 | | - case 51: |
---|
| 790 | + case SD_APP_SEND_SCR: |
---|
794 | 791 | break; |
---|
795 | 792 | |
---|
796 | 793 | default: |
---|
.. | .. |
---|
1706 | 1703 | */ |
---|
1707 | 1704 | wbsd_init_device(host); |
---|
1708 | 1705 | |
---|
1709 | | - mmc_add_host(mmc); |
---|
| 1706 | + ret = mmc_add_host(mmc); |
---|
| 1707 | + if (ret) { |
---|
| 1708 | + if (!pnp) |
---|
| 1709 | + wbsd_chip_poweroff(host); |
---|
| 1710 | + |
---|
| 1711 | + wbsd_release_resources(host); |
---|
| 1712 | + wbsd_free_mmc(dev); |
---|
| 1713 | + return ret; |
---|
| 1714 | + } |
---|
1710 | 1715 | |
---|
1711 | 1716 | pr_info("%s: W83L51xD", mmc_hostname(mmc)); |
---|
1712 | 1717 | if (host->chip_id != 0) |
---|