]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/iio/accel/mma9553.c
Merge branch 'for-4.8/core' of git://git.kernel.dk/linux-block
[karo-tx-linux.git] / drivers / iio / accel / mma9553.c
1 /*
2  * Freescale MMA9553L Intelligent Pedometer driver
3  * Copyright (c) 2014, Intel Corporation.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms and conditions of the GNU General Public License,
7  * version 2, as published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12  * more details.
13  */
14
15 #include <linux/module.h>
16 #include <linux/i2c.h>
17 #include <linux/interrupt.h>
18 #include <linux/slab.h>
19 #include <linux/acpi.h>
20 #include <linux/iio/iio.h>
21 #include <linux/iio/sysfs.h>
22 #include <linux/iio/events.h>
23 #include <linux/pm_runtime.h>
24 #include "mma9551_core.h"
25
26 #define MMA9553_DRV_NAME                        "mma9553"
27 #define MMA9553_IRQ_NAME                        "mma9553_event"
28
29 /* Pedometer configuration registers (R/W) */
30 #define MMA9553_REG_CONF_SLEEPMIN               0x00
31 #define MMA9553_REG_CONF_SLEEPMAX               0x02
32 #define MMA9553_REG_CONF_SLEEPTHD               0x04
33 #define MMA9553_MASK_CONF_WORD                  GENMASK(15, 0)
34
35 #define MMA9553_REG_CONF_CONF_STEPLEN           0x06
36 #define MMA9553_MASK_CONF_CONFIG                BIT(15)
37 #define MMA9553_MASK_CONF_ACT_DBCNTM            BIT(14)
38 #define MMA9553_MASK_CONF_SLP_DBCNTM            BIT(13)
39 #define MMA9553_MASK_CONF_STEPLEN               GENMASK(7, 0)
40
41 #define MMA9553_REG_CONF_HEIGHT_WEIGHT          0x08
42 #define MMA9553_MASK_CONF_HEIGHT                GENMASK(15, 8)
43 #define MMA9553_MASK_CONF_WEIGHT                GENMASK(7, 0)
44
45 #define MMA9553_REG_CONF_FILTER                 0x0A
46 #define MMA9553_MASK_CONF_FILTSTEP              GENMASK(15, 8)
47 #define MMA9553_MASK_CONF_MALE                  BIT(7)
48 #define MMA9553_MASK_CONF_FILTTIME              GENMASK(6, 0)
49
50 #define MMA9553_REG_CONF_SPEED_STEP             0x0C
51 #define MMA9553_MASK_CONF_SPDPRD                GENMASK(15, 8)
52 #define MMA9553_MASK_CONF_STEPCOALESCE          GENMASK(7, 0)
53
54 #define MMA9553_REG_CONF_ACTTHD                 0x0E
55 #define MMA9553_MAX_ACTTHD                      GENMASK(15, 0)
56
57 /* Pedometer status registers (R-only) */
58 #define MMA9553_REG_STATUS                      0x00
59 #define MMA9553_MASK_STATUS_MRGFL               BIT(15)
60 #define MMA9553_MASK_STATUS_SUSPCHG             BIT(14)
61 #define MMA9553_MASK_STATUS_STEPCHG             BIT(13)
62 #define MMA9553_MASK_STATUS_ACTCHG              BIT(12)
63 #define MMA9553_MASK_STATUS_SUSP                BIT(11)
64 #define MMA9553_MASK_STATUS_ACTIVITY            GENMASK(10, 8)
65 #define MMA9553_MASK_STATUS_VERSION             GENMASK(7, 0)
66
67 #define MMA9553_REG_STEPCNT                     0x02
68 #define MMA9553_REG_DISTANCE                    0x04
69 #define MMA9553_REG_SPEED                       0x06
70 #define MMA9553_REG_CALORIES                    0x08
71 #define MMA9553_REG_SLEEPCNT                    0x0A
72
73 /* Pedometer events are always mapped to this pin. */
74 #define MMA9553_DEFAULT_GPIO_PIN        mma9551_gpio6
75 #define MMA9553_DEFAULT_GPIO_POLARITY   0
76
77 /* Bitnum used for GPIO configuration = bit number in high status byte */
78 #define MMA9553_STATUS_TO_BITNUM(bit)   (ffs(bit) - 9)
79 #define MMA9553_MAX_BITNUM              MMA9553_STATUS_TO_BITNUM(BIT(16))
80
81 #define MMA9553_DEFAULT_SAMPLE_RATE     30      /* Hz */
82
83 /*
84  * The internal activity level must be stable for ACTTHD samples before
85  * ACTIVITY is updated. The ACTIVITY variable contains the current activity
86  * level and is updated every time a step is detected or once a second
87  * if there are no steps.
88  */
89 #define MMA9553_ACTIVITY_THD_TO_SEC(thd) ((thd) / MMA9553_DEFAULT_SAMPLE_RATE)
90 #define MMA9553_ACTIVITY_SEC_TO_THD(sec) ((sec) * MMA9553_DEFAULT_SAMPLE_RATE)
91
92 /*
93  * Autonomously suspend pedometer if acceleration vector magnitude
94  * is near 1g (4096 at 0.244 mg/LSB resolution) for 30 seconds.
95  */
96 #define MMA9553_DEFAULT_SLEEPMIN        3688    /* 0,9 g */
97 #define MMA9553_DEFAULT_SLEEPMAX        4508    /* 1,1 g */
98 #define MMA9553_DEFAULT_SLEEPTHD        (MMA9553_DEFAULT_SAMPLE_RATE * 30)
99
100 #define MMA9553_CONFIG_RETRIES          2
101
102 /* Status register - activity field  */
103 enum activity_level {
104         ACTIVITY_UNKNOWN,
105         ACTIVITY_REST,
106         ACTIVITY_WALKING,
107         ACTIVITY_JOGGING,
108         ACTIVITY_RUNNING,
109 };
110
111 static struct mma9553_event_info {
112         enum iio_chan_type type;
113         enum iio_modifier mod;
114         enum iio_event_direction dir;
115 } mma9553_events_info[] = {
116         {
117                 .type = IIO_STEPS,
118                 .mod = IIO_NO_MOD,
119                 .dir = IIO_EV_DIR_NONE,
120         },
121         {
122                 .type = IIO_ACTIVITY,
123                 .mod = IIO_MOD_STILL,
124                 .dir = IIO_EV_DIR_RISING,
125         },
126         {
127                 .type = IIO_ACTIVITY,
128                 .mod = IIO_MOD_STILL,
129                 .dir = IIO_EV_DIR_FALLING,
130         },
131         {
132                 .type = IIO_ACTIVITY,
133                 .mod = IIO_MOD_WALKING,
134                 .dir = IIO_EV_DIR_RISING,
135         },
136         {
137                 .type = IIO_ACTIVITY,
138                 .mod = IIO_MOD_WALKING,
139                 .dir = IIO_EV_DIR_FALLING,
140         },
141         {
142                 .type = IIO_ACTIVITY,
143                 .mod = IIO_MOD_JOGGING,
144                 .dir = IIO_EV_DIR_RISING,
145         },
146         {
147                 .type = IIO_ACTIVITY,
148                 .mod = IIO_MOD_JOGGING,
149                 .dir = IIO_EV_DIR_FALLING,
150         },
151         {
152                 .type = IIO_ACTIVITY,
153                 .mod = IIO_MOD_RUNNING,
154                 .dir = IIO_EV_DIR_RISING,
155         },
156         {
157                 .type = IIO_ACTIVITY,
158                 .mod = IIO_MOD_RUNNING,
159                 .dir = IIO_EV_DIR_FALLING,
160         },
161 };
162
163 #define MMA9553_EVENTS_INFO_SIZE ARRAY_SIZE(mma9553_events_info)
164
165 struct mma9553_event {
166         struct mma9553_event_info *info;
167         bool enabled;
168 };
169
170 struct mma9553_conf_regs {
171         u16 sleepmin;
172         u16 sleepmax;
173         u16 sleepthd;
174         u16 config;
175         u16 height_weight;
176         u16 filter;
177         u16 speed_step;
178         u16 actthd;
179 } __packed;
180
181 struct mma9553_data {
182         struct i2c_client *client;
183         /*
184          * 1. Serialize access to HW (requested by mma9551_core API).
185          * 2. Serialize sequences that power on/off the device and access HW.
186          */
187         struct mutex mutex;
188         struct mma9553_conf_regs conf;
189         struct mma9553_event events[MMA9553_EVENTS_INFO_SIZE];
190         int num_events;
191         u8 gpio_bitnum;
192         /*
193          * This is used for all features that depend on step count:
194          * step count, distance, speed, calories.
195          */
196         bool stepcnt_enabled;
197         u16 stepcnt;
198         u8 activity;
199         s64 timestamp;
200 };
201
202 static u8 mma9553_get_bits(u16 val, u16 mask)
203 {
204         return (val & mask) >> (ffs(mask) - 1);
205 }
206
207 static u16 mma9553_set_bits(u16 current_val, u16 val, u16 mask)
208 {
209         return (current_val & ~mask) | (val << (ffs(mask) - 1));
210 }
211
212 static enum iio_modifier mma9553_activity_to_mod(enum activity_level activity)
213 {
214         switch (activity) {
215         case ACTIVITY_RUNNING:
216                 return IIO_MOD_RUNNING;
217         case ACTIVITY_JOGGING:
218                 return IIO_MOD_JOGGING;
219         case ACTIVITY_WALKING:
220                 return IIO_MOD_WALKING;
221         case ACTIVITY_REST:
222                 return IIO_MOD_STILL;
223         case ACTIVITY_UNKNOWN:
224         default:
225                 return IIO_NO_MOD;
226         }
227 }
228
229 static void mma9553_init_events(struct mma9553_data *data)
230 {
231         int i;
232
233         data->num_events = MMA9553_EVENTS_INFO_SIZE;
234         for (i = 0; i < data->num_events; i++) {
235                 data->events[i].info = &mma9553_events_info[i];
236                 data->events[i].enabled = false;
237         }
238 }
239
240 static struct mma9553_event *mma9553_get_event(struct mma9553_data *data,
241                                                enum iio_chan_type type,
242                                                enum iio_modifier mod,
243                                                enum iio_event_direction dir)
244 {
245         int i;
246
247         for (i = 0; i < data->num_events; i++)
248                 if (data->events[i].info->type == type &&
249                     data->events[i].info->mod == mod &&
250                     data->events[i].info->dir == dir)
251                         return &data->events[i];
252
253         return NULL;
254 }
255
256 static bool mma9553_is_any_event_enabled(struct mma9553_data *data,
257                                          bool check_type,
258                                          enum iio_chan_type type)
259 {
260         int i;
261
262         for (i = 0; i < data->num_events; i++)
263                 if ((check_type && data->events[i].info->type == type &&
264                      data->events[i].enabled) ||
265                      (!check_type && data->events[i].enabled))
266                         return true;
267
268         return false;
269 }
270
271 static int mma9553_set_config(struct mma9553_data *data, u16 reg,
272                               u16 *p_reg_val, u16 val, u16 mask)
273 {
274         int ret, retries;
275         u16 reg_val, config;
276
277         reg_val = *p_reg_val;
278         if (val == mma9553_get_bits(reg_val, mask))
279                 return 0;
280
281         reg_val = mma9553_set_bits(reg_val, val, mask);
282         ret = mma9551_write_config_word(data->client, MMA9551_APPID_PEDOMETER,
283                                         reg, reg_val);
284         if (ret < 0) {
285                 dev_err(&data->client->dev,
286                         "error writing config register 0x%x\n", reg);
287                 return ret;
288         }
289
290         *p_reg_val = reg_val;
291
292         /* Reinitializes the pedometer with current configuration values */
293         config = mma9553_set_bits(data->conf.config, 1,
294                                   MMA9553_MASK_CONF_CONFIG);
295
296         ret = mma9551_write_config_word(data->client, MMA9551_APPID_PEDOMETER,
297                                         MMA9553_REG_CONF_CONF_STEPLEN, config);
298         if (ret < 0) {
299                 dev_err(&data->client->dev,
300                         "error writing config register 0x%x\n",
301                         MMA9553_REG_CONF_CONF_STEPLEN);
302                 return ret;
303         }
304
305         retries = MMA9553_CONFIG_RETRIES;
306         do {
307                 mma9551_sleep(MMA9553_DEFAULT_SAMPLE_RATE);
308                 ret = mma9551_read_config_word(data->client,
309                                                MMA9551_APPID_PEDOMETER,
310                                                MMA9553_REG_CONF_CONF_STEPLEN,
311                                                &config);
312                 if (ret < 0)
313                         return ret;
314         } while (mma9553_get_bits(config, MMA9553_MASK_CONF_CONFIG) &&
315                  --retries > 0);
316
317         return 0;
318 }
319
320 static int mma9553_read_activity_stepcnt(struct mma9553_data *data,
321                                          u8 *activity, u16 *stepcnt)
322 {
323         u16 buf[2];
324         int ret;
325
326         ret = mma9551_read_status_words(data->client, MMA9551_APPID_PEDOMETER,
327                                         MMA9553_REG_STATUS, ARRAY_SIZE(buf),
328                                         buf);
329         if (ret < 0) {
330                 dev_err(&data->client->dev,
331                         "error reading status and stepcnt\n");
332                 return ret;
333         }
334
335         *activity = mma9553_get_bits(buf[0], MMA9553_MASK_STATUS_ACTIVITY);
336         *stepcnt = buf[1];
337
338         return 0;
339 }
340
341 static int mma9553_conf_gpio(struct mma9553_data *data)
342 {
343         u8 bitnum = 0, appid = MMA9551_APPID_PEDOMETER;
344         int ret;
345         struct mma9553_event *ev_step_detect;
346         bool activity_enabled;
347
348         activity_enabled = mma9553_is_any_event_enabled(data, true,
349                                                         IIO_ACTIVITY);
350         ev_step_detect = mma9553_get_event(data, IIO_STEPS, IIO_NO_MOD,
351                                            IIO_EV_DIR_NONE);
352
353         /*
354          * If both step detector and activity are enabled, use the MRGFL bit.
355          * This bit is the logical OR of the SUSPCHG, STEPCHG, and ACTCHG flags.
356          */
357         if (activity_enabled && ev_step_detect->enabled)
358                 bitnum = MMA9553_STATUS_TO_BITNUM(MMA9553_MASK_STATUS_MRGFL);
359         else if (ev_step_detect->enabled)
360                 bitnum = MMA9553_STATUS_TO_BITNUM(MMA9553_MASK_STATUS_STEPCHG);
361         else if (activity_enabled)
362                 bitnum = MMA9553_STATUS_TO_BITNUM(MMA9553_MASK_STATUS_ACTCHG);
363         else                    /* Reset */
364                 appid = MMA9551_APPID_NONE;
365
366         if (data->gpio_bitnum == bitnum)
367                 return 0;
368
369         /* Save initial values for activity and stepcnt */
370         if (activity_enabled || ev_step_detect->enabled) {
371                 ret = mma9553_read_activity_stepcnt(data, &data->activity,
372                                                     &data->stepcnt);
373                 if (ret < 0)
374                         return ret;
375         }
376
377         ret = mma9551_gpio_config(data->client, MMA9553_DEFAULT_GPIO_PIN, appid,
378                                   bitnum, MMA9553_DEFAULT_GPIO_POLARITY);
379         if (ret < 0)
380                 return ret;
381         data->gpio_bitnum = bitnum;
382
383         return 0;
384 }
385
386 static int mma9553_init(struct mma9553_data *data)
387 {
388         int ret;
389
390         ret = mma9551_read_version(data->client);
391         if (ret)
392                 return ret;
393
394         /*
395          * Read all the pedometer configuration registers. This is used as
396          * a device identification command to differentiate the MMA9553L
397          * from the MMA9550L.
398          */
399         ret = mma9551_read_config_words(data->client, MMA9551_APPID_PEDOMETER,
400                                         MMA9553_REG_CONF_SLEEPMIN,
401                                         sizeof(data->conf) / sizeof(u16),
402                                         (u16 *)&data->conf);
403         if (ret < 0) {
404                 dev_err(&data->client->dev,
405                         "failed to read configuration registers\n");
406                 return ret;
407         }
408
409         /* Reset GPIO */
410         data->gpio_bitnum = MMA9553_MAX_BITNUM;
411         ret = mma9553_conf_gpio(data);
412         if (ret < 0)
413                 return ret;
414
415         ret = mma9551_app_reset(data->client, MMA9551_RSC_PED);
416         if (ret < 0)
417                 return ret;
418
419         /* Init config registers */
420         data->conf.sleepmin = MMA9553_DEFAULT_SLEEPMIN;
421         data->conf.sleepmax = MMA9553_DEFAULT_SLEEPMAX;
422         data->conf.sleepthd = MMA9553_DEFAULT_SLEEPTHD;
423         data->conf.config = mma9553_set_bits(data->conf.config, 1,
424                                              MMA9553_MASK_CONF_CONFIG);
425         /*
426          * Clear the activity debounce counter when the activity level changes,
427          * so that the confidence level applies for any activity level.
428          */
429         data->conf.config = mma9553_set_bits(data->conf.config, 1,
430                                              MMA9553_MASK_CONF_ACT_DBCNTM);
431         ret = mma9551_write_config_words(data->client, MMA9551_APPID_PEDOMETER,
432                                          MMA9553_REG_CONF_SLEEPMIN,
433                                          sizeof(data->conf) / sizeof(u16),
434                                          (u16 *)&data->conf);
435         if (ret < 0) {
436                 dev_err(&data->client->dev,
437                         "failed to write configuration registers\n");
438                 return ret;
439         }
440
441         return mma9551_set_device_state(data->client, true);
442 }
443
444 static int mma9553_read_status_word(struct mma9553_data *data, u16 reg,
445                                     u16 *tmp)
446 {
447         bool powered_on;
448         int ret;
449
450         /*
451          * The HW only counts steps and other dependent
452          * parameters (speed, distance, calories, activity)
453          * if power is on (from enabling an event or the
454          * step counter).
455          */
456         powered_on = mma9553_is_any_event_enabled(data, false, 0) ||
457                      data->stepcnt_enabled;
458         if (!powered_on) {
459                 dev_err(&data->client->dev, "No channels enabled\n");
460                 return -EINVAL;
461         }
462
463         mutex_lock(&data->mutex);
464         ret = mma9551_read_status_word(data->client, MMA9551_APPID_PEDOMETER,
465                                        reg, tmp);
466         mutex_unlock(&data->mutex);
467         return ret;
468 }
469
470 static int mma9553_read_raw(struct iio_dev *indio_dev,
471                             struct iio_chan_spec const *chan,
472                             int *val, int *val2, long mask)
473 {
474         struct mma9553_data *data = iio_priv(indio_dev);
475         int ret;
476         u16 tmp;
477         u8 activity;
478
479         switch (mask) {
480         case IIO_CHAN_INFO_PROCESSED:
481                 switch (chan->type) {
482                 case IIO_STEPS:
483                         ret = mma9553_read_status_word(data,
484                                                        MMA9553_REG_STEPCNT,
485                                                        &tmp);
486                         if (ret < 0)
487                                 return ret;
488                         *val = tmp;
489                         return IIO_VAL_INT;
490                 case IIO_DISTANCE:
491                         ret = mma9553_read_status_word(data,
492                                                        MMA9553_REG_DISTANCE,
493                                                        &tmp);
494                         if (ret < 0)
495                                 return ret;
496                         *val = tmp;
497                         return IIO_VAL_INT;
498                 case IIO_ACTIVITY:
499                         ret = mma9553_read_status_word(data,
500                                                        MMA9553_REG_STATUS,
501                                                        &tmp);
502                         if (ret < 0)
503                                 return ret;
504
505                         activity =
506                             mma9553_get_bits(tmp, MMA9553_MASK_STATUS_ACTIVITY);
507
508                         /*
509                          * The device does not support confidence value levels,
510                          * so we will always have 100% for current activity and
511                          * 0% for the others.
512                          */
513                         if (chan->channel2 == mma9553_activity_to_mod(activity))
514                                 *val = 100;
515                         else
516                                 *val = 0;
517                         return IIO_VAL_INT;
518                 default:
519                         return -EINVAL;
520                 }
521         case IIO_CHAN_INFO_RAW:
522                 switch (chan->type) {
523                 case IIO_VELOCITY:      /* m/h */
524                         if (chan->channel2 != IIO_MOD_ROOT_SUM_SQUARED_X_Y_Z)
525                                 return -EINVAL;
526                         ret = mma9553_read_status_word(data,
527                                                        MMA9553_REG_SPEED,
528                                                        &tmp);
529                         if (ret < 0)
530                                 return ret;
531                         *val = tmp;
532                         return IIO_VAL_INT;
533                 case IIO_ENERGY:        /* Cal or kcal */
534                         ret = mma9553_read_status_word(data,
535                                                        MMA9553_REG_CALORIES,
536                                                        &tmp);
537                         if (ret < 0)
538                                 return ret;
539                         *val = tmp;
540                         return IIO_VAL_INT;
541                 case IIO_ACCEL:
542                         mutex_lock(&data->mutex);
543                         ret = mma9551_read_accel_chan(data->client,
544                                                       chan, val, val2);
545                         mutex_unlock(&data->mutex);
546                         return ret;
547                 default:
548                         return -EINVAL;
549                 }
550         case IIO_CHAN_INFO_SCALE:
551                 switch (chan->type) {
552                 case IIO_VELOCITY:      /* m/h to m/s */
553                         if (chan->channel2 != IIO_MOD_ROOT_SUM_SQUARED_X_Y_Z)
554                                 return -EINVAL;
555                         *val = 0;
556                         *val2 = 277;    /* 0.000277 */
557                         return IIO_VAL_INT_PLUS_MICRO;
558                 case IIO_ENERGY:        /* Cal or kcal to J */
559                         *val = 4184;
560                         return IIO_VAL_INT;
561                 case IIO_ACCEL:
562                         return mma9551_read_accel_scale(val, val2);
563                 default:
564                         return -EINVAL;
565                 }
566         case IIO_CHAN_INFO_ENABLE:
567                 *val = data->stepcnt_enabled;
568                 return IIO_VAL_INT;
569         case IIO_CHAN_INFO_CALIBHEIGHT:
570                 tmp = mma9553_get_bits(data->conf.height_weight,
571                                        MMA9553_MASK_CONF_HEIGHT);
572                 *val = tmp / 100;       /* cm to m */
573                 *val2 = (tmp % 100) * 10000;
574                 return IIO_VAL_INT_PLUS_MICRO;
575         case IIO_CHAN_INFO_CALIBWEIGHT:
576                 *val = mma9553_get_bits(data->conf.height_weight,
577                                         MMA9553_MASK_CONF_WEIGHT);
578                 return IIO_VAL_INT;
579         case IIO_CHAN_INFO_DEBOUNCE_COUNT:
580                 switch (chan->type) {
581                 case IIO_STEPS:
582                         *val = mma9553_get_bits(data->conf.filter,
583                                                 MMA9553_MASK_CONF_FILTSTEP);
584                         return IIO_VAL_INT;
585                 default:
586                         return -EINVAL;
587                 }
588         case IIO_CHAN_INFO_DEBOUNCE_TIME:
589                 switch (chan->type) {
590                 case IIO_STEPS:
591                         *val = mma9553_get_bits(data->conf.filter,
592                                                 MMA9553_MASK_CONF_FILTTIME);
593                         return IIO_VAL_INT;
594                 default:
595                         return -EINVAL;
596                 }
597         case IIO_CHAN_INFO_INT_TIME:
598                 switch (chan->type) {
599                 case IIO_VELOCITY:
600                         if (chan->channel2 != IIO_MOD_ROOT_SUM_SQUARED_X_Y_Z)
601                                 return -EINVAL;
602                         *val = mma9553_get_bits(data->conf.speed_step,
603                                                 MMA9553_MASK_CONF_SPDPRD);
604                         return IIO_VAL_INT;
605                 default:
606                         return -EINVAL;
607                 }
608         default:
609                 return -EINVAL;
610         }
611 }
612
613 static int mma9553_write_raw(struct iio_dev *indio_dev,
614                              struct iio_chan_spec const *chan,
615                              int val, int val2, long mask)
616 {
617         struct mma9553_data *data = iio_priv(indio_dev);
618         int ret, tmp;
619
620         switch (mask) {
621         case IIO_CHAN_INFO_ENABLE:
622                 if (data->stepcnt_enabled == !!val)
623                         return 0;
624                 mutex_lock(&data->mutex);
625                 ret = mma9551_set_power_state(data->client, val);
626                 if (ret < 0) {
627                         mutex_unlock(&data->mutex);
628                         return ret;
629                 }
630                 data->stepcnt_enabled = val;
631                 mutex_unlock(&data->mutex);
632                 return 0;
633         case IIO_CHAN_INFO_CALIBHEIGHT:
634                 /* m to cm */
635                 tmp = val * 100 + val2 / 10000;
636                 if (tmp < 0 || tmp > 255)
637                         return -EINVAL;
638                 mutex_lock(&data->mutex);
639                 ret = mma9553_set_config(data,
640                                          MMA9553_REG_CONF_HEIGHT_WEIGHT,
641                                          &data->conf.height_weight,
642                                          tmp, MMA9553_MASK_CONF_HEIGHT);
643                 mutex_unlock(&data->mutex);
644                 return ret;
645         case IIO_CHAN_INFO_CALIBWEIGHT:
646                 if (val < 0 || val > 255)
647                         return -EINVAL;
648                 mutex_lock(&data->mutex);
649                 ret = mma9553_set_config(data,
650                                          MMA9553_REG_CONF_HEIGHT_WEIGHT,
651                                          &data->conf.height_weight,
652                                          val, MMA9553_MASK_CONF_WEIGHT);
653                 mutex_unlock(&data->mutex);
654                 return ret;
655         case IIO_CHAN_INFO_DEBOUNCE_COUNT:
656                 switch (chan->type) {
657                 case IIO_STEPS:
658                         /*
659                          * Set to 0 to disable step filtering. If the value
660                          * specified is greater than 6, then 6 will be used.
661                          */
662                         if (val < 0)
663                                 return -EINVAL;
664                         if (val > 6)
665                                 val = 6;
666                         mutex_lock(&data->mutex);
667                         ret = mma9553_set_config(data, MMA9553_REG_CONF_FILTER,
668                                                  &data->conf.filter, val,
669                                                  MMA9553_MASK_CONF_FILTSTEP);
670                         mutex_unlock(&data->mutex);
671                         return ret;
672                 default:
673                         return -EINVAL;
674                 }
675         case IIO_CHAN_INFO_DEBOUNCE_TIME:
676                 switch (chan->type) {
677                 case IIO_STEPS:
678                         if (val < 0 || val > 127)
679                                 return -EINVAL;
680                         mutex_lock(&data->mutex);
681                         ret = mma9553_set_config(data, MMA9553_REG_CONF_FILTER,
682                                                  &data->conf.filter, val,
683                                                  MMA9553_MASK_CONF_FILTTIME);
684                         mutex_unlock(&data->mutex);
685                         return ret;
686                 default:
687                         return -EINVAL;
688                 }
689         case IIO_CHAN_INFO_INT_TIME:
690                 switch (chan->type) {
691                 case IIO_VELOCITY:
692                         if (chan->channel2 != IIO_MOD_ROOT_SUM_SQUARED_X_Y_Z)
693                                 return -EINVAL;
694                         /*
695                          * If set to a value greater than 5, then 5 will be
696                          * used. Warning: Do not set SPDPRD to 0 or 1 as
697                          * this may cause undesirable behavior.
698                          */
699                         if (val < 2)
700                                 return -EINVAL;
701                         if (val > 5)
702                                 val = 5;
703                         mutex_lock(&data->mutex);
704                         ret = mma9553_set_config(data,
705                                                  MMA9553_REG_CONF_SPEED_STEP,
706                                                  &data->conf.speed_step, val,
707                                                  MMA9553_MASK_CONF_SPDPRD);
708                         mutex_unlock(&data->mutex);
709                         return ret;
710                 default:
711                         return -EINVAL;
712                 }
713         default:
714                 return -EINVAL;
715         }
716 }
717
718 static int mma9553_read_event_config(struct iio_dev *indio_dev,
719                                      const struct iio_chan_spec *chan,
720                                      enum iio_event_type type,
721                                      enum iio_event_direction dir)
722 {
723         struct mma9553_data *data = iio_priv(indio_dev);
724         struct mma9553_event *event;
725
726         event = mma9553_get_event(data, chan->type, chan->channel2, dir);
727         if (!event)
728                 return -EINVAL;
729
730         return event->enabled;
731 }
732
733 static int mma9553_write_event_config(struct iio_dev *indio_dev,
734                                       const struct iio_chan_spec *chan,
735                                       enum iio_event_type type,
736                                       enum iio_event_direction dir, int state)
737 {
738         struct mma9553_data *data = iio_priv(indio_dev);
739         struct mma9553_event *event;
740         int ret;
741
742         event = mma9553_get_event(data, chan->type, chan->channel2, dir);
743         if (!event)
744                 return -EINVAL;
745
746         if (event->enabled == state)
747                 return 0;
748
749         mutex_lock(&data->mutex);
750
751         ret = mma9551_set_power_state(data->client, state);
752         if (ret < 0)
753                 goto err_out;
754         event->enabled = state;
755
756         ret = mma9553_conf_gpio(data);
757         if (ret < 0)
758                 goto err_conf_gpio;
759
760         mutex_unlock(&data->mutex);
761
762         return 0;
763
764 err_conf_gpio:
765         if (state) {
766                 event->enabled = false;
767                 mma9551_set_power_state(data->client, false);
768         }
769 err_out:
770         mutex_unlock(&data->mutex);
771         return ret;
772 }
773
774 static int mma9553_read_event_value(struct iio_dev *indio_dev,
775                                     const struct iio_chan_spec *chan,
776                                     enum iio_event_type type,
777                                     enum iio_event_direction dir,
778                                     enum iio_event_info info,
779                                     int *val, int *val2)
780 {
781         struct mma9553_data *data = iio_priv(indio_dev);
782
783         *val2 = 0;
784         switch (info) {
785         case IIO_EV_INFO_VALUE:
786                 switch (chan->type) {
787                 case IIO_STEPS:
788                         *val = mma9553_get_bits(data->conf.speed_step,
789                                                 MMA9553_MASK_CONF_STEPCOALESCE);
790                         return IIO_VAL_INT;
791                 case IIO_ACTIVITY:
792                         /*
793                          * The device does not support confidence value levels.
794                          * We set an average of 50%.
795                          */
796                         *val = 50;
797                         return IIO_VAL_INT;
798                 default:
799                         return -EINVAL;
800                 }
801         case IIO_EV_INFO_PERIOD:
802                 switch (chan->type) {
803                 case IIO_ACTIVITY:
804                         *val = MMA9553_ACTIVITY_THD_TO_SEC(data->conf.actthd);
805                         return IIO_VAL_INT;
806                 default:
807                         return -EINVAL;
808                 }
809         default:
810                 return -EINVAL;
811         }
812 }
813
814 static int mma9553_write_event_value(struct iio_dev *indio_dev,
815                                      const struct iio_chan_spec *chan,
816                                      enum iio_event_type type,
817                                      enum iio_event_direction dir,
818                                      enum iio_event_info info,
819                                      int val, int val2)
820 {
821         struct mma9553_data *data = iio_priv(indio_dev);
822         int ret;
823
824         switch (info) {
825         case IIO_EV_INFO_VALUE:
826                 switch (chan->type) {
827                 case IIO_STEPS:
828                         if (val < 0 || val > 255)
829                                 return -EINVAL;
830                         mutex_lock(&data->mutex);
831                         ret = mma9553_set_config(data,
832                                                 MMA9553_REG_CONF_SPEED_STEP,
833                                                 &data->conf.speed_step, val,
834                                                 MMA9553_MASK_CONF_STEPCOALESCE);
835                         mutex_unlock(&data->mutex);
836                         return ret;
837                 default:
838                         return -EINVAL;
839                 }
840         case IIO_EV_INFO_PERIOD:
841                 switch (chan->type) {
842                 case IIO_ACTIVITY:
843                         if (val < 0 || val > MMA9553_ACTIVITY_THD_TO_SEC(
844                             MMA9553_MAX_ACTTHD))
845                                 return -EINVAL;
846                         mutex_lock(&data->mutex);
847                         ret = mma9553_set_config(data, MMA9553_REG_CONF_ACTTHD,
848                                                  &data->conf.actthd,
849                                                  MMA9553_ACTIVITY_SEC_TO_THD
850                                                  (val), MMA9553_MASK_CONF_WORD);
851                         mutex_unlock(&data->mutex);
852                         return ret;
853                 default:
854                         return -EINVAL;
855                 }
856         default:
857                 return -EINVAL;
858         }
859 }
860
861 static int mma9553_get_calibgender_mode(struct iio_dev *indio_dev,
862                                         const struct iio_chan_spec *chan)
863 {
864         struct mma9553_data *data = iio_priv(indio_dev);
865         u8 gender;
866
867         gender = mma9553_get_bits(data->conf.filter, MMA9553_MASK_CONF_MALE);
868         /*
869          * HW expects 0 for female and 1 for male,
870          * while iio index is 0 for male and 1 for female.
871          */
872         return !gender;
873 }
874
875 static int mma9553_set_calibgender_mode(struct iio_dev *indio_dev,
876                                         const struct iio_chan_spec *chan,
877                                         unsigned int mode)
878 {
879         struct mma9553_data *data = iio_priv(indio_dev);
880         u8 gender = !mode;
881         int ret;
882
883         if ((mode != 0) && (mode != 1))
884                 return -EINVAL;
885         mutex_lock(&data->mutex);
886         ret = mma9553_set_config(data, MMA9553_REG_CONF_FILTER,
887                                  &data->conf.filter, gender,
888                                  MMA9553_MASK_CONF_MALE);
889         mutex_unlock(&data->mutex);
890
891         return ret;
892 }
893
894 static const struct iio_event_spec mma9553_step_event = {
895         .type = IIO_EV_TYPE_CHANGE,
896         .dir = IIO_EV_DIR_NONE,
897         .mask_separate = BIT(IIO_EV_INFO_ENABLE) | BIT(IIO_EV_INFO_VALUE),
898 };
899
900 static const struct iio_event_spec mma9553_activity_events[] = {
901         {
902                 .type = IIO_EV_TYPE_THRESH,
903                 .dir = IIO_EV_DIR_RISING,
904                 .mask_separate = BIT(IIO_EV_INFO_ENABLE) |
905                                  BIT(IIO_EV_INFO_VALUE) |
906                                  BIT(IIO_EV_INFO_PERIOD),
907          },
908         {
909                 .type = IIO_EV_TYPE_THRESH,
910                 .dir = IIO_EV_DIR_FALLING,
911                 .mask_separate = BIT(IIO_EV_INFO_ENABLE) |
912                                  BIT(IIO_EV_INFO_VALUE) |
913                                  BIT(IIO_EV_INFO_PERIOD),
914         },
915 };
916
917 static const char * const mma9553_calibgender_modes[] = { "male", "female" };
918
919 static const struct iio_enum mma9553_calibgender_enum = {
920         .items = mma9553_calibgender_modes,
921         .num_items = ARRAY_SIZE(mma9553_calibgender_modes),
922         .get = mma9553_get_calibgender_mode,
923         .set = mma9553_set_calibgender_mode,
924 };
925
926 static const struct iio_chan_spec_ext_info mma9553_ext_info[] = {
927         IIO_ENUM("calibgender", IIO_SHARED_BY_TYPE, &mma9553_calibgender_enum),
928         IIO_ENUM_AVAILABLE("calibgender", &mma9553_calibgender_enum),
929         {},
930 };
931
932 #define MMA9553_PEDOMETER_CHANNEL(_type, _mask) {               \
933         .type = _type,                                          \
934         .info_mask_separate = BIT(IIO_CHAN_INFO_ENABLE)      |  \
935                               BIT(IIO_CHAN_INFO_CALIBHEIGHT) |  \
936                               _mask,                            \
937         .ext_info = mma9553_ext_info,                           \
938 }
939
940 #define MMA9553_ACTIVITY_CHANNEL(_chan2) {                              \
941         .type = IIO_ACTIVITY,                                           \
942         .modified = 1,                                                  \
943         .channel2 = _chan2,                                             \
944         .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED),             \
945         .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_CALIBHEIGHT) |    \
946                                     BIT(IIO_CHAN_INFO_ENABLE),          \
947         .event_spec = mma9553_activity_events,                          \
948         .num_event_specs = ARRAY_SIZE(mma9553_activity_events),         \
949         .ext_info = mma9553_ext_info,                                   \
950 }
951
952 static const struct iio_chan_spec mma9553_channels[] = {
953         MMA9551_ACCEL_CHANNEL(IIO_MOD_X),
954         MMA9551_ACCEL_CHANNEL(IIO_MOD_Y),
955         MMA9551_ACCEL_CHANNEL(IIO_MOD_Z),
956
957         {
958                 .type = IIO_STEPS,
959                 .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) |
960                                      BIT(IIO_CHAN_INFO_ENABLE) |
961                                      BIT(IIO_CHAN_INFO_DEBOUNCE_COUNT) |
962                                      BIT(IIO_CHAN_INFO_DEBOUNCE_TIME),
963                 .event_spec = &mma9553_step_event,
964                 .num_event_specs = 1,
965         },
966
967         MMA9553_PEDOMETER_CHANNEL(IIO_DISTANCE, BIT(IIO_CHAN_INFO_PROCESSED)),
968         {
969                 .type = IIO_VELOCITY,
970                 .modified = 1,
971                 .channel2 = IIO_MOD_ROOT_SUM_SQUARED_X_Y_Z,
972                 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
973                                       BIT(IIO_CHAN_INFO_SCALE) |
974                                       BIT(IIO_CHAN_INFO_INT_TIME) |
975                                       BIT(IIO_CHAN_INFO_ENABLE),
976                 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_CALIBHEIGHT),
977                 .ext_info = mma9553_ext_info,
978         },
979         MMA9553_PEDOMETER_CHANNEL(IIO_ENERGY, BIT(IIO_CHAN_INFO_RAW) |
980                                   BIT(IIO_CHAN_INFO_SCALE) |
981                                   BIT(IIO_CHAN_INFO_CALIBWEIGHT)),
982
983         MMA9553_ACTIVITY_CHANNEL(IIO_MOD_RUNNING),
984         MMA9553_ACTIVITY_CHANNEL(IIO_MOD_JOGGING),
985         MMA9553_ACTIVITY_CHANNEL(IIO_MOD_WALKING),
986         MMA9553_ACTIVITY_CHANNEL(IIO_MOD_STILL),
987 };
988
989 static const struct iio_info mma9553_info = {
990         .driver_module = THIS_MODULE,
991         .read_raw = mma9553_read_raw,
992         .write_raw = mma9553_write_raw,
993         .read_event_config = mma9553_read_event_config,
994         .write_event_config = mma9553_write_event_config,
995         .read_event_value = mma9553_read_event_value,
996         .write_event_value = mma9553_write_event_value,
997 };
998
999 static irqreturn_t mma9553_irq_handler(int irq, void *private)
1000 {
1001         struct iio_dev *indio_dev = private;
1002         struct mma9553_data *data = iio_priv(indio_dev);
1003
1004         data->timestamp = iio_get_time_ns(indio_dev);
1005         /*
1006          * Since we only configure the interrupt pin when an
1007          * event is enabled, we are sure we have at least
1008          * one event enabled at this point.
1009          */
1010         return IRQ_WAKE_THREAD;
1011 }
1012
1013 static irqreturn_t mma9553_event_handler(int irq, void *private)
1014 {
1015         struct iio_dev *indio_dev = private;
1016         struct mma9553_data *data = iio_priv(indio_dev);
1017         u16 stepcnt;
1018         u8 activity;
1019         struct mma9553_event *ev_activity, *ev_prev_activity, *ev_step_detect;
1020         int ret;
1021
1022         mutex_lock(&data->mutex);
1023         ret = mma9553_read_activity_stepcnt(data, &activity, &stepcnt);
1024         if (ret < 0) {
1025                 mutex_unlock(&data->mutex);
1026                 return IRQ_HANDLED;
1027         }
1028
1029         ev_prev_activity = mma9553_get_event(data, IIO_ACTIVITY,
1030                                              mma9553_activity_to_mod(
1031                                              data->activity),
1032                                              IIO_EV_DIR_FALLING);
1033         ev_activity = mma9553_get_event(data, IIO_ACTIVITY,
1034                                         mma9553_activity_to_mod(activity),
1035                                         IIO_EV_DIR_RISING);
1036         ev_step_detect = mma9553_get_event(data, IIO_STEPS, IIO_NO_MOD,
1037                                            IIO_EV_DIR_NONE);
1038
1039         if (ev_step_detect->enabled && (stepcnt != data->stepcnt)) {
1040                 data->stepcnt = stepcnt;
1041                 iio_push_event(indio_dev,
1042                                IIO_EVENT_CODE(IIO_STEPS, 0, IIO_NO_MOD,
1043                                               IIO_EV_DIR_NONE,
1044                                               IIO_EV_TYPE_CHANGE, 0, 0, 0),
1045                                data->timestamp);
1046         }
1047
1048         if (activity != data->activity) {
1049                 data->activity = activity;
1050                 /* ev_activity can be NULL if activity == ACTIVITY_UNKNOWN */
1051                 if (ev_prev_activity && ev_prev_activity->enabled)
1052                         iio_push_event(indio_dev,
1053                                        IIO_EVENT_CODE(IIO_ACTIVITY, 0,
1054                                                     ev_prev_activity->info->mod,
1055                                                     IIO_EV_DIR_FALLING,
1056                                                     IIO_EV_TYPE_THRESH, 0, 0,
1057                                                     0),
1058                                        data->timestamp);
1059
1060                 if (ev_activity && ev_activity->enabled)
1061                         iio_push_event(indio_dev,
1062                                        IIO_EVENT_CODE(IIO_ACTIVITY, 0,
1063                                                       ev_activity->info->mod,
1064                                                       IIO_EV_DIR_RISING,
1065                                                       IIO_EV_TYPE_THRESH, 0, 0,
1066                                                       0),
1067                                        data->timestamp);
1068         }
1069         mutex_unlock(&data->mutex);
1070
1071         return IRQ_HANDLED;
1072 }
1073
1074 static const char *mma9553_match_acpi_device(struct device *dev)
1075 {
1076         const struct acpi_device_id *id;
1077
1078         id = acpi_match_device(dev->driver->acpi_match_table, dev);
1079         if (!id)
1080                 return NULL;
1081
1082         return dev_name(dev);
1083 }
1084
1085 static int mma9553_probe(struct i2c_client *client,
1086                          const struct i2c_device_id *id)
1087 {
1088         struct mma9553_data *data;
1089         struct iio_dev *indio_dev;
1090         const char *name = NULL;
1091         int ret;
1092
1093         indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
1094         if (!indio_dev)
1095                 return -ENOMEM;
1096
1097         data = iio_priv(indio_dev);
1098         i2c_set_clientdata(client, indio_dev);
1099         data->client = client;
1100
1101         if (id)
1102                 name = id->name;
1103         else if (ACPI_HANDLE(&client->dev))
1104                 name = mma9553_match_acpi_device(&client->dev);
1105         else
1106                 return -ENOSYS;
1107
1108         mutex_init(&data->mutex);
1109         mma9553_init_events(data);
1110
1111         ret = mma9553_init(data);
1112         if (ret < 0)
1113                 return ret;
1114
1115         indio_dev->dev.parent = &client->dev;
1116         indio_dev->channels = mma9553_channels;
1117         indio_dev->num_channels = ARRAY_SIZE(mma9553_channels);
1118         indio_dev->name = name;
1119         indio_dev->modes = INDIO_DIRECT_MODE;
1120         indio_dev->info = &mma9553_info;
1121
1122         if (client->irq > 0) {
1123                 ret = devm_request_threaded_irq(&client->dev, client->irq,
1124                                                 mma9553_irq_handler,
1125                                                 mma9553_event_handler,
1126                                                 IRQF_TRIGGER_RISING,
1127                                                 MMA9553_IRQ_NAME, indio_dev);
1128                 if (ret < 0) {
1129                         dev_err(&client->dev, "request irq %d failed\n",
1130                                 client->irq);
1131                         goto out_poweroff;
1132                 }
1133         }
1134
1135         ret = pm_runtime_set_active(&client->dev);
1136         if (ret < 0)
1137                 goto out_poweroff;
1138
1139         pm_runtime_enable(&client->dev);
1140         pm_runtime_set_autosuspend_delay(&client->dev,
1141                                          MMA9551_AUTO_SUSPEND_DELAY_MS);
1142         pm_runtime_use_autosuspend(&client->dev);
1143
1144         ret = iio_device_register(indio_dev);
1145         if (ret < 0) {
1146                 dev_err(&client->dev, "unable to register iio device\n");
1147                 goto out_poweroff;
1148         }
1149
1150         dev_dbg(&indio_dev->dev, "Registered device %s\n", name);
1151         return 0;
1152
1153 out_poweroff:
1154         mma9551_set_device_state(client, false);
1155         return ret;
1156 }
1157
1158 static int mma9553_remove(struct i2c_client *client)
1159 {
1160         struct iio_dev *indio_dev = i2c_get_clientdata(client);
1161         struct mma9553_data *data = iio_priv(indio_dev);
1162
1163         iio_device_unregister(indio_dev);
1164
1165         pm_runtime_disable(&client->dev);
1166         pm_runtime_set_suspended(&client->dev);
1167         pm_runtime_put_noidle(&client->dev);
1168
1169         mutex_lock(&data->mutex);
1170         mma9551_set_device_state(data->client, false);
1171         mutex_unlock(&data->mutex);
1172
1173         return 0;
1174 }
1175
1176 #ifdef CONFIG_PM
1177 static int mma9553_runtime_suspend(struct device *dev)
1178 {
1179         struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
1180         struct mma9553_data *data = iio_priv(indio_dev);
1181         int ret;
1182
1183         mutex_lock(&data->mutex);
1184         ret = mma9551_set_device_state(data->client, false);
1185         mutex_unlock(&data->mutex);
1186         if (ret < 0) {
1187                 dev_err(&data->client->dev, "powering off device failed\n");
1188                 return -EAGAIN;
1189         }
1190
1191         return 0;
1192 }
1193
1194 static int mma9553_runtime_resume(struct device *dev)
1195 {
1196         struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
1197         struct mma9553_data *data = iio_priv(indio_dev);
1198         int ret;
1199
1200         ret = mma9551_set_device_state(data->client, true);
1201         if (ret < 0)
1202                 return ret;
1203
1204         mma9551_sleep(MMA9553_DEFAULT_SAMPLE_RATE);
1205
1206         return 0;
1207 }
1208 #endif
1209
1210 #ifdef CONFIG_PM_SLEEP
1211 static int mma9553_suspend(struct device *dev)
1212 {
1213         struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
1214         struct mma9553_data *data = iio_priv(indio_dev);
1215         int ret;
1216
1217         mutex_lock(&data->mutex);
1218         ret = mma9551_set_device_state(data->client, false);
1219         mutex_unlock(&data->mutex);
1220
1221         return ret;
1222 }
1223
1224 static int mma9553_resume(struct device *dev)
1225 {
1226         struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
1227         struct mma9553_data *data = iio_priv(indio_dev);
1228         int ret;
1229
1230         mutex_lock(&data->mutex);
1231         ret = mma9551_set_device_state(data->client, true);
1232         mutex_unlock(&data->mutex);
1233
1234         return ret;
1235 }
1236 #endif
1237
1238 static const struct dev_pm_ops mma9553_pm_ops = {
1239         SET_SYSTEM_SLEEP_PM_OPS(mma9553_suspend, mma9553_resume)
1240         SET_RUNTIME_PM_OPS(mma9553_runtime_suspend,
1241                            mma9553_runtime_resume, NULL)
1242 };
1243
1244 static const struct acpi_device_id mma9553_acpi_match[] = {
1245         {"MMA9553", 0},
1246         {},
1247 };
1248
1249 MODULE_DEVICE_TABLE(acpi, mma9553_acpi_match);
1250
1251 static const struct i2c_device_id mma9553_id[] = {
1252         {"mma9553", 0},
1253         {},
1254 };
1255
1256 MODULE_DEVICE_TABLE(i2c, mma9553_id);
1257
1258 static struct i2c_driver mma9553_driver = {
1259         .driver = {
1260                    .name = MMA9553_DRV_NAME,
1261                    .acpi_match_table = ACPI_PTR(mma9553_acpi_match),
1262                    .pm = &mma9553_pm_ops,
1263                    },
1264         .probe = mma9553_probe,
1265         .remove = mma9553_remove,
1266         .id_table = mma9553_id,
1267 };
1268
1269 module_i2c_driver(mma9553_driver);
1270
1271 MODULE_AUTHOR("Irina Tirdea <irina.tirdea@intel.com>");
1272 MODULE_LICENSE("GPL v2");
1273 MODULE_DESCRIPTION("MMA9553L pedometer platform driver");