Commit | Line | Data |
---|---|---|
fa765823 TG |
1 | /* |
2 | * Smart reflex Class 3 specific implementations | |
3 | * | |
4 | * Author: Thara Gopinath <thara@ti.com> | |
5 | * | |
6 | * Copyright (C) 2010 Texas Instruments, Inc. | |
7 | * Thara Gopinath <thara@ti.com> | |
8 | * | |
9 | * This program is free software; you can redistribute it and/or modify | |
10 | * it under the terms of the GNU General Public License version 2 as | |
11 | * published by the Free Software Foundation. | |
12 | */ | |
13 | ||
b86aeafc JP |
14 | #include <linux/power/smartreflex.h> |
15 | #include "voltage.h" | |
fa765823 | 16 | |
80821c9c | 17 | static int sr_class3_enable(struct omap_sr *sr) |
fa765823 | 18 | { |
80821c9c | 19 | unsigned long volt = voltdm_get_voltage(sr->voltdm); |
fa765823 TG |
20 | |
21 | if (!volt) { | |
8b765d72 JP |
22 | pr_warning("%s: Curr voltage unknown. Cannot enable %s\n", |
23 | __func__, sr->name); | |
fa765823 TG |
24 | return -ENODATA; |
25 | } | |
26 | ||
80821c9c JP |
27 | omap_vp_enable(sr->voltdm); |
28 | return sr_enable(sr->voltdm, volt); | |
fa765823 TG |
29 | } |
30 | ||
80821c9c | 31 | static int sr_class3_disable(struct omap_sr *sr, int is_volt_reset) |
fa765823 | 32 | { |
80821c9c JP |
33 | sr_disable_errgen(sr->voltdm); |
34 | omap_vp_disable(sr->voltdm); | |
35 | sr_disable(sr->voltdm); | |
fa765823 | 36 | if (is_volt_reset) |
80821c9c | 37 | voltdm_reset(sr->voltdm); |
fa765823 TG |
38 | |
39 | return 0; | |
40 | } | |
41 | ||
80821c9c | 42 | static int sr_class3_configure(struct omap_sr *sr) |
fa765823 | 43 | { |
80821c9c | 44 | return sr_configure_errgen(sr->voltdm); |
fa765823 TG |
45 | } |
46 | ||
47 | /* SR class3 structure */ | |
48 | static struct omap_sr_class_data class3_data = { | |
49 | .enable = sr_class3_enable, | |
50 | .disable = sr_class3_disable, | |
51 | .configure = sr_class3_configure, | |
52 | .class_type = SR_CLASS3, | |
53 | }; | |
54 | ||
55 | /* Smartreflex Class3 init API to be called from board file */ | |
56 | static int __init sr_class3_init(void) | |
57 | { | |
58 | pr_info("SmartReflex Class3 initialized\n"); | |
59 | return sr_register_class(&class3_data); | |
60 | } | |
61 | late_initcall(sr_class3_init); |