84e87631bab7b5f05cdbe884fdd4e837196422d9
[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, 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-roth.h"
29
30 static struct pwm_fan_platform_data fan_data = {
31         .active_steps = MAX_ACTIVE_STATES,
32         .active_temps = {59, 60, 61, 62, 63, 64, 65, 66, 67, 71},
33         .active_rpm = {
34                 0, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000, 11000},
35         .active_pwm = {0, 158*1024, 227*1024 , 230*1024, 235*1024, 240*1024,
36                                 245*1024, 250*1024, 252*1024, 255*1024},
37         .active_rru = {1024*50, 1024, 1024, 256, 256, 256, 256, 256, 256, 256},
38         .active_rrd = {1024*50, 1024, 1024, 256, 256, 256, 256, 128, 128, 128},
39         .pwm_period = 256,
40         .pwm_id = 0,
41         .step_time = 100, /*msecs*/
42         .pwm_cap = 227,
43         .precision_multiplier = 1024,
44 };
45
46 static struct platform_device pwm_fan_therm_cooling_device = {
47         .name = "pwm-fan",
48         .id = -1,
49         .num_resources = 0,
50         .dev = {
51                 .platform_data = &fan_data,
52         },
53 };
54
55 static struct platform_device *roth_fan_device[] = {
56         &tegra_pwfm_device,
57 };
58
59 int __init roth_fan_init(void)
60 {
61         int err;
62
63         err = gpio_request(TEGRA_GPIO_PU3, "pwm-fan");
64         if (err < 0) {
65                 pr_err("FAN:gpio request failed\n");
66                 return err;
67         }
68         gpio_free(TEGRA_GPIO_PU3);
69         platform_device_register(&pwm_fan_therm_cooling_device);
70
71         err = platform_add_devices(roth_fan_device,
72                                 ARRAY_SIZE(roth_fan_device));
73         if (err < 0) {
74                 pr_err("FAN:pwm fan device device registration failed\n");
75                 return err;
76         }
77         return 0;
78 }