Lines Matching refs:data
230 static void mma9553_init_events(struct mma9553_data *data) in mma9553_init_events() argument
234 data->num_events = MMA9553_EVENTS_INFO_SIZE; in mma9553_init_events()
235 for (i = 0; i < data->num_events; i++) { in mma9553_init_events()
236 data->events[i].info = &mma9553_events_info[i]; in mma9553_init_events()
237 data->events[i].enabled = false; in mma9553_init_events()
241 static struct mma9553_event *mma9553_get_event(struct mma9553_data *data, in mma9553_get_event() argument
248 for (i = 0; i < data->num_events; i++) in mma9553_get_event()
249 if (data->events[i].info->type == type && in mma9553_get_event()
250 data->events[i].info->mod == mod && in mma9553_get_event()
251 data->events[i].info->dir == dir) in mma9553_get_event()
252 return &data->events[i]; in mma9553_get_event()
257 static bool mma9553_is_any_event_enabled(struct mma9553_data *data, in mma9553_is_any_event_enabled() argument
263 for (i = 0; i < data->num_events; i++) in mma9553_is_any_event_enabled()
264 if ((check_type && data->events[i].info->type == type && in mma9553_is_any_event_enabled()
265 data->events[i].enabled) || in mma9553_is_any_event_enabled()
266 (!check_type && data->events[i].enabled)) in mma9553_is_any_event_enabled()
272 static int mma9553_set_config(struct mma9553_data *data, u16 reg, in mma9553_set_config() argument
283 ret = mma9551_write_config_word(data->client, MMA9551_APPID_PEDOMETER, in mma9553_set_config()
286 dev_err(&data->client->dev, in mma9553_set_config()
294 config = mma9553_set_bits(data->conf.config, 1, in mma9553_set_config()
297 ret = mma9551_write_config_word(data->client, MMA9551_APPID_PEDOMETER, in mma9553_set_config()
300 dev_err(&data->client->dev, in mma9553_set_config()
309 ret = mma9551_read_config_word(data->client, in mma9553_set_config()
321 static int mma9553_read_activity_stepcnt(struct mma9553_data *data, in mma9553_read_activity_stepcnt() argument
327 ret = mma9551_read_status_words(data->client, MMA9551_APPID_PEDOMETER, in mma9553_read_activity_stepcnt()
331 dev_err(&data->client->dev, in mma9553_read_activity_stepcnt()
342 static int mma9553_conf_gpio(struct mma9553_data *data) in mma9553_conf_gpio() argument
349 activity_enabled = mma9553_is_any_event_enabled(data, true, in mma9553_conf_gpio()
351 ev_step_detect = mma9553_get_event(data, IIO_STEPS, IIO_NO_MOD, in mma9553_conf_gpio()
367 if (data->gpio_bitnum == bitnum) in mma9553_conf_gpio()
372 ret = mma9553_read_activity_stepcnt(data, &data->activity, in mma9553_conf_gpio()
373 &data->stepcnt); in mma9553_conf_gpio()
378 ret = mma9551_gpio_config(data->client, MMA9553_DEFAULT_GPIO_PIN, appid, in mma9553_conf_gpio()
382 data->gpio_bitnum = bitnum; in mma9553_conf_gpio()
387 static int mma9553_init(struct mma9553_data *data) in mma9553_init() argument
391 ret = mma9551_read_version(data->client); in mma9553_init()
400 ret = mma9551_read_config_words(data->client, MMA9551_APPID_PEDOMETER, in mma9553_init()
402 sizeof(data->conf) / sizeof(u16), in mma9553_init()
403 (u16 *)&data->conf); in mma9553_init()
405 dev_err(&data->client->dev, in mma9553_init()
411 data->gpio_bitnum = MMA9553_MAX_BITNUM; in mma9553_init()
412 ret = mma9553_conf_gpio(data); in mma9553_init()
416 ret = mma9551_app_reset(data->client, MMA9551_RSC_PED); in mma9553_init()
421 data->conf.sleepmin = MMA9553_DEFAULT_SLEEPMIN; in mma9553_init()
422 data->conf.sleepmax = MMA9553_DEFAULT_SLEEPMAX; in mma9553_init()
423 data->conf.sleepthd = MMA9553_DEFAULT_SLEEPTHD; in mma9553_init()
424 data->conf.config = mma9553_set_bits(data->conf.config, 1, in mma9553_init()
430 data->conf.config = mma9553_set_bits(data->conf.config, 1, in mma9553_init()
432 ret = mma9551_write_config_words(data->client, MMA9551_APPID_PEDOMETER, in mma9553_init()
434 sizeof(data->conf) / sizeof(u16), in mma9553_init()
435 (u16 *)&data->conf); in mma9553_init()
437 dev_err(&data->client->dev, in mma9553_init()
442 return mma9551_set_device_state(data->client, true); in mma9553_init()
445 static int mma9553_read_status_word(struct mma9553_data *data, u16 reg, in mma9553_read_status_word() argument
457 powered_on = mma9553_is_any_event_enabled(data, false, 0) || in mma9553_read_status_word()
458 data->stepcnt_enabled; in mma9553_read_status_word()
460 dev_err(&data->client->dev, "No channels enabled\n"); in mma9553_read_status_word()
464 mutex_lock(&data->mutex); in mma9553_read_status_word()
465 ret = mma9551_read_status_word(data->client, MMA9551_APPID_PEDOMETER, in mma9553_read_status_word()
467 mutex_unlock(&data->mutex); in mma9553_read_status_word()
475 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_read_raw() local
484 ret = mma9553_read_status_word(data, in mma9553_read_raw()
492 ret = mma9553_read_status_word(data, in mma9553_read_raw()
500 ret = mma9553_read_status_word(data, in mma9553_read_raw()
527 ret = mma9553_read_status_word(data, in mma9553_read_raw()
535 ret = mma9553_read_status_word(data, in mma9553_read_raw()
543 mutex_lock(&data->mutex); in mma9553_read_raw()
544 ret = mma9551_read_accel_chan(data->client, in mma9553_read_raw()
546 mutex_unlock(&data->mutex); in mma9553_read_raw()
568 *val = data->stepcnt_enabled; in mma9553_read_raw()
571 tmp = mma9553_get_bits(data->conf.height_weight, in mma9553_read_raw()
577 *val = mma9553_get_bits(data->conf.height_weight, in mma9553_read_raw()
583 *val = mma9553_get_bits(data->conf.filter, in mma9553_read_raw()
592 *val = mma9553_get_bits(data->conf.filter, in mma9553_read_raw()
603 *val = mma9553_get_bits(data->conf.speed_step, in mma9553_read_raw()
618 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_write_raw() local
623 if (data->stepcnt_enabled == !!val) in mma9553_write_raw()
625 mutex_lock(&data->mutex); in mma9553_write_raw()
626 ret = mma9551_set_power_state(data->client, val); in mma9553_write_raw()
628 mutex_unlock(&data->mutex); in mma9553_write_raw()
631 data->stepcnt_enabled = val; in mma9553_write_raw()
632 mutex_unlock(&data->mutex); in mma9553_write_raw()
639 mutex_lock(&data->mutex); in mma9553_write_raw()
640 ret = mma9553_set_config(data, in mma9553_write_raw()
642 &data->conf.height_weight, in mma9553_write_raw()
644 mutex_unlock(&data->mutex); in mma9553_write_raw()
649 mutex_lock(&data->mutex); in mma9553_write_raw()
650 ret = mma9553_set_config(data, in mma9553_write_raw()
652 &data->conf.height_weight, in mma9553_write_raw()
654 mutex_unlock(&data->mutex); in mma9553_write_raw()
667 mutex_lock(&data->mutex); in mma9553_write_raw()
668 ret = mma9553_set_config(data, MMA9553_REG_CONF_FILTER, in mma9553_write_raw()
669 &data->conf.filter, val, in mma9553_write_raw()
671 mutex_unlock(&data->mutex); in mma9553_write_raw()
681 mutex_lock(&data->mutex); in mma9553_write_raw()
682 ret = mma9553_set_config(data, MMA9553_REG_CONF_FILTER, in mma9553_write_raw()
683 &data->conf.filter, val, in mma9553_write_raw()
685 mutex_unlock(&data->mutex); in mma9553_write_raw()
704 mutex_lock(&data->mutex); in mma9553_write_raw()
705 ret = mma9553_set_config(data, in mma9553_write_raw()
707 &data->conf.speed_step, val, in mma9553_write_raw()
709 mutex_unlock(&data->mutex); in mma9553_write_raw()
724 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_read_event_config() local
727 event = mma9553_get_event(data, chan->type, chan->channel2, dir); in mma9553_read_event_config()
739 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_write_event_config() local
743 event = mma9553_get_event(data, chan->type, chan->channel2, dir); in mma9553_write_event_config()
750 mutex_lock(&data->mutex); in mma9553_write_event_config()
752 ret = mma9551_set_power_state(data->client, state); in mma9553_write_event_config()
757 ret = mma9553_conf_gpio(data); in mma9553_write_event_config()
761 mutex_unlock(&data->mutex); in mma9553_write_event_config()
768 mma9551_set_power_state(data->client, false); in mma9553_write_event_config()
771 mutex_unlock(&data->mutex); in mma9553_write_event_config()
782 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_read_event_value() local
789 *val = mma9553_get_bits(data->conf.speed_step, in mma9553_read_event_value()
805 *val = MMA9553_ACTIVITY_THD_TO_SEC(data->conf.actthd); in mma9553_read_event_value()
822 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_write_event_value() local
831 mutex_lock(&data->mutex); in mma9553_write_event_value()
832 ret = mma9553_set_config(data, in mma9553_write_event_value()
834 &data->conf.speed_step, val, in mma9553_write_event_value()
836 mutex_unlock(&data->mutex); in mma9553_write_event_value()
847 mutex_lock(&data->mutex); in mma9553_write_event_value()
848 ret = mma9553_set_config(data, MMA9553_REG_CONF_ACTTHD, in mma9553_write_event_value()
849 &data->conf.actthd, in mma9553_write_event_value()
852 mutex_unlock(&data->mutex); in mma9553_write_event_value()
865 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_get_calibgender_mode() local
868 gender = mma9553_get_bits(data->conf.filter, MMA9553_MASK_CONF_MALE); in mma9553_get_calibgender_mode()
880 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_set_calibgender_mode() local
886 mutex_lock(&data->mutex); in mma9553_set_calibgender_mode()
887 ret = mma9553_set_config(data, MMA9553_REG_CONF_FILTER, in mma9553_set_calibgender_mode()
888 &data->conf.filter, gender, in mma9553_set_calibgender_mode()
890 mutex_unlock(&data->mutex); in mma9553_set_calibgender_mode()
1003 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_irq_handler() local
1005 data->timestamp = iio_get_time_ns(); in mma9553_irq_handler()
1017 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_event_handler() local
1023 mutex_lock(&data->mutex); in mma9553_event_handler()
1024 ret = mma9553_read_activity_stepcnt(data, &activity, &stepcnt); in mma9553_event_handler()
1026 mutex_unlock(&data->mutex); in mma9553_event_handler()
1030 ev_prev_activity = mma9553_get_event(data, IIO_ACTIVITY, in mma9553_event_handler()
1032 data->activity), in mma9553_event_handler()
1034 ev_activity = mma9553_get_event(data, IIO_ACTIVITY, in mma9553_event_handler()
1037 ev_step_detect = mma9553_get_event(data, IIO_STEPS, IIO_NO_MOD, in mma9553_event_handler()
1040 if (ev_step_detect->enabled && (stepcnt != data->stepcnt)) { in mma9553_event_handler()
1041 data->stepcnt = stepcnt; in mma9553_event_handler()
1046 data->timestamp); in mma9553_event_handler()
1049 if (activity != data->activity) { in mma9553_event_handler()
1050 data->activity = activity; in mma9553_event_handler()
1059 data->timestamp); in mma9553_event_handler()
1068 data->timestamp); in mma9553_event_handler()
1070 mutex_unlock(&data->mutex); in mma9553_event_handler()
1089 struct mma9553_data *data; in mma9553_probe() local
1094 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); in mma9553_probe()
1098 data = iio_priv(indio_dev); in mma9553_probe()
1100 data->client = client; in mma9553_probe()
1109 mutex_init(&data->mutex); in mma9553_probe()
1110 mma9553_init_events(data); in mma9553_probe()
1112 ret = mma9553_init(data); in mma9553_probe()
1165 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_remove() local
1172 mutex_lock(&data->mutex); in mma9553_remove()
1173 mma9551_set_device_state(data->client, false); in mma9553_remove()
1174 mutex_unlock(&data->mutex); in mma9553_remove()
1183 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_runtime_suspend() local
1186 mutex_lock(&data->mutex); in mma9553_runtime_suspend()
1187 ret = mma9551_set_device_state(data->client, false); in mma9553_runtime_suspend()
1188 mutex_unlock(&data->mutex); in mma9553_runtime_suspend()
1190 dev_err(&data->client->dev, "powering off device failed\n"); in mma9553_runtime_suspend()
1200 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_runtime_resume() local
1203 ret = mma9551_set_device_state(data->client, true); in mma9553_runtime_resume()
1217 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_suspend() local
1220 mutex_lock(&data->mutex); in mma9553_suspend()
1221 ret = mma9551_set_device_state(data->client, false); in mma9553_suspend()
1222 mutex_unlock(&data->mutex); in mma9553_suspend()
1230 struct mma9553_data *data = iio_priv(indio_dev); in mma9553_resume() local
1233 mutex_lock(&data->mutex); in mma9553_resume()
1234 ret = mma9551_set_device_state(data->client, true); in mma9553_resume()
1235 mutex_unlock(&data->mutex); in mma9553_resume()