omap hsmmc device tree support
Subsystems (3)
v2 cover omap hsmmc device tree support
The series adds device tree support for OMAP hsmmc driver.
Changes in V2:
-1- Minor fixes based on comments from Grant. -2- Added a seperate compatible for omap3. -3- Added a new binding "ti,needs-special-reset" to handle some mmc modules which need special softreset sequence.
-4- Updated board dts files with "status = disable;" for unused mmc modules.
Rob,
I retained your ack on patch 1 despite the additional binding that I added to handle the special softreset sequence. Let me know if you have any issues with it.
Chris.
Patch 1 and Patch 2 apply cleanly on mmc-next and can be taken in from the mmc tree after relevent acks from DT folks.
Patch 3 and Patch 4 which update dts files, I plan to push via linux-omap/Tony's tree.
The series is tested on omap4sdp (both external and emmc), omap4panda amd omap3beagle boards.
Things to do:
-1- Card detect isn't functional and needs twl4030 gpio to be DT converted.
-2- pbias cell programming is missing and needs an OMAP control module driver.
Rajendra Nayak (4):
mmc: omap_hsmmc: Convert hsmmc driver to use device tree
mmc: omap_hsmmc: Avoid a regulator voltage change with dt arm/dts: OMAP4: Add mmc controller nodes and board data arm/dts: OMAP3: Add mmc controller nodes and board data
.../devicetree/bindings/mmc/ti-omap-hsmmc.txt | 33 +++++++ arch/arm/boot/dts/omap3-beagle.dts | 14 +++ arch/arm/boot/dts/omap3.dtsi | 16 ++++ arch/arm/boot/dts/omap4-panda.dts | 22 +++++ arch/arm/boot/dts/omap4-sdp.dts | 24 ++++++ arch/arm/boot/dts/omap4.dtsi | 31 +++++++ drivers/mmc/host/omap_hsmmc.c | 88 +++++++++++++++++++- 7 files changed, 227 insertions(+), 1 deletions(-) create mode 100644 Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
PATCH v2 1/4 mmc: omap_hsmmc: Convert hsmmc driver to use device tree
Define dt bindings for the ti-omap-hsmmc, and adapt the driver to extract data (which was earlier passed as platform_data) from device tree.
--- .../devicetree/bindings/mmc/ti-omap-hsmmc.txt | 33 +++++++++ drivers/mmc/host/omap_hsmmc.c | 73 ++++++++++++++++++++ 2 files changed, 106 insertions(+), 0 deletions(-) create mode 100644 Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt new file +33 -0
@@ -0,0 +1,33 @@ +* TI Highspeed MMC host controller for OMAP + +The Highspeed MMC Host Controller on TI OMAP family +provides an interface for MMC, SD, and SDIO types of memory cards. + +Required properties: +- compatible: + Should be "ti,omap2-hsmmc", for OMAP2 controllers + Should be "ti,omap3-hsmmc", for OMAP3 controllers + Should be "ti,omap4-hsmmc", for OMAP4 controllers +- ti,hwmods: Must be "mmc<n>", n is controller instance starting 1 +- reg : should contain hsmmc registers location and length + +Optional properties: +ti,dual-volt: boolean, supports dual voltage cards +<supply-name>-supply: phandle to the regulator device tree node +"supply-name" examples are "vmmc", "vmmc_aux" etc +ti,bus-width: Number of data lines, default assumed is 1 if the property is missing. +cd-gpios: GPIOs for card detection +wp-gpios: GPIOs for write protection +ti,non-removable: non-removable slot (like eMMC) +ti,needs-special-reset: Requires a special softreset sequence + +Example: + mmc1: mmc at 0x4809c000 { + compatible = "ti,omap4-hsmmc"; + reg = <0x4809c000 0x400>; + ti,hwmods = "mmc1"; + ti,dual-volt; + ti,bus-width = <4>; + vmmc-supply = <&vmmc>; /* phandle to regulator node */ + ti,non-removable; + };
drivers/mmc/host/omap_hsmmc.c +73 -0
97 lines not on this page · raw message
Signature · 1 line
1.7.1
PATCH v2 2/4 mmc: omap_hsmmc: Avoid a regulator voltage change with dt
In reply to Rajendra NayakWhen booting with Device tree, the omap_hsmmc driver does not program the pbias cell (inside OMAP control module) during a regulator voltage change.
In case of non-dt boot, this is handled using callbacks from within platform_data and implemented in machine code. To be able to do this with device tree, without invoking any machine code, a OMAP control module driver is needed which is yet missing.
The pbias cell is used to provide a 1.8v or 3.0v reference to the mmc/sd/sdio1 interface supporting both 1.8v and 3.0v voltages.
Until a OMAP control module driver is available to handle this, when booting with a device tree blob, never change the regulator voltage which might then require a pbias cell re-program. There are 2 instances where in the mmc regulator voltage can be changed.
-1- when the regulator is turned OFF.
-2- when attempting a switch to 1.8v from 3.0v for dual volt cards
This patch avoids a voltage change in both cases when booting from device tree, and hence compromises on power savings. Once the OMAP control module driver is available and hsmmc driver is modified to then do pbias programming even when booting with device tree, these limitaions can be removed to achieve better power savings.
--- drivers/mmc/host/omap_hsmmc.c | 15 ++++++++++++++- 1 files changed, 14 insertions(+), 1 deletions(-)
drivers/mmc/host/omap_hsmmc.c +14 -1
@@ -244,6 +244,13 @@ static int omap_hsmmc_set_power(struct device *dev, int slot, int power_on,*/ if (!host->vcc)return 0 ; +/* +* With DT, never turn OFF the regulator. This is because +* the pbias cell programming support is still missing when +* booting with Device tree +*/ +if (of_have_populated_dt () && !vdd) +return 0 ;if (mmc_slot (host).before_set_reg)mmc_slot (host).before_set_reg (dev, slot, power_on, vdd);
@@ -1516,7 +1523,13 @@ static void omap_hsmmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)* of external transceiver; but they all handle 1.8V. */ if ((OMAP_HSMMC_READ (host->base,HCTL ) &SDVSDET ) && - (ios->vdd ==DUAL_VOLT_OCR_BIT )) { + (ios->vdd ==DUAL_VOLT_OCR_BIT ) && +/* +* With pbias cell programming missing, this +* can't be allowed when booting with device +* tree. +*/ + (!of_have_populated_dt ())) {/* * The mmc_select_voltage fn of the core does * not seem to set the power_mode to
Signature · 1 line
1.7.1
PATCH v2 3/4 arm/dts: OMAP4: Add mmc controller nodes and board data
In reply to Rajendra NayakAdd omap mmc related device tree data for OMAP4. Currenly limited to only omap4-panda and omap4-sdp boards.
--- arch/arm/boot/dts/omap4-panda.dts | 22 ++++++++++++++++++++++ arch/arm/boot/dts/omap4-sdp.dts | 24 ++++++++++++++++++++++++ arch/arm/boot/dts/omap4.dtsi | 31 +++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+), 0 deletions(-)
arch/arm/boot/dts/omap4-panda.dts +22 -0
@@ -52,3 +52,25 @@ &i2c4 { clock-frequency = <400000>; }; + +&mmc1 { + vmmc-supply = <&vmmc>; + ti,bus-width = <8>; +}; + +&mmc2 { + status = "disable"; +}; + +&mmc3 { + status = "disable"; +}; + +&mmc4 { + status = "disable"; +}; + +&mmc5 { + ti,non-removable; + ti,bus-width = <4>; +};
arch/arm/boot/dts/omap4-sdp.dts +24 -0
@@ -70,3 +70,27 @@ reg = <0x1e>; }; }; + +&mmc1 { + vmmc-supply = <&vmmc>; + ti,bus-width = <8>; +}; + +&mmc2 { + vmmc-supply = <&vaux1>; + ti,bus-width = <8>; + ti,non-removable; +}; + +&mmc3 { + status = "disable"; +}; + +&mmc4 { + status = "disable"; +}; + +&mmc5 { + ti,bus-width = <4>; + ti,non-removable; +};
arch/arm/boot/dts/omap4.dtsi +31 -0
@@ -155,5 +155,36 @@ #size-cells = <0>; ti,hwmods = "i2c4"; }; + + mmc1: mmc at 1 { + compatible = "ti,omap4-hsmmc"; + ti,hwmods = "mmc1"; + ti,dual-volt; + ti,needs-special-reset; + }; + + mmc2: mmc at 2 { + compatible = "ti,omap4-hsmmc"; + ti,hwmods = "mmc2"; + ti,needs-special-reset; + }; + + mmc3: mmc at 3 { + compatible = "ti,omap4-hsmmc"; + ti,hwmods = "mmc3"; + ti,needs-special-reset; + }; + + mmc4: mmc at 4 { + compatible = "ti,omap4-hsmmc"; + ti,hwmods = "mmc4"; + ti,needs-special-reset; + }; + + mmc5: mmc at 5 { + compatible = "ti,omap4-hsmmc"; + ti,hwmods = "mmc5"; + ti,needs-special-reset; + }; }; };
Signature · 1 line
1.7.1
PATCH v2 4/4 arm/dts: OMAP3: Add mmc controller nodes and board data
In reply to Rajendra NayakAdd omap mmc related device tree data for OMAP3.
Currenly limited to only omap3-beagle board.
--- arch/arm/boot/dts/omap3-beagle.dts | 14 ++++++++++++++ arch/arm/boot/dts/omap3.dtsi | 16 ++++++++++++++++ 2 files changed, 30 insertions(+), 0 deletions(-)
arch/arm/boot/dts/omap3-beagle.dts +14 -0
@@ -47,3 +47,17 @@ reg = <0x50>; }; }; + +&mmc1 { + vmmc-supply = <&vmmc1>; + vmmc_aux-supply = <&vsim>; + ti,bus-width = <8>; +}; + +&mmc2 { + status = "disable"; +}; + +&mmc3 { + status = "disable"; +};
arch/arm/boot/dts/omap3.dtsi +16 -0
@@ -113,5 +113,21 @@ #size-cells = <0>; ti,hwmods = "i2c3"; }; + + mmc1: mmc at 1 { + compatible = "ti,omap3-hsmmc"; + ti,hwmods = "mmc1"; + ti,dual-volt; + }; + + mmc2: mmc at 2 { + compatible = "ti,omap3-hsmmc"; + ti,hwmods = "mmc2"; + }; + + mmc3: mmc at 3 { + compatible = "ti,omap3-hsmmc"; + ti,hwmods = "mmc3"; + }; }; };
Signature · 1 line
1.7.1
v2 cover omap hsmmc device tree support
In reply to Rajendra NayakQuoted 17 lines · Rajendra Nayak
The series adds device tree support for OMAP hsmmc driver.
Changes in V2:
-1- Minor fixes based on comments from Grant. -2- Added a seperate compatible for omap3. -3- Added a new binding "ti,needs-special-reset" to handle some mmc modules which need special softreset sequence.
-4- Updated board dts files with "status = disable;" for unused mmc modules.Rob,
I retained your ack on patch 1 despite the additional binding that I added to handle the special softreset sequence. Let me know if you have any issues with it.
Quoted 6 lines
Chris.
Patch 1 and Patch 2 apply cleanly on mmc-next and can be taken in from the mmc tree after relevent acks from DT folks.
Patch 3 and Patch 4 which update dts files, I plan to push via linux-omap/Tony's tree.
Hi Rajendra,
Tested this series on omap4sdp, so feel free to add
Quoted 25 lines
The series is tested on omap4sdp (both external and emmc), omap4panda amd omap3beagle boards.
Things to do:
-1- Card detect isn't functional and needs twl4030 gpio to be DT converted.
-2- pbias cell programming is missing and needs an OMAP control module driver.Rajendra Nayak (4):
?mmc:omap_hsmmc: Convert hsmmc driver to use device tree ?mmc:omap_hsmmc: Avoid a regulator voltage change with dt ?arm/dts: OMAP4: Add mmc controller nodes and board data ?arm/dts: OMAP3: Add mmc controller nodes and board data?.../devicetree/bindings/mmc/ti-omap-hsmmc.txt ? ? ?| ? 33 +++++++ ?arch/arm/boot/dts/omap3-beagle.dts ? ? ? ? ? ? ? ? | ? 14 +++ ?arch/arm/boot/dts/omap3.dtsi ? ? ? ? ? ? ? ? ? ? ? | ? 16 ++++ ?arch/arm/boot/dts/omap4-panda.dts ? ? ? ? ? ? ? ? ?| ? 22 +++++ ?arch/arm/boot/dts/omap4-sdp.dts ? ? ? ? ? ? ? ? ? ?| ? 24 ++++++ ?arch/arm/boot/dts/omap4.dtsi ? ? ? ? ? ? ? ? ? ? ? | ? 31 +++++++ ?drivers/mmc/host/omap_hsmmc.c ? ? ? ? ? ? ? ? ? ? ?| ? 88 +++++++++++++++++++-?7 files changed, 227 insertions(+), 1 deletions(-)
?create mode 100644Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
v2 cover omap hsmmc device tree support
In reply to Rajendra NayakHi,
Quoted 17 lines · Rajendra Nayak
The series adds device tree support for OMAP hsmmc driver.
Changes in V2:
-1- Minor fixes based on comments from Grant. -2- Added a seperate compatible for omap3. -3- Added a new binding "ti,needs-special-reset" to handle some mmc modules which need special softreset sequence.
-4- Updated board dts files with "status = disable;" for unused mmc modules.Rob,
I retained your ack on patch 1 despite the additional binding that I added to handle the special softreset sequence. Let me know if you have any issues with it.
Quoted 6 lines
Chris.
Patch 1 and Patch 2 apply cleanly on mmc-next and can be taken in from the mmc tree after relevent acks from DT folks.
Patch 3 and Patch 4 which update dts files, I plan to push via linux-omap/Tony's tree.
Thanks, I've pushed patches 1 and 2 to mmc-next for 3.4, with Balaji's Tested-by.
- Chris.
Signature · 2 lines
Chris Ball <[email protected]> <http://printf.net/> One Laptop Per Child