1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * include/linux/mmc/sd.h 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 2005-2007 Pierre Ossman, All Rights Reserved. 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef LINUX_MMC_SD_H 9*4882a593Smuzhiyun #define LINUX_MMC_SD_H 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun /* SD commands type argument response */ 12*4882a593Smuzhiyun /* class 0 */ 13*4882a593Smuzhiyun /* This is basically the same command as for MMC with some quirks. */ 14*4882a593Smuzhiyun #define SD_SEND_RELATIVE_ADDR 3 /* bcr R6 */ 15*4882a593Smuzhiyun #define SD_SEND_IF_COND 8 /* bcr [11:0] See below R7 */ 16*4882a593Smuzhiyun #define SD_SWITCH_VOLTAGE 11 /* ac R1 */ 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun /* class 10 */ 19*4882a593Smuzhiyun #define SD_SWITCH 6 /* adtc [31:0] See below R1 */ 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun /* class 5 */ 22*4882a593Smuzhiyun #define SD_ERASE_WR_BLK_START 32 /* ac [31:0] data addr R1 */ 23*4882a593Smuzhiyun #define SD_ERASE_WR_BLK_END 33 /* ac [31:0] data addr R1 */ 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun /* Application commands */ 26*4882a593Smuzhiyun #define SD_APP_SET_BUS_WIDTH 6 /* ac [1:0] bus width R1 */ 27*4882a593Smuzhiyun #define SD_APP_SD_STATUS 13 /* adtc R1 */ 28*4882a593Smuzhiyun #define SD_APP_SEND_NUM_WR_BLKS 22 /* adtc R1 */ 29*4882a593Smuzhiyun #define SD_APP_OP_COND 41 /* bcr [31:0] OCR R3 */ 30*4882a593Smuzhiyun #define SD_APP_SEND_SCR 51 /* adtc R1 */ 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun /* OCR bit definitions */ 33*4882a593Smuzhiyun #define SD_OCR_S18R (1 << 24) /* 1.8V switching request */ 34*4882a593Smuzhiyun #define SD_ROCR_S18A SD_OCR_S18R /* 1.8V switching accepted by card */ 35*4882a593Smuzhiyun #define SD_OCR_XPC (1 << 28) /* SDXC power control */ 36*4882a593Smuzhiyun #define SD_OCR_CCS (1 << 30) /* Card Capacity Status */ 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun /* 39*4882a593Smuzhiyun * SD_SWITCH argument format: 40*4882a593Smuzhiyun * 41*4882a593Smuzhiyun * [31] Check (0) or switch (1) 42*4882a593Smuzhiyun * [30:24] Reserved (0) 43*4882a593Smuzhiyun * [23:20] Function group 6 44*4882a593Smuzhiyun * [19:16] Function group 5 45*4882a593Smuzhiyun * [15:12] Function group 4 46*4882a593Smuzhiyun * [11:8] Function group 3 47*4882a593Smuzhiyun * [7:4] Function group 2 48*4882a593Smuzhiyun * [3:0] Function group 1 49*4882a593Smuzhiyun */ 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun /* 52*4882a593Smuzhiyun * SD_SEND_IF_COND argument format: 53*4882a593Smuzhiyun * 54*4882a593Smuzhiyun * [31:12] Reserved (0) 55*4882a593Smuzhiyun * [11:8] Host Voltage Supply Flags 56*4882a593Smuzhiyun * [7:0] Check Pattern (0xAA) 57*4882a593Smuzhiyun */ 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun /* 60*4882a593Smuzhiyun * SCR field definitions 61*4882a593Smuzhiyun */ 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun #define SCR_SPEC_VER_0 0 /* Implements system specification 1.0 - 1.01 */ 64*4882a593Smuzhiyun #define SCR_SPEC_VER_1 1 /* Implements system specification 1.10 */ 65*4882a593Smuzhiyun #define SCR_SPEC_VER_2 2 /* Implements system specification 2.00-3.0X */ 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun /* 68*4882a593Smuzhiyun * SD bus widths 69*4882a593Smuzhiyun */ 70*4882a593Smuzhiyun #define SD_BUS_WIDTH_1 0 71*4882a593Smuzhiyun #define SD_BUS_WIDTH_4 2 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun /* 74*4882a593Smuzhiyun * SD_SWITCH mode 75*4882a593Smuzhiyun */ 76*4882a593Smuzhiyun #define SD_SWITCH_CHECK 0 77*4882a593Smuzhiyun #define SD_SWITCH_SET 1 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun /* 80*4882a593Smuzhiyun * SD_SWITCH function groups 81*4882a593Smuzhiyun */ 82*4882a593Smuzhiyun #define SD_SWITCH_GRP_ACCESS 0 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun /* 85*4882a593Smuzhiyun * SD_SWITCH access modes 86*4882a593Smuzhiyun */ 87*4882a593Smuzhiyun #define SD_SWITCH_ACCESS_DEF 0 88*4882a593Smuzhiyun #define SD_SWITCH_ACCESS_HS 1 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun /* 91*4882a593Smuzhiyun * Erase/discard 92*4882a593Smuzhiyun */ 93*4882a593Smuzhiyun #define SD_ERASE_ARG 0x00000000 94*4882a593Smuzhiyun #define SD_DISCARD_ARG 0x00000001 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun #endif /* LINUX_MMC_SD_H */ 97