Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi...
[cascardo/linux.git] / drivers / pcmcia / sa11xx_base.c
index 54d3089..cf6de2c 100644 (file)
@@ -135,14 +135,16 @@ sa1100_pcmcia_frequency_change(struct soc_pcmcia_socket *skt,
 static int
 sa1100_pcmcia_set_timing(struct soc_pcmcia_socket *skt)
 {
-       return sa1100_pcmcia_set_mecr(skt, cpufreq_get(0));
+       unsigned long clk = clk_get_rate(skt->clk);
+
+       return sa1100_pcmcia_set_mecr(skt, clk / 1000);
 }
 
 static int
 sa1100_pcmcia_show_timing(struct soc_pcmcia_socket *skt, char *buf)
 {
        struct soc_pcmcia_timing timing;
-       unsigned int clock = cpufreq_get(0);
+       unsigned int clock = clk_get_rate(skt->clk);
        unsigned long mecr = MECR;
        char *p = buf;
 
@@ -218,6 +220,11 @@ int sa11xx_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops,
        struct skt_dev_info *sinfo;
        struct soc_pcmcia_socket *skt;
        int i, ret = 0;
+       struct clk *clk;
+
+       clk = clk_get(dev, NULL);
+       if (IS_ERR(clk))
+               return PTR_ERR(clk);
 
        sa11xx_drv_pcmcia_ops(ops);
 
@@ -226,12 +233,14 @@ int sa11xx_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops,
                return -ENOMEM;
 
        sinfo->nskt = nr;
+       sinfo->clk = clk;
 
        /* Initialize processor specific parameters */
        for (i = 0; i < nr; i++) {
                skt = &sinfo->skt[i];
 
                skt->nr = first + i;
+               skt->clk = clk;
                soc_pcmcia_init_one(skt, ops, dev);
 
                ret = sa11xx_drv_pcmcia_add_one(skt);
@@ -242,6 +251,7 @@ int sa11xx_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops,
        if (ret) {
                while (--i >= 0)
                        soc_pcmcia_remove_one(&sinfo->skt[i]);
+               clk_put(clk);
                kfree(sinfo);
        } else {
                dev_set_drvdata(dev, sinfo);