<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://blog.gmane.org/gmane.linux.kernel.mmc">
    <title>gmane.linux.kernel.mmc</title>
    <link>http://blog.gmane.org/gmane.linux.kernel.mmc</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.kernel.mmc/20513"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.kernel.mmc/20512"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.kernel.mmc/20511"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.kernel.mmc/20510"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.kernel.mmc/20509"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.kernel.mmc/20508"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.kernel.mmc/20507"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.kernel.mmc/20506"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.kernel.mmc/20505"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.kernel.mmc/20503"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.kernel.mmc/20499"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.kernel.mmc/20497"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.kernel.mmc/20496"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.kernel.mmc/20494"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.kernel.mmc/20493"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.kernel.mmc/20492"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.kernel.mmc/20490"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.kernel.mmc/20489"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.kernel.mmc/20488"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.kernel.mmc/20487"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.kernel.mmc/20513">
    <title>[PATCH V2 3/3] mmc: mmci: Save and restore register context</title>
    <link>http://permalink.gmane.org/gmane.linux.kernel.mmc/20513</link>
    <description>&lt;pre&gt;From: Ulf Hansson &amp;lt;ulf.hansson&amp;lt; at &amp;gt;linaro.org&amp;gt;

If a corresponding power domain exists for the device and it manages
to cut the domain regulator while the device is runtime suspended,
the IP loses it's registers context. We restore the context in the
.runtime_resume callback from the existing register caches to adapt
to this siutuation.

We also want to make sure the registers are in a known state while
restoring context in the case when the power domain did not drop the
power, since there are restrictions for the order of writing to these
registers. To handle this, we clear the registers in the
.runtime_suspend callback.

Signed-off-by: Ulf Hansson &amp;lt;ulf.hansson&amp;lt; at &amp;gt;linaro.org&amp;gt;
---

Changes in v2:
Rebased on top of recently merged patchset for UHS card support.
---
 drivers/mmc/host/mmci.c |   43 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index 8f70e5b..ec9f17c 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -62,6 +62,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static unsigned int fmax = 515633;
  * &amp;lt; at &amp;gt;signal_direction: input/out direction of bus signals can be indicated
  * &amp;lt; at &amp;gt;pwrreg_clkgate: MMCIPOWER register must be used to gate the clock
  * &amp;lt; at &amp;gt;busy_detect: true if busy detection on dat0 is supported
+ * &amp;lt; at &amp;gt;pwrreg_nopower: bits in MMCIPOWER don't controls ext. power supply
  */
 struct variant_data {
 unsigned intclkreg;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -76,6 +77,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; struct variant_data {
 boolsignal_direction;
 boolpwrreg_clkgate;
 boolbusy_detect;
+boolpwrreg_nopower;
 };
 
 static struct variant_data variant_arm = {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -109,6 +111,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static struct variant_data variant_u300 = {
 .pwrreg_powerup= MCI_PWR_ON,
 .signal_direction= true,
 .pwrreg_clkgate= true,
+.pwrreg_nopower= true,
 };
 
 static struct variant_data variant_nomadik = {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -121,6 +124,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static struct variant_data variant_nomadik = {
 .pwrreg_powerup= MCI_PWR_ON,
 .signal_direction= true,
 .pwrreg_clkgate= true,
+.pwrreg_nopower= true,
 };
 
 static struct variant_data variant_ux500 = {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -135,6 +139,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static struct variant_data variant_ux500 = {
 .signal_direction= true,
 .pwrreg_clkgate= true,
 .busy_detect= true,
+.pwrreg_nopower= true,
 };
 
 static struct variant_data variant_ux500v2 = {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -150,6 +155,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static struct variant_data variant_ux500v2 = {
 .signal_direction= true,
 .pwrreg_clkgate= true,
 .busy_detect= true,
+.pwrreg_nopower= true,
 };
 
 static int mmci_card_busy(struct mmc_host *mmc)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1782,6 +1788,41 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int mmci_resume(struct device *dev)
 #endif
 
 #ifdef CONFIG_PM_RUNTIME
+static void mmci_save(struct mmci_host *host)
+{
+unsigned long flags;
+
+if (host-&amp;gt;variant-&amp;gt;pwrreg_nopower) {
+spin_lock_irqsave(&amp;amp;host-&amp;gt;lock, flags);
+
+writel(0, host-&amp;gt;base + MMCIMASK0);
+writel(0, host-&amp;gt;base + MMCIDATACTRL);
+writel(0, host-&amp;gt;base + MMCIPOWER);
+writel(0, host-&amp;gt;base + MMCICLOCK);
+mmci_reg_delay(host);
+
+spin_unlock_irqrestore(&amp;amp;host-&amp;gt;lock, flags);
+}
+
+}
+
+static void mmci_restore(struct mmci_host *host)
+{
+unsigned long flags;
+
+if (host-&amp;gt;variant-&amp;gt;pwrreg_nopower) {
+spin_lock_irqsave(&amp;amp;host-&amp;gt;lock, flags);
+
+writel(host-&amp;gt;clk_reg, host-&amp;gt;base + MMCICLOCK);
+writel(host-&amp;gt;datactrl_reg, host-&amp;gt;base + MMCIDATACTRL);
+writel(host-&amp;gt;pwr_reg, host-&amp;gt;base + MMCIPOWER);
+writel(MCI_IRQENABLE, host-&amp;gt;base + MMCIMASK0);
+mmci_reg_delay(host);
+
+spin_unlock_irqrestore(&amp;amp;host-&amp;gt;lock, flags);
+}
+}
+
 static int mmci_runtime_suspend(struct device *dev)
 {
 struct amba_device *adev = to_amba_device(dev);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1794,6 +1835,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int mmci_runtime_suspend(struct device *dev)
 if (!IS_ERR(host-&amp;gt;pins_sleep))
 pinctrl_select_state(host-&amp;gt;pinctrl, host-&amp;gt;pins_sleep);
 
+mmci_save(host);
 clk_disable_unprepare(host-&amp;gt;clk);
 }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1809,6 +1851,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int mmci_runtime_resume(struct device *dev)
 struct mmci_host *host = mmc_priv(mmc);
 
 clk_prepare_enable(host-&amp;gt;clk);
+mmci_restore(host);
 
 /* Optionally enable pins to be muxed in and configured */
 if (!IS_ERR(host-&amp;gt;pins_default))
&lt;/pre&gt;</description>
    <dc:creator>Ulf Hansson</dc:creator>
    <dc:date>2013-05-23T09:45:07</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.kernel.mmc/20512">
    <title>[PATCH V2 1/3] mmc: mmci: Use optional sleep pinctrl state</title>
    <link>http://permalink.gmane.org/gmane.linux.kernel.mmc/20512</link>
    <description>&lt;pre&gt;From: Ulf Hansson &amp;lt;ulf.hansson&amp;lt; at &amp;gt;linaro.org&amp;gt;

By optionally putting the pins into sleep state in the .runtime_suspend
callback we can accomplish two things. One is to minimize current leakage
from pins and thus save power, second we can prevent the IP from driving
pins output in an uncontrolled manner, which may happen if the power domain
drops the domain regulator.

When returning from idle, entering .runtime_resume callback, the pins
are restored to default state.

Signed-off-by: Ulf Hansson &amp;lt;ulf.hansson&amp;lt; at &amp;gt;linaro.org&amp;gt;
Reviewed-by: Linus Walleij &amp;lt;linus.walleij&amp;lt; at &amp;gt;linaro.org&amp;gt;
---

Changes in v2:
Just adding Linus reviewed by.
---
 drivers/mmc/host/mmci.c |   16 ++++++++++++++++
 drivers/mmc/host/mmci.h |    1 +
 2 files changed, 17 insertions(+)

diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index c3785ed..9fa8855 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1527,6 +1527,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int mmci_probe(struct amba_device *dev,
 } else
 dev_warn(&amp;amp;dev-&amp;gt;dev, "could not get default pinstate\n");
 
+/* fetch optional sleep state of pins */
+host-&amp;gt;pins_sleep = pinctrl_lookup_state(host-&amp;gt;pinctrl,
+PINCTRL_STATE_SLEEP);
+if (IS_ERR(host-&amp;gt;pins_sleep))
+dev_dbg(&amp;amp;dev-&amp;gt;dev, "could not get sleep pinstate\n");
+
 /* Get regulators and the supported OCR mask */
 mmc_regulator_get_supply(mmc);
 if (!mmc-&amp;gt;ocr_avail)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1767,6 +1773,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int mmci_runtime_suspend(struct device *dev)
 
 if (mmc) {
 struct mmci_host *host = mmc_priv(mmc);
+
+/* Optionally let pins go into sleep state */
+if (!IS_ERR(host-&amp;gt;pins_sleep))
+pinctrl_select_state(host-&amp;gt;pinctrl, host-&amp;gt;pins_sleep);
+
 clk_disable_unprepare(host-&amp;gt;clk);
 }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1780,7 +1791,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int mmci_runtime_resume(struct device *dev)
 
 if (mmc) {
 struct mmci_host *host = mmc_priv(mmc);
+
 clk_prepare_enable(host-&amp;gt;clk);
+
+/* Optionally enable pins to be muxed in and configured */
+if (!IS_ERR(host-&amp;gt;pins_default))
+pinctrl_select_state(host-&amp;gt;pinctrl, host-&amp;gt;pins_default);
 }
 
 return 0;
diff --git a/drivers/mmc/host/mmci.h b/drivers/mmc/host/mmci.h
index 69080fa..060f919 100644
--- a/drivers/mmc/host/mmci.h
+++ b/drivers/mmc/host/mmci.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -203,6 +203,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; struct mmci_host {
 /* pinctrl handles */
 struct pinctrl*pinctrl;
 struct pinctrl_state*pins_default;
+struct pinctrl_state*pins_sleep;
 
 #ifdef CONFIG_DMA_ENGINE
 /* DMA stuff */
&lt;/pre&gt;</description>
    <dc:creator>Ulf Hansson</dc:creator>
    <dc:date>2013-05-23T09:45:05</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.kernel.mmc/20511">
    <title>[PATCH V2 2/3] mmc: mmci: Adapt to register write restrictions</title>
    <link>http://permalink.gmane.org/gmane.linux.kernel.mmc/20511</link>
    <description>&lt;pre&gt;From: Ulf Hansson &amp;lt;ulf.hansson&amp;lt; at &amp;gt;linaro.org&amp;gt;

After a write to the MMCICLOCK register data cannot be written to this
register for three feedback clock cycles. Writes to the MMCIPOWER
register must be separated by three MCLK cycles. Previously no issues
has been observered, but using higher ARM clock frequencies on STE-
platforms has triggered this problem.

The MMCICLOCK register is written to in .set_ios and for some data
transmissions for SDIO. We do not need a delay at the data transmission
path, because sending and receiving data will require more than three
clock cycles. Then we use a simple logic to only delay in .set_ios and
thus we don't affect throughput performance.

Signed-off-by: Ulf Hansson &amp;lt;ulf.hansson&amp;lt; at &amp;gt;linaro.org&amp;gt;
Signed-off-by: Johan Rudholm &amp;lt;jrudholm&amp;lt; at &amp;gt;gmail.com&amp;gt;
---

Changes in v2:
None
---
 drivers/mmc/host/mmci.c |   16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index 9fa8855..8f70e5b 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -189,6 +189,21 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int mmci_validate_data(struct mmci_host *host,
 return 0;
 }
 
+static void mmci_reg_delay(struct mmci_host *host)
+{
+/*
+ * According to the spec, at least three feedback clock cycles
+ * of max 52 MHz must pass between two writes to the MMCICLOCK reg.
+ * Three MCLK clock cycles must pass between two MMCIPOWER reg writes.
+ * Worst delay time during card init is at 100 kHz =&amp;gt; 30 us.
+ * Worst delay time when up and running is at 25 MHz =&amp;gt; 120 ns.
+ */
+if (host-&amp;gt;cclk &amp;lt; 20000000)
+udelay(30);
+else
+ndelay(120);
+}
+
 /*
  * This must be called with host-&amp;gt;lock held
  */
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1264,6 +1279,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void mmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
 
 mmci_set_clkreg(host, ios-&amp;gt;clock);
 mmci_write_pwrreg(host, pwr);
+mmci_reg_delay(host);
 
 spin_unlock_irqrestore(&amp;amp;host-&amp;gt;lock, flags);
 
&lt;/pre&gt;</description>
    <dc:creator>Ulf Hansson</dc:creator>
    <dc:date>2013-05-23T09:45:06</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.kernel.mmc/20510">
    <title>[PATCH V2 0/3] mmc: mmci: Support ap_sleep in cpuidle for ux500</title>
    <link>http://permalink.gmane.org/gmane.linux.kernel.mmc/20510</link>
    <description>&lt;pre&gt;From: Ulf Hansson &amp;lt;ulf.hansson&amp;lt; at &amp;gt;linaro.org&amp;gt;

To be able to enter ap_sleep state in cpuidle were the APE power domain
regulator will be cut, a register save and restore mechanism needs to be
implemented. This patchset adapts to these restrictions.

Ulf Hansson (3):
  mmc: mmci: Use optional sleep pinctrl state
  mmc: mmci: Adapt to register write restrictions
  mmc: mmci: Save and restore register context

 drivers/mmc/host/mmci.c |   75 +++++++++++++++++++++++++++++++++++++++++++++++
 drivers/mmc/host/mmci.h |    1 +
 2 files changed, 76 insertions(+)

&lt;/pre&gt;</description>
    <dc:creator>Ulf Hansson</dc:creator>
    <dc:date>2013-05-23T09:45:04</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.kernel.mmc/20509">
    <title>[PATCH] mmc: dw_mmc: exynos: Add a new compatible string for exynos5420</title>
    <link>http://permalink.gmane.org/gmane.linux.kernel.mmc/20509</link>
    <description>&lt;pre&gt;The Exynos5420 has a DWMMC controller which is different from prior
versions.This patch adds a new compatible string for Exynos5420.

Signed-off-by: Abhilash Kesavan &amp;lt;a.kesavan&amp;lt; at &amp;gt;samsung.com&amp;gt;
---
 drivers/mmc/host/dw_mmc-exynos.c |    9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/mmc/host/dw_mmc-exynos.c b/drivers/mmc/host/dw_mmc-exynos.c
index f013e7e..f883b17 100644
--- a/drivers/mmc/host/dw_mmc-exynos.c
+++ b/drivers/mmc/host/dw_mmc-exynos.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -41,6 +41,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; enum dw_mci_exynos_type {
 DW_MCI_TYPE_EXYNOS4210,
 DW_MCI_TYPE_EXYNOS4412,
 DW_MCI_TYPE_EXYNOS5250,
+DW_MCI_TYPE_EXYNOS5420,
 };
 
 /* Exynos implementation specific driver private data */
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -64,6 +65,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static struct dw_mci_exynos_compatible {
 }, {
 .compatible= "samsung,exynos5250-dw-mshc",
 .ctrl_type= DW_MCI_TYPE_EXYNOS5250,
+}, {
+.compatible= "samsung,exynos5420-dw-mshc",
+.ctrl_type= DW_MCI_TYPE_EXYNOS5420,
 },
 };
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -92,7 +96,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int dw_mci_exynos_setup_clock(struct dw_mci *host)
 {
 struct dw_mci_exynos_priv_data *priv = host-&amp;gt;priv;
 
-if (priv-&amp;gt;ctrl_type == DW_MCI_TYPE_EXYNOS5250)
+if (priv-&amp;gt;ctrl_type == DW_MCI_TYPE_EXYNOS5250 ||
+priv-&amp;gt;ctrl_type == DW_MCI_TYPE_EXYNOS5420)
 host-&amp;gt;bus_hz /= (priv-&amp;gt;ciu_div + 1);
 else if (priv-&amp;gt;ctrl_type == DW_MCI_TYPE_EXYNOS4412)
 host-&amp;gt;bus_hz /= EXYNOS4412_FIXED_CIU_CLK_DIV;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -175,6 +180,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static const struct of_device_id dw_mci_exynos_match[] = {
 .data = &amp;amp;exynos_drv_data, },
 { .compatible = "samsung,exynos5250-dw-mshc",
 .data = &amp;amp;exynos_drv_data, },
+{ .compatible = "samsung,exynos5420-dw-mshc",
+.data = &amp;amp;exynos_drv_data, },
 {},
 };
 MODULE_DEVICE_TABLE(of, dw_mci_exynos_match);
&lt;/pre&gt;</description>
    <dc:creator>Yuvaraj Kumar C D</dc:creator>
    <dc:date>2013-05-23T09:09:27</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.kernel.mmc/20508">
    <title>Re: [PATCH 1/2] mmc: sdhci: Added set_power sdhci_ops handler.</title>
    <link>http://permalink.gmane.org/gmane.linux.kernel.mmc/20508</link>
    <description>&lt;pre&gt;

Ok, understand. Your second patch in this series adds such a callback in 
your SDHCI host driver and there it just calls a platform callback. I 
don't think this is a good idea. First, we want to go away from platform 
callbacks, because they are incompatible with DT. Second, because the 
proper solution IMHO would be for your platform to export a regulator, and 
the SDHCI core driver already includes regulator support.


Which, however, doesn't yet mean, it's a good idea :)

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>Guennadi Liakhovetski</dc:creator>
    <dc:date>2013-05-23T07:25:16</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.kernel.mmc/20507">
    <title>Re: [PATCH] mmc: core: Update the ext-csd.rev check for eMMC5.1</title>
    <link>http://permalink.gmane.org/gmane.linux.kernel.mmc/20507</link>
    <description>&lt;pre&gt;Correction,

On Wed, May 22, 2013 at 5:06 PM, Doug Anderson &amp;lt;dianders&amp;lt; at &amp;gt;google.com&amp;gt; wrote:

...with the caveat the Alim's email address be corrected.

Signed-off-by: Alim Akhtar &amp;lt;alim.akhtar&amp;lt; at &amp;gt;samsung.com&amp;gt;
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>Doug Anderson</dc:creator>
    <dc:date>2013-05-23T00:08:25</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.kernel.mmc/20506">
    <title>Re: [PATCH] mmc: core: Update the ext-csd.rev check for eMMC5.1</title>
    <link>http://permalink.gmane.org/gmane.linux.kernel.mmc/20506</link>
    <description>&lt;pre&gt;Yavaraj,

On Tue, May 21, 2013 at 2:38 AM, Yuvaraj Kumar C D &amp;lt;yuvaraj.cd&amp;lt; at &amp;gt;gmail.com&amp;gt; wrote:

Looks reasonable.

Reviewed-by: Doug Anderson &amp;lt;dianders&amp;lt; at &amp;gt;chromium.org&amp;gt;
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>Doug Anderson</dc:creator>
    <dc:date>2013-05-23T00:06:08</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.kernel.mmc/20505">
    <title>Re: [PATCH 1/2] mmc: sdhci: Added set_power sdhci_ops handler.</title>
    <link>http://permalink.gmane.org/gmane.linux.kernel.mmc/20505</link>
    <description>&lt;pre&gt;Hi Guennadi,

On Wednesday, May 22, 2013 10:30:40 PM Guennadi Liakhovetski wrote:

Sorry about that.

One example that I can think of is when you have a wifi module connected as a 
mmc card via sdio. So you can register a callback function in your machine 
source code to turn on/off the wifi module based on the mmc host power.

I've seen this implementation in others mmc hosts, such as omap.

Regards,

Felipe

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>Felipe Ferreri Tonello</dc:creator>
    <dc:date>2013-05-22T21:22:45</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.kernel.mmc/20503">
    <title>Re: [PATCH V3 00/10] mmc_of_parse() adaptations, DT support for Sheevaplugs</title>
    <link>http://permalink.gmane.org/gmane.linux.kernel.mmc/20503</link>
    <description>&lt;pre&gt;Hi Jason,

On Tue, May 21, 2013 at 09:14:55AM -0400, Jason Cooper wrote:

If you don't mind too much, as this crosses two trees, I would prefer
to keep the series "self-contained" if people want to test.
Additionally, I have two Acked-bys for 9 and 10 from Andrew that are
not part of the patches yet.
 

Even without reinstalling, can you please have a look if your
"plug:green:health" LED is really green (mine is blue)?  And if your
kernel already has a "plug:red:misc" LED could you verify whether it
is really there?  Do you happen to know which board revision you
have?


Thanks,
   Simon
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>Simon Baatz</dc:creator>
    <dc:date>2013-05-22T19:25:02</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.kernel.mmc/20499">
    <title>[PATCH 0/2] Added set_power handler to mmc sdhci host</title>
    <link>http://permalink.gmane.org/gmane.linux.kernel.mmc/20499</link>
    <description>&lt;pre&gt;From: "Felipe F. Tonello" &amp;lt;eu&amp;lt; at &amp;gt;felipetonello.com&amp;gt;

This set_power handler is useful for modules that need to be turned off when
the mmc host turns off.

Felipe F. Tonello (2):
  mmc: sdhci: Added set_power sdhci_ops handler.
  mmc: sdhci-s3c: Added set_power handler to platdata

 drivers/mmc/host/sdhci-s3c.c                | 8 ++++++++
 drivers/mmc/host/sdhci.c                    | 8 ++++++++
 drivers/mmc/host/sdhci.h                    | 1 +
 include/linux/platform_data/mmc-sdhci-s3c.h | 1 +
 4 files changed, 18 insertions(+)

&lt;/pre&gt;</description>
    <dc:creator>Felipe F. Tonello</dc:creator>
    <dc:date>2013-05-22T17:47:10</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.kernel.mmc/20497">
    <title>Re: [PATCH V3 00/10] mmc_of_parse() adaptations, DT support for Sheevaplugs</title>
    <link>http://permalink.gmane.org/gmane.linux.kernel.mmc/20497</link>
    <description>&lt;pre&gt;
Patches 7, 9, and 10 already pulled into mvebu/dt.  You can drop those
from this series if you need to do another revision.


I happen to have one.  Unfortunately, it is currently my primary email
server, dhcp, dns, file server, and a few other irreplaceable things. :(
I *really* need to upgrade/reconfigure ...

thx,

Jason.
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>Jason Cooper</dc:creator>
    <dc:date>2013-05-21T13:14:55</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.kernel.mmc/20496">
    <title>[PATCH] mmc: core: Update the ext-csd.rev check for eMMC5.1</title>
    <link>http://permalink.gmane.org/gmane.linux.kernel.mmc/20496</link>
    <description>&lt;pre&gt;With the new eMMC5.1 spec,there is a new EXT_CSD register with
the revision number(EXT_CSD_REV) 7.This patch updates the check
for ext-csd.rev number as 7.

Signed-off-by: Alim Akhtar &amp;lt;alim.akthar&amp;lt; at &amp;gt;samsung.com&amp;gt;
Signed-off-by: Yuvaraj Kumar C D &amp;lt;yuvaraj.cd&amp;lt; at &amp;gt;samsung.com&amp;gt;
---
 drivers/mmc/core/mmc.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index 0cbd1ef..73f58e0 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -293,7 +293,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int mmc_read_ext_csd(struct mmc_card *card, u8 *ext_csd)
 }
 
 card-&amp;gt;ext_csd.rev = ext_csd[EXT_CSD_REV];
-if (card-&amp;gt;ext_csd.rev &amp;gt; 6) {
+if (card-&amp;gt;ext_csd.rev &amp;gt; 7) {
 pr_err("%s: unrecognised EXT_CSD revision %d\n",
 mmc_hostname(card-&amp;gt;host), card-&amp;gt;ext_csd.rev);
 err = -EINVAL;
&lt;/pre&gt;</description>
    <dc:creator>Yuvaraj Kumar C D</dc:creator>
    <dc:date>2013-05-21T09:38:43</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.kernel.mmc/20494">
    <title>Re: [PATCH V3 01/10] mmc: return mmc_of_parse() errors to caller</title>
    <link>http://permalink.gmane.org/gmane.linux.kernel.mmc/20494</link>
    <description>&lt;pre&gt;
Reviewed-by: Ulf Hansson &amp;lt;ulf.hansson&amp;lt; at &amp;gt;linaro.org&amp;gt;
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>Ulf Hansson</dc:creator>
    <dc:date>2013-05-21T07:00:09</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.kernel.mmc/20493">
    <title>Re: [PATCH V3 10/10] ARM: Kirkwood: add DT support for Sheevaplug and Sheevaplug eSATA</title>
    <link>http://permalink.gmane.org/gmane.linux.kernel.mmc/20493</link>
    <description>&lt;pre&gt;
Acked-by: Andrew Lunn &amp;lt;andrew&amp;lt; at &amp;gt;lunn.ch&amp;gt;
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>Andrew Lunn</dc:creator>
    <dc:date>2013-05-21T05:13:15</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.kernel.mmc/20492">
    <title>Re: [PATCH V3 09/10] ARM: Kirkwood: Add dts files for Sheevaplug and eSATA Sheevaplug</title>
    <link>http://permalink.gmane.org/gmane.linux.kernel.mmc/20492</link>
    <description>&lt;pre&gt;
Hi Simon

Looks good

Acked-by: Andrew Lunn &amp;lt;andrew&amp;lt; at &amp;gt;lunn.ch&amp;gt;
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>Andrew Lunn</dc:creator>
    <dc:date>2013-05-21T05:11:32</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.kernel.mmc/20490">
    <title>[PATCH V3 10/10] ARM: Kirkwood: add DT support for Sheevaplug and Sheevaplug eSATA</title>
    <link>http://permalink.gmane.org/gmane.linux.kernel.mmc/20490</link>
    <description>&lt;pre&gt;Signed-off-by: Simon Baatz &amp;lt;gmbnomis&amp;lt; at &amp;gt;gmail.com&amp;gt;
---
 arch/arm/mach-kirkwood/Kconfig            |    7 +++++++
 arch/arm/mach-kirkwood/Makefile           |    1 +
 arch/arm/mach-kirkwood/board-dt.c         |    4 ++++
 arch/arm/mach-kirkwood/board-sheevaplug.c |   27 +++++++++++++++++++++++++++
 arch/arm/mach-kirkwood/common.h           |    5 +++++
 5 files changed, 44 insertions(+)
 create mode 100644 arch/arm/mach-kirkwood/board-sheevaplug.c

diff --git a/arch/arm/mach-kirkwood/Kconfig b/arch/arm/mach-kirkwood/Kconfig
index 7509a89..58518a2 100644
--- a/arch/arm/mach-kirkwood/Kconfig
+++ b/arch/arm/mach-kirkwood/Kconfig
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -296,6 +296,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; config MACH_READYNAS_DT
   Say 'Y' here if you want your kernel to support the
   NETGEAR ReadyNAS Duo v2 using Fattened Device Tree.
 
+config MACH_SHEEVAPLUG_DT
+bool "Marvell (eSATA) SheevaPlug (Flattened Device Tree)"
+select ARCH_KIRKWOOD_DT
+help
+  Say 'Y' here if you want your kernel to support the
+  Marvell (eSATA) SheevaPlug (Flattened Device Tree).
+
 config MACH_TOPKICK_DT
 bool "USI Topkick (Flattened Device Tree)"
 select ARCH_KIRKWOOD_DT
diff --git a/arch/arm/mach-kirkwood/Makefile b/arch/arm/mach-kirkwood/Makefile
index e1f3735..8846abf 100644
--- a/arch/arm/mach-kirkwood/Makefile
+++ b/arch/arm/mach-kirkwood/Makefile
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -40,5 +40,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; obj-$(CONFIG_MACH_NETSPACE_V2_DT)+= board-ns2.o
 obj-$(CONFIG_MACH_NSA310_DT)+= board-nsa310.o
 obj-$(CONFIG_MACH_OPENBLOCKS_A6_DT)+= board-openblocks_a6.o
 obj-$(CONFIG_MACH_READYNAS_DT)+= board-readynas.o
+obj-$(CONFIG_MACH_SHEEVAPLUG_DT)+= board-sheevaplug.o
 obj-$(CONFIG_MACH_TOPKICK_DT)+= board-usi_topkick.o
 obj-$(CONFIG_MACH_TS219_DT)+= board-ts219.o tsx1x-common.o
diff --git a/arch/arm/mach-kirkwood/board-dt.c b/arch/arm/mach-kirkwood/board-dt.c
index e9647b8..a09dbac 100644
--- a/arch/arm/mach-kirkwood/board-dt.c
+++ b/arch/arm/mach-kirkwood/board-dt.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -112,6 +112,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void __init kirkwood_dt_init(void)
 if (of_machine_is_compatible("globalscale,guruplug"))
 guruplug_dt_init();
 
+if (of_machine_is_compatible("globalscale,sheevaplug"))
+sheevaplug_dt_init();
+
 if (of_machine_is_compatible("dlink,dns-kirkwood"))
 dnskw_init();
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -165,6 +168,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void __init kirkwood_dt_init(void)
 static const char * const kirkwood_dt_board_compat[] = {
 "globalscale,dreamplug",
 "globalscale,guruplug",
+"globalscale,sheevaplug",
 "dlink,dns-320",
 "dlink,dns-325",
 "iom,iconnect",
diff --git a/arch/arm/mach-kirkwood/board-sheevaplug.c b/arch/arm/mach-kirkwood/board-sheevaplug.c
new file mode 100644
index 0000000..fa38937
--- /dev/null
+++ b/arch/arm/mach-kirkwood/board-sheevaplug.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,27 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+/*
+ * arch/arm/mach-kirkwood/board-sheevaplug.c
+ *
+ * Marvell Sheevaplug Reference Board Init for drivers not converted to
+ * flattened device tree yet.
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include &amp;lt;linux/kernel.h&amp;gt;
+#include &amp;lt;linux/init.h&amp;gt;
+#include &amp;lt;linux/mv643xx_eth.h&amp;gt;
+#include "common.h"
+
+static struct mv643xx_eth_platform_data sheevaplug_ge00_data = {
+.phy_addr= MV643XX_ETH_PHY_ADDR(0),
+};
+
+void __init sheevaplug_dt_init(void)
+{
+/*
+ * Basic setup. Needs to be called early.
+ */
+kirkwood_ge00_init(&amp;amp;sheevaplug_ge00_data);
+}
diff --git a/arch/arm/mach-kirkwood/common.h b/arch/arm/mach-kirkwood/common.h
index 21da3b1..974442e 100644
--- a/arch/arm/mach-kirkwood/common.h
+++ b/arch/arm/mach-kirkwood/common.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -65,6 +65,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void guruplug_dt_init(void);
 #else
 static inline void guruplug_dt_init(void) {};
 #endif
+#ifdef CONFIG_MACH_SHEEVAPLUG_DT
+void sheevaplug_dt_init(void);
+#else
+static inline void sheevaplug_dt_init(void) {};
+#endif
 #ifdef CONFIG_MACH_TS219_DT
 void qnap_dt_ts219_init(void);
 #else
&lt;/pre&gt;</description>
    <dc:creator>Simon Baatz</dc:creator>
    <dc:date>2013-05-20T23:01:51</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.kernel.mmc/20489">
    <title>[PATCH V3 09/10] ARM: Kirkwood: Add dts files for Sheevaplug and eSATA Sheevaplug</title>
    <link>http://permalink.gmane.org/gmane.linux.kernel.mmc/20489</link>
    <description>&lt;pre&gt;Signed-off-by: Simon Baatz &amp;lt;gmbnomis&amp;lt; at &amp;gt;gmail.com&amp;gt;
---
 arch/arm/boot/dts/Makefile                        |    2 +
 arch/arm/boot/dts/kirkwood-sheevaplug-common.dtsi |   97 +++++++++++++++++++++
 arch/arm/boot/dts/kirkwood-sheevaplug-esata.dts   |   40 +++++++++
 arch/arm/boot/dts/kirkwood-sheevaplug.dts         |   45 ++++++++++
 4 files changed, 184 insertions(+)
 create mode 100644 arch/arm/boot/dts/kirkwood-sheevaplug-common.dtsi
 create mode 100644 arch/arm/boot/dts/kirkwood-sheevaplug-esata.dts
 create mode 100644 arch/arm/boot/dts/kirkwood-sheevaplug.dts

diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index b9f7121..e81a387 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -84,6 +84,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; dtb-$(CONFIG_ARCH_KIRKWOOD) += kirkwood-cloudbox.dtb \
 kirkwood-ns2max.dtb \
 kirkwood-ns2mini.dtb \
 kirkwood-nsa310.dtb \
+kirkwood-sheevaplug.dtb \
+kirkwood-sheevaplug-esata.dtb \
 kirkwood-topkick.dtb \
 kirkwood-ts219-6281.dtb \
 kirkwood-ts219-6282.dtb \
diff --git a/arch/arm/boot/dts/kirkwood-sheevaplug-common.dtsi b/arch/arm/boot/dts/kirkwood-sheevaplug-common.dtsi
new file mode 100644
index 0000000..9d59475
--- /dev/null
+++ b/arch/arm/boot/dts/kirkwood-sheevaplug-common.dtsi
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,97 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+/*
+ * kirkwood-sheevaplug-common.dts - Common parts for Sheevaplugs
+ *
+ * Copyright (C) 2013 Simon Baatz &amp;lt;gmbnomis&amp;lt; at &amp;gt;gmail.com&amp;gt;
+ *
+ * Licensed under GPLv2
+ */
+
+/include/ "kirkwood.dtsi"
+/include/ "kirkwood-6281.dtsi"
+
+/ {
+memory {
+device_type = "memory";
+reg = &amp;lt;0x00000000 0x20000000&amp;gt;;
+};
+
+chosen {
+bootargs = "console=ttyS0,115200n8 earlyprintk";
+};
+
+ocp&amp;lt; at &amp;gt;f1000000 {
+pinctrl: pinctrl&amp;lt; at &amp;gt;10000 {
+
+pmx_usb_power_enable: pmx-usb-power-enable {
+marvell,pins = "mpp29";
+marvell,function = "gpio";
+};
+pmx_led_red: pmx-led-red {
+marvell,pins = "mpp46";
+marvell,function = "gpio";
+};
+pmx_led_blue: pmx-led-blue {
+marvell,pins = "mpp49";
+marvell,function = "gpio";
+};
+pmx_sdio_cd: pmx-sdio-cd {
+marvell,pins = "mpp44";
+marvell,function = "gpio";
+};
+pmx_sdio_wp: pmx-sdio-wp {
+marvell,pins = "mpp47";
+marvell,function = "gpio";
+};
+};
+serial&amp;lt; at &amp;gt;12000 {
+status = "okay";
+};
+
+nand&amp;lt; at &amp;gt;3000000 {
+status = "okay";
+
+partition&amp;lt; at &amp;gt;0 {
+label = "u-boot";
+reg = &amp;lt;0x0000000 0x100000&amp;gt;;
+};
+
+partition&amp;lt; at &amp;gt;100000 {
+label = "uImage";
+reg = &amp;lt;0x0100000 0x400000&amp;gt;;
+};
+
+partition&amp;lt; at &amp;gt;500000 {
+label = "root";
+reg = &amp;lt;0x0500000 0x1fb00000&amp;gt;;
+};
+};
+};
+
+regulators {
+compatible = "simple-bus";
+#address-cells = &amp;lt;1&amp;gt;;
+#size-cells = &amp;lt;0&amp;gt;;
+
+usb_power: regulator&amp;lt; at &amp;gt;1 {
+compatible = "regulator-fixed";
+reg = &amp;lt;1&amp;gt;;
+regulator-name = "USB Power";
+regulator-min-microvolt = &amp;lt;5000000&amp;gt;;
+regulator-max-microvolt = &amp;lt;5000000&amp;gt;;
+enable-active-high;
+regulator-always-on;
+regulator-boot-on;
+gpio = &amp;lt;&amp;amp;gpio0 29 0&amp;gt;;
+};
+};
+
+gpio-leds {
+compatible = "gpio-leds";
+
+health {
+label = "sheevaplug:blue:health";
+gpios = &amp;lt;&amp;amp;gpio1 17 1&amp;gt;;
+linux,default-trigger = "default-on";
+};
+};
+};
diff --git a/arch/arm/boot/dts/kirkwood-sheevaplug-esata.dts b/arch/arm/boot/dts/kirkwood-sheevaplug-esata.dts
new file mode 100644
index 0000000..1c6946a
--- /dev/null
+++ b/arch/arm/boot/dts/kirkwood-sheevaplug-esata.dts
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,40 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+/*
+ * kirkwood-sheevaplug-esata.dts - Device tree file for eSATA Sheevaplug
+ *
+ * Copyright (C) 2013 Simon Baatz &amp;lt;gmbnomis&amp;lt; at &amp;gt;gmail.com&amp;gt;
+ *
+ * Licensed under GPLv2
+ */
+
+/dts-v1/;
+
+/include/ "kirkwood-sheevaplug-common.dtsi"
+
+/ {
+model = "Globalscale Technologies eSATA SheevaPlug";
+compatible = "globalscale,sheevaplug-esata-rev13", "globalscale,sheevaplug-esata", "globalscale,sheevaplug", "marvell,kirkwood-88f6281", "marvell,kirkwood";
+
+ocp&amp;lt; at &amp;gt;f1000000 {
+pinctrl: pinctrl&amp;lt; at &amp;gt;10000 {
+
+pinctrl-0 = &amp;lt; &amp;amp;pmx_nand &amp;amp;pmx_uart0
+      &amp;amp;pmx_usb_power_enable
+      &amp;amp;pmx_led_blue&amp;gt;;
+pinctrl-names = "default";
+
+};
+
+sata&amp;lt; at &amp;gt;80000 {
+status = "okay";
+nr-ports = &amp;lt;2&amp;gt;;
+};
+
+mvsdio&amp;lt; at &amp;gt;90000 {
+pinctrl-0 = &amp;lt;&amp;amp;pmx_sdio &amp;amp;pmx_sdio_cd &amp;amp;pmx_sdio_wp&amp;gt;;
+pinctrl-names = "default";
+status = "okay";
+cd-gpios = &amp;lt;&amp;amp;gpio1 12 1&amp;gt;;
+wp-gpios = &amp;lt;&amp;amp;gpio1 15 0&amp;gt;;
+};
+};
+};
diff --git a/arch/arm/boot/dts/kirkwood-sheevaplug.dts b/arch/arm/boot/dts/kirkwood-sheevaplug.dts
new file mode 100644
index 0000000..f7684066
--- /dev/null
+++ b/arch/arm/boot/dts/kirkwood-sheevaplug.dts
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,45 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+/*
+ * kirkwood-sheevaplug-esata.dts - Device tree file for Sheevaplug
+ *
+ * Copyright (C) 2013 Simon Baatz &amp;lt;gmbnomis&amp;lt; at &amp;gt;gmail.com&amp;gt;
+ *
+ * Licensed under GPLv2
+ */
+
+/dts-v1/;
+
+/include/ "kirkwood-sheevaplug-common.dtsi"
+
+/ {
+model = "Globalscale Technologies SheevaPlug";
+compatible = "globalscale,sheevaplug", "marvell,kirkwood-88f6281", "marvell,kirkwood";
+
+ocp&amp;lt; at &amp;gt;f1000000 {
+pinctrl: pinctrl&amp;lt; at &amp;gt;10000 {
+
+pinctrl-0 = &amp;lt; &amp;amp;pmx_nand &amp;amp;pmx_uart0
+      &amp;amp;pmx_usb_power_enable
+      &amp;amp;pmx_led_red
+      &amp;amp;pmx_led_blue&amp;gt;;
+pinctrl-names = "default";
+
+};
+
+mvsdio&amp;lt; at &amp;gt;90000 {
+pinctrl-0 = &amp;lt;&amp;amp;pmx_sdio&amp;gt;;
+pinctrl-names = "default";
+status = "okay";
+/* No CD or WP GPIOs */
+broken-cd;
+};
+};
+
+gpio-leds {
+compatible = "gpio-leds";
+
+misc {
+label = "sheevaplug:red:misc";
+gpios = &amp;lt;&amp;amp;gpio1 14 1&amp;gt;;
+};
+};
+};
&lt;/pre&gt;</description>
    <dc:creator>Simon Baatz</dc:creator>
    <dc:date>2013-05-20T23:01:50</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.kernel.mmc/20488">
    <title>[PATCH V3 06/10] mmc: tegra: handle mmc_of_parse() errors during probe</title>
    <link>http://permalink.gmane.org/gmane.linux.kernel.mmc/20488</link>
    <description>&lt;pre&gt;Signed-off-by: Simon Baatz &amp;lt;gmbnomis&amp;lt; at &amp;gt;gmail.com&amp;gt;
---
 drivers/mmc/host/sdhci-tegra.c |    9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c
index e0dba74..7eb62f8 100644
--- a/drivers/mmc/host/sdhci-tegra.c
+++ b/drivers/mmc/host/sdhci-tegra.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -205,7 +205,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static const struct of_device_id sdhci_tegra_dt_match[] = {
 };
 MODULE_DEVICE_TABLE(of, sdhci_tegra_dt_match);
 
-static void sdhci_tegra_parse_dt(struct device *dev)
+static int sdhci_tegra_parse_dt(struct device *dev)
 {
 struct device_node *np = dev-&amp;gt;of_node;
 struct sdhci_host *host = dev_get_drvdata(dev);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -213,7 +213,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void sdhci_tegra_parse_dt(struct device *dev)
 struct sdhci_tegra *tegra_host = pltfm_host-&amp;gt;priv;
 
 tegra_host-&amp;gt;power_gpio = of_get_named_gpio(np, "power-gpios", 0);
-mmc_of_parse(host-&amp;gt;mmc);
+return mmc_of_parse(host-&amp;gt;mmc);
 }
 
 static int sdhci_tegra_probe(struct platform_device *pdev)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -245,7 +245,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int sdhci_tegra_probe(struct platform_device *pdev)
 tegra_host-&amp;gt;soc_data = soc_data;
 pltfm_host-&amp;gt;priv = tegra_host;
 
-sdhci_tegra_parse_dt(&amp;amp;pdev-&amp;gt;dev);
+rc = sdhci_tegra_parse_dt(&amp;amp;pdev-&amp;gt;dev);
+if (rc)
+goto err_parse_dt;
 
 if (gpio_is_valid(tegra_host-&amp;gt;power_gpio)) {
 rc = gpio_request(tegra_host-&amp;gt;power_gpio, "sdhci_power");
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -278,6 +280,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; err_add_host:
 err_clk_get:
 if (gpio_is_valid(tegra_host-&amp;gt;power_gpio))
 gpio_free(tegra_host-&amp;gt;power_gpio);
+err_parse_dt:
 err_power_req:
 err_alloc_tegra_host:
 sdhci_pltfm_free(pdev);
&lt;/pre&gt;</description>
    <dc:creator>Simon Baatz</dc:creator>
    <dc:date>2013-05-20T23:01:47</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.kernel.mmc/20487">
    <title>[PATCH V3 08/10] mmc: mvsdio: use standard MMC device-tree binding parser mmc_of_parse()</title>
    <link>http://permalink.gmane.org/gmane.linux.kernel.mmc/20487</link>
    <description>&lt;pre&gt;Instead of parsing the DT binding on our own, use the standard parser
mmc_of_parse(), introduced by commit 6c56e7a.

Signed-off-by: Simon Baatz &amp;lt;gmbnomis&amp;lt; at &amp;gt;gmail.com&amp;gt;
---
 drivers/mmc/host/mvsdio.c |   73 +++++++++++++++++++++++++--------------------
 1 file changed, 40 insertions(+), 33 deletions(-)

diff --git a/drivers/mmc/host/mvsdio.c b/drivers/mmc/host/mvsdio.c
index 8960fc8..edfc481 100644
--- a/drivers/mmc/host/mvsdio.c
+++ b/drivers/mmc/host/mvsdio.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -35,7 +35,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
 #define DRIVER_NAME"mvsdio"
 
-static int maxfreq = MVSD_CLOCKRATE_MAX;
+static int maxfreq;
 static int nodma;
 
 struct mvsd_host {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -685,7 +685,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int __init mvsd_probe(struct platform_device *pdev)
 const struct mbus_dram_target_info *dram;
 struct resource *r;
 int ret, irq;
-int gpio_card_detect, gpio_write_protect;
 struct pinctrl *pinctrl;
 
 r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -718,6 +717,20 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int __init mvsd_probe(struct platform_device *pdev)
 if (!IS_ERR(host-&amp;gt;clk))
 clk_prepare_enable(host-&amp;gt;clk);
 
+mmc-&amp;gt;ops = &amp;amp;mvsd_ops;
+
+mmc-&amp;gt;ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
+
+mmc-&amp;gt;f_min = DIV_ROUND_UP(host-&amp;gt;base_clock, MVSD_BASE_DIV_MAX);
+mmc-&amp;gt;f_max = MVSD_CLOCKRATE_MAX;
+
+mmc-&amp;gt;max_blk_size = 2048;
+mmc-&amp;gt;max_blk_count = 65535;
+
+mmc-&amp;gt;max_segs = 1;
+mmc-&amp;gt;max_seg_size = mmc-&amp;gt;max_blk_size * mmc-&amp;gt;max_blk_count;
+mmc-&amp;gt;max_req_size = mmc-&amp;gt;max_blk_size * mmc-&amp;gt;max_blk_count;
+
 if (np) {
 if (IS_ERR(host-&amp;gt;clk)) {
 dev_err(&amp;amp;pdev-&amp;gt;dev, "DT platforms must have a clock associated\n");
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -726,35 +739,38 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int __init mvsd_probe(struct platform_device *pdev)
 }
 
 host-&amp;gt;base_clock = clk_get_rate(host-&amp;gt;clk) / 2;
-gpio_card_detect = of_get_named_gpio(np, "cd-gpios", 0);
-gpio_write_protect = of_get_named_gpio(np, "wp-gpios", 0);
+ret = mmc_of_parse(mmc);
+if (ret &amp;lt; 0)
+goto out;
 } else {
 const struct mvsdio_platform_data *mvsd_data;
+
 mvsd_data = pdev-&amp;gt;dev.platform_data;
 if (!mvsd_data) {
 ret = -ENXIO;
 goto out;
 }
+mmc-&amp;gt;caps = MMC_CAP_4_BIT_DATA | MMC_CAP_SDIO_IRQ |
+    MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED;
 host-&amp;gt;base_clock = mvsd_data-&amp;gt;clock / 2;
-gpio_card_detect = mvsd_data-&amp;gt;gpio_card_detect ? : -EINVAL;
-gpio_write_protect = mvsd_data-&amp;gt;gpio_write_protect ? : -EINVAL;
-}
-
-mmc-&amp;gt;ops = &amp;amp;mvsd_ops;
-
-mmc-&amp;gt;ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
-mmc-&amp;gt;caps = MMC_CAP_4_BIT_DATA | MMC_CAP_SDIO_IRQ |
-    MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED;
-
-mmc-&amp;gt;f_min = DIV_ROUND_UP(host-&amp;gt;base_clock, MVSD_BASE_DIV_MAX);
-mmc-&amp;gt;f_max = maxfreq;
+/* GPIO 0 regarded as invalid for backward compatibility */
+if (mvsd_data-&amp;gt;gpio_card_detect &amp;amp;&amp;amp;
+    gpio_is_valid(mvsd_data-&amp;gt;gpio_card_detect)) {
+ret = mmc_gpio_request_cd(mmc,
+  mvsd_data-&amp;gt;gpio_card_detect);
+if (ret)
+goto out;
+} else {
+mmc-&amp;gt;caps |= MMC_CAP_NEEDS_POLL;
+}
 
-mmc-&amp;gt;max_blk_size = 2048;
-mmc-&amp;gt;max_blk_count = 65535;
+if (mvsd_data-&amp;gt;gpio_write_protect &amp;amp;&amp;amp;
+    gpio_is_valid(mvsd_data-&amp;gt;gpio_write_protect))
+mmc_gpio_request_ro(mmc, mvsd_data-&amp;gt;gpio_write_protect);
+}
 
-mmc-&amp;gt;max_segs = 1;
-mmc-&amp;gt;max_seg_size = mmc-&amp;gt;max_blk_size * mmc-&amp;gt;max_blk_count;
-mmc-&amp;gt;max_req_size = mmc-&amp;gt;max_blk_size * mmc-&amp;gt;max_blk_count;
+if (maxfreq)
+mmc-&amp;gt;f_max = maxfreq;
 
 spin_lock_init(&amp;amp;host-&amp;gt;lock);
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -777,15 +793,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int __init mvsd_probe(struct platform_device *pdev)
 goto out;
 }
 
-if (gpio_is_valid(gpio_card_detect)) {
-ret = mmc_gpio_request_cd(mmc, gpio_card_detect);
-if (ret)
-goto out;
-} else
-mmc-&amp;gt;caps |= MMC_CAP_NEEDS_POLL;
-
-mmc_gpio_request_ro(mmc, gpio_write_protect);
-
 setup_timer(&amp;amp;host-&amp;gt;timer, mvsd_timeout_timer, (unsigned long)host);
 platform_set_drvdata(pdev, mmc);
 ret = mmc_add_host(mmc);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -793,10 +800,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int __init mvsd_probe(struct platform_device *pdev)
 goto out;
 
 if (!(mmc-&amp;gt;caps &amp;amp; MMC_CAP_NEEDS_POLL))
-dev_notice(&amp;amp;pdev-&amp;gt;dev, "using GPIO %d for card detection\n",
-   gpio_card_detect);
+dev_notice(&amp;amp;pdev-&amp;gt;dev, "using GPIO for card detection\n");
 else
-dev_notice(&amp;amp;pdev-&amp;gt;dev, "lacking card detect (fall back to polling)\n");
+dev_notice(&amp;amp;pdev-&amp;gt;dev,
+   "lacking card detect (fall back to polling)\n");
 return 0;
 
 out:
&lt;/pre&gt;</description>
    <dc:creator>Simon Baatz</dc:creator>
    <dc:date>2013-05-20T23:01:49</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.kernel.mmc/20486">
    <title>[PATCH V3 04/10] mmc: mxcmmc: handle mmc_of_parse() errors during probe</title>
    <link>http://permalink.gmane.org/gmane.linux.kernel.mmc/20486</link>
    <description>&lt;pre&gt;Signed-off-by: Simon Baatz &amp;lt;gmbnomis&amp;lt; at &amp;gt;gmail.com&amp;gt;
---
 drivers/mmc/host/mxcmmc.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/mmc/host/mxcmmc.c b/drivers/mmc/host/mxcmmc.c
index d503635..f47546f 100644
--- a/drivers/mmc/host/mxcmmc.c
+++ b/drivers/mmc/host/mxcmmc.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1067,7 +1067,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int mxcmci_probe(struct platform_device *pdev)
 goto out_release_mem;
 }
 
-mmc_of_parse(mmc);
+ret = mmc_of_parse(mmc);
+if (ret)
+goto out_free;
 mmc-&amp;gt;ops = &amp;amp;mxcmci_ops;
 
 /* For devicetree parsing, the bus width is read from devicetree */
&lt;/pre&gt;</description>
    <dc:creator>Simon Baatz</dc:creator>
    <dc:date>2013-05-20T23:01:45</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.linux.kernel.mmc">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.linux.kernel.mmc</link>
  </textinput>
</rdf:RDF>
