Lines Matching refs:data
138 * store in the device data.
173 static long ak8975_raw_to_gauss(u16 data)
175 return (((long)data + 128) * 3000) / 256;
187 static long ak8963_09911_raw_to_gauss(u16 data)
189 return (((long)data + 128) * 6000) / 256;
200 static long ak09912_raw_to_gauss(u16 data)
202 return (((long)data + 128) * 1500) / 256;
242 long (*raw_to_gauss)(u16 data);
379 * Per-instance context data for the device.
405 static int ak8975_power_on(const struct ak8975_data *data)
409 ret = regulator_enable(data->vdd);
411 dev_warn(&data->client->dev,
415 ret = regulator_enable(data->vid);
417 dev_warn(&data->client->dev,
419 regulator_disable(data->vdd);
423 gpiod_set_value_cansleep(data->reset_gpiod, 0);
435 static void ak8975_power_off(const struct ak8975_data *data)
437 gpiod_set_value_cansleep(data->reset_gpiod, 1);
439 regulator_disable(data->vid);
440 regulator_disable(data->vdd);
497 static int ak8975_set_mode(struct ak8975_data *data, enum ak_ctrl_mode mode)
502 regval = (data->cntl_cache & ~data->def->ctrl_masks[CNTL_MODE]) |
503 data->def->ctrl_modes[mode];
504 ret = i2c_smbus_write_byte_data(data->client,
505 data->def->ctrl_regs[CNTL], regval);
509 data->cntl_cache = regval;
517 * Handle data ready irq
519 static irqreturn_t ak8975_irq_handler(int irq, void *data)
521 struct ak8975_data *ak8975 = data;
530 * Install data ready interrupt handler
532 static int ak8975_setup_irq(struct ak8975_data *data)
534 struct i2c_client *client = data->client;
538 init_waitqueue_head(&data->data_ready_queue);
539 clear_bit(0, &data->flags);
543 irq = gpiod_to_irq(data->eoc_gpiod);
547 dev_name(&client->dev), data);
553 data->eoc_irq = irq;
566 struct ak8975_data *data = iio_priv(indio_dev);
570 ret = ak8975_set_mode(data, FUSE_ROM);
576 /* Get asa data and store in the device data. */
578 client, data->def->ctrl_regs[ASA_BASE],
579 3, data->asa);
581 dev_err(&client->dev, "Not able to read asa data\n");
585 /* After reading fuse ROM data set power-down mode */
586 ret = ak8975_set_mode(data, POWER_DOWN);
592 if (data->eoc_gpiod || client->irq > 0) {
593 ret = ak8975_setup_irq(data);
596 "Error setting data ready interrupt\n");
601 data->raw_to_gauss[0] = data->def->raw_to_gauss(data->asa[0]);
602 data->raw_to_gauss[1] = data->def->raw_to_gauss(data->asa[1]);
603 data->raw_to_gauss[2] = data->def->raw_to_gauss(data->asa[2]);
608 static int wait_conversion_complete_gpio(struct ak8975_data *data)
610 struct i2c_client *client = data->client;
617 if (gpiod_get_value(data->eoc_gpiod))
626 ret = i2c_smbus_read_byte_data(client, data->def->ctrl_regs[ST1]);
633 static int wait_conversion_complete_polled(struct ak8975_data *data)
635 struct i2c_client *client = data->client;
644 data->def->ctrl_regs[ST1]);
663 static int wait_conversion_complete_interrupt(struct ak8975_data *data)
667 ret = wait_event_timeout(data->data_ready_queue,
668 test_bit(0, &data->flags),
670 clear_bit(0, &data->flags);
675 static int ak8975_start_read_axis(struct ak8975_data *data,
679 int ret = ak8975_set_mode(data, MODE_ONCE);
687 if (data->eoc_irq)
688 ret = wait_conversion_complete_interrupt(data);
689 else if (data->eoc_gpiod)
690 ret = wait_conversion_complete_gpio(data);
692 ret = wait_conversion_complete_polled(data);
697 if (ret & data->def->ctrl_masks[ST1_DRDY]) {
699 data->def->ctrl_regs[ST2]);
704 if (ret & (data->def->ctrl_masks[ST2_DERR] |
705 data->def->ctrl_masks[ST2_HOFL])) {
717 struct ak8975_data *data = iio_priv(indio_dev);
718 const struct i2c_client *client = data->client;
719 const struct ak_def *def = data->def;
724 pm_runtime_get_sync(&data->client->dev);
726 mutex_lock(&data->lock);
728 ret = ak8975_start_read_axis(data, client);
738 mutex_unlock(&data->lock);
740 pm_runtime_mark_last_busy(&data->client->dev);
741 pm_runtime_put_autosuspend(&data->client->dev);
749 mutex_unlock(&data->lock);
759 struct ak8975_data *data = iio_priv(indio_dev);
766 *val2 = data->raw_to_gauss[chan->address];
776 struct ak8975_data *data = iio_priv(indio_dev);
778 return &data->orientation;
829 struct ak8975_data *data = iio_priv(indio_dev);
830 const struct i2c_client *client = data->client;
831 const struct ak_def *def = data->def;
835 mutex_lock(&data->lock);
837 ret = ak8975_start_read_axis(data, client);
852 mutex_unlock(&data->lock);
855 data->scan.channels[0] = clamp_t(s16, le16_to_cpu(fval[0]), -def->range, def->range);
856 data->scan.channels[1] = clamp_t(s16, le16_to_cpu(fval[1]), -def->range, def->range);
857 data->scan.channels[2] = clamp_t(s16, le16_to_cpu(fval[2]), -def->range, def->range);
859 iio_push_to_buffers_with_timestamp(indio_dev, &data->scan,
865 mutex_unlock(&data->lock);
882 struct ak8975_data *data;
914 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
918 data = iio_priv(indio_dev);
921 data->client = client;
922 data->eoc_gpiod = eoc_gpiod;
923 data->reset_gpiod = reset_gpiod;
924 data->eoc_irq = 0;
926 err = iio_read_mount_matrix(&client->dev, &data->orientation);
951 data->def = &ak_def_array[i];
954 data->vdd = devm_regulator_get(&client->dev, "vdd");
955 if (IS_ERR(data->vdd))
956 return PTR_ERR(data->vdd);
957 data->vid = devm_regulator_get(&client->dev, "vid");
958 if (IS_ERR(data->vid))
959 return PTR_ERR(data->vid);
961 err = ak8975_power_on(data);
965 err = ak8975_who_i_am(client, data->def->type);
979 mutex_init(&data->lock);
1017 ak8975_power_off(data);
1024 struct ak8975_data *data = iio_priv(indio_dev);
1031 ak8975_set_mode(data, POWER_DOWN);
1032 ak8975_power_off(data);
1039 struct ak8975_data *data = iio_priv(indio_dev);
1043 ret = ak8975_set_mode(data, POWER_DOWN);
1049 ak8975_power_off(data);
1058 struct ak8975_data *data = iio_priv(indio_dev);
1062 ak8975_power_on(data);
1067 ret = ak8975_set_mode(data, POWER_DOWN);