blob: 4a8bf29c21c615c972d20d00e0e45e6dff0e389f [file] [log] [blame]
Matt Wagantall6d9ebee2011-08-26 12:15:24 -07001/*
2 * MSM architecture CPU clock driver header
Daniel Walker43b39f92010-03-03 08:54:11 -08003 *
4 * Copyright (C) 2007 Google, Inc.
Matt Wagantall6d9ebee2011-08-26 12:15:24 -07005 * Copyright (c) 2007-2011, Code Aurora Forum. All rights reserved.
Daniel Walker43b39f92010-03-03 08:54:11 -08006 * Author: San Mehat <san@android.com>
7 *
8 * This software is licensed under the terms of the GNU General Public
9 * License version 2, as published by the Free Software Foundation, and
10 * may be copied, distributed, and modified under those terms.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 */
18
19#ifndef __ARCH_ARM_MACH_MSM_ACPUCLOCK_H
20#define __ARCH_ARM_MACH_MSM_ACPUCLOCK_H
21
Matt Wagantall6d9ebee2011-08-26 12:15:24 -070022/**
23 * enum setrate_reason - Reasons for use with acpuclk_set_rate()
24 */
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070025enum setrate_reason {
26 SETRATE_CPUFREQ = 0,
27 SETRATE_SWFI,
28 SETRATE_PC,
29 SETRATE_HOTPLUG,
30 SETRATE_INIT,
31};
32
Matt Wagantall6d9ebee2011-08-26 12:15:24 -070033/**
34 * struct acpuclk_platform_data - Platform data for acpuclk_init()
35 */
36struct acpuclk_platform_data {
37 uint32_t acpu_switch_time_us;
38 unsigned long max_speed_delta_khz;
39 uint32_t vdd_switch_time_us;
40 unsigned int max_axi_khz;
41 unsigned int max_vdd;
42 int (*acpu_set_vdd) (int mvolts);
43 int (*init)(struct acpuclk_platform_data *);
44};
45
46/**
47 * struct acpuclk_data - Function pointers and data for function implementations
48 */
49struct acpuclk_data {
50 unsigned long (*get_rate)(int cpu);
51 int (*set_rate)(int cpu, unsigned long rate, enum setrate_reason);
52 uint32_t switch_time_us;
53 unsigned long power_collapse_khz;
54 unsigned long wait_for_irq_khz;
55};
56
57/**
58 * acpulock_get_rate() - Get a CPU's clock rate in KHz
59 * @cpu: CPU to query the rate of
60 */
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070061unsigned long acpuclk_get_rate(int cpu);
Matt Wagantall6d9ebee2011-08-26 12:15:24 -070062
63/**
64 * acpuclk_set_rate() - Set a CPU's clock rate
65 * @cpu: CPU to set rate of
66 * @rate: Desired rate in KHz
67 * @setrate_reason: Reason for the rate switch
68 *
69 * Returns 0 for success.
70 */
71int acpuclk_set_rate(int cpu, unsigned long rate, enum setrate_reason);
72
73/**
74 * acpuclk_get_switch_time() - Query estimated time in us for a CPU rate switch
75 */
Daniel Walker43b39f92010-03-03 08:54:11 -080076uint32_t acpuclk_get_switch_time(void);
Matt Wagantall6d9ebee2011-08-26 12:15:24 -070077
78/**
79 * acpuclk_power_collapse() - Prepare current CPU clocks for power-collapse
80 *
81 * Returns the previous rate of the CPU in KHz.
82 */
Daniel Walker43b39f92010-03-03 08:54:11 -080083unsigned long acpuclk_power_collapse(void);
Daniel Walker43b39f92010-03-03 08:54:11 -080084
Matt Wagantall6d9ebee2011-08-26 12:15:24 -070085/**
86 * acpuclk_wait_for_irq() - Prepare current CPU clocks for SWFI
87 *
88 * Returns the previous rate of the CPU in KHz.
89 */
90unsigned long acpuclk_wait_for_irq(void);
91
92/**
93 * acpuclk_register() - Register acpuclk_data function implementations
94 * @data: acpuclock API implementations and data
95 */
96void acpuclk_register(struct acpuclk_data *data);
97
98/**
99 * acpuclk_init() - acpuclock driver initialization function
100 *
101 * Return 0 for success.
102 */
103int acpuclk_init(struct acpuclk_platform_data *);
104
105/* SoC-specific acpuclock initialization functions. */
106int acpuclk_7201_init(struct acpuclk_platform_data *);
107int acpuclk_7x30_init(struct acpuclk_platform_data *);
108int acpuclk_8x50_init(struct acpuclk_platform_data *);
109int acpuclk_8x60_init(struct acpuclk_platform_data *);
110int acpuclk_8960_init(struct acpuclk_platform_data *);
111int acpuclk_9xxx_init(struct acpuclk_platform_data *);
112
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700113#endif