tmio.h 4.8 KB
Newer Older
1 2 3
#ifndef MFD_TMIO_H
#define MFD_TMIO_H

4
#include <linux/device.h>
5
#include <linux/fb.h>
6
#include <linux/io.h>
7
#include <linux/jiffies.h>
8
#include <linux/mmc/card.h>
9
#include <linux/platform_device.h>
10
#include <linux/pm_runtime.h>
11

12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
#define tmio_ioread8(addr) readb(addr)
#define tmio_ioread16(addr) readw(addr)
#define tmio_ioread16_rep(r, b, l) readsw(r, b, l)
#define tmio_ioread32(addr) \
	(((u32) readw((addr))) | (((u32) readw((addr) + 2)) << 16))

#define tmio_iowrite8(val, addr) writeb((val), (addr))
#define tmio_iowrite16(val, addr) writew((val), (addr))
#define tmio_iowrite16_rep(r, b, l) writesw(r, b, l)
#define tmio_iowrite32(val, addr) \
	do { \
	writew((val),       (addr)); \
	writew((val) >> 16, (addr) + 2); \
	} while (0)

27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
#define CNF_CMD     0x04
#define CNF_CTL_BASE   0x10
#define CNF_INT_PIN  0x3d
#define CNF_STOP_CLK_CTL 0x40
#define CNF_GCLK_CTL 0x41
#define CNF_SD_CLK_MODE 0x42
#define CNF_PIN_STATUS 0x44
#define CNF_PWR_CTL_1 0x48
#define CNF_PWR_CTL_2 0x49
#define CNF_PWR_CTL_3 0x4a
#define CNF_CARD_DETECT_MODE 0x4c
#define CNF_SD_SLOT 0x50
#define CNF_EXT_GCLK_CTL_1 0xf0
#define CNF_EXT_GCLK_CTL_2 0xf1
#define CNF_EXT_GCLK_CTL_3 0xf9
#define CNF_SD_LED_EN_1 0xfa
#define CNF_SD_LED_EN_2 0xfe

#define   SDCREN 0x2   /* Enable access to MMC CTL regs. (flag in COMMAND_REG)*/

#define sd_config_write8(base, shift, reg, val) \
	tmio_iowrite8((val), (base) + ((reg) << (shift)))
#define sd_config_write16(base, shift, reg, val) \
	tmio_iowrite16((val), (base) + ((reg) << (shift)))
#define sd_config_write32(base, shift, reg, val) \
	do { \
		tmio_iowrite16((val), (base) + ((reg) << (shift)));   \
		tmio_iowrite16((val) >> 16, (base) + ((reg + 2) << (shift))); \
	} while (0)

57 58
/* tmio MMC platform flags */
#define TMIO_MMC_WRPROTECT_DISABLE	(1 << 0)
59 60 61 62 63
/*
 * Some controllers can support a 2-byte block size when the bus width
 * is configured in 4-bit mode.
 */
#define TMIO_MMC_BLKSZ_2BYTES		(1 << 1)
64 65 66 67
/*
 * Some controllers can support SDIO IRQ signalling.
 */
#define TMIO_MMC_SDIO_IRQ		(1 << 2)
S
Simon Horman 已提交
68 69 70 71 72
/*
 * Some controllers require waiting for the SD bus to become
 * idle before writing to some registers.
 */
#define TMIO_MMC_HAS_IDLE_WAIT		(1 << 4)
73 74 75 76 77 78
/*
 * A GPIO is used for card hotplug detection. We need an extra flag for this,
 * because 0 is a valid GPIO number too, and requiring users to specify
 * cd_gpio < 0 to disable GPIO hotplug would break backwards compatibility.
 */
#define TMIO_MMC_USE_GPIO_CD		(1 << 5)
79

80 81 82 83 84 85 86
/*
 * Some controllers doesn't have over 0x100 register.
 * it is used to checking accessibility of
 * CTL_SD_CARD_CLK_CTL / CTL_CLK_AND_WAIT_CTL
 */
#define TMIO_MMC_HAVE_HIGH_REG		(1 << 6)

87 88 89 90 91 92
/*
 * Some controllers have CMD12 automatically
 * issue/non-issue register
 */
#define TMIO_MMC_HAVE_CMD12_CTRL	(1 << 7)

93 94 95 96 97
/*
 * Some controllers needs to set 1 on SDIO status reserved bits
 */
#define TMIO_MMC_SDIO_STATUS_QUIRK	(1 << 8)

98 99 100 101 102
/*
 * Some controllers have DMA enable/disable register
 */
#define TMIO_MMC_HAVE_CTL_DMA_REG	(1 << 9)

103 104 105 106 107
/*
 * Some controllers allows to set SDx actual clock
 */
#define TMIO_MMC_CLK_ACTUAL		(1 << 10)

108 109 110 111 112
int tmio_core_mmc_enable(void __iomem *cnf, int shift, unsigned long base);
int tmio_core_mmc_resume(void __iomem *cnf, int shift, unsigned long base);
void tmio_core_mmc_pwr(void __iomem *cnf, int shift, int state);
void tmio_core_mmc_clk_div(void __iomem *cnf, int shift, int state);

113 114
struct dma_chan;

115 116 117
struct tmio_mmc_dma {
	void *chan_priv_tx;
	void *chan_priv_rx;
118 119
	int slave_id_tx;
	int slave_id_rx;
120
	int alignment_shift;
121
	dma_addr_t dma_rx_offset;
122
	bool (*filter)(struct dma_chan *chan, void *arg);
123 124
};

S
Simon Horman 已提交
125 126
struct tmio_mmc_host;

127 128 129 130
/*
 * data for the MMC controller
 */
struct tmio_mmc_data {
131
	unsigned int			hclk;
132
	unsigned long			capabilities;
133
	unsigned long			capabilities2;
134
	unsigned long			flags;
135
	unsigned long			bus_shift;
136
	u32				ocr_mask;	/* available voltages */
137
	struct tmio_mmc_dma		*dma;
138
	unsigned int			cd_gpio;
139
	void (*set_pwr)(struct platform_device *host, int state);
140
	void (*set_clk_div)(struct platform_device *host, int state);
S
Simon Horman 已提交
141
	int (*write16_hook)(struct tmio_mmc_host *host, int addr);
142 143 144
	/* clock management callbacks */
	int (*clk_enable)(struct platform_device *pdev, unsigned int *f);
	void (*clk_disable)(struct platform_device *pdev);
145 146
	int (*multi_io_quirk)(struct mmc_card *card,
			      unsigned int direction, int blk_size);
147 148
};

149 150 151 152 153 154 155 156 157
/*
 * data for the NAND controller
 */
struct tmio_nand_data {
	struct nand_bbt_descr	*badblock_pattern;
	struct mtd_partition	*partition;
	unsigned int		num_partitions;
};

158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
#define FBIO_TMIO_ACC_WRITE	0x7C639300
#define FBIO_TMIO_ACC_SYNC	0x7C639301

struct tmio_fb_data {
	int			(*lcd_set_power)(struct platform_device *fb_dev,
								bool on);
	int			(*lcd_mode)(struct platform_device *fb_dev,
					const struct fb_videomode *mode);
	int			num_modes;
	struct fb_videomode	*modes;

	/* in mm: size of screen */
	int			height;
	int			width;
};


175
#endif