Thread (26 messages) 26 messages, 7 authors, 2012-06-30
STALE5086d

[PATCH 3/3] mtd: gpmi: change the code for clocks

From: Dong Aisheng <hidden>
Date: 2012-06-29 09:54:33

On Fri, Jun 29, 2012 at 05:44:47PM +0800, Lothar Wa?mann wrote:
Hi,

Dong Aisheng writes:
quoted
On Fri, Jun 29, 2012 at 05:29:26PM +0800, Lothar Wa?mann wrote:
quoted
Hi,

Dong Aisheng writes:
quoted
On Fri, Jun 29, 2012 at 10:06:52AM +0800, Shawn Guo wrote:
quoted
On Thu, Jun 28, 2012 at 11:52:05PM -0400, Huang Shijie wrote:
quoted
From: Huang Shijie <redacted>

The gpmi nand driver may needs several clocks(MX6Q needs five clocks).

In the old clock framework, all these clocks are chained together,
all you need is to manipulate the first clock.

But the kernel uses the common clk framework now, which forces us to
get the clocks one by one. When we use them, we have to enable them
one by one too.
[...]
quoted
quoted
quoted
+static char *extra_clks_for_mx6q[] = {
+	"gpmi_apb", "gpmi_bch", "gpmi_bch_apb", "per1_bch",
+};
+
+static int __devinit gpmi_get_clks(struct gpmi_nand_data *this)
+{
+	struct resources *r = &this->resources;
+	char **extra_clks = NULL;
+	struct clk *clk;
+	int i;
+
+	r->clock[0] = clk_get(&this->pdev->dev, NULL);
+	if (IS_ERR(r->clock[0]))
+		goto err_clock;
+
+	/* Get extra clocks */
+	if (GPMI_IS_MX6Q(this))
+		extra_clks = extra_clks_for_mx6q;
We probably do not need this tweaking.  We can have the driver always
take all those 5 clocks, and I think the current imx28 clock driver
can just work with it, because the gpmi-nand clkdev lookup has NULL
con_id and all those 5 clocks can match the same one on imx28.
Will mx28 fail if doing like that?
clk_get will fail if no clock found.
struct clk *clk_get_sys(const char *dev_id, const char *con_id)
{
        struct clk_lookup *cl;

        mutex_lock(&clocks_mutex);
        cl = clk_find(dev_id, con_id);
        if (cl && !__clk_get(cl->clk))
                cl = NULL;
        mutex_unlock(&clocks_mutex);

        return cl ? cl->clk : ERR_PTR(-ENOENT);
}
EXPORT_SYMBOL(clk_get_sys);

Furthermore, find unnecessary clock for mx28 seems not a good choice.
Probably a better way is to define each SoC required clocks and get them
respectively. It's explicit and clear.
No, that's silly. You would have to change the driver for each
new platform that the driver can support.
If the new platform is fully compatible with exist platforms, then no.
If need more clocks, then in either way, we have to add support in driver.
Even if it had fewer clocks you would have to change the driver!
Yes.
For your case, you need create some dummy clock, right?
If yes, i would intend to explictly to define it for a new type
of IP.

Regards
Dong Aisheng
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help