arm: tegra: fuse: tsensor specific fuse public API added
[linux-3.10.git] / arch / arm / mach-tegra / tegra3_tsensor.c
1 /*
2  * arch/arm/mach-tegra/tegra3_tsensor.c
3  *
4  * Copyright (C) 2011 NVIDIA Corporation.
5  *
6  * This software is licensed under the terms of the GNU General Public
7  * License version 2, as published by the Free Software Foundation, and
8  * may be copied, distributed, and modified under those terms.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  */
16
17 #include <linux/kernel.h>
18 #include <linux/init.h>
19 #include "board.h"
20
21 #ifdef CONFIG_SENSORS_TEGRA_TSENSOR
22 #include <mach/tsensor.h>
23 #include <mach/tegra_fuse.h>
24
25 #include "devices.h"
26 #include "fuse.h"
27
28 static struct tegra_tsensor_platform_data tsensor_data = {
29         .hysteresis = 5,
30         .sw_intr_temperature = 75,
31         .hw_clk_div_temperature = 80,
32         .hw_reset_temperature = 90,
33 };
34
35 /* fuse revision constants used for tsensor */
36 #define TSENSOR_FUSE_REVISION_DECIMAL 8
37 #define TSENSOR_FUSE_REVISION_INTEGER 0
38
39 void __init tegra_tsensor_init(void)
40 {
41         unsigned int reg, fuse_rev_integer, fuse_rev_decimal;
42         int err;
43         /* tsensor driver is instantiated based on fuse revision */
44         err = tegra_fuse_get_revision(&reg);
45         if (err)
46                 goto errLabel;
47         fuse_rev_decimal = (reg & 0xf);
48         fuse_rev_integer = ((reg >> 4) & 0x7);
49         pr_info("\nTegra3 fuse revision %d.%d \n", fuse_rev_integer,
50                 fuse_rev_decimal);
51         if ((fuse_rev_decimal >= TSENSOR_FUSE_REVISION_DECIMAL) &&
52                 (fuse_rev_integer >= TSENSOR_FUSE_REVISION_INTEGER)) {
53                 /* set platform data for device before register */
54                 tegra_tsensor_device.dev.platform_data = &tsensor_data;
55                 platform_device_register(&tegra_tsensor_device);
56         }
57 errLabel:
58         return;
59 }
60
61 #else
62 void __init tegra_tsensor_init(void) { }
63 #endif
64