From 35c2400148dd155851fb5669dc078e590e2861bf Mon Sep 17 00:00:00 2001 From: Andrea Adami Date: Wed, 13 Nov 2013 17:58:46 +0100 Subject: linux-yocto: collie: add pcmcia clock fixes for sa1100 Signed-off-by: Dmitry Eremin-Solenikov Signed-off-by: Andrea Adami --- .../linux/linux-yocto-3.10/collie/collie.scc | 3 +- .../pcmcia-sa1100-device-clock.patch | 100 +++++++++++++++++++++ 2 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 recipes-kernel/linux/linux-yocto-3.10/patches/patches-sa1100/pcmcia-sa1100-device-clock.patch diff --git a/recipes-kernel/linux/linux-yocto-3.10/collie/collie.scc b/recipes-kernel/linux/linux-yocto-3.10/collie/collie.scc index fc8acab..e022444 100644 --- a/recipes-kernel/linux/linux-yocto-3.10/collie/collie.scc +++ b/recipes-kernel/linux/linux-yocto-3.10/collie/collie.scc @@ -12,8 +12,9 @@ patch ../patches/patches-mtd/collie-eraseinfo.patch patch ../patches/patches-mtd/collie-force-cfi.patch patch ../patches/patches-mtd/collie-mtd-resize.patch patch ../patches/patches-mtd/collie-force-unlock.patch +patch ../patches/patches-mtd/collie-fixup-strataflash.patch patch ../patches/patches-sa1100/collie-irda.patch patch ../patches/patches-sa1100/collie-add-bootblock.patch -patch ../patches/patches-mtd/collie-fixup-strataflash.patch patch ../patches/patches-sa1100/arm-sa1100-add-cpu-clock.patch patch ../patches/patches-sa1100/fbdev-sa1100fb-make-use-of-device-clock.patch +patch ../patches/patches-sa1100/pcmcia-sa1100-device-clock.patch diff --git a/recipes-kernel/linux/linux-yocto-3.10/patches/patches-sa1100/pcmcia-sa1100-device-clock.patch b/recipes-kernel/linux/linux-yocto-3.10/patches/patches-sa1100/pcmcia-sa1100-device-clock.patch new file mode 100644 index 0000000..1d12fc8 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto-3.10/patches/patches-sa1100/pcmcia-sa1100-device-clock.patch @@ -0,0 +1,100 @@ +From patchwork Tue Nov 12 03:32:10 2013 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [3/5] pcmcia: sa1100: make use of device clock +From: Dmitry Eremin-Solenikov +X-Patchwork-Id: 3170611 +Message-Id: <1384227132-10501-3-git-send-email-dbaryshkov@gmail.com> +To: linux-arm-kernel@lists.infradead.org +Cc: linux-fbdev@vger.kernel.org, linux-pcmcia@lists.infradead.org, + Russell King +Date: Tue, 12 Nov 2013 07:32:10 +0400 + +Use per-device clock (instead of calling cpufreq_get(0), which can +return 0 if no cpu frequency driver is selected) to program timings. + +Signed-off-by: Dmitry Eremin-Solenikov + +--- +drivers/pcmcia/sa1100_generic.c | 1 + + drivers/pcmcia/sa11xx_base.c | 14 ++++++++++++-- + 2 files changed, 13 insertions(+), 2 deletions(-) + +diff --git a/drivers/pcmcia/sa1100_generic.c b/drivers/pcmcia/sa1100_generic.c +index ff8a027..d2ab060 100644 +--- a/drivers/pcmcia/sa1100_generic.c ++++ b/drivers/pcmcia/sa1100_generic.c +@@ -93,6 +93,7 @@ static int sa11x0_drv_pcmcia_remove(struct platform_device *dev) + for (i = 0; i < sinfo->nskt; i++) + soc_pcmcia_remove_one(&sinfo->skt[i]); + ++ clk_put(sinfo->clk); + kfree(sinfo); + return 0; + } +diff --git a/drivers/pcmcia/sa11xx_base.c b/drivers/pcmcia/sa11xx_base.c +index 6eecd7c..aef0e69 100644 +--- a/drivers/pcmcia/sa11xx_base.c ++++ b/drivers/pcmcia/sa11xx_base.c +@@ -38,6 +38,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -138,14 +139,15 @@ 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; + +@@ -221,6 +223,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 -ENODEV; + + sa11xx_drv_pcmcia_ops(ops); + +@@ -229,12 +236,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); +@@ -245,6 +254,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); -- cgit 1.2.3-korg