Commit | Line | Data |
---|---|---|
46856a68 RN |
1 | * TI Highspeed MMC host controller for OMAP |
2 | ||
3 | The Highspeed MMC Host Controller on TI OMAP family | |
4 | provides an interface for MMC, SD, and SDIO types of memory cards. | |
5 | ||
4efafee0 CB |
6 | This file documents differences between the core properties described |
7 | by mmc.txt and the properties used by the omap_hsmmc driver. | |
8 | ||
46856a68 RN |
9 | Required properties: |
10 | - compatible: | |
11 | Should be "ti,omap2-hsmmc", for OMAP2 controllers | |
12 | Should be "ti,omap3-hsmmc", for OMAP3 controllers | |
59445b10 | 13 | Should be "ti,omap3-pre-es3-hsmmc" for OMAP3 controllers pre ES3.0 |
46856a68 | 14 | Should be "ti,omap4-hsmmc", for OMAP4 controllers |
2cd3a2a5 | 15 | Should be "ti,am33xx-hsmmc", for AM335x controllers |
46856a68 | 16 | - ti,hwmods: Must be "mmc<n>", n is controller instance starting 1 |
46856a68 RN |
17 | |
18 | Optional properties: | |
19 | ti,dual-volt: boolean, supports dual voltage cards | |
20 | <supply-name>-supply: phandle to the regulator device tree node | |
21 | "supply-name" examples are "vmmc", "vmmc_aux" etc | |
46856a68 RN |
22 | ti,non-removable: non-removable slot (like eMMC) |
23 | ti,needs-special-reset: Requires a special softreset sequence | |
cd587096 | 24 | ti,needs-special-hs-handling: HSMMC IP needs special setting for handling High Speed |
55b4452b MP |
25 | dmas: List of DMA specifiers with the controller specific format |
26 | as described in the generic DMA client binding. A tx and rx | |
27 | specifier is required. | |
28 | dma-names: List of DMA request names. These strings correspond | |
29 | 1:1 with the DMA specifiers listed in dmas. The string naming is | |
30 | to be "rx" and "tx" for RX and TX DMA requests, respectively. | |
31 | ||
32 | Examples: | |
33 | ||
34 | [hwmod populated DMA resources] | |
35 | ||
36 | mmc1: mmc@0x4809c000 { | |
37 | compatible = "ti,omap4-hsmmc"; | |
38 | reg = <0x4809c000 0x400>; | |
39 | ti,hwmods = "mmc1"; | |
40 | ti,dual-volt; | |
41 | bus-width = <4>; | |
42 | vmmc-supply = <&vmmc>; /* phandle to regulator node */ | |
43 | ti,non-removable; | |
44 | }; | |
45 | ||
46 | [generic DMA request binding] | |
46856a68 | 47 | |
46856a68 RN |
48 | mmc1: mmc@0x4809c000 { |
49 | compatible = "ti,omap4-hsmmc"; | |
50 | reg = <0x4809c000 0x400>; | |
51 | ti,hwmods = "mmc1"; | |
52 | ti,dual-volt; | |
7f217794 | 53 | bus-width = <4>; |
46856a68 RN |
54 | vmmc-supply = <&vmmc>; /* phandle to regulator node */ |
55 | ti,non-removable; | |
55b4452b MP |
56 | dmas = <&edma 24 |
57 | &edma 25>; | |
58 | dma-names = "tx", "rx"; | |
46856a68 | 59 | }; |
455e5cd6 AF |
60 | |
61 | [workaround for missing swakeup on am33xx] | |
62 | ||
63 | This SOC is missing the swakeup line, it will not detect SDIO irq | |
64 | while in suspend. | |
65 | ||
66 | ------ | |
67 | | PRCM | | |
68 | ------ | |
69 | ^ | | |
70 | swakeup | | fclk | |
71 | | v | |
72 | ------ ------- ----- | |
73 | | card | -- CIRQ --> | hsmmc | -- IRQ --> | CPU | | |
74 | ------ ------- ----- | |
75 | ||
76 | In suspend the fclk is off and the module is disfunctional. Even register reads | |
77 | will fail. A small logic in the host will request fclk restore, when an | |
78 | external event is detected. Once the clock is restored, the host detects the | |
79 | event normally. Since am33xx doesn't have this line it never wakes from | |
80 | suspend. | |
81 | ||
82 | The workaround is to reconfigure the dat1 line as a GPIO upon suspend. To make | |
83 | this work, we need to set the named pinctrl states "default" and "idle". | |
84 | Prepare idle to remux dat1 as a gpio, and default to remux it back as sdio | |
85 | dat1. The MMC driver will then toggle between idle and default state during | |
86 | runtime. | |
87 | ||
88 | In summary: | |
89 | 1. select matching 'compatible' section, see example below. | |
90 | 2. specify pinctrl states "default" and "idle", "sleep" is optional. | |
91 | 3. specify the gpio irq used for detecting sdio irq in suspend | |
92 | ||
93 | If configuration is incomplete, a warning message is emitted "falling back to | |
94 | polling". Also check the "sdio irq mode" in /sys/kernel/debug/mmc0/regs. Mind | |
95 | not every application needs SDIO irq, e.g. MMC cards. | |
96 | ||
97 | mmc1: mmc@48060100 { | |
98 | compatible = "ti,am33xx-hsmmc"; | |
99 | ... | |
100 | pinctrl-names = "default", "idle", "sleep" | |
101 | pinctrl-0 = <&mmc1_pins>; | |
102 | pinctrl-1 = <&mmc1_idle>; | |
103 | pinctrl-2 = <&mmc1_sleep>; | |
104 | ... | |
105 | interrupts-extended = <&intc 64 &gpio2 28 0>; | |
106 | }; | |
107 | ||
108 | mmc1_idle : pinmux_cirq_pin { | |
109 | pinctrl-single,pins = < | |
110 | 0x0f8 0x3f /* GPIO2_28 */ | |
111 | >; | |
112 | }; |