Re: [PATCH 06/10] mmc: sdhci: Add get_clk_div callback support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



在 2016/8/12 10:19, Ritesh Harjani 写道:
Hi Jaehoon/Adrian,


On 8/12/2016 7:04 AM, Jaehoon Chung wrote:
Hi,

On 08/11/2016 10:52 PM, Ritesh Harjani wrote:
Few controllers (like MSM) may have to override div
in certain cases. Hence provide a callback to get the
div value for their driver.

Signed-off-by: Sahitya Tummala <stummala@xxxxxxxxxxxxxx>
Signed-off-by: Ritesh Harjani <riteshh@xxxxxxxxxxxxxx>
---
 drivers/mmc/host/sdhci.c | 8 ++++++++
 drivers/mmc/host/sdhci.h | 1 +
 2 files changed, 9 insertions(+)

diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index cd65d47..cc3d6f2 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -1318,6 +1318,14 @@ u16 sdhci_calc_clk(struct sdhci_host *host,
unsigned int clock,
 clock_set:
     if (real_div)
         *actual_clock = (host->max_clk * clk_mul) / real_div;
+    /*
+     * Few controllers may have to override div
+     * here. Hence provide a callback to get the
+     * div value for them.
+     */
+    if (host->ops->get_clk_div)
+        div = host->ops->get_clk_div(host, div);

This is for only getting your div value. Few controllers?
Rather, use the existent callback function..It's better than adding
new callback.

As of today sdhci-of-arasan is the only user of this quirk
-SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN. I was hoping that with this
callback, we may get away with this quirk if sdhci-of-arasan can have
get_clk_div callback implemented in it's driver?

Since I was not sure on this, so I did not modify sdhci-of-arasan.
Thoughts?

yup, I'm still using SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN in
sdhci-of-arasan now. If you are addressing this, please go ahead.

Per previous disscussion of sdhci, it is deprecated to add new quirks
or callback(?) into sdhci. It should be better to make it a library.
From this view, you should overwrite the set_clock in your variant
driver.

I has a question here, (like MSM) may have to override div
in certain cases. What certain cases is? I just see you simply
return 0 there which means you want to bypass the clk?
If that is a trick of clk rate, we could use clk framework API
there to lower the input clk to make the calculation produce
zero div?




In your controller, add the your set_clock() callback. not get_clk_div.
(Well, Adrian might have other opinion.)
Alright, please let me know what would be the right approach.


Best Regards,
Jaehoon Chung


+
     clk |= (div & SDHCI_DIV_MASK) << SDHCI_DIVIDER_SHIFT;
     clk |= ((div & SDHCI_DIV_HI_MASK) >> SDHCI_DIV_MASK_LEN)
         << SDHCI_DIVIDER_HI_SHIFT;
diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
index 0411c9f..4701001 100644
--- a/drivers/mmc/host/sdhci.h
+++ b/drivers/mmc/host/sdhci.h
@@ -562,6 +562,7 @@ struct sdhci_ops {
                      struct mmc_card *card,
                      unsigned int max_dtr, int host_drv,
                      int card_drv, int *drv_type);
+    int    (*get_clk_div)(struct sdhci_host *host, int div);
 };

 #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS


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



--
Best Regards
Shawn Lin

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



[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux