diff options
| author | Simon Horman <horms@verge.net.au> | 2011-06-20 19:00:10 -0400 |
|---|---|---|
| committer | Chris Ball <cjb@laptop.org> | 2011-07-20 17:20:57 -0400 |
| commit | 973ed3af1a570612771ed10dec6506c757767668 (patch) | |
| tree | db993034cacfcc3f3388c43d96459a123adc32a2 /include/linux/mfd | |
| parent | a11862d3389d4304211eed0758f510d5e573f93c (diff) | |
mmc: sdhi: Add write16_hook
Some controllers require waiting for the bus to become idle
before writing to some registers. I have implemented this
by adding a hook to sd_ctrl_write16() and implementing
a hook for SDHI which waits for the bus to become idle.
Cc: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Cc: Magnus Damm <magnus.damm@gmail.com>
Signed-off-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Chris Ball <cjb@laptop.org>
Diffstat (limited to 'include/linux/mfd')
| -rw-r--r-- | include/linux/mfd/tmio.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/include/linux/mfd/tmio.h b/include/linux/mfd/tmio.h index 5a90266c3a5a..0dc98044d8b7 100644 --- a/include/linux/mfd/tmio.h +++ b/include/linux/mfd/tmio.h | |||
| @@ -68,6 +68,11 @@ | |||
| 68 | * controller and report the event to the driver. | 68 | * controller and report the event to the driver. |
| 69 | */ | 69 | */ |
| 70 | #define TMIO_MMC_HAS_COLD_CD (1 << 3) | 70 | #define TMIO_MMC_HAS_COLD_CD (1 << 3) |
| 71 | /* | ||
| 72 | * Some controllers require waiting for the SD bus to become | ||
| 73 | * idle before writing to some registers. | ||
| 74 | */ | ||
| 75 | #define TMIO_MMC_HAS_IDLE_WAIT (1 << 4) | ||
| 71 | 76 | ||
| 72 | int tmio_core_mmc_enable(void __iomem *cnf, int shift, unsigned long base); | 77 | int tmio_core_mmc_enable(void __iomem *cnf, int shift, unsigned long base); |
| 73 | int tmio_core_mmc_resume(void __iomem *cnf, int shift, unsigned long base); | 78 | int tmio_core_mmc_resume(void __iomem *cnf, int shift, unsigned long base); |
| @@ -80,6 +85,8 @@ struct tmio_mmc_dma { | |||
| 80 | int alignment_shift; | 85 | int alignment_shift; |
| 81 | }; | 86 | }; |
| 82 | 87 | ||
| 88 | struct tmio_mmc_host; | ||
| 89 | |||
| 83 | /* | 90 | /* |
| 84 | * data for the MMC controller | 91 | * data for the MMC controller |
| 85 | */ | 92 | */ |
| @@ -94,6 +101,7 @@ struct tmio_mmc_data { | |||
| 94 | void (*set_pwr)(struct platform_device *host, int state); | 101 | void (*set_pwr)(struct platform_device *host, int state); |
| 95 | void (*set_clk_div)(struct platform_device *host, int state); | 102 | void (*set_clk_div)(struct platform_device *host, int state); |
| 96 | int (*get_cd)(struct platform_device *host); | 103 | int (*get_cd)(struct platform_device *host); |
| 104 | int (*write16_hook)(struct tmio_mmc_host *host, int addr); | ||
| 97 | }; | 105 | }; |
| 98 | 106 | ||
| 99 | static inline void tmio_mmc_cd_wakeup(struct tmio_mmc_data *pdata) | 107 | static inline void tmio_mmc_cd_wakeup(struct tmio_mmc_data *pdata) |
