Lines Matching refs:st

239 	int (*fault_handler)(const struct ltc2983_data *st, const u32 result);
240 int (*assign_chan)(struct ltc2983_data *st,
329 static int __ltc2983_fault_handler(const struct ltc2983_data *st, in __ltc2983_fault_handler() argument
333 const struct device *dev = &st->spi->dev; in __ltc2983_fault_handler()
346 static int __ltc2983_chan_assign_common(struct ltc2983_data *st, in __ltc2983_chan_assign_common() argument
353 dev_dbg(&st->spi->dev, "Assign reg:0x%04X, val:0x%08X\n", reg, in __ltc2983_chan_assign_common()
355 st->chan_val = cpu_to_be32(chan_val); in __ltc2983_chan_assign_common()
356 return regmap_bulk_write(st->regmap, reg, &st->chan_val, in __ltc2983_chan_assign_common()
357 sizeof(st->chan_val)); in __ltc2983_chan_assign_common()
360 static int __ltc2983_chan_custom_sensor_assign(struct ltc2983_data *st, in __ltc2983_chan_custom_sensor_assign() argument
367 const struct device *dev = &st->spi->dev; in __ltc2983_chan_custom_sensor_assign()
387 if (st->custom_table_size + custom->size > in __ltc2983_chan_custom_sensor_assign()
392 st->custom_table_size, in __ltc2983_chan_custom_sensor_assign()
397 custom->offset = st->custom_table_size / in __ltc2983_chan_custom_sensor_assign()
399 st->custom_table_size += custom->size; in __ltc2983_chan_custom_sensor_assign()
410 return regmap_bulk_write(st->regmap, reg, custom->table, custom->size); in __ltc2983_chan_custom_sensor_assign()
414 __ltc2983_custom_sensor_new(struct ltc2983_data *st, const struct fwnode_handle *fn, in __ltc2983_custom_sensor_new() argument
419 struct device *dev = &st->spi->dev; in __ltc2983_custom_sensor_new()
450 if (st->custom_table_size + new_custom->size > in __ltc2983_custom_sensor_new()
454 st->custom_table_size, new_custom->size); in __ltc2983_custom_sensor_new()
511 new_custom->offset = st->custom_table_size / in __ltc2983_custom_sensor_new()
513 st->custom_table_size += new_custom->size; in __ltc2983_custom_sensor_new()
522 static int ltc2983_thermocouple_fault_handler(const struct ltc2983_data *st, in ltc2983_thermocouple_fault_handler() argument
525 return __ltc2983_fault_handler(st, result, in ltc2983_thermocouple_fault_handler()
530 static int ltc2983_common_fault_handler(const struct ltc2983_data *st, in ltc2983_common_fault_handler() argument
533 return __ltc2983_fault_handler(st, result, in ltc2983_common_fault_handler()
538 static int ltc2983_thermocouple_assign_chan(struct ltc2983_data *st, in ltc2983_thermocouple_assign_chan() argument
550 ret = __ltc2983_chan_custom_sensor_assign(st, thermo->custom, in ltc2983_thermocouple_assign_chan()
555 return __ltc2983_chan_assign_common(st, sensor, chan_val); in ltc2983_thermocouple_assign_chan()
558 static int ltc2983_rtd_assign_chan(struct ltc2983_data *st, in ltc2983_rtd_assign_chan() argument
572 ret = __ltc2983_chan_custom_sensor_assign(st, rtd->custom, in ltc2983_rtd_assign_chan()
577 return __ltc2983_chan_assign_common(st, sensor, chan_val); in ltc2983_rtd_assign_chan()
580 static int ltc2983_thermistor_assign_chan(struct ltc2983_data *st, in ltc2983_thermistor_assign_chan() argument
594 ret = __ltc2983_chan_custom_sensor_assign(st, in ltc2983_thermistor_assign_chan()
600 return __ltc2983_chan_assign_common(st, sensor, chan_val); in ltc2983_thermistor_assign_chan()
603 static int ltc2983_diode_assign_chan(struct ltc2983_data *st, in ltc2983_diode_assign_chan() argument
613 return __ltc2983_chan_assign_common(st, sensor, chan_val); in ltc2983_diode_assign_chan()
616 static int ltc2983_r_sense_assign_chan(struct ltc2983_data *st, in ltc2983_r_sense_assign_chan() argument
624 return __ltc2983_chan_assign_common(st, sensor, chan_val); in ltc2983_r_sense_assign_chan()
627 static int ltc2983_adc_assign_chan(struct ltc2983_data *st, in ltc2983_adc_assign_chan() argument
635 return __ltc2983_chan_assign_common(st, sensor, chan_val); in ltc2983_adc_assign_chan()
638 static int ltc2983_temp_assign_chan(struct ltc2983_data *st, in ltc2983_temp_assign_chan() argument
647 ret = __ltc2983_chan_custom_sensor_assign(st, temp->custom, &chan_val); in ltc2983_temp_assign_chan()
651 return __ltc2983_chan_assign_common(st, sensor, chan_val); in ltc2983_temp_assign_chan()
655 ltc2983_thermocouple_new(const struct fwnode_handle *child, struct ltc2983_data *st, in ltc2983_thermocouple_new() argument
663 thermo = devm_kzalloc(&st->spi->dev, sizeof(*thermo), GFP_KERNEL); in ltc2983_thermocouple_new()
690 dev_err(&st->spi->dev, in ltc2983_thermocouple_new()
700 dev_err(&st->spi->dev, in ltc2983_thermocouple_new()
716 dev_err(&st->spi->dev, "Property reg must be given\n"); in ltc2983_thermocouple_new()
725 thermo->custom = __ltc2983_custom_sensor_new(st, child, in ltc2983_thermocouple_new()
747 ltc2983_rtd_new(const struct fwnode_handle *child, struct ltc2983_data *st, in ltc2983_rtd_new() argument
752 struct device *dev = &st->spi->dev; in ltc2983_rtd_new()
819 max = st->info->max_channels_nr; in ltc2983_rtd_new()
822 max = st->info->max_channels_nr - 1; in ltc2983_rtd_new()
846 dev_err(&st->spi->dev, in ltc2983_rtd_new()
856 rtd->custom = __ltc2983_custom_sensor_new(st, child, in ltc2983_rtd_new()
901 dev_err(&st->spi->dev, in ltc2983_rtd_new()
919 ltc2983_thermistor_new(const struct fwnode_handle *child, struct ltc2983_data *st, in ltc2983_thermistor_new() argument
923 struct device *dev = &st->spi->dev; in ltc2983_thermistor_new()
958 dev_err(&st->spi->dev, in ltc2983_thermistor_new()
977 thermistor->custom = __ltc2983_custom_sensor_new(st, child, in ltc2983_thermistor_new()
1006 dev_err(&st->spi->dev, in ltc2983_thermistor_new()
1047 dev_err(&st->spi->dev, in ltc2983_thermistor_new()
1063 ltc2983_diode_new(const struct fwnode_handle *child, const struct ltc2983_data *st, in ltc2983_diode_new() argument
1070 diode = devm_kzalloc(&st->spi->dev, sizeof(*diode), GFP_KERNEL); in ltc2983_diode_new()
1086 dev_err(&st->spi->dev, in ltc2983_diode_new()
1112 dev_err(&st->spi->dev, in ltc2983_diode_new()
1128 struct ltc2983_data *st, in ltc2983_r_sense_new() argument
1135 rsense = devm_kzalloc(&st->spi->dev, sizeof(*rsense), GFP_KERNEL); in ltc2983_r_sense_new()
1141 dev_err(&st->spi->dev, "Invalid chann:%d for r_sense", in ltc2983_r_sense_new()
1148 dev_err(&st->spi->dev, "Property adi,rsense-val-milli-ohms missing\n"); in ltc2983_r_sense_new()
1166 struct ltc2983_data *st, in ltc2983_adc_new() argument
1171 adc = devm_kzalloc(&st->spi->dev, sizeof(*adc), GFP_KERNEL); in ltc2983_adc_new()
1180 dev_err(&st->spi->dev, "Invalid chan:%d for differential adc\n", in ltc2983_adc_new()
1192 struct ltc2983_data *st, in ltc2983_temp_new() argument
1197 temp = devm_kzalloc(&st->spi->dev, sizeof(*temp), GFP_KERNEL); in ltc2983_temp_new()
1206 dev_err(&st->spi->dev, "Invalid chan:%d for differential temp\n", in ltc2983_temp_new()
1211 temp->custom = __ltc2983_custom_sensor_new(st, child, "adi,custom-temp", in ltc2983_temp_new()
1223 static int ltc2983_chan_read(struct ltc2983_data *st, in ltc2983_chan_read() argument
1232 dev_dbg(&st->spi->dev, "Start conversion on chan:%d, status:%02X\n", in ltc2983_chan_read()
1235 ret = regmap_write(st->regmap, LTC2983_STATUS_REG, start_conversion); in ltc2983_chan_read()
1239 reinit_completion(&st->completion); in ltc2983_chan_read()
1246 time = wait_for_completion_timeout(&st->completion, in ltc2983_chan_read()
1249 dev_warn(&st->spi->dev, "Conversion timed out\n"); in ltc2983_chan_read()
1254 ret = regmap_bulk_read(st->regmap, LTC2983_CHAN_RES_ADDR(sensor->chan), in ltc2983_chan_read()
1255 &st->temp, sizeof(st->temp)); in ltc2983_chan_read()
1259 *val = __be32_to_cpu(st->temp); in ltc2983_chan_read()
1262 dev_err(&st->spi->dev, "Invalid conversion detected\n"); in ltc2983_chan_read()
1266 ret = sensor->fault_handler(st, *val); in ltc2983_chan_read()
1278 struct ltc2983_data *st = iio_priv(indio_dev); in ltc2983_read_raw() local
1282 if (chan->address >= st->num_channels) { in ltc2983_read_raw()
1283 dev_err(&st->spi->dev, "Invalid chan address:%ld", in ltc2983_read_raw()
1290 mutex_lock(&st->lock); in ltc2983_read_raw()
1291 ret = ltc2983_chan_read(st, st->sensors[chan->address], val); in ltc2983_read_raw()
1292 mutex_unlock(&st->lock); in ltc2983_read_raw()
1321 struct ltc2983_data *st = iio_priv(indio_dev); in ltc2983_reg_access() local
1324 return regmap_read(st->regmap, reg, readval); in ltc2983_reg_access()
1326 return regmap_write(st->regmap, reg, writeval); in ltc2983_reg_access()
1331 struct ltc2983_data *st = data; in ltc2983_irq_handler() local
1333 complete(&st->completion); in ltc2983_irq_handler()
1349 static int ltc2983_parse_dt(struct ltc2983_data *st) in ltc2983_parse_dt() argument
1351 struct device *dev = &st->spi->dev; in ltc2983_parse_dt()
1355 device_property_read_u32(dev, "adi,mux-delay-config-us", &st->mux_delay_config); in ltc2983_parse_dt()
1357 device_property_read_u32(dev, "adi,filter-notch-freq", &st->filter_notch_freq); in ltc2983_parse_dt()
1359 st->num_channels = device_get_child_node_count(dev); in ltc2983_parse_dt()
1360 if (!st->num_channels) { in ltc2983_parse_dt()
1361 dev_err(&st->spi->dev, "At least one channel must be given!"); in ltc2983_parse_dt()
1365 st->sensors = devm_kcalloc(dev, st->num_channels, sizeof(*st->sensors), in ltc2983_parse_dt()
1367 if (!st->sensors) in ltc2983_parse_dt()
1370 st->iio_channels = st->num_channels; in ltc2983_parse_dt()
1382 sensor.chan > st->info->max_channels_nr) { in ltc2983_parse_dt()
1385 LTC2983_MIN_CHANNELS_NR, st->info->max_channels_nr); in ltc2983_parse_dt()
1406 st->sensors[chan] = ltc2983_thermocouple_new(child, st, in ltc2983_parse_dt()
1410 st->sensors[chan] = ltc2983_rtd_new(child, st, &sensor); in ltc2983_parse_dt()
1413 st->sensors[chan] = ltc2983_thermistor_new(child, st, in ltc2983_parse_dt()
1416 st->sensors[chan] = ltc2983_diode_new(child, st, in ltc2983_parse_dt()
1419 st->sensors[chan] = ltc2983_r_sense_new(child, st, in ltc2983_parse_dt()
1422 st->iio_channels--; in ltc2983_parse_dt()
1424 st->sensors[chan] = ltc2983_adc_new(child, st, &sensor); in ltc2983_parse_dt()
1425 } else if (st->info->has_temp && in ltc2983_parse_dt()
1427 st->sensors[chan] = ltc2983_temp_new(child, st, &sensor); in ltc2983_parse_dt()
1434 if (IS_ERR(st->sensors[chan])) { in ltc2983_parse_dt()
1436 PTR_ERR(st->sensors[chan])); in ltc2983_parse_dt()
1437 ret = PTR_ERR(st->sensors[chan]); in ltc2983_parse_dt()
1441 st->sensors[chan]->chan = sensor.chan; in ltc2983_parse_dt()
1442 st->sensors[chan]->type = sensor.type; in ltc2983_parse_dt()
1454 static int ltc2983_eeprom_cmd(struct ltc2983_data *st, unsigned int cmd, in ltc2983_eeprom_cmd() argument
1462 ret = regmap_bulk_write(st->regmap, LTC2983_EEPROM_KEY_REG, in ltc2983_eeprom_cmd()
1463 &st->eeprom_key, sizeof(st->eeprom_key)); in ltc2983_eeprom_cmd()
1467 reinit_completion(&st->completion); in ltc2983_eeprom_cmd()
1469 ret = regmap_write(st->regmap, LTC2983_STATUS_REG, in ltc2983_eeprom_cmd()
1474 time = wait_for_completion_timeout(&st->completion, in ltc2983_eeprom_cmd()
1477 dev_err(&st->spi->dev, "EEPROM command timed out\n"); in ltc2983_eeprom_cmd()
1481 ret = regmap_read(st->regmap, status_reg, &val); in ltc2983_eeprom_cmd()
1486 dev_err(&st->spi->dev, "EEPROM command failed: 0x%02X\n", val); in ltc2983_eeprom_cmd()
1493 static int ltc2983_setup(struct ltc2983_data *st, bool assign_iio) in ltc2983_setup() argument
1499 ret = regmap_read_poll_timeout(st->regmap, LTC2983_STATUS_REG, status, in ltc2983_setup()
1503 dev_err(&st->spi->dev, "Device startup timed out\n"); in ltc2983_setup()
1507 ret = regmap_update_bits(st->regmap, LTC2983_GLOBAL_CONFIG_REG, in ltc2983_setup()
1509 LTC2983_NOTCH_FREQ(st->filter_notch_freq)); in ltc2983_setup()
1513 ret = regmap_write(st->regmap, LTC2983_MUX_CONFIG_REG, in ltc2983_setup()
1514 st->mux_delay_config); in ltc2983_setup()
1518 if (st->info->has_eeprom && !assign_iio) { in ltc2983_setup()
1519 ret = ltc2983_eeprom_cmd(st, LTC2983_EEPROM_READ_CMD, in ltc2983_setup()
1527 for (chan = 0; chan < st->num_channels; chan++) { in ltc2983_setup()
1530 ret = st->sensors[chan]->assign_chan(st, st->sensors[chan]); in ltc2983_setup()
1539 if (st->sensors[chan]->type == LTC2983_SENSOR_SENSE_RESISTOR || in ltc2983_setup()
1544 if (st->sensors[chan]->type != LTC2983_SENSOR_DIRECT_ADC) { in ltc2983_setup()
1556 st->iio_chan[iio_idx++] = LTC2983_CHAN(chan_type, (*iio_chan)++, in ltc2983_setup()
1605 struct ltc2983_data *st; in ltc2983_probe() local
1611 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); in ltc2983_probe()
1615 st = iio_priv(indio_dev); in ltc2983_probe()
1617 st->info = device_get_match_data(&spi->dev); in ltc2983_probe()
1618 if (!st->info) in ltc2983_probe()
1619 st->info = (void *)spi_get_device_id(spi)->driver_data; in ltc2983_probe()
1620 if (!st->info) in ltc2983_probe()
1623 st->regmap = devm_regmap_init_spi(spi, &ltc2983_regmap_config); in ltc2983_probe()
1624 if (IS_ERR(st->regmap)) { in ltc2983_probe()
1626 return PTR_ERR(st->regmap); in ltc2983_probe()
1629 mutex_init(&st->lock); in ltc2983_probe()
1630 init_completion(&st->completion); in ltc2983_probe()
1631 st->spi = spi; in ltc2983_probe()
1632 st->eeprom_key = cpu_to_be32(LTC2983_EEPROM_KEY); in ltc2983_probe()
1633 spi_set_drvdata(spi, st); in ltc2983_probe()
1635 ret = ltc2983_parse_dt(st); in ltc2983_probe()
1639 gpio = devm_gpiod_get_optional(&st->spi->dev, "reset", GPIOD_OUT_HIGH); in ltc2983_probe()
1649 st->iio_chan = devm_kzalloc(&spi->dev, in ltc2983_probe()
1650 st->iio_channels * sizeof(*st->iio_chan), in ltc2983_probe()
1652 if (!st->iio_chan) in ltc2983_probe()
1655 ret = ltc2983_setup(st, true); in ltc2983_probe()
1660 IRQF_TRIGGER_RISING, name, st); in ltc2983_probe()
1666 if (st->info->has_eeprom) { in ltc2983_probe()
1667 ret = ltc2983_eeprom_cmd(st, LTC2983_EEPROM_WRITE_CMD, in ltc2983_probe()
1676 indio_dev->num_channels = st->iio_channels; in ltc2983_probe()
1677 indio_dev->channels = st->iio_chan; in ltc2983_probe()
1686 struct ltc2983_data *st = spi_get_drvdata(to_spi_device(dev)); in ltc2983_resume() local
1690 regmap_read(st->regmap, LTC2983_STATUS_REG, &dummy); in ltc2983_resume()
1692 return ltc2983_setup(st, false); in ltc2983_resume()
1697 struct ltc2983_data *st = spi_get_drvdata(to_spi_device(dev)); in ltc2983_suspend() local
1699 return regmap_write(st->regmap, LTC2983_STATUS_REG, LTC2983_SLEEP); in ltc2983_suspend()