Lines Matching refs:sca_data
251 static int sca3300_transfer(struct sca3300_data *sca_data, int *val)
260 .tx_buf = sca_data->txbuf,
261 .len = ARRAY_SIZE(sca_data->txbuf),
266 .rx_buf = sca_data->rxbuf,
267 .len = ARRAY_SIZE(sca_data->rxbuf),
273 crc = ~crc8(sca3300_crc_table, &sca_data->txbuf[0], 3, CRC8_INIT_VALUE);
274 sca_data->txbuf[3] = crc;
276 ret = spi_sync_transfer(sca_data->spi, xfers, ARRAY_SIZE(xfers));
278 dev_err(&sca_data->spi->dev,
283 crc = ~crc8(sca3300_crc_table, &sca_data->rxbuf[0], 3, CRC8_INIT_VALUE);
284 if (sca_data->rxbuf[3] != crc) {
285 dev_err(&sca_data->spi->dev, "CRC checksum mismatch");
290 rs = sca_data->rxbuf[0] & SCA3300_MASK_RS_STATUS;
294 *val = sign_extend32(get_unaligned_be16(&sca_data->rxbuf[1]), 15);
299 static int sca3300_error_handler(struct sca3300_data *sca_data)
304 mutex_lock(&sca_data->lock);
305 sca_data->txbuf[0] = SCA3300_REG_STATUS << 2;
306 ret = sca3300_transfer(sca_data, &val);
307 mutex_unlock(&sca_data->lock);
313 dev_err(&sca_data->spi->dev,
318 dev_err(&sca_data->spi->dev, "device status: 0x%lx\n",
324 static int sca3300_read_reg(struct sca3300_data *sca_data, u8 reg, int *val)
328 mutex_lock(&sca_data->lock);
329 sca_data->txbuf[0] = reg << 2;
330 ret = sca3300_transfer(sca_data, val);
331 mutex_unlock(&sca_data->lock);
335 return sca3300_error_handler(sca_data);
338 static int sca3300_write_reg(struct sca3300_data *sca_data, u8 reg, int val)
343 mutex_lock(&sca_data->lock);
345 sca_data->txbuf[0] = BIT(7) | (reg << 2);
346 put_unaligned_be16(val, &sca_data->txbuf[1]);
347 ret = sca3300_transfer(sca_data, ®_val);
348 mutex_unlock(&sca_data->lock);
352 return sca3300_error_handler(sca_data);
355 static int sca3300_set_op_mode(struct sca3300_data *sca_data, int index)
357 if ((index < 0) || (index >= sca_data->chip->num_avail_modes))
360 return sca3300_write_reg(sca_data, SCA3300_REG_MODE,
361 sca_data->chip->avail_modes_table[index]);
364 static int sca3300_get_op_mode(struct sca3300_data *sca_data, int *index)
370 ret = sca3300_read_reg(sca_data, SCA3300_REG_MODE, ®_val);
374 for (i = 0; i < sca_data->chip->num_avail_modes; i++) {
375 if (sca_data->chip->avail_modes_table[i] == reg_val)
378 if (i == sca_data->chip->num_avail_modes)
521 static int sca3300_init(struct sca3300_data *sca_data,
528 ret = sca3300_write_reg(sca_data, SCA3300_REG_MODE,
540 ret = sca3300_read_reg(sca_data, SCA3300_REG_WHOAMI, &value);
549 dev_err(&sca_data->spi->dev, "unknown chip id %x\n", value);
553 sca_data->chip = &sca3300_chip_tbl[i];
555 if (sca_data->chip->angle_supported) {
556 ret = sca3300_write_reg(sca_data, SCL3300_REG_ANG_CTRL,
629 struct sca3300_data *sca_data;
633 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*sca_data));
637 sca_data = iio_priv(indio_dev);
638 mutex_init(&sca_data->lock);
639 sca_data->spi = spi;
645 ret = sca3300_init(sca_data, indio_dev);
651 indio_dev->name = sca_data->chip->name;
653 indio_dev->channels = sca_data->chip->channels;
654 indio_dev->num_channels = sca_data->chip->num_channels;
655 indio_dev->available_scan_masks = sca_data->chip->scan_masks;