1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef ASMARM_ARCH_MMC_H 3*4882a593Smuzhiyun #define ASMARM_ARCH_MMC_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <linux/interrupt.h> 6*4882a593Smuzhiyun #include <linux/mmc/host.h> 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun struct device; 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun /* board specific SDHC data, optional. 11*4882a593Smuzhiyun * If not present, a writable card with 3,3V is assumed. 12*4882a593Smuzhiyun */ 13*4882a593Smuzhiyun struct imxmmc_platform_data { 14*4882a593Smuzhiyun /* Return values for the get_ro callback should be: 15*4882a593Smuzhiyun * 0 for a read/write card 16*4882a593Smuzhiyun * 1 for a read-only card 17*4882a593Smuzhiyun * -ENOSYS when not supported (equal to NULL callback) 18*4882a593Smuzhiyun * or a negative errno value when something bad happened 19*4882a593Smuzhiyun */ 20*4882a593Smuzhiyun int (*get_ro)(struct device *); 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun /* board specific hook to (de)initialize the SD slot. 23*4882a593Smuzhiyun * The board code can call 'handler' on a card detection 24*4882a593Smuzhiyun * change giving data as argument. 25*4882a593Smuzhiyun */ 26*4882a593Smuzhiyun int (*init)(struct device *dev, irq_handler_t handler, void *data); 27*4882a593Smuzhiyun void (*exit)(struct device *dev, void *data); 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun /* available voltages. If not given, assume 30*4882a593Smuzhiyun * MMC_VDD_32_33 | MMC_VDD_33_34 31*4882a593Smuzhiyun */ 32*4882a593Smuzhiyun unsigned int ocr_avail; 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun /* adjust slot voltage */ 35*4882a593Smuzhiyun void (*setpower)(struct device *, unsigned int vdd); 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun /* enable card detect using DAT3 */ 38*4882a593Smuzhiyun int dat3_card_detect; 39*4882a593Smuzhiyun }; 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun #endif 42