043ca189318b5e4571ddc8ca38e31e56475760c8
[linux-3.10.git] / include / linux / input / max77665-haptic.h
1 /*
2  * MAX77665 Haptic Driver
3  *
4  * Copyright (c) 2012, NVIDIA Corporation, All Rights Reserved
5  * Author: Syed Rafiuddin <srafiuddin@nvidia.com>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
15  * more details.
16  *
17  * You should have received a copy of the GNU General Public License along
18  * with this program; if not, write to the Free Software Foundation, Inc.,
19  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20  */
21
22 #ifndef _LINUX_INPUT_MAX77665_HAPTIC_H
23 #define _LINUX_INPUT_MAX77665_HAPTIC_H
24
25 #include <linux/platform_device.h>
26 #include <linux/mfd/max77665.h>
27
28 #define MAX77665_HAPTIC_REG_GENERAL     0x00
29 #define MAX77665_HAPTIC_REG_CONF1       0x01
30 #define MAX77665_HAPTIC_REG_CONF2       0x02
31 #define MAX77665_HAPTIC_REG_DRVCONF     0x03
32 #define MAX77665_HAPTIC_REG_CYCLECONF1  0x04
33 #define MAX77665_HAPTIC_REG_CYCLECONF2  0x05
34 #define MAX77665_HAPTIC_REG_SIGCONF1    0x06
35 #define MAX77665_HAPTIC_REG_SIGCONF2    0x07
36 #define MAX77665_HAPTIC_REG_SIGCONF3    0x08
37 #define MAX77665_HAPTIC_REG_SIGCONF4    0x09
38 #define MAX77665_HAPTIC_REG_SIGDC1      0x0a
39 #define MAX77665_HAPTIC_REG_SIGDC2      0x0b
40 #define MAX77665_HAPTIC_REG_SIGPWMDC1   0x0c
41 #define MAX77665_HAPTIC_REG_SIGPWMDC2   0x0d
42 #define MAX77665_HAPTIC_REG_SIGPWMDC3   0x0e
43 #define MAX77665_HAPTIC_REG_SIGPWMDC4   0x0f
44 #define MAX77665_HAPTIC_REG_MTR_REV     0x10
45 #define MAX77665_HAPTIC_REG_END         0x11
46
47 #define MAX77665_PMIC_REG_LSCNFG        0x2B
48
49 /* Haptic configuration 1 register */
50 #define MAX77665_INVERT_SHIFT           7
51 #define MAX77665_CONT_MODE_SHIFT        6
52 #define MAX77665_MOTOR_STRT_SHIFT       3
53
54 /* Haptic configuration 2 register */
55 #define MAX77665_MOTOR_TYPE_SHIFT       7
56 #define MAX77665_ENABLE_SHIFT           6
57 #define MAX77665_MODE_SHIFT             5
58
59 /* Haptic driver configuration register */
60 #define MAX77665_CYCLE_SHIFT            6
61 #define MAX77665_SIG_PERIOD_SHIFT       4
62 #define MAX77665_SIG_DUTY_SHIFT         2
63 #define MAX77665_PWM_DUTY_SHIFT         0
64
65 enum max77665_haptic_motor_type {
66         MAX77665_HAPTIC_ERM,
67         MAX77665_HAPTIC_LRA,
68 };
69
70 enum max77665_haptic_pulse_mode {
71         MAX77665_EXTERNAL_MODE,
72         MAX77665_INTERNAL_MODE,
73 };
74
75 enum max77665_haptic_pwm_divisor {
76         MAX77665_PWM_DIVISOR_32,
77         MAX77665_PWM_DIVISOR_64,
78         MAX77665_PWM_DIVISOR_128,
79         MAX77665_PWM_DIVISOR_256,
80 };
81
82 enum max77665_haptic_invert {
83         MAX77665_INVERT_OFF,
84         MAX77665_INVERT_ON,
85 };
86
87 enum max77665_haptic_continous_mode {
88         MAX77665_NORMAL_MODE,
89         MAX77665_CONT_MODE,
90 };
91
92 enum max77665_haptic_edp_states {
93         MAX77665_HAPTIC_EDP_HIGH,
94         MAX77665_HAPTIC_EDP_LOW,
95         MAX77665_HAPTIC_EDP_NUM_STATES,
96 };
97
98 struct max77665_haptic_platform_data {
99         int pwm_channel_id;
100         int pwm_period;
101
102         enum max77665_haptic_motor_type type;
103         enum max77665_haptic_pulse_mode mode;
104         enum max77665_haptic_pwm_divisor pwm_divisor;
105         enum max77665_haptic_invert invert;
106         enum max77665_haptic_continous_mode cont_mode;
107
108         int internal_mode_pattern;
109         int pattern_cycle;
110         int pattern_signal_period;
111         int feedback_duty_cycle;
112         int motor_startup_val;
113         int scf_val;
114
115         unsigned int edp_states[MAX77665_HAPTIC_EDP_NUM_STATES];
116 };
117
118 #endif