Lines Matching refs:sca_data
124 static int sca3300_transfer(struct sca3300_data *sca_data, int *val) in sca3300_transfer() argument
133 .tx_buf = sca_data->txbuf, in sca3300_transfer()
134 .len = ARRAY_SIZE(sca_data->txbuf), in sca3300_transfer()
139 .rx_buf = sca_data->rxbuf, in sca3300_transfer()
140 .len = ARRAY_SIZE(sca_data->rxbuf), in sca3300_transfer()
146 crc = ~crc8(sca3300_crc_table, &sca_data->txbuf[0], 3, CRC8_INIT_VALUE); in sca3300_transfer()
147 sca_data->txbuf[3] = crc; in sca3300_transfer()
149 ret = spi_sync_transfer(sca_data->spi, xfers, ARRAY_SIZE(xfers)); in sca3300_transfer()
151 dev_err(&sca_data->spi->dev, in sca3300_transfer()
156 crc = ~crc8(sca3300_crc_table, &sca_data->rxbuf[0], 3, CRC8_INIT_VALUE); in sca3300_transfer()
157 if (sca_data->rxbuf[3] != crc) { in sca3300_transfer()
158 dev_err(&sca_data->spi->dev, "CRC checksum mismatch"); in sca3300_transfer()
163 rs = sca_data->rxbuf[0] & SCA3300_MASK_RS_STATUS; in sca3300_transfer()
167 *val = sign_extend32(get_unaligned_be16(&sca_data->rxbuf[1]), 15); in sca3300_transfer()
172 static int sca3300_error_handler(struct sca3300_data *sca_data) in sca3300_error_handler() argument
177 mutex_lock(&sca_data->lock); in sca3300_error_handler()
178 sca_data->txbuf[0] = SCA3300_REG_STATUS << 2; in sca3300_error_handler()
179 ret = sca3300_transfer(sca_data, &val); in sca3300_error_handler()
180 mutex_unlock(&sca_data->lock); in sca3300_error_handler()
186 dev_err(&sca_data->spi->dev, in sca3300_error_handler()
191 dev_err(&sca_data->spi->dev, "device status: 0x%lx\n", in sca3300_error_handler()
197 static int sca3300_read_reg(struct sca3300_data *sca_data, u8 reg, int *val) in sca3300_read_reg() argument
201 mutex_lock(&sca_data->lock); in sca3300_read_reg()
202 sca_data->txbuf[0] = reg << 2; in sca3300_read_reg()
203 ret = sca3300_transfer(sca_data, val); in sca3300_read_reg()
204 mutex_unlock(&sca_data->lock); in sca3300_read_reg()
208 return sca3300_error_handler(sca_data); in sca3300_read_reg()
211 static int sca3300_write_reg(struct sca3300_data *sca_data, u8 reg, int val) in sca3300_write_reg() argument
216 mutex_lock(&sca_data->lock); in sca3300_write_reg()
218 sca_data->txbuf[0] = BIT(7) | (reg << 2); in sca3300_write_reg()
219 put_unaligned_be16(val, &sca_data->txbuf[1]); in sca3300_write_reg()
220 ret = sca3300_transfer(sca_data, ®_val); in sca3300_write_reg()
221 mutex_unlock(&sca_data->lock); in sca3300_write_reg()
225 return sca3300_error_handler(sca_data); in sca3300_write_reg()
327 static int sca3300_init(struct sca3300_data *sca_data, in sca3300_init() argument
333 ret = sca3300_write_reg(sca_data, SCA3300_REG_MODE, in sca3300_init()
344 ret = sca3300_read_reg(sca_data, SCA3300_REG_WHOAMI, &value); in sca3300_init()
349 dev_err(&sca_data->spi->dev, in sca3300_init()
410 struct sca3300_data *sca_data; in sca3300_probe() local
414 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*sca_data)); in sca3300_probe()
418 sca_data = iio_priv(indio_dev); in sca3300_probe()
419 mutex_init(&sca_data->lock); in sca3300_probe()
420 sca_data->spi = spi; in sca3300_probe()
431 ret = sca3300_init(sca_data, indio_dev); in sca3300_probe()