blob: fff5769da3d2cc07fc24bc2c8e2bb95654f1073d [file] [log] [blame]
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001/* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 */
13#ifndef __KGSL_PWRCTRL_H
14#define __KGSL_PWRCTRL_H
15
16/*****************************************************************************
17** power flags
18*****************************************************************************/
19#define KGSL_PWRFLAGS_POWER_ON 0
20#define KGSL_PWRFLAGS_CLK_ON 1
21#define KGSL_PWRFLAGS_AXI_ON 2
22#define KGSL_PWRFLAGS_IRQ_ON 3
23
24#define KGSL_PWRFLAGS_ON 1
25#define KGSL_PWRFLAGS_OFF 0
26
27#define KGSL_PWRLEVEL_TURBO 0
28#define KGSL_PWRLEVEL_NOMINAL 1
29#define KGSL_MAX_CLKS 5
30
31struct platform_device;
32
33struct kgsl_pwrctrl {
34 int interrupt_num;
35 int have_irq;
36 struct clk *ebi1_clk;
37 struct clk *grp_clks[KGSL_MAX_CLKS];
38 unsigned long power_flags;
39 struct kgsl_pwrlevel pwrlevels[KGSL_MAX_PWRLEVELS];
40 unsigned int active_pwrlevel;
41 int thermal_pwrlevel;
42 unsigned int num_pwrlevels;
43 unsigned int interval_timeout;
44 struct regulator *gpu_reg;
45 uint32_t pcl;
46 unsigned int nap_allowed;
47 const char *regulator_name;
48 const char *irq_name;
49 const char *src_clk_name;
50 s64 time;
51};
52
53void kgsl_pwrctrl_clk(struct kgsl_device *device, int state);
54void kgsl_pwrctrl_axi(struct kgsl_device *device, int state);
55void kgsl_pwrctrl_pwrrail(struct kgsl_device *device, int state);
56void kgsl_pwrctrl_irq(struct kgsl_device *device, int state);
57int kgsl_pwrctrl_init(struct kgsl_device *device);
58void kgsl_pwrctrl_close(struct kgsl_device *device);
59void kgsl_timer(unsigned long data);
60void kgsl_idle_check(struct work_struct *work);
61void kgsl_pre_hwaccess(struct kgsl_device *device);
62void kgsl_check_suspended(struct kgsl_device *device);
63int kgsl_pwrctrl_sleep(struct kgsl_device *device);
64void kgsl_pwrctrl_wake(struct kgsl_device *device);
65void kgsl_pwrctrl_pwrlevel_change(struct kgsl_device *device,
66 unsigned int level);
67int kgsl_pwrctrl_init_sysfs(struct kgsl_device *device);
68void kgsl_pwrctrl_uninit_sysfs(struct kgsl_device *device);
69void kgsl_pwrctrl_enable(struct kgsl_device *device);
70void kgsl_pwrctrl_disable(struct kgsl_device *device);
71static inline unsigned long kgsl_get_clkrate(struct clk *clk)
72{
73 return (clk != NULL) ? clk_get_rate(clk) : 0;
74}
75
76#endif /* __KGSL_PWRCTRL_H */