10
10
#include <linux/slab.h>
11
11
#include <linux/delay.h>
12
12
#include <linux/i2c.h>
13
- #include <linux/input-polldev .h>
13
+ #include <linux/input.h>
14
14
#include <linux/of_device.h>
15
15
16
16
#define MMA8450_DRV_NAME "mma8450"
39
39
#define MMA8450_CTRL_REG1 0x38
40
40
#define MMA8450_CTRL_REG2 0x39
41
41
42
- /* mma8450 status */
43
- struct mma8450 {
44
- struct i2c_client * client ;
45
- struct input_polled_dev * idev ;
46
- };
47
-
48
- static int mma8450_read (struct mma8450 * m , unsigned off )
42
+ static int mma8450_read (struct i2c_client * c , unsigned int off )
49
43
{
50
- struct i2c_client * c = m -> client ;
51
44
int ret ;
52
45
53
46
ret = i2c_smbus_read_byte_data (c , off );
@@ -59,9 +52,8 @@ static int mma8450_read(struct mma8450 *m, unsigned off)
59
52
return ret ;
60
53
}
61
54
62
- static int mma8450_write (struct mma8450 * m , unsigned off , u8 v )
55
+ static int mma8450_write (struct i2c_client * c , unsigned int off , u8 v )
63
56
{
64
- struct i2c_client * c = m -> client ;
65
57
int error ;
66
58
67
59
error = i2c_smbus_write_byte_data (c , off , v );
@@ -75,10 +67,9 @@ static int mma8450_write(struct mma8450 *m, unsigned off, u8 v)
75
67
return 0 ;
76
68
}
77
69
78
- static int mma8450_read_block (struct mma8450 * m , unsigned off ,
70
+ static int mma8450_read_block (struct i2c_client * c , unsigned int off ,
79
71
u8 * buf , size_t size )
80
72
{
81
- struct i2c_client * c = m -> client ;
82
73
int err ;
83
74
84
75
err = i2c_smbus_read_i2c_block_data (c , off , size , buf );
@@ -92,63 +83,64 @@ static int mma8450_read_block(struct mma8450 *m, unsigned off,
92
83
return 0 ;
93
84
}
94
85
95
- static void mma8450_poll (struct input_polled_dev * dev )
86
+ static void mma8450_poll (struct input_dev * input )
96
87
{
97
- struct mma8450 * m = dev -> private ;
88
+ struct i2c_client * c = input_get_drvdata ( input ) ;
98
89
int x , y , z ;
99
90
int ret ;
100
91
u8 buf [6 ];
101
92
102
- ret = mma8450_read (m , MMA8450_STATUS );
93
+ ret = mma8450_read (c , MMA8450_STATUS );
103
94
if (ret < 0 )
104
95
return ;
105
96
106
97
if (!(ret & MMA8450_STATUS_ZXYDR ))
107
98
return ;
108
99
109
- ret = mma8450_read_block (m , MMA8450_OUT_X_LSB , buf , sizeof (buf ));
100
+ ret = mma8450_read_block (c , MMA8450_OUT_X_LSB , buf , sizeof (buf ));
110
101
if (ret < 0 )
111
102
return ;
112
103
113
104
x = ((int )(s8 )buf [1 ] << 4 ) | (buf [0 ] & 0xf );
114
105
y = ((int )(s8 )buf [3 ] << 4 ) | (buf [2 ] & 0xf );
115
106
z = ((int )(s8 )buf [5 ] << 4 ) | (buf [4 ] & 0xf );
116
107
117
- input_report_abs (dev -> input , ABS_X , x );
118
- input_report_abs (dev -> input , ABS_Y , y );
119
- input_report_abs (dev -> input , ABS_Z , z );
120
- input_sync (dev -> input );
108
+ input_report_abs (input , ABS_X , x );
109
+ input_report_abs (input , ABS_Y , y );
110
+ input_report_abs (input , ABS_Z , z );
111
+ input_sync (input );
121
112
}
122
113
123
114
/* Initialize the MMA8450 chip */
124
- static void mma8450_open (struct input_polled_dev * dev )
115
+ static int mma8450_open (struct input_dev * input )
125
116
{
126
- struct mma8450 * m = dev -> private ;
117
+ struct i2c_client * c = input_get_drvdata ( input ) ;
127
118
int err ;
128
119
129
120
/* enable all events from X/Y/Z, no FIFO */
130
- err = mma8450_write (m , MMA8450_XYZ_DATA_CFG , 0x07 );
121
+ err = mma8450_write (c , MMA8450_XYZ_DATA_CFG , 0x07 );
131
122
if (err )
132
- return ;
123
+ return err ;
133
124
134
125
/*
135
126
* Sleep mode poll rate - 50Hz
136
127
* System output data rate - 400Hz
137
128
* Full scale selection - Active, +/- 2G
138
129
*/
139
- err = mma8450_write (m , MMA8450_CTRL_REG1 , 0x01 );
140
- if (err < 0 )
141
- return ;
130
+ err = mma8450_write (c , MMA8450_CTRL_REG1 , 0x01 );
131
+ if (err )
132
+ return err ;
142
133
143
134
msleep (MODE_CHANGE_DELAY_MS );
135
+ return 0 ;
144
136
}
145
137
146
- static void mma8450_close (struct input_polled_dev * dev )
138
+ static void mma8450_close (struct input_dev * input )
147
139
{
148
- struct mma8450 * m = dev -> private ;
140
+ struct i2c_client * c = input_get_drvdata ( input ) ;
149
141
150
- mma8450_write (m , MMA8450_CTRL_REG1 , 0x00 );
151
- mma8450_write (m , MMA8450_CTRL_REG2 , 0x01 );
142
+ mma8450_write (c , MMA8450_CTRL_REG1 , 0x00 );
143
+ mma8450_write (c , MMA8450_CTRL_REG2 , 0x01 );
152
144
}
153
145
154
146
/*
@@ -157,38 +149,37 @@ static void mma8450_close(struct input_polled_dev *dev)
157
149
static int mma8450_probe (struct i2c_client * c ,
158
150
const struct i2c_device_id * id )
159
151
{
160
- struct input_polled_dev * idev ;
161
- struct mma8450 * m ;
152
+ struct input_dev * input ;
162
153
int err ;
163
154
164
- m = devm_kzalloc (& c -> dev , sizeof ( * m ), GFP_KERNEL );
165
- if (!m )
155
+ input = devm_input_allocate_device (& c -> dev );
156
+ if (!input )
166
157
return - ENOMEM ;
167
158
168
- idev = devm_input_allocate_polled_device (& c -> dev );
169
- if (!idev )
170
- return - ENOMEM ;
159
+ input_set_drvdata (input , c );
160
+
161
+ input -> name = MMA8450_DRV_NAME ;
162
+ input -> id .bustype = BUS_I2C ;
163
+
164
+ input -> open = mma8450_open ;
165
+ input -> close = mma8450_close ;
171
166
172
- m -> client = c ;
173
- m -> idev = idev ;
167
+ input_set_abs_params (input , ABS_X , -2048 , 2047 , 32 , 32 );
168
+ input_set_abs_params (input , ABS_Y , -2048 , 2047 , 32 , 32 );
169
+ input_set_abs_params (input , ABS_Z , -2048 , 2047 , 32 , 32 );
174
170
175
- idev -> private = m ;
176
- idev -> input -> name = MMA8450_DRV_NAME ;
177
- idev -> input -> id .bustype = BUS_I2C ;
178
- idev -> poll = mma8450_poll ;
179
- idev -> poll_interval = POLL_INTERVAL ;
180
- idev -> poll_interval_max = POLL_INTERVAL_MAX ;
181
- idev -> open = mma8450_open ;
182
- idev -> close = mma8450_close ;
171
+ err = input_setup_polling (input , mma8450_poll );
172
+ if (err ) {
173
+ dev_err (& c -> dev , "failed to set up polling\n" );
174
+ return err ;
175
+ }
183
176
184
- __set_bit (EV_ABS , idev -> input -> evbit );
185
- input_set_abs_params (idev -> input , ABS_X , -2048 , 2047 , 32 , 32 );
186
- input_set_abs_params (idev -> input , ABS_Y , -2048 , 2047 , 32 , 32 );
187
- input_set_abs_params (idev -> input , ABS_Z , -2048 , 2047 , 32 , 32 );
177
+ input_set_poll_interval (input , POLL_INTERVAL );
178
+ input_set_max_poll_interval (input , POLL_INTERVAL_MAX );
188
179
189
- err = input_register_polled_device ( idev );
180
+ err = input_register_device ( input );
190
181
if (err ) {
191
- dev_err (& c -> dev , "failed to register polled input device\n" );
182
+ dev_err (& c -> dev , "failed to register input device\n" );
192
183
return err ;
193
184
}
194
185
0 commit comments