About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Documentation / devicetree / bindings / mmc / ti-omap-hsmmc.txt




Custom Search

Based on kernel version 4.0. Page generated on 2015-04-14 21:21 EST.

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	
6	This file documents differences between the core properties described
7	by mmc.txt and the properties used by the omap_hsmmc driver.
8	
9	Required properties:
10	- compatible:
11	 Should be "ti,omap2-hsmmc", for OMAP2 controllers
12	 Should be "ti,omap3-hsmmc", for OMAP3 controllers
13	 Should be "ti,omap3-pre-es3-hsmmc" for OMAP3 controllers pre ES3.0
14	 Should be "ti,omap4-hsmmc", for OMAP4 controllers
15	 Should be "ti,am33xx-hsmmc", for AM335x controllers
16	- ti,hwmods: Must be "mmc<n>", n is controller instance starting 1
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
22	ti,non-removable: non-removable slot (like eMMC)
23	ti,needs-special-reset: Requires a special softreset sequence
24	ti,needs-special-hs-handling: HSMMC IP needs special setting for handling High Speed
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]
47	
48		mmc1: mmc@0x4809c000 {
49			compatible = "ti,omap4-hsmmc";
50			reg = <0x4809c000 0x400>;
51			ti,hwmods = "mmc1";
52			ti,dual-volt;
53			bus-width = <4>;
54			vmmc-supply = <&vmmc>; /* phandle to regulator node */
55			ti,non-removable;
56			dmas = <&edma 24
57				&edma 25>;
58			dma-names = "tx", "rx";
59		};
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		};
Hide Line Numbers
About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Information is copyright its respective author. All material is available from the Linux Kernel Source distributed under a GPL License. This page is provided as a free service by mjmwired.net.