ARM: tegra12: set CPU rate to 2.2GHz for sku 0x87
[linux-3.10.git] / arch / arm / mach-tegra / board-roth-fan.c
1 /*
2  * arch/arm/mach-tegra/board-roth-fan.c
3  *
4  * Copyright (c) 2012-2013 NVIDIA CORPORATION, All rights reserved.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13  * more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
18  */
19
20 #include <linux/gpio.h>
21 #include <linux/platform_data/pwm_fan.h>
22 #include <linux/platform_device.h>
23
24 #include <mach/gpio-tegra.h>
25
26 #include "gpio-names.h"
27 #include "devices.h"
28 #include "board.h"
29 #include "board-common.h"
30 #include "board-roth.h"
31 #include "tegra-board-id.h"
32
33 static struct pwm_fan_platform_data fan_data_yltc_8k = {
34         .active_steps = MAX_ACTIVE_STATES,
35         .active_rpm = {
36                 0, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000, 11000},
37         .active_pwm = {0, 158*1024, 227*1024 , 230*1024, 235*1024, 240*1024,
38                                 245*1024, 250*1024, 252*1024, 255*1024},
39         .active_rru = {1024*50, 1024, 1024, 256, 256, 256, 256, 256, 256, 256},
40         .active_rrd = {1024*50, 1024, 1024, 256, 256, 256, 256, 128, 128, 128},
41         /*Lookup table to get the actual state cap*/
42         .state_cap_lookup = {1, 1, 1, 1, 1, 1, 1, 2, 2, 2},
43         .pwm_period = 256,
44         .pwm_id = 0,
45         .step_time = 100, /*msecs*/
46         .state_cap = 1,
47         .precision_multiplier = 1024,
48         .tach_gpio = -1,
49 };
50
51 static struct pwm_fan_platform_data fan_data_delta_6k = {
52         .active_steps = MAX_ACTIVE_STATES,
53         .active_rpm = {
54                 0, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 10000, 11000},
55         .active_pwm = {0, 80*1024, 110*1024 , 150*1024, 235*1024, 240*1024,
56                                 245*1024, 250*1024, 252*1024, 255*1024},
57         .active_rru = {1024*40, 1024*2, 1024, 256,
58                                                 256, 256, 256, 256, 256, 256},
59         .active_rrd = {1024*40, 1024*2, 1024, 256, 256,
60                                                 256, 256, 128, 128, 128},
61         .state_cap_lookup = {2, 2, 2, 2, 2, 2, 2, 3, 3, 3},
62         .pwm_period = 256,
63         .pwm_id = 0,
64         .step_time = 100, /*msecs*/
65         .state_cap = 2,
66         .precision_multiplier = 1024,
67         .tach_gpio = TEGRA_GPIO_PU2,
68 };
69
70 static struct platform_device pwm_fan_therm_cooling_device_yltc_8k = {
71         .name = "pwm-fan",
72         .id = -1,
73         .num_resources = 0,
74         .dev = {
75                 .platform_data = &fan_data_yltc_8k,
76         },
77 };
78
79 static struct platform_device pwm_fan_therm_cooling_device_delta_6k = {
80         .name = "pwm-fan",
81         .id = -1,
82         .num_resources = 0,
83         .dev = {
84                 .platform_data = &fan_data_delta_6k,
85         },
86 };
87
88 int __init roth_fan_init(void)
89 {
90         int err;
91         struct board_info board_info;
92
93         tegra_get_board_info(&board_info);
94
95         err = gpio_request(TEGRA_GPIO_PU3, "pwm-fan");
96         if (err < 0) {
97                 pr_err("FAN:gpio request failed\n");
98                 return err;
99         }
100         gpio_free(TEGRA_GPIO_PU3);
101
102         if (board_info.board_id == BOARD_P2560) {
103                 platform_device_register(
104                                 &pwm_fan_therm_cooling_device_delta_6k);
105                 pr_info("FAN:registering for P2560\n");
106         } else {
107                 platform_device_register(&pwm_fan_therm_cooling_device_yltc_8k);
108                 pr_info("FAN:registering for P2454\n");
109         }
110         return 0;
111 }