Lines Matching defs:data
386 static int ntc_adc_iio_read(struct ntc_data *data)
388 struct iio_channel *channel = data->chan;
408 uv = (data->pullup_uv * (s64)raw) >> 12;
424 static int get_ohm_of_thermistor(struct ntc_data *data, unsigned int uv)
426 u32 puv = data->pullup_uv;
428 puo = data->pullup_ohm;
429 pdo = data->pulldown_ohm;
435 if (data->connect == NTC_CONNECTED_POSITIVE && puo == 0)
437 else if (data->connect == NTC_CONNECTED_GROUND && pdo == 0)
439 else if (data->connect == NTC_CONNECTED_POSITIVE)
446 if (n > data->comp[0].ohm || n < data->comp[data->n_comp - 1].ohm)
452 static void lookup_comp(struct ntc_data *data, unsigned int ohm,
464 if (ohm >= data->comp[0].ohm) {
469 if (ohm <= data->comp[data->n_comp - 1].ohm) {
470 *i_low = data->n_comp - 1;
471 *i_high = data->n_comp - 1;
477 end = data->n_comp;
482 * data->comp[start].ohm > ohm >= data->comp[end].ohm
484 * We could check for "ohm == data->comp[mid].ohm" here, but
489 if (ohm >= data->comp[mid].ohm) {
494 * ohm >= data->comp[start].ohm might be true here,
499 if (ohm >= data->comp[start].ohm)
504 * data->comp[start].ohm >= ohm >= data->comp[end].ohm
509 * ohm >= data->comp[end].ohm
512 if (ohm == data->comp[end].ohm)
518 static int get_temp_mc(struct ntc_data *data, unsigned int ohm)
523 lookup_comp(data, ohm, &low, &high);
529 temp = fixp_linear_interpolate(data->comp[low].ohm,
530 data->comp[low].temp_c * 1000,
531 data->comp[high].ohm,
532 data->comp[high].temp_c * 1000,
537 static int ntc_thermistor_get_ohm(struct ntc_data *data)
541 read_uv = ntc_adc_iio_read(data);
544 return get_ohm_of_thermistor(data, read_uv);
550 struct ntc_data *data = dev_get_drvdata(dev);
557 ohm = ntc_thermistor_get_ohm(data);
560 *val = get_temp_mc(data, ohm);
575 static umode_t ntc_is_visible(const void *data, enum hwmon_sensor_types type,
607 struct ntc_data *data)
624 ret = device_property_read_u32(dev, "pullup-uv", &data->pullup_uv);
628 ret = device_property_read_u32(dev, "pullup-ohm", &data->pullup_ohm);
632 ret = device_property_read_u32(dev, "pulldown-ohm", &data->pulldown_ohm);
637 data->connect = NTC_CONNECTED_POSITIVE;
639 data->connect = NTC_CONNECTED_GROUND;
641 data->chan = chan;
651 struct ntc_data *data;
654 data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
655 if (!data)
658 ret = ntc_thermistor_parse_props(dev, data);
662 if (data->pullup_uv == 0 ||
663 (data->pullup_ohm == 0 && data->connect ==
665 (data->pulldown_ohm == 0 && data->connect ==
667 (data->connect != NTC_CONNECTED_POSITIVE &&
668 data->connect != NTC_CONNECTED_GROUND)) {
669 dev_err(dev, "Required data to use NTC driver not supplied.\n");
681 data->comp = ntc_type[pdev_id->driver_data].comp;
682 data->n_comp = ntc_type[pdev_id->driver_data].n_comp;
685 data, &ntc_chip_info,
700 .data = &ntc_thermistor_id[NTC_B57330V2103]},
702 .data = &ntc_thermistor_id[NTC_B57891S0103] },
704 .data = &ntc_thermistor_id[NTC_NCP03WB473] },
706 .data = &ntc_thermistor_id[NTC_NCP03WF104] },
708 .data = &ntc_thermistor_id[NTC_NCP15WB473] },
710 .data = &ntc_thermistor_id[NTC_NCP15WL333] },
712 .data = &ntc_thermistor_id[NTC_NCP15XH103] },
714 .data = &ntc_thermistor_id[NTC_NCP18WB473] },
716 .data = &ntc_thermistor_id[NTC_NCP21WB473] },
718 .data = &ntc_thermistor_id[NTC_SSG1404001221] },
720 .data = &ntc_thermistor_id[NTC_NCP18WM474] },
724 .data = &ntc_thermistor_id[NTC_NCP03WB473] },
726 .data = &ntc_thermistor_id[NTC_NCP15WB473] },
728 .data = &ntc_thermistor_id[NTC_NCP15WL333] },
730 .data = &ntc_thermistor_id[NTC_NCP18WB473] },
732 .data = &ntc_thermistor_id[NTC_NCP21WB473] },