1 /* 2 * OMAP5 Voltage Management Routines 3 * 4 * Based on voltagedomains44xx_data.c 5 * 6 * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License version 2 as 10 * published by the Free Software Foundation. 11 */ 12 #include <linux/kernel.h> 13 #include <linux/err.h> 14 #include <linux/init.h> 15 16 #include "common.h" 17 18 #include "prm54xx.h" 19 #include "voltage.h" 20 #include "omap_opp_data.h" 21 #include "vc.h" 22 #include "vp.h" 23 24 static const struct omap_vfsm_instance omap5_vdd_mpu_vfsm = { 25 .voltsetup_reg = OMAP54XX_PRM_VOLTSETUP_MPU_RET_SLEEP_OFFSET, 26 }; 27 28 static const struct omap_vfsm_instance omap5_vdd_mm_vfsm = { 29 .voltsetup_reg = OMAP54XX_PRM_VOLTSETUP_MM_RET_SLEEP_OFFSET, 30 }; 31 32 static const struct omap_vfsm_instance omap5_vdd_core_vfsm = { 33 .voltsetup_reg = OMAP54XX_PRM_VOLTSETUP_CORE_RET_SLEEP_OFFSET, 34 }; 35 36 static struct voltagedomain omap5_voltdm_mpu = { 37 .name = "mpu", 38 .scalable = true, 39 .read = omap4_prm_vcvp_read, 40 .write = omap4_prm_vcvp_write, 41 .rmw = omap4_prm_vcvp_rmw, 42 .vc = &omap4_vc_mpu, 43 .vfsm = &omap5_vdd_mpu_vfsm, 44 .vp = &omap4_vp_mpu, 45 }; 46 47 static struct voltagedomain omap5_voltdm_mm = { 48 .name = "mm", 49 .scalable = true, 50 .read = omap4_prm_vcvp_read, 51 .write = omap4_prm_vcvp_write, 52 .rmw = omap4_prm_vcvp_rmw, 53 .vc = &omap4_vc_iva, 54 .vfsm = &omap5_vdd_mm_vfsm, 55 .vp = &omap4_vp_iva, 56 }; 57 58 static struct voltagedomain omap5_voltdm_core = { 59 .name = "core", 60 .scalable = true, 61 .read = omap4_prm_vcvp_read, 62 .write = omap4_prm_vcvp_write, 63 .rmw = omap4_prm_vcvp_rmw, 64 .vc = &omap4_vc_core, 65 .vfsm = &omap5_vdd_core_vfsm, 66 .vp = &omap4_vp_core, 67 }; 68 69 static struct voltagedomain omap5_voltdm_wkup = { 70 .name = "wkup", 71 }; 72 73 static struct voltagedomain *voltagedomains_omap5[] __initdata = { 74 &omap5_voltdm_mpu, 75 &omap5_voltdm_mm, 76 &omap5_voltdm_core, 77 &omap5_voltdm_wkup, 78 NULL, 79 }; 80 81 static const char *const sys_clk_name __initconst = "sys_clkin"; 82 83 void __init omap54xx_voltagedomains_init(void) 84 { 85 struct voltagedomain *voltdm; 86 int i; 87 88 for (i = 0; voltdm = voltagedomains_omap5[i], voltdm; i++) 89 voltdm->sys_clk.name = sys_clk_name; 90 91 voltdm_init(voltagedomains_omap5); 92 }; 93