Lines Matching +full:aux +full:- +full:reg
1 /* ST Microelectronics LSM6DSO 6-axis IMU sensor driver
5 * SPDX-License-Identifier: Apache-2.0
58 struct lsm6dso_data *data = dev->data; in lsm6dso_lis2mdl_init()
61 data->magn_gain = LIS2MDL_SENSITIVITY; in lsm6dso_lis2mdl_init()
68 k_sleep(K_MSEC(10)); /* turn-on time in ms */ in lsm6dso_lis2mdl_init()
94 return -ENOTSUP; in lsm6dso_lis2mdl_odr_set()
112 return lsm6dso_lis2mdl_odr_set(dev, i2c_addr, val->val1); in lsm6dso_lis2mdl_conf()
115 return -ENOTSUP; in lsm6dso_lis2mdl_conf()
139 struct lsm6dso_data *data = dev->data; in lsm6dso_hts221_read_conv_data()
141 struct hts221_data *ht = &data->hts221; in lsm6dso_hts221_read_conv_data()
144 unsigned char len = MIN(7, sizeof(buf) - i); in lsm6dso_hts221_read_conv_data()
151 return -EIO; in lsm6dso_hts221_read_conv_data()
155 ht->y0 = buf[0] / 2; in lsm6dso_hts221_read_conv_data()
156 ht->y1 = buf[1] / 2; in lsm6dso_hts221_read_conv_data()
157 ht->x0 = buf[6] | (buf[7] << 8); in lsm6dso_hts221_read_conv_data()
158 ht->x1 = buf[10] | (buf[11] << 8); in lsm6dso_hts221_read_conv_data()
190 return -ENOTSUP; in lsm6dso_hts221_odr_set()
208 return lsm6dso_hts221_odr_set(dev, i2c_addr, val->val1); in lsm6dso_hts221_conf()
211 return -ENOTSUP; in lsm6dso_hts221_conf()
240 k_sleep(K_MSEC(1)); /* turn-on time in ms */ in lsm6dso_lps22hb_init()
274 k_sleep(K_MSEC(100)); /* turn-on time in ms */ in lsm6dso_lps22hh_init()
303 return -ENOTSUP; in lsm6dso_lps22hh_odr_set()
321 return lsm6dso_lps22hh_odr_set(dev, i2c_addr, val->val1); in lsm6dso_lps22hh_conf()
324 return -ENOTSUP; in lsm6dso_lps22hh_conf()
408 if (!--tries) { in lsm6dso_shub_wait_completed()
410 return -ETIMEDOUT; in lsm6dso_shub_wait_completed()
421 const struct lsm6dso_config *cfg = dev->config; in lsm6dso_shub_enable()
422 stmdev_ctx_t *ctx = (stmdev_ctx_t *)&cfg->ctx; in lsm6dso_shub_enable()
423 struct lsm6dso_data *data = dev->data; in lsm6dso_shub_enable()
426 if (!data->accel_freq) { in lsm6dso_shub_enable()
460 LOG_DBG("shub: error reading embedded reg"); in lsm6dso_shub_check_slv0_nack()
461 return -EIO; in lsm6dso_shub_check_slv0_nack()
466 return -EIO; in lsm6dso_shub_check_slv0_nack()
479 const struct lsm6dso_config *cfg = dev->config; in lsm6dso_shub_read_target_reg()
480 stmdev_ctx_t *ctx = (stmdev_ctx_t *)&cfg->ctx; in lsm6dso_shub_read_target_reg()
496 return -EIO; in lsm6dso_shub_read_target_reg()
501 return -EIO; in lsm6dso_shub_read_target_reg()
515 const struct lsm6dso_config *cfg = dev->config; in lsm6dso_shub_write_target_reg()
516 stmdev_ctx_t *ctx = (stmdev_ctx_t *)&cfg->ctx; in lsm6dso_shub_write_target_reg()
535 return -EIO; in lsm6dso_shub_write_target_reg()
555 * - TARGET 0: used for configuring all target devices
556 * - TARGET 1: used as data read channel for external target device #1
557 * - TARGET 2: used as data read channel for external target device #2
558 * - TARGET 3: used for generic reads while data channel is enabled
562 struct lsm6dso_data *data = dev->data; in lsm6dso_shub_set_data_channel()
563 const struct lsm6dso_config *cfg = dev->config; in lsm6dso_shub_set_data_channel()
564 stmdev_ctx_t *ctx = (stmdev_ctx_t *)&cfg->ctx; in lsm6dso_shub_set_data_channel()
570 for (n = 0; n < data->num_ext_dev; n++) { in lsm6dso_shub_set_data_channel()
571 sp = &lsm6dso_shub_slist[data->shub_ext[n]]; in lsm6dso_shub_set_data_channel()
573 trgt_cfg.slv_add = sp->ext_i2c_addr; in lsm6dso_shub_set_data_channel()
574 trgt_cfg.slv_subadd = sp->out_data_addr; in lsm6dso_shub_set_data_channel()
575 trgt_cfg.slv_len = sp->out_data_len; in lsm6dso_shub_set_data_channel()
579 return -EIO; in lsm6dso_shub_set_data_channel()
584 lsm6dso_aux_sens_on_t aux = LSM6DSO_SLV_0_1_2; in lsm6dso_shub_set_data_channel() local
586 if (lsm6dso_sh_slave_connected_set(ctx, aux) < 0) { in lsm6dso_shub_set_data_channel()
587 LOG_DBG("shub: error setting aux sensors"); in lsm6dso_shub_set_data_channel()
588 return -EIO; in lsm6dso_shub_set_data_channel()
601 struct lsm6dso_data *data = dev->data; in lsm6dso_shub_get_idx()
604 for (n = 0; n < data->num_ext_dev; n++) { in lsm6dso_shub_get_idx()
605 sp = &lsm6dso_shub_slist[data->shub_ext[n]]; in lsm6dso_shub_get_idx()
607 if (sp->type == type) { in lsm6dso_shub_get_idx()
612 LOG_ERR("shub: dev %s type %d not supported", dev->name, type); in lsm6dso_shub_get_idx()
613 return -ENOTSUP; in lsm6dso_shub_get_idx()
619 const struct lsm6dso_config *cfg = dev->config; in lsm6dso_shub_fetch_external_devs()
620 stmdev_ctx_t *ctx = (stmdev_ctx_t *)&cfg->ctx; in lsm6dso_shub_fetch_external_devs()
621 struct lsm6dso_data *data = dev->data; in lsm6dso_shub_fetch_external_devs()
627 return -EIO; in lsm6dso_shub_fetch_external_devs()
630 for (n = 0; n < data->num_ext_dev; n++) { in lsm6dso_shub_fetch_external_devs()
631 sp = &lsm6dso_shub_slist[data->shub_ext[n]]; in lsm6dso_shub_fetch_external_devs()
633 if (lsm6dso_read_reg(ctx, sp->sh_out_reg, in lsm6dso_shub_fetch_external_devs()
634 data->ext_data[n], sp->out_data_len) < 0) { in lsm6dso_shub_fetch_external_devs()
637 return -EIO; in lsm6dso_shub_fetch_external_devs()
648 struct lsm6dso_data *data = dev->data; in lsm6dso_shub_config()
652 for (n = 0; n < data->num_ext_dev; n++) { in lsm6dso_shub_config()
653 sp = &lsm6dso_shub_slist[data->shub_ext[n]]; in lsm6dso_shub_config()
655 if (sp->type == chan) { in lsm6dso_shub_config()
660 if (n == data->num_ext_dev) { in lsm6dso_shub_config()
661 LOG_DBG("shub: %s chan %d not supported", dev->name, chan); in lsm6dso_shub_config()
662 return -ENOTSUP; in lsm6dso_shub_config()
665 if (sp == NULL || sp->dev_conf == NULL) { in lsm6dso_shub_config()
667 return -ENOTSUP; in lsm6dso_shub_config()
670 return sp->dev_conf(dev, sp->ext_i2c_addr, chan, attr, val); in lsm6dso_shub_config()
675 struct lsm6dso_data *data = dev->data; in lsm6dso_shub_init()
676 const struct lsm6dso_config *cfg = dev->config; in lsm6dso_shub_init()
677 stmdev_ctx_t *ctx = (stmdev_ctx_t *)&cfg->ctx; in lsm6dso_shub_init()
682 LOG_INF("shub: start sensorhub for %s", dev->name); in lsm6dso_shub_init()
684 /* This must be set or lsm6dso_shub_write_target_reg() will repeatedly write the same reg */ in lsm6dso_shub_init()
687 return -EIO; in lsm6dso_shub_init()
691 if (data->num_ext_dev >= LSM6DSO_SHUB_MAX_NUM_TARGETS) { in lsm6dso_shub_init()
703 for (i = 0U; i < ARRAY_SIZE(sp->i2c_addr); i++) { in lsm6dso_shub_init()
705 sp->i2c_addr[i], in lsm6dso_shub_init()
706 sp->wai_addr, in lsm6dso_shub_init()
711 if (chip_id == sp->wai_val) { in lsm6dso_shub_init()
716 if (i >= ARRAY_SIZE(sp->i2c_addr)) { in lsm6dso_shub_init()
721 sp->ext_i2c_addr = sp->i2c_addr[i]; in lsm6dso_shub_init()
723 data->shub_ext[data->num_ext_dev++] = n; in lsm6dso_shub_init()
726 LOG_DBG("shub: dev %s - num_ext_dev %d", dev->name, data->num_ext_dev); in lsm6dso_shub_init()
727 if (data->num_ext_dev == 0) { in lsm6dso_shub_init()
729 return -EINVAL; in lsm6dso_shub_init()
733 for (n = 0, regn = 0; n < data->num_ext_dev; n++) { in lsm6dso_shub_init()
734 sp = &lsm6dso_shub_slist[data->shub_ext[n]]; in lsm6dso_shub_init()
735 sp->sh_out_reg = LSM6DSO_SENSOR_HUB_1 + regn; in lsm6dso_shub_init()
736 regn += sp->out_data_len; in lsm6dso_shub_init()
737 sp->dev_init(dev, sp->ext_i2c_addr); in lsm6dso_shub_init()