mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
arm-soc: clock driver changes
The new clock subsystem was merged in linux-3.4 without any users, this now moves the first three platforms over to it: imx, mxs and spear. The series also contains the changes for the clock subsystem itself, since Mike preferred to have it together with the platforms that require these changes, in order to avoid interdependencies and conflicts. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJPuexPAAoJEIwa5zzehBx3YBsP/0nFhXjb5t1PdLfFzGKtcZVB j4zXWXMHQ1fA7wIfEpZF3Nnco6MQkufF5wJPoPdn1+wmkzCn3D6IwNVWVtW4U5i9 VGyShSbgusAAYXUe/9yYj8eN+bbRQSvdN4eWYWU6+rRXShGZ5dZZmp+IPNl54dnW 6F8uCnHX0cnIMCpGqV+41zZgZ/4wL2k9gdqu0LO6pi07o4tGd0Z4gcySgUFAnn1R kofNHueYIP4UgOg8DREoBzVKlpRqMou3S2kSZUfMeb3Q9ryF7UIvaGqIILyi7PKL kWd3nptg0EPavfL21SwXHiGpnDpB/Gj/F70kcPLus5RYujB24C9bvBmc26z68NZx Sz9mbElkkIU5duZsl1nxBWJ8IZ/tSWdtmC2xQMznmV7gHyGgVwr4j47f4Uv5sBvM 14JHDO7mqN6E6FnTFZu/oPAN5pDjgL+TVNK5BU6Wkq0zitrA6eyKDqCvBCqkO6Nn tNzOuyRDzMOwM7HzqXhxqtzJWXylO1Mldc4bM8X4Cocf4pnLna/X6uP6dgE6A+JY azVYx4I/0NdEPerDTzIcEhBDgZeBVROhUQr+kHxc4rf6WzUUbu/wEo1UKXWV66oW 1jb1yAFFWqYjkQuQc2PD4JSx35sFJaoSaoneRtmzBzRDfzSr5KjKj1E0e1skyMFq 7ZVLCqZD0cB9DhmMDkWP =rwFF -----END PGP SIGNATURE----- Merge tag 'clock' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc Pull arm-soc clock driver changes from Olof Johansson: "The new clock subsystem was merged in linux-3.4 without any users, this now moves the first three platforms over to it: imx, mxs and spear. The series also contains the changes for the clock subsystem itself, since Mike preferred to have it together with the platforms that require these changes, in order to avoid interdependencies and conflicts." Fix up trivial conflicts in arch/arm/mach-kirkwood/common.c (code removed in one branch, added OF support in another) and drivers/dma/imx-sdma.c (independent changes next to each other). * tag 'clock' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (97 commits) clk: Fix CLK_SET_RATE_GATE flag validation in clk_set_rate(). clk: Provide dummy clk_unregister() SPEAr: Update defconfigs SPEAr: Add SMI NOR partition info in dts files SPEAr: Switch to common clock framework SPEAr: Call clk_prepare() before calling clk_enable SPEAr: clk: Add General Purpose Timer Synthesizer clock SPEAr: clk: Add Fractional Synthesizer clock SPEAr: clk: Add Auxiliary Synthesizer clock SPEAr: clk: Add VCO-PLL Synthesizer clock SPEAr: Add DT bindings for SPEAr's timer ARM i.MX: remove now unused clock files ARM: i.MX6: implement clocks using common clock framework ARM i.MX35: implement clocks using common clock framework ARM i.MX5: implement clocks using common clock framework ARM: Kirkwood: Replace clock gating ARM: Orion: Audio: Add clk/clkdev support ARM: Orion: PCIE: Add support for clk ARM: Orion: XOR: Add support for clk ARM: Orion: CESA: Add support for clk ...
This commit is contained in:
commit
2795343705
151 changed files with 8310 additions and 14193 deletions
|
|
@ -323,7 +323,8 @@ struct sdma_engine {
|
|||
struct sdma_context_data *context;
|
||||
dma_addr_t context_phys;
|
||||
struct dma_device dma_device;
|
||||
struct clk *clk;
|
||||
struct clk *clk_ipg;
|
||||
struct clk *clk_ahb;
|
||||
spinlock_t channel_0_lock;
|
||||
struct sdma_script_start_addrs *script_addrs;
|
||||
};
|
||||
|
|
@ -867,7 +868,8 @@ static int sdma_alloc_chan_resources(struct dma_chan *chan)
|
|||
sdmac->peripheral_type = data->peripheral_type;
|
||||
sdmac->event_id0 = data->dma_request;
|
||||
|
||||
clk_enable(sdmac->sdma->clk);
|
||||
clk_enable(sdmac->sdma->clk_ipg);
|
||||
clk_enable(sdmac->sdma->clk_ahb);
|
||||
|
||||
ret = sdma_request_channel(sdmac);
|
||||
if (ret)
|
||||
|
|
@ -904,7 +906,8 @@ static void sdma_free_chan_resources(struct dma_chan *chan)
|
|||
|
||||
dma_free_coherent(NULL, PAGE_SIZE, sdmac->bd, sdmac->bd_phys);
|
||||
|
||||
clk_disable(sdma->clk);
|
||||
clk_disable(sdma->clk_ipg);
|
||||
clk_disable(sdma->clk_ahb);
|
||||
}
|
||||
|
||||
static struct dma_async_tx_descriptor *sdma_prep_slave_sg(
|
||||
|
|
@ -1177,12 +1180,14 @@ static void sdma_load_firmware(const struct firmware *fw, void *context)
|
|||
addr = (void *)header + header->script_addrs_start;
|
||||
ram_code = (void *)header + header->ram_code_start;
|
||||
|
||||
clk_enable(sdma->clk);
|
||||
clk_enable(sdma->clk_ipg);
|
||||
clk_enable(sdma->clk_ahb);
|
||||
/* download the RAM image for SDMA */
|
||||
sdma_load_script(sdma, ram_code,
|
||||
header->ram_code_size,
|
||||
addr->ram_code_start_addr);
|
||||
clk_disable(sdma->clk);
|
||||
clk_disable(sdma->clk_ipg);
|
||||
clk_disable(sdma->clk_ahb);
|
||||
|
||||
sdma_add_scripts(sdma, addr);
|
||||
|
||||
|
|
@ -1224,7 +1229,8 @@ static int __init sdma_init(struct sdma_engine *sdma)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
clk_enable(sdma->clk);
|
||||
clk_enable(sdma->clk_ipg);
|
||||
clk_enable(sdma->clk_ahb);
|
||||
|
||||
/* Be sure SDMA has not started yet */
|
||||
writel_relaxed(0, sdma->regs + SDMA_H_C0PTR);
|
||||
|
|
@ -1277,12 +1283,14 @@ static int __init sdma_init(struct sdma_engine *sdma)
|
|||
/* Initializes channel's priorities */
|
||||
sdma_set_channel_priority(&sdma->channel[0], 7);
|
||||
|
||||
clk_disable(sdma->clk);
|
||||
clk_disable(sdma->clk_ipg);
|
||||
clk_disable(sdma->clk_ahb);
|
||||
|
||||
return 0;
|
||||
|
||||
err_dma_alloc:
|
||||
clk_disable(sdma->clk);
|
||||
clk_disable(sdma->clk_ipg);
|
||||
clk_disable(sdma->clk_ahb);
|
||||
dev_err(sdma->dev, "initialisation failed with %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -1321,12 +1329,21 @@ static int __init sdma_probe(struct platform_device *pdev)
|
|||
goto err_request_region;
|
||||
}
|
||||
|
||||
sdma->clk = clk_get(&pdev->dev, NULL);
|
||||
if (IS_ERR(sdma->clk)) {
|
||||
ret = PTR_ERR(sdma->clk);
|
||||
sdma->clk_ipg = devm_clk_get(&pdev->dev, "ipg");
|
||||
if (IS_ERR(sdma->clk_ipg)) {
|
||||
ret = PTR_ERR(sdma->clk_ipg);
|
||||
goto err_clk;
|
||||
}
|
||||
|
||||
sdma->clk_ahb = devm_clk_get(&pdev->dev, "ahb");
|
||||
if (IS_ERR(sdma->clk_ahb)) {
|
||||
ret = PTR_ERR(sdma->clk_ahb);
|
||||
goto err_clk;
|
||||
}
|
||||
|
||||
clk_prepare(sdma->clk_ipg);
|
||||
clk_prepare(sdma->clk_ahb);
|
||||
|
||||
sdma->regs = ioremap(iores->start, resource_size(iores));
|
||||
if (!sdma->regs) {
|
||||
ret = -ENOMEM;
|
||||
|
|
@ -1436,7 +1453,6 @@ err_alloc:
|
|||
err_request_irq:
|
||||
iounmap(sdma->regs);
|
||||
err_ioremap:
|
||||
clk_put(sdma->clk);
|
||||
err_clk:
|
||||
release_mem_region(iores->start, resource_size(iores));
|
||||
err_request_region:
|
||||
|
|
|
|||
|
|
@ -1715,7 +1715,7 @@ static int __init ipu_probe(struct platform_device *pdev)
|
|||
}
|
||||
|
||||
/* Make sure IPU HSP clock is running */
|
||||
clk_enable(ipu_data.ipu_clk);
|
||||
clk_prepare_enable(ipu_data.ipu_clk);
|
||||
|
||||
/* Disable all interrupts */
|
||||
idmac_write_ipureg(&ipu_data, 0, IPU_INT_CTRL_1);
|
||||
|
|
@ -1747,7 +1747,7 @@ static int __init ipu_probe(struct platform_device *pdev)
|
|||
err_idmac_init:
|
||||
err_attach_irq:
|
||||
ipu_irq_detach_irq(&ipu_data, pdev);
|
||||
clk_disable(ipu_data.ipu_clk);
|
||||
clk_disable_unprepare(ipu_data.ipu_clk);
|
||||
clk_put(ipu_data.ipu_clk);
|
||||
err_clk_get:
|
||||
iounmap(ipu_data.reg_ic);
|
||||
|
|
@ -1765,7 +1765,7 @@ static int __exit ipu_remove(struct platform_device *pdev)
|
|||
|
||||
ipu_idmac_exit(ipu);
|
||||
ipu_irq_detach_irq(ipu, pdev);
|
||||
clk_disable(ipu->ipu_clk);
|
||||
clk_disable_unprepare(ipu->ipu_clk);
|
||||
clk_put(ipu->ipu_clk);
|
||||
iounmap(ipu->reg_ic);
|
||||
iounmap(ipu->reg_ipu);
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@
|
|||
#include <linux/interrupt.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/memory.h>
|
||||
#include <linux/clk.h>
|
||||
#include <plat/mv_xor.h>
|
||||
|
||||
#include "dmaengine.h"
|
||||
|
|
@ -1307,11 +1308,25 @@ static int mv_xor_shared_probe(struct platform_device *pdev)
|
|||
if (dram)
|
||||
mv_xor_conf_mbus_windows(msp, dram);
|
||||
|
||||
/* Not all platforms can gate the clock, so it is not
|
||||
* an error if the clock does not exists.
|
||||
*/
|
||||
msp->clk = clk_get(&pdev->dev, NULL);
|
||||
if (!IS_ERR(msp->clk))
|
||||
clk_prepare_enable(msp->clk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mv_xor_shared_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct mv_xor_shared_private *msp = platform_get_drvdata(pdev);
|
||||
|
||||
if (!IS_ERR(msp->clk)) {
|
||||
clk_disable_unprepare(msp->clk);
|
||||
clk_put(msp->clk);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@
|
|||
struct mv_xor_shared_private {
|
||||
void __iomem *xor_base;
|
||||
void __iomem *xor_high_base;
|
||||
struct clk *clk;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue