Lines Matching defs:table
52 * The conversion table has the adc value and temperature.
71 * @id: conversion table
72 * @length: size of conversion table
97 * @table: the chip-specific conversion table
116 int (*get_temp)(const struct chip_tsadc_table *table,
118 int (*set_alarm_temp)(const struct chip_tsadc_table *table,
120 int (*set_tshut_temp)(const struct chip_tsadc_table *table,
124 /* Per-table methods */
125 struct chip_tsadc_table table;
230 * struct tsadc_table - code to temperature conversion table
477 static u32 rk_tsadcv2_temp_to_code(const struct chip_tsadc_table *table,
483 u32 error = table->data_mask;
486 high = (table->length - 1) - 1; /* ignore the last check for table */
489 /* Return mask code data when the temp is over table range */
490 if (temp < table->id[low].temp || temp > table->id[high].temp)
494 if (temp == table->id[mid].temp)
495 return table->id[mid].code;
496 else if (temp < table->id[mid].temp)
504 * The conversion code granularity provided by the table. Let's
506 * analog value between 2 table entries is linear and interpolate
509 num = abs(table->id[mid + 1].code - table->id[mid].code);
510 num *= temp - table->id[mid].temp;
511 denom = table->id[mid + 1].temp - table->id[mid].temp;
513 switch (table->mode) {
515 return table->id[mid].code - (num / denom);
517 return table->id[mid].code + (num / denom);
519 pr_err("%s: unknown table mode: %d\n", __func__, table->mode);
529 static int rk_tsadcv2_code_to_temp(const struct chip_tsadc_table *table,
533 unsigned int high = table->length - 1;
538 WARN_ON(table->length < 2);
540 switch (table->mode) {
542 code &= table->data_mask;
543 if (code <= table->id[high].code)
547 if (code >= table->id[mid].code &&
548 code < table->id[mid - 1].code)
550 else if (code < table->id[mid].code)
559 code &= table->data_mask;
560 if (code < table->id[low].code)
564 if (code <= table->id[mid].code &&
565 code > table->id[mid - 1].code)
567 else if (code > table->id[mid].code)
576 pr_err("%s: unknown table mode: %d\n", __func__, table->mode);
581 * The 5C granularity provided by the table is too much. Let's
583 * temperature between 2 table entries is linear and interpolate
586 num = table->id[mid].temp - table->id[mid - 1].temp;
587 num *= abs(table->id[mid - 1].code - code);
588 denom = abs(table->id[mid - 1].code - table->id[mid].code);
589 *temp = table->id[mid - 1].temp + (num / denom);
755 static int rk_tsadcv2_get_temp(const struct chip_tsadc_table *table,
762 return rk_tsadcv2_code_to_temp(table, val, temp);
765 static int rk_tsadcv2_alarm_temp(const struct chip_tsadc_table *table,
785 alarm_value = rk_tsadcv2_temp_to_code(table, temp);
786 if (alarm_value == table->data_mask)
789 writel_relaxed(alarm_value & table->data_mask,
799 static int rk_tsadcv2_tshut_temp(const struct chip_tsadc_table *table,
805 tshut_value = rk_tsadcv2_temp_to_code(table, temp);
806 if (tshut_value == table->data_mask)
851 .table = {
875 .table = {
899 .table = {
924 .table = {
947 .table = {
972 .table = {
997 .table = {
1022 .table = {
1102 return tsadc->set_alarm_temp(&tsadc->table,
1113 retval = tsadc->get_temp(&tsadc->table,
1200 error = tsadc->set_tshut_temp(&tsadc->table, id, thermal->regs,
1423 error = thermal->chip->set_tshut_temp(&thermal->chip->table,