Lines Matching refs:data
226 static void mma9553_init_events(struct mma9553_data *data) in mma9553_init_events() argument
230 data->num_events = MMA9553_EVENTS_INFO_SIZE; in mma9553_init_events()
231 for (i = 0; i < data->num_events; i++) { in mma9553_init_events()
232 data->events[i].info = &mma9553_events_info[i]; in mma9553_init_events()
233 data->events[i].enabled = false; in mma9553_init_events()
237 static struct mma9553_event *mma9553_get_event(struct mma9553_data *data, in mma9553_get_event() argument
244 for (i = 0; i < data->num_events; i++) in mma9553_get_event()
245 if (data->events[i].info->type == type && in mma9553_get_event()
246 data->events[i].info->mod == mod && in mma9553_get_event()
247 data->events[i].info->dir == dir) in mma9553_get_event()
248 return &data->events[i]; in mma9553_get_event()
253 static bool mma9553_is_any_event_enabled(struct mma9553_data *data, in mma9553_is_any_event_enabled() argument
259 for (i = 0; i < data->num_events; i++) in mma9553_is_any_event_enabled()
260 if ((check_type && data->events[i].info->type == type && in mma9553_is_any_event_enabled()
261 data->events[i].enabled) || in mma9553_is_any_event_enabled()
262 (!check_type && data->events[i].enabled)) in mma9553_is_any_event_enabled()
268 static int mma9553_set_config(struct mma9553_data *data, u16 reg, in mma9553_set_config() argument
279 ret = mma9551_write_config_word(data->client, MMA9551_APPID_PEDOMETER, in mma9553_set_config()
282 dev_err(&data->client->dev, in mma9553_set_config()
290 config = mma9553_set_bits(data->conf.config, 1, in mma9553_set_config()
293 ret = mma9551_write_config_word(data->client, MMA9551_APPID_PEDOMETER, in mma9553_set_config()
296 dev_err(&data->client->dev, in mma9553_set_config()
305 ret = mma9551_read_config_word(data->client, in mma9553_set_config()
317 static int mma9553_read_activity_stepcnt(struct mma9553_data *data, in mma9553_read_activity_stepcnt() argument
323 ret = mma9551_read_status_words(data->client, MMA9551_APPID_PEDOMETER, in mma9553_read_activity_stepcnt()
326 dev_err(&data->client->dev, in mma9553_read_activity_stepcnt()
337 static int mma9553_conf_gpio(struct mma9553_data *data) in mma9553_conf_gpio() argument
345 mma9553_is_any_event_enabled(data, true, IIO_ACTIVITY); in mma9553_conf_gpio()
347 mma9553_get_event(data, IIO_STEPS, IIO_NO_MOD, IIO_EV_DIR_NONE); in mma9553_conf_gpio()
362 if (data->gpio_bitnum == bitnum) in mma9553_conf_gpio()
367 mma9553_read_activity_stepcnt(data, &data->activity, in mma9553_conf_gpio()
368 &data->stepcnt); in mma9553_conf_gpio()
370 ret = mma9551_gpio_config(data->client, in mma9553_conf_gpio()
375 data->gpio_bitnum = bitnum; in mma9553_conf_gpio()
380 static int mma9553_init(struct mma9553_data *data) in mma9553_init() argument
384 ret = mma9551_read_version(data->client); in mma9553_init()
394 mma9551_read_config_words(data->client, MMA9551_APPID_PEDOMETER, in mma9553_init()
396 sizeof(data->conf), (u16 *) &data->conf); in mma9553_init()
398 dev_err(&data->client->dev, in mma9553_init()
405 data->gpio_bitnum = -1; in mma9553_init()
406 ret = mma9553_conf_gpio(data); in mma9553_init()
410 ret = mma9551_app_reset(data->client, MMA9551_RSC_PED); in mma9553_init()
415 data->conf.sleepmin = MMA9553_DEFAULT_SLEEPMIN; in mma9553_init()
416 data->conf.sleepmax = MMA9553_DEFAULT_SLEEPMAX; in mma9553_init()
417 data->conf.sleepthd = MMA9553_DEFAULT_SLEEPTHD; in mma9553_init()
418 data->conf.config = in mma9553_init()
419 mma9553_set_bits(data->conf.config, 1, MMA9553_MASK_CONF_CONFIG); in mma9553_init()
424 data->conf.config = mma9553_set_bits(data->conf.config, 1, in mma9553_init()
427 mma9551_write_config_words(data->client, MMA9551_APPID_PEDOMETER, in mma9553_init()
429 sizeof(data->conf), (u16 *) &data->conf); in mma9553_init()
431 dev_err(&data->client->dev, in mma9553_init()
436 return mma9551_set_device_state(data->client, true); in mma9553_init()
443 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_read_raw() local
459 mma9553_is_any_event_enabled(data, false, 0) || in mma9553_read_raw()
460 data->stepcnt_enabled; in mma9553_read_raw()
462 dev_err(&data->client->dev, in mma9553_read_raw()
466 mutex_lock(&data->mutex); in mma9553_read_raw()
467 ret = mma9551_read_status_word(data->client, in mma9553_read_raw()
471 mutex_unlock(&data->mutex); in mma9553_read_raw()
478 mma9553_is_any_event_enabled(data, false, 0) || in mma9553_read_raw()
479 data->stepcnt_enabled; in mma9553_read_raw()
481 dev_err(&data->client->dev, in mma9553_read_raw()
485 mutex_lock(&data->mutex); in mma9553_read_raw()
486 ret = mma9551_read_status_word(data->client, in mma9553_read_raw()
490 mutex_unlock(&data->mutex); in mma9553_read_raw()
497 mma9553_is_any_event_enabled(data, false, 0) || in mma9553_read_raw()
498 data->stepcnt_enabled; in mma9553_read_raw()
500 dev_err(&data->client->dev, in mma9553_read_raw()
504 mutex_lock(&data->mutex); in mma9553_read_raw()
505 ret = mma9551_read_status_word(data->client, in mma9553_read_raw()
509 mutex_unlock(&data->mutex); in mma9553_read_raw()
535 mma9553_is_any_event_enabled(data, false, 0) || in mma9553_read_raw()
536 data->stepcnt_enabled; in mma9553_read_raw()
538 dev_err(&data->client->dev, in mma9553_read_raw()
542 mutex_lock(&data->mutex); in mma9553_read_raw()
543 ret = mma9551_read_status_word(data->client, in mma9553_read_raw()
546 mutex_unlock(&data->mutex); in mma9553_read_raw()
553 mma9553_is_any_event_enabled(data, false, 0) || in mma9553_read_raw()
554 data->stepcnt_enabled; in mma9553_read_raw()
556 dev_err(&data->client->dev, in mma9553_read_raw()
560 mutex_lock(&data->mutex); in mma9553_read_raw()
561 ret = mma9551_read_status_word(data->client, in mma9553_read_raw()
565 mutex_unlock(&data->mutex); in mma9553_read_raw()
571 mutex_lock(&data->mutex); in mma9553_read_raw()
572 ret = mma9551_read_accel_chan(data->client, in mma9553_read_raw()
574 mutex_unlock(&data->mutex); in mma9553_read_raw()
596 *val = data->stepcnt_enabled; in mma9553_read_raw()
599 tmp = mma9553_get_bits(data->conf.height_weight, in mma9553_read_raw()
605 *val = mma9553_get_bits(data->conf.height_weight, in mma9553_read_raw()
611 *val = mma9553_get_bits(data->conf.filter, in mma9553_read_raw()
620 *val = mma9553_get_bits(data->conf.filter, in mma9553_read_raw()
631 *val = mma9553_get_bits(data->conf.speed_step, in mma9553_read_raw()
646 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_write_raw() local
651 if (data->stepcnt_enabled == !!val) in mma9553_write_raw()
653 mutex_lock(&data->mutex); in mma9553_write_raw()
654 ret = mma9551_set_power_state(data->client, val); in mma9553_write_raw()
656 mutex_unlock(&data->mutex); in mma9553_write_raw()
659 data->stepcnt_enabled = val; in mma9553_write_raw()
660 mutex_unlock(&data->mutex); in mma9553_write_raw()
667 mutex_lock(&data->mutex); in mma9553_write_raw()
668 ret = mma9553_set_config(data, in mma9553_write_raw()
670 &data->conf.height_weight, in mma9553_write_raw()
672 mutex_unlock(&data->mutex); in mma9553_write_raw()
677 mutex_lock(&data->mutex); in mma9553_write_raw()
678 ret = mma9553_set_config(data, in mma9553_write_raw()
680 &data->conf.height_weight, in mma9553_write_raw()
682 mutex_unlock(&data->mutex); in mma9553_write_raw()
695 mutex_lock(&data->mutex); in mma9553_write_raw()
696 ret = mma9553_set_config(data, MMA9553_REG_CONF_FILTER, in mma9553_write_raw()
697 &data->conf.filter, val, in mma9553_write_raw()
699 mutex_unlock(&data->mutex); in mma9553_write_raw()
709 mutex_lock(&data->mutex); in mma9553_write_raw()
710 ret = mma9553_set_config(data, MMA9553_REG_CONF_FILTER, in mma9553_write_raw()
711 &data->conf.filter, val, in mma9553_write_raw()
713 mutex_unlock(&data->mutex); in mma9553_write_raw()
732 mutex_lock(&data->mutex); in mma9553_write_raw()
733 ret = mma9553_set_config(data, in mma9553_write_raw()
735 &data->conf.speed_step, val, in mma9553_write_raw()
737 mutex_unlock(&data->mutex); in mma9553_write_raw()
753 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_read_event_config() local
756 event = mma9553_get_event(data, chan->type, chan->channel2, dir); in mma9553_read_event_config()
768 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_write_event_config() local
772 event = mma9553_get_event(data, chan->type, chan->channel2, dir); in mma9553_write_event_config()
779 mutex_lock(&data->mutex); in mma9553_write_event_config()
781 ret = mma9551_set_power_state(data->client, state); in mma9553_write_event_config()
786 ret = mma9553_conf_gpio(data); in mma9553_write_event_config()
790 mutex_unlock(&data->mutex); in mma9553_write_event_config()
797 mma9551_set_power_state(data->client, false); in mma9553_write_event_config()
800 mutex_unlock(&data->mutex); in mma9553_write_event_config()
811 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_read_event_value() local
818 *val = mma9553_get_bits(data->conf.speed_step, in mma9553_read_event_value()
834 *val = MMA9553_ACTIVITY_THD_TO_SEC(data->conf.actthd); in mma9553_read_event_value()
851 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_write_event_value() local
860 mutex_lock(&data->mutex); in mma9553_write_event_value()
861 ret = mma9553_set_config(data, in mma9553_write_event_value()
863 &data->conf.speed_step, val, in mma9553_write_event_value()
865 mutex_unlock(&data->mutex); in mma9553_write_event_value()
876 mutex_lock(&data->mutex); in mma9553_write_event_value()
877 ret = mma9553_set_config(data, MMA9553_REG_CONF_ACTTHD, in mma9553_write_event_value()
878 &data->conf.actthd, in mma9553_write_event_value()
881 mutex_unlock(&data->mutex); in mma9553_write_event_value()
894 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_get_calibgender_mode() local
897 gender = mma9553_get_bits(data->conf.filter, MMA9553_MASK_CONF_MALE); in mma9553_get_calibgender_mode()
909 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_set_calibgender_mode() local
915 mutex_lock(&data->mutex); in mma9553_set_calibgender_mode()
916 ret = mma9553_set_config(data, MMA9553_REG_CONF_FILTER, in mma9553_set_calibgender_mode()
917 &data->conf.filter, gender, in mma9553_set_calibgender_mode()
919 mutex_unlock(&data->mutex); in mma9553_set_calibgender_mode()
1032 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_irq_handler() local
1034 data->timestamp = iio_get_time_ns(); in mma9553_irq_handler()
1046 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_event_handler() local
1052 mutex_lock(&data->mutex); in mma9553_event_handler()
1053 ret = mma9553_read_activity_stepcnt(data, &activity, &stepcnt); in mma9553_event_handler()
1055 mutex_unlock(&data->mutex); in mma9553_event_handler()
1060 mma9553_get_event(data, IIO_ACTIVITY, in mma9553_event_handler()
1061 mma9553_activity_to_mod(data->activity), in mma9553_event_handler()
1064 mma9553_get_event(data, IIO_ACTIVITY, in mma9553_event_handler()
1068 mma9553_get_event(data, IIO_STEPS, IIO_NO_MOD, IIO_EV_DIR_NONE); in mma9553_event_handler()
1070 if (ev_step_detect->enabled && (stepcnt != data->stepcnt)) { in mma9553_event_handler()
1071 data->stepcnt = stepcnt; in mma9553_event_handler()
1075 data->timestamp); in mma9553_event_handler()
1078 if (activity != data->activity) { in mma9553_event_handler()
1079 data->activity = activity; in mma9553_event_handler()
1087 data->timestamp); in mma9553_event_handler()
1095 data->timestamp); in mma9553_event_handler()
1097 mutex_unlock(&data->mutex); in mma9553_event_handler()
1141 struct mma9553_data *data; in mma9553_probe() local
1146 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); in mma9553_probe()
1150 data = iio_priv(indio_dev); in mma9553_probe()
1152 data->client = client; in mma9553_probe()
1161 mutex_init(&data->mutex); in mma9553_probe()
1162 mma9553_init_events(data); in mma9553_probe()
1164 ret = mma9553_init(data); in mma9553_probe()
1221 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_remove() local
1228 mutex_lock(&data->mutex); in mma9553_remove()
1229 mma9551_set_device_state(data->client, false); in mma9553_remove()
1230 mutex_unlock(&data->mutex); in mma9553_remove()
1239 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_runtime_suspend() local
1242 mutex_lock(&data->mutex); in mma9553_runtime_suspend()
1243 ret = mma9551_set_device_state(data->client, false); in mma9553_runtime_suspend()
1244 mutex_unlock(&data->mutex); in mma9553_runtime_suspend()
1246 dev_err(&data->client->dev, "powering off device failed\n"); in mma9553_runtime_suspend()
1256 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_runtime_resume() local
1259 ret = mma9551_set_device_state(data->client, true); in mma9553_runtime_resume()
1273 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_suspend() local
1276 mutex_lock(&data->mutex); in mma9553_suspend()
1277 ret = mma9551_set_device_state(data->client, false); in mma9553_suspend()
1278 mutex_unlock(&data->mutex); in mma9553_suspend()
1286 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_resume() local
1289 mutex_lock(&data->mutex); in mma9553_resume()
1290 ret = mma9551_set_device_state(data->client, true); in mma9553_resume()
1291 mutex_unlock(&data->mutex); in mma9553_resume()