1/* 2 * MMC definitions for OMAP2 3 * 4 * Copyright (C) 2006 Nokia Corporation 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 version 2 as 8 * published by the Free Software Foundation. 9 */ 10 11#ifndef __OMAP2_MMC_H 12#define __OMAP2_MMC_H 13 14#include <linux/types.h> 15#include <linux/device.h> 16#include <linux/mmc/host.h> 17 18#include <plat/board.h> 19 20#define OMAP15XX_NR_MMC 1 21#define OMAP16XX_NR_MMC 2 22#define OMAP1_MMC_SIZE 0x080 23#define OMAP1_MMC1_BASE 0xfffb7800 24#define OMAP1_MMC2_BASE 0xfffb7c00 /* omap16xx only */ 25 26#define OMAP24XX_NR_MMC 2 27#define OMAP34XX_NR_MMC 3 28#define OMAP44XX_NR_MMC 5 29#define OMAP2420_MMC_SIZE OMAP1_MMC_SIZE 30#define OMAP3_HSMMC_SIZE 0x200 31#define OMAP4_HSMMC_SIZE 0x1000 32#define OMAP2_MMC1_BASE 0x4809c000 33#define OMAP2_MMC2_BASE 0x480b4000 34#define OMAP3_MMC3_BASE 0x480ad000 35#define OMAP4_MMC4_BASE 0x480d1000 36#define OMAP4_MMC5_BASE 0x480d5000 37#define OMAP4_MMC_REG_OFFSET 0x100 38#define HSMMC5 (1 << 4) 39#define HSMMC4 (1 << 3) 40#define HSMMC3 (1 << 2) 41#define HSMMC2 (1 << 1) 42#define HSMMC1 (1 << 0) 43 44#define OMAP_MMC_MAX_SLOTS 2 45 46struct omap_mmc_platform_data { 47 /* back-link to device */ 48 struct device *dev; 49 50 /* number of slots per controller */ 51 unsigned nr_slots:2; 52 53 /* set if your board has components or wiring that limits the 54 * maximum frequency on the MMC bus */ 55 unsigned int max_freq; 56 57 /* switch the bus to a new slot */ 58 int (*switch_slot)(struct device *dev, int slot); 59 /* initialize board-specific MMC functionality, can be NULL if 60 * not supported */ 61 int (*init)(struct device *dev); 62 void (*cleanup)(struct device *dev); 63 void (*shutdown)(struct device *dev); 64 65 /* To handle board related suspend/resume functionality for MMC */ 66 int (*suspend)(struct device *dev, int slot); 67 int (*resume)(struct device *dev, int slot); 68 69 /* Return context loss count due to PM states changing */ 70 int (*get_context_loss_count)(struct device *dev); 71 72 u64 dma_mask; 73 74 struct omap_mmc_slot_data { 75 76 /* 4 wire signaling is optional, and is used for SD/SDIO/HSMMC; 77 * 8 wire signaling is also optional, and is used with HSMMC 78 */ 79 u8 wires; 80 81 /* 82 * nomux means "standard" muxing is wrong on this board, and 83 * that board-specific code handled it before common init logic. 84 */ 85 unsigned nomux:1; 86 87 /* switch pin can be for card detect (default) or card cover */ 88 unsigned cover:1; 89 90 /* use the internal clock */ 91 unsigned internal_clock:1; 92 93 /* nonremovable e.g. eMMC */ 94 unsigned nonremovable:1; 95 96 /* Try to sleep or power off when possible */ 97 unsigned power_saving:1; 98 99 /* If using power_saving and the MMC power is not to go off */ 100 unsigned no_off:1; 101 102 /* Regulator off remapped to sleep */ 103 unsigned vcc_aux_disable_is_sleep:1; 104 105 /* we can put the features above into this variable */ 106#define HSMMC_HAS_PBIAS (1 << 0) 107 unsigned features; 108 109 int switch_pin; /* gpio (card detect) */ 110 int gpio_wp; /* gpio (write protect) */ 111 112 int (*set_bus_mode)(struct device *dev, int slot, int bus_mode); 113 int (*set_power)(struct device *dev, int slot, 114 int power_on, int vdd); 115 int (*get_ro)(struct device *dev, int slot); 116 int (*set_sleep)(struct device *dev, int slot, int sleep, 117 int vdd, int cardsleep); 118 void (*remux)(struct device *dev, int slot, int power_on); 119 /* Call back before enabling / disabling regulators */ 120 void (*before_set_reg)(struct device *dev, int slot, 121 int power_on, int vdd); 122 /* Call back after enabling / disabling regulators */ 123 void (*after_set_reg)(struct device *dev, int slot, 124 int power_on, int vdd); 125 /* if we have special card, init it using this callback */ 126 void (*init_card)(struct mmc_card *card); 127 128 /* return MMC cover switch state, can be NULL if not supported. 129 * 130 * possible return values: 131 * 0 - closed 132 * 1 - open 133 */ 134 int (*get_cover_state)(struct device *dev, int slot); 135 136 const char *name; 137 u32 ocr_mask; 138 139 /* Card detection IRQs */ 140 int card_detect_irq; 141 int (*card_detect)(struct device *dev, int slot); 142 143 unsigned int ban_openended:1; 144 145 } slots[OMAP_MMC_MAX_SLOTS]; 146}; 147 148/* called from board-specific card detection service routine */ 149extern void omap_mmc_notify_cover_event(struct device *dev, int slot, 150 int is_closed); 151 152#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE) || \ 153 defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE) 154void omap1_init_mmc(struct omap_mmc_platform_data **mmc_data, 155 int nr_controllers); 156void omap2_init_mmc(struct omap_mmc_platform_data **mmc_data, 157 int nr_controllers); 158int omap_mmc_add(const char *name, int id, unsigned long base, 159 unsigned long size, unsigned int irq, 160 struct omap_mmc_platform_data *data); 161#else 162static inline void omap1_init_mmc(struct omap_mmc_platform_data **mmc_data, 163 int nr_controllers) 164{ 165} 166static inline void omap2_init_mmc(struct omap_mmc_platform_data **mmc_data, 167 int nr_controllers) 168{ 169} 170static inline int omap_mmc_add(const char *name, int id, unsigned long base, 171 unsigned long size, unsigned int irq, 172 struct omap_mmc_platform_data *data) 173{ 174 return 0; 175} 176 177#endif 178#endif 179