regulator-name = "vddpu";
regulator-min-microvolt = <725000>;
regulator-max-microvolt = <1450000>;
- regulator-always-on;
anatop-reg-offset = <0x140>;
anatop-vol-bit-shift = <9>;
anatop-vol-bit-width = <5>;
compatible = "fsl,imx6sl-gpc", "fsl,imx6q-gpc";
reg = <0x020dc000 0x4000>;
interrupts = <0 89 0x04>;
+ clocks = <&clks IMX6SL_CLK_GPU2D_PODF>, <&clks IMX6SL_CLK_GPU2D_OVG>,
+ <&clks IMX6SL_CLK_IPG>;
+ clock-names = "gpu2d_podf", "gpu2d_ovg", "ipg";
+ pu-supply = <®_pu>;
};
gpr: iomuxc-gpr@020e0000 {
#include <linux/irqchip/arm-gic.h>
#include <linux/regulator/consumer.h>
#include "common.h"
+#include "hardware.h"
#define GPC_IMR1 0x008
#define GPC_PGC_CPU_PDN 0x2a0
static void imx_pu_clk(bool enable)
{
if (enable) {
- clk_prepare_enable(gpu3d_clk);
- clk_prepare_enable(gpu3d_shader_clk);
- clk_prepare_enable(vpu_clk);
- clk_prepare_enable(gpu2d_clk);
- clk_prepare_enable(gpu2d_axi_clk);
- clk_prepare_enable(openvg_axi_clk);
+ if (cpu_is_imx6sl()) {
+ clk_prepare_enable(gpu2d_clk);
+ clk_prepare_enable(openvg_axi_clk);
+ } else {
+ clk_prepare_enable(gpu3d_clk);
+ clk_prepare_enable(gpu3d_shader_clk);
+ clk_prepare_enable(vpu_clk);
+ clk_prepare_enable(gpu2d_clk);
+ clk_prepare_enable(gpu2d_axi_clk);
+ clk_prepare_enable(openvg_axi_clk);
+ }
} else {
- clk_disable_unprepare(gpu3d_clk);
- clk_disable_unprepare(gpu3d_shader_clk);
- clk_disable_unprepare(vpu_clk);
- clk_disable_unprepare(gpu2d_clk);
- clk_disable_unprepare(gpu2d_axi_clk);
- clk_disable_unprepare(openvg_axi_clk);
+ if (cpu_is_imx6sl()) {
+ clk_disable_unprepare(gpu2d_clk);
+ clk_disable_unprepare(openvg_axi_clk);
+ } else {
+ clk_disable_unprepare(gpu3d_clk);
+ clk_disable_unprepare(gpu3d_shader_clk);
+ clk_disable_unprepare(vpu_clk);
+ clk_disable_unprepare(gpu2d_clk);
+ clk_disable_unprepare(gpu2d_axi_clk);
+ clk_disable_unprepare(openvg_axi_clk);
+ }
}
}
nb.notifier_call = &imx_gpc_regulator_notify;
/* Get gpu&vpu clk for power up PU by GPC */
- gpu3d_clk = devm_clk_get(gpc_dev, "gpu3d_core");
- gpu3d_shader_clk = devm_clk_get(gpc_dev, "gpu3d_shader");
- gpu2d_clk = devm_clk_get(gpc_dev, "gpu2d_core");
- gpu2d_axi_clk = devm_clk_get(gpc_dev, "gpu2d_axi");
- openvg_axi_clk = devm_clk_get(gpc_dev, "openvg_axi");
- vpu_clk = devm_clk_get(gpc_dev, "vpu_axi");
- ipg_clk = devm_clk_get(gpc_dev, "ipg");
- if (IS_ERR(gpu3d_clk) || IS_ERR(gpu3d_shader_clk)
- || IS_ERR(gpu2d_clk) || IS_ERR(gpu2d_axi_clk)
- || IS_ERR(openvg_axi_clk) || IS_ERR(vpu_clk)
- || IS_ERR(ipg_clk)) {
- dev_err(gpc_dev, "failed to get clk!\n");
- return -ENOENT;
+ if (cpu_is_imx6sl()) {
+ gpu2d_clk = devm_clk_get(gpc_dev, "gpu2d_podf");
+ openvg_axi_clk = devm_clk_get(gpc_dev, "gpu2d_ovg");
+ ipg_clk = devm_clk_get(gpc_dev, "ipg");
+ if (IS_ERR(gpu2d_clk) || IS_ERR(openvg_axi_clk)
+ || IS_ERR(ipg_clk)) {
+ dev_err(gpc_dev, "failed to get clk!\n");
+ return -ENOENT;
+ }
+ } else {
+ gpu3d_clk = devm_clk_get(gpc_dev, "gpu3d_core");
+ gpu3d_shader_clk = devm_clk_get(gpc_dev, "gpu3d_shader");
+ gpu2d_clk = devm_clk_get(gpc_dev, "gpu2d_core");
+ gpu2d_axi_clk = devm_clk_get(gpc_dev, "gpu2d_axi");
+ openvg_axi_clk = devm_clk_get(gpc_dev, "openvg_axi");
+ vpu_clk = devm_clk_get(gpc_dev, "vpu_axi");
+ ipg_clk = devm_clk_get(gpc_dev, "ipg");
+ if (IS_ERR(gpu3d_clk) || IS_ERR(gpu3d_shader_clk)
+ || IS_ERR(gpu2d_clk) || IS_ERR(gpu2d_axi_clk)
+ || IS_ERR(openvg_axi_clk) || IS_ERR(vpu_clk)
+ || IS_ERR(ipg_clk)) {
+ dev_err(gpc_dev, "failed to get clk!\n");
+ return -ENOENT;
+ }
}
ret = regulator_register_notifier(pu_reg, &nb);