162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (c) 2015, The Linux Foundation. All rights reserved. 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#include <linux/bitfield.h> 762306a36Sopenharmony_ci#include <linux/nvmem-consumer.h> 862306a36Sopenharmony_ci#include <linux/platform_device.h> 962306a36Sopenharmony_ci#include "tsens.h" 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci/* ----- SROT ------ */ 1262306a36Sopenharmony_ci#define SROT_CTRL_OFF 0x0000 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci/* ----- TM ------ */ 1562306a36Sopenharmony_ci#define TM_INT_EN_OFF 0x0000 1662306a36Sopenharmony_ci#define TM_Sn_UPPER_LOWER_STATUS_CTRL_OFF 0x0004 1762306a36Sopenharmony_ci#define TM_Sn_STATUS_OFF 0x0030 1862306a36Sopenharmony_ci#define TM_TRDY_OFF 0x005c 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci/* extra data for 8974 */ 2162306a36Sopenharmony_ci#define BKP_SEL 0x3 2262306a36Sopenharmony_ci#define BKP_REDUN_SEL 0xe0000000 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci#define BIT_APPEND 0x3 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_cistatic struct tsens_legacy_calibration_format tsens_8916_nvmem = { 2762306a36Sopenharmony_ci .base_len = 7, 2862306a36Sopenharmony_ci .base_shift = 3, 2962306a36Sopenharmony_ci .sp_len = 5, 3062306a36Sopenharmony_ci .mode = { 0, 29, 1 }, 3162306a36Sopenharmony_ci .invalid = { 0, 31, 1 }, 3262306a36Sopenharmony_ci .base = { { 0, 0 }, { 1, 25 } }, 3362306a36Sopenharmony_ci .sp = { 3462306a36Sopenharmony_ci { { 0, 7 }, { 0, 12 } }, 3562306a36Sopenharmony_ci { { 0, 17 }, { 0, 22 } }, 3662306a36Sopenharmony_ci { { 0, 27 }, { 1, 0 } }, 3762306a36Sopenharmony_ci { { 1, 5 }, { 1, 10 } }, 3862306a36Sopenharmony_ci { { 1, 15 }, { 1, 20 } }, 3962306a36Sopenharmony_ci }, 4062306a36Sopenharmony_ci}; 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_cistatic struct tsens_legacy_calibration_format tsens_8974_nvmem = { 4362306a36Sopenharmony_ci .base_len = 8, 4462306a36Sopenharmony_ci .base_shift = 2, 4562306a36Sopenharmony_ci .sp_len = 6, 4662306a36Sopenharmony_ci .mode = { 1, 30 }, 4762306a36Sopenharmony_ci .invalid = { 3, 30 }, 4862306a36Sopenharmony_ci .base = { { 0, 0 }, { 2, 12 } }, 4962306a36Sopenharmony_ci .sp = { 5062306a36Sopenharmony_ci { { 0, 8 }, { 2, 20 } }, 5162306a36Sopenharmony_ci { { 0, 14 }, { 2, 26 } }, 5262306a36Sopenharmony_ci { { 0, 20 }, { 3, 0 } }, 5362306a36Sopenharmony_ci { { 0, 26 }, { 3, 6 } }, 5462306a36Sopenharmony_ci { { 1, 0 }, { 3, 12 } }, 5562306a36Sopenharmony_ci { { 1, 6 }, { 3, 18 } }, 5662306a36Sopenharmony_ci { { 1, 12 }, { 3, 24 } }, 5762306a36Sopenharmony_ci { { 1, 18 }, { 4, 0 } }, 5862306a36Sopenharmony_ci { { 1, 24 }, { 4, 6 } }, 5962306a36Sopenharmony_ci { { 2, 0 }, { 4, 12 } }, 6062306a36Sopenharmony_ci { { 2, 6 }, { 4, 18 } }, 6162306a36Sopenharmony_ci }, 6262306a36Sopenharmony_ci}; 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_cistatic struct tsens_legacy_calibration_format tsens_8974_backup_nvmem = { 6562306a36Sopenharmony_ci .base_len = 8, 6662306a36Sopenharmony_ci .base_shift = 2, 6762306a36Sopenharmony_ci .sp_len = 6, 6862306a36Sopenharmony_ci .mode = { 4, 30, 1 }, 6962306a36Sopenharmony_ci .invalid = { 5, 30, 1 }, 7062306a36Sopenharmony_ci .base = { { 0, 0 }, { 2, 18 } }, 7162306a36Sopenharmony_ci .sp = { 7262306a36Sopenharmony_ci { { 0, 8 }, { 2, 26 } }, 7362306a36Sopenharmony_ci { { 0, 14 }, { 3, 0 } }, 7462306a36Sopenharmony_ci { { 0, 20 }, { 3, 6 } }, 7562306a36Sopenharmony_ci { { 0, 26 }, { 3, 12 } }, 7662306a36Sopenharmony_ci { { 1, 0 }, { 3, 18 } }, 7762306a36Sopenharmony_ci { { 1, 6 }, { 3, 24, 1 } }, 7862306a36Sopenharmony_ci { { 1, 12 }, { 4, 0, 1 } }, 7962306a36Sopenharmony_ci { { 1, 18 }, { 4, 6, 1 } }, 8062306a36Sopenharmony_ci { { 2, 0 }, { 4, 12, 1 } }, 8162306a36Sopenharmony_ci { { 2, 6 }, { 4, 18, 1 } }, 8262306a36Sopenharmony_ci { { 2, 12 }, { 4, 24, 1 } }, 8362306a36Sopenharmony_ci }, 8462306a36Sopenharmony_ci}; 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_cistatic int calibrate_8916(struct tsens_priv *priv) 8762306a36Sopenharmony_ci{ 8862306a36Sopenharmony_ci u32 p1[5], p2[5]; 8962306a36Sopenharmony_ci u32 *qfprom_cdata, *qfprom_csel; 9062306a36Sopenharmony_ci int mode, ret; 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci ret = tsens_calibrate_nvmem(priv, 3); 9362306a36Sopenharmony_ci if (!ret) 9462306a36Sopenharmony_ci return 0; 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ci qfprom_cdata = (u32 *)qfprom_read(priv->dev, "calib"); 9762306a36Sopenharmony_ci if (IS_ERR(qfprom_cdata)) 9862306a36Sopenharmony_ci return PTR_ERR(qfprom_cdata); 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ci qfprom_csel = (u32 *)qfprom_read(priv->dev, "calib_sel"); 10162306a36Sopenharmony_ci if (IS_ERR(qfprom_csel)) { 10262306a36Sopenharmony_ci kfree(qfprom_cdata); 10362306a36Sopenharmony_ci return PTR_ERR(qfprom_csel); 10462306a36Sopenharmony_ci } 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_ci mode = tsens_read_calibration_legacy(priv, &tsens_8916_nvmem, 10762306a36Sopenharmony_ci p1, p2, 10862306a36Sopenharmony_ci qfprom_cdata, qfprom_csel); 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci compute_intercept_slope(priv, p1, p2, mode); 11162306a36Sopenharmony_ci kfree(qfprom_cdata); 11262306a36Sopenharmony_ci kfree(qfprom_csel); 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci return 0; 11562306a36Sopenharmony_ci} 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_cistatic void fixup_8974_points(int mode, u32 *p1, u32 *p2) 11862306a36Sopenharmony_ci{ 11962306a36Sopenharmony_ci int i; 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci if (mode == NO_PT_CALIB) { 12262306a36Sopenharmony_ci p1[0] += 2; 12362306a36Sopenharmony_ci p1[1] += 9; 12462306a36Sopenharmony_ci p1[2] += 3; 12562306a36Sopenharmony_ci p1[3] += 9; 12662306a36Sopenharmony_ci p1[4] += 5; 12762306a36Sopenharmony_ci p1[5] += 9; 12862306a36Sopenharmony_ci p1[6] += 7; 12962306a36Sopenharmony_ci p1[7] += 10; 13062306a36Sopenharmony_ci p1[8] += 8; 13162306a36Sopenharmony_ci p1[9] += 9; 13262306a36Sopenharmony_ci p1[10] += 8; 13362306a36Sopenharmony_ci } else { 13462306a36Sopenharmony_ci for (i = 0; i < 11; i++) { 13562306a36Sopenharmony_ci /* 13662306a36Sopenharmony_ci * ONE_PT_CALIB requires using addition here instead of 13762306a36Sopenharmony_ci * using OR operation. 13862306a36Sopenharmony_ci */ 13962306a36Sopenharmony_ci p1[i] += BIT_APPEND; 14062306a36Sopenharmony_ci p2[i] += BIT_APPEND; 14162306a36Sopenharmony_ci } 14262306a36Sopenharmony_ci } 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ci} 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_cistatic int calibrate_8974_nvmem(struct tsens_priv *priv) 14762306a36Sopenharmony_ci{ 14862306a36Sopenharmony_ci u32 p1[11], p2[11]; 14962306a36Sopenharmony_ci u32 backup; 15062306a36Sopenharmony_ci int ret, mode; 15162306a36Sopenharmony_ci 15262306a36Sopenharmony_ci ret = nvmem_cell_read_variable_le_u32(priv->dev, "use_backup", &backup); 15362306a36Sopenharmony_ci if (ret == -ENOENT) 15462306a36Sopenharmony_ci dev_warn(priv->dev, "Please migrate to separate nvmem cells for calibration data\n"); 15562306a36Sopenharmony_ci if (ret < 0) 15662306a36Sopenharmony_ci return ret; 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ci mode = tsens_read_calibration(priv, 2, p1, p2, backup == BKP_SEL); 15962306a36Sopenharmony_ci if (mode < 0) 16062306a36Sopenharmony_ci return mode; 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_ci fixup_8974_points(mode, p1, p2); 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_ci compute_intercept_slope(priv, p1, p2, mode); 16562306a36Sopenharmony_ci 16662306a36Sopenharmony_ci return 0; 16762306a36Sopenharmony_ci} 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_cistatic int calibrate_8974(struct tsens_priv *priv) 17062306a36Sopenharmony_ci{ 17162306a36Sopenharmony_ci u32 p1[11], p2[11]; 17262306a36Sopenharmony_ci u32 *calib, *bkp; 17362306a36Sopenharmony_ci u32 calib_redun_sel; 17462306a36Sopenharmony_ci int mode, ret; 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_ci ret = calibrate_8974_nvmem(priv); 17762306a36Sopenharmony_ci if (ret == 0) 17862306a36Sopenharmony_ci return 0; 17962306a36Sopenharmony_ci 18062306a36Sopenharmony_ci calib = (u32 *)qfprom_read(priv->dev, "calib"); 18162306a36Sopenharmony_ci if (IS_ERR(calib)) 18262306a36Sopenharmony_ci return PTR_ERR(calib); 18362306a36Sopenharmony_ci 18462306a36Sopenharmony_ci bkp = (u32 *)qfprom_read(priv->dev, "calib_backup"); 18562306a36Sopenharmony_ci if (IS_ERR(bkp)) { 18662306a36Sopenharmony_ci kfree(calib); 18762306a36Sopenharmony_ci return PTR_ERR(bkp); 18862306a36Sopenharmony_ci } 18962306a36Sopenharmony_ci 19062306a36Sopenharmony_ci calib_redun_sel = FIELD_GET(BKP_REDUN_SEL, bkp[1]); 19162306a36Sopenharmony_ci 19262306a36Sopenharmony_ci if (calib_redun_sel == BKP_SEL) 19362306a36Sopenharmony_ci mode = tsens_read_calibration_legacy(priv, &tsens_8974_backup_nvmem, 19462306a36Sopenharmony_ci p1, p2, 19562306a36Sopenharmony_ci bkp, calib); 19662306a36Sopenharmony_ci else 19762306a36Sopenharmony_ci mode = tsens_read_calibration_legacy(priv, &tsens_8974_nvmem, 19862306a36Sopenharmony_ci p1, p2, 19962306a36Sopenharmony_ci calib, NULL); 20062306a36Sopenharmony_ci 20162306a36Sopenharmony_ci fixup_8974_points(mode, p1, p2); 20262306a36Sopenharmony_ci 20362306a36Sopenharmony_ci compute_intercept_slope(priv, p1, p2, mode); 20462306a36Sopenharmony_ci kfree(calib); 20562306a36Sopenharmony_ci kfree(bkp); 20662306a36Sopenharmony_ci 20762306a36Sopenharmony_ci return 0; 20862306a36Sopenharmony_ci} 20962306a36Sopenharmony_ci 21062306a36Sopenharmony_cistatic int __init init_8226(struct tsens_priv *priv) 21162306a36Sopenharmony_ci{ 21262306a36Sopenharmony_ci priv->sensor[0].slope = 2901; 21362306a36Sopenharmony_ci priv->sensor[1].slope = 2846; 21462306a36Sopenharmony_ci priv->sensor[2].slope = 3038; 21562306a36Sopenharmony_ci priv->sensor[3].slope = 2955; 21662306a36Sopenharmony_ci priv->sensor[4].slope = 2901; 21762306a36Sopenharmony_ci priv->sensor[5].slope = 2846; 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_ci return init_common(priv); 22062306a36Sopenharmony_ci} 22162306a36Sopenharmony_ci 22262306a36Sopenharmony_cistatic int __init init_8909(struct tsens_priv *priv) 22362306a36Sopenharmony_ci{ 22462306a36Sopenharmony_ci int i; 22562306a36Sopenharmony_ci 22662306a36Sopenharmony_ci for (i = 0; i < priv->num_sensors; ++i) 22762306a36Sopenharmony_ci priv->sensor[i].slope = 3000; 22862306a36Sopenharmony_ci 22962306a36Sopenharmony_ci priv->sensor[0].p1_calib_offset = 0; 23062306a36Sopenharmony_ci priv->sensor[0].p2_calib_offset = 0; 23162306a36Sopenharmony_ci priv->sensor[1].p1_calib_offset = -10; 23262306a36Sopenharmony_ci priv->sensor[1].p2_calib_offset = -6; 23362306a36Sopenharmony_ci priv->sensor[2].p1_calib_offset = 0; 23462306a36Sopenharmony_ci priv->sensor[2].p2_calib_offset = 0; 23562306a36Sopenharmony_ci priv->sensor[3].p1_calib_offset = -9; 23662306a36Sopenharmony_ci priv->sensor[3].p2_calib_offset = -9; 23762306a36Sopenharmony_ci priv->sensor[4].p1_calib_offset = -8; 23862306a36Sopenharmony_ci priv->sensor[4].p2_calib_offset = -10; 23962306a36Sopenharmony_ci 24062306a36Sopenharmony_ci return init_common(priv); 24162306a36Sopenharmony_ci} 24262306a36Sopenharmony_ci 24362306a36Sopenharmony_cistatic int __init init_8939(struct tsens_priv *priv) { 24462306a36Sopenharmony_ci priv->sensor[0].slope = 2911; 24562306a36Sopenharmony_ci priv->sensor[1].slope = 2789; 24662306a36Sopenharmony_ci priv->sensor[2].slope = 2906; 24762306a36Sopenharmony_ci priv->sensor[3].slope = 2763; 24862306a36Sopenharmony_ci priv->sensor[4].slope = 2922; 24962306a36Sopenharmony_ci priv->sensor[5].slope = 2867; 25062306a36Sopenharmony_ci priv->sensor[6].slope = 2833; 25162306a36Sopenharmony_ci priv->sensor[7].slope = 2838; 25262306a36Sopenharmony_ci priv->sensor[8].slope = 2840; 25362306a36Sopenharmony_ci /* priv->sensor[9].slope = 2852; */ 25462306a36Sopenharmony_ci 25562306a36Sopenharmony_ci return init_common(priv); 25662306a36Sopenharmony_ci} 25762306a36Sopenharmony_ci 25862306a36Sopenharmony_cistatic int __init init_9607(struct tsens_priv *priv) 25962306a36Sopenharmony_ci{ 26062306a36Sopenharmony_ci int i; 26162306a36Sopenharmony_ci 26262306a36Sopenharmony_ci for (i = 0; i < priv->num_sensors; ++i) 26362306a36Sopenharmony_ci priv->sensor[i].slope = 3000; 26462306a36Sopenharmony_ci 26562306a36Sopenharmony_ci priv->sensor[0].p1_calib_offset = 1; 26662306a36Sopenharmony_ci priv->sensor[0].p2_calib_offset = 1; 26762306a36Sopenharmony_ci priv->sensor[1].p1_calib_offset = -4; 26862306a36Sopenharmony_ci priv->sensor[1].p2_calib_offset = -2; 26962306a36Sopenharmony_ci priv->sensor[2].p1_calib_offset = 4; 27062306a36Sopenharmony_ci priv->sensor[2].p2_calib_offset = 8; 27162306a36Sopenharmony_ci priv->sensor[3].p1_calib_offset = -3; 27262306a36Sopenharmony_ci priv->sensor[3].p2_calib_offset = -5; 27362306a36Sopenharmony_ci priv->sensor[4].p1_calib_offset = -4; 27462306a36Sopenharmony_ci priv->sensor[4].p2_calib_offset = -4; 27562306a36Sopenharmony_ci 27662306a36Sopenharmony_ci return init_common(priv); 27762306a36Sopenharmony_ci} 27862306a36Sopenharmony_ci 27962306a36Sopenharmony_ci/* v0.1: 8226, 8909, 8916, 8939, 8974, 9607 */ 28062306a36Sopenharmony_ci 28162306a36Sopenharmony_cistatic struct tsens_features tsens_v0_1_feat = { 28262306a36Sopenharmony_ci .ver_major = VER_0_1, 28362306a36Sopenharmony_ci .crit_int = 0, 28462306a36Sopenharmony_ci .combo_int = 0, 28562306a36Sopenharmony_ci .adc = 1, 28662306a36Sopenharmony_ci .srot_split = 1, 28762306a36Sopenharmony_ci .max_sensors = 11, 28862306a36Sopenharmony_ci .trip_min_temp = -40000, 28962306a36Sopenharmony_ci .trip_max_temp = 120000, 29062306a36Sopenharmony_ci}; 29162306a36Sopenharmony_ci 29262306a36Sopenharmony_cistatic const struct reg_field tsens_v0_1_regfields[MAX_REGFIELDS] = { 29362306a36Sopenharmony_ci /* ----- SROT ------ */ 29462306a36Sopenharmony_ci /* No VERSION information */ 29562306a36Sopenharmony_ci 29662306a36Sopenharmony_ci /* CTRL_OFFSET */ 29762306a36Sopenharmony_ci [TSENS_EN] = REG_FIELD(SROT_CTRL_OFF, 0, 0), 29862306a36Sopenharmony_ci [TSENS_SW_RST] = REG_FIELD(SROT_CTRL_OFF, 1, 1), 29962306a36Sopenharmony_ci 30062306a36Sopenharmony_ci /* ----- TM ------ */ 30162306a36Sopenharmony_ci /* INTERRUPT ENABLE */ 30262306a36Sopenharmony_ci [INT_EN] = REG_FIELD(TM_INT_EN_OFF, 0, 0), 30362306a36Sopenharmony_ci 30462306a36Sopenharmony_ci /* UPPER/LOWER TEMPERATURE THRESHOLDS */ 30562306a36Sopenharmony_ci REG_FIELD_FOR_EACH_SENSOR11(LOW_THRESH, TM_Sn_UPPER_LOWER_STATUS_CTRL_OFF, 0, 9), 30662306a36Sopenharmony_ci REG_FIELD_FOR_EACH_SENSOR11(UP_THRESH, TM_Sn_UPPER_LOWER_STATUS_CTRL_OFF, 10, 19), 30762306a36Sopenharmony_ci 30862306a36Sopenharmony_ci /* UPPER/LOWER INTERRUPTS [CLEAR/STATUS] */ 30962306a36Sopenharmony_ci REG_FIELD_FOR_EACH_SENSOR11(LOW_INT_CLEAR, TM_Sn_UPPER_LOWER_STATUS_CTRL_OFF, 20, 20), 31062306a36Sopenharmony_ci REG_FIELD_FOR_EACH_SENSOR11(UP_INT_CLEAR, TM_Sn_UPPER_LOWER_STATUS_CTRL_OFF, 21, 21), 31162306a36Sopenharmony_ci 31262306a36Sopenharmony_ci /* NO CRITICAL INTERRUPT SUPPORT on v0.1 */ 31362306a36Sopenharmony_ci 31462306a36Sopenharmony_ci /* Sn_STATUS */ 31562306a36Sopenharmony_ci REG_FIELD_FOR_EACH_SENSOR11(LAST_TEMP, TM_Sn_STATUS_OFF, 0, 9), 31662306a36Sopenharmony_ci /* No VALID field on v0.1 */ 31762306a36Sopenharmony_ci /* xxx_STATUS bits: 1 == threshold violated */ 31862306a36Sopenharmony_ci REG_FIELD_FOR_EACH_SENSOR11(MIN_STATUS, TM_Sn_STATUS_OFF, 10, 10), 31962306a36Sopenharmony_ci REG_FIELD_FOR_EACH_SENSOR11(LOWER_STATUS, TM_Sn_STATUS_OFF, 11, 11), 32062306a36Sopenharmony_ci REG_FIELD_FOR_EACH_SENSOR11(UPPER_STATUS, TM_Sn_STATUS_OFF, 12, 12), 32162306a36Sopenharmony_ci /* No CRITICAL field on v0.1 */ 32262306a36Sopenharmony_ci REG_FIELD_FOR_EACH_SENSOR11(MAX_STATUS, TM_Sn_STATUS_OFF, 13, 13), 32362306a36Sopenharmony_ci 32462306a36Sopenharmony_ci /* TRDY: 1=ready, 0=in progress */ 32562306a36Sopenharmony_ci [TRDY] = REG_FIELD(TM_TRDY_OFF, 0, 0), 32662306a36Sopenharmony_ci}; 32762306a36Sopenharmony_ci 32862306a36Sopenharmony_cistatic const struct tsens_ops ops_v0_1 = { 32962306a36Sopenharmony_ci .init = init_common, 33062306a36Sopenharmony_ci .calibrate = tsens_calibrate_common, 33162306a36Sopenharmony_ci .get_temp = get_temp_common, 33262306a36Sopenharmony_ci}; 33362306a36Sopenharmony_ci 33462306a36Sopenharmony_cistatic const struct tsens_ops ops_8226 = { 33562306a36Sopenharmony_ci .init = init_8226, 33662306a36Sopenharmony_ci .calibrate = tsens_calibrate_common, 33762306a36Sopenharmony_ci .get_temp = get_temp_common, 33862306a36Sopenharmony_ci}; 33962306a36Sopenharmony_ci 34062306a36Sopenharmony_cistruct tsens_plat_data data_8226 = { 34162306a36Sopenharmony_ci .num_sensors = 6, 34262306a36Sopenharmony_ci .ops = &ops_8226, 34362306a36Sopenharmony_ci .feat = &tsens_v0_1_feat, 34462306a36Sopenharmony_ci .fields = tsens_v0_1_regfields, 34562306a36Sopenharmony_ci}; 34662306a36Sopenharmony_ci 34762306a36Sopenharmony_cistatic const struct tsens_ops ops_8909 = { 34862306a36Sopenharmony_ci .init = init_8909, 34962306a36Sopenharmony_ci .calibrate = tsens_calibrate_common, 35062306a36Sopenharmony_ci .get_temp = get_temp_common, 35162306a36Sopenharmony_ci}; 35262306a36Sopenharmony_ci 35362306a36Sopenharmony_cistruct tsens_plat_data data_8909 = { 35462306a36Sopenharmony_ci .num_sensors = 5, 35562306a36Sopenharmony_ci .ops = &ops_8909, 35662306a36Sopenharmony_ci .feat = &tsens_v0_1_feat, 35762306a36Sopenharmony_ci .fields = tsens_v0_1_regfields, 35862306a36Sopenharmony_ci}; 35962306a36Sopenharmony_ci 36062306a36Sopenharmony_cistatic const struct tsens_ops ops_8916 = { 36162306a36Sopenharmony_ci .init = init_common, 36262306a36Sopenharmony_ci .calibrate = calibrate_8916, 36362306a36Sopenharmony_ci .get_temp = get_temp_common, 36462306a36Sopenharmony_ci}; 36562306a36Sopenharmony_ci 36662306a36Sopenharmony_cistruct tsens_plat_data data_8916 = { 36762306a36Sopenharmony_ci .num_sensors = 5, 36862306a36Sopenharmony_ci .ops = &ops_8916, 36962306a36Sopenharmony_ci .hw_ids = (unsigned int []){0, 1, 2, 4, 5 }, 37062306a36Sopenharmony_ci 37162306a36Sopenharmony_ci .feat = &tsens_v0_1_feat, 37262306a36Sopenharmony_ci .fields = tsens_v0_1_regfields, 37362306a36Sopenharmony_ci}; 37462306a36Sopenharmony_ci 37562306a36Sopenharmony_cistatic const struct tsens_ops ops_8939 = { 37662306a36Sopenharmony_ci .init = init_8939, 37762306a36Sopenharmony_ci .calibrate = tsens_calibrate_common, 37862306a36Sopenharmony_ci .get_temp = get_temp_common, 37962306a36Sopenharmony_ci}; 38062306a36Sopenharmony_ci 38162306a36Sopenharmony_cistruct tsens_plat_data data_8939 = { 38262306a36Sopenharmony_ci .num_sensors = 9, 38362306a36Sopenharmony_ci .ops = &ops_8939, 38462306a36Sopenharmony_ci .hw_ids = (unsigned int []){ 0, 1, 2, 3, 5, 6, 7, 8, 9, /* 10 */ }, 38562306a36Sopenharmony_ci 38662306a36Sopenharmony_ci .feat = &tsens_v0_1_feat, 38762306a36Sopenharmony_ci .fields = tsens_v0_1_regfields, 38862306a36Sopenharmony_ci}; 38962306a36Sopenharmony_ci 39062306a36Sopenharmony_cistatic const struct tsens_ops ops_8974 = { 39162306a36Sopenharmony_ci .init = init_common, 39262306a36Sopenharmony_ci .calibrate = calibrate_8974, 39362306a36Sopenharmony_ci .get_temp = get_temp_common, 39462306a36Sopenharmony_ci}; 39562306a36Sopenharmony_ci 39662306a36Sopenharmony_cistruct tsens_plat_data data_8974 = { 39762306a36Sopenharmony_ci .num_sensors = 11, 39862306a36Sopenharmony_ci .ops = &ops_8974, 39962306a36Sopenharmony_ci .feat = &tsens_v0_1_feat, 40062306a36Sopenharmony_ci .fields = tsens_v0_1_regfields, 40162306a36Sopenharmony_ci}; 40262306a36Sopenharmony_ci 40362306a36Sopenharmony_cistatic const struct tsens_ops ops_9607 = { 40462306a36Sopenharmony_ci .init = init_9607, 40562306a36Sopenharmony_ci .calibrate = tsens_calibrate_common, 40662306a36Sopenharmony_ci .get_temp = get_temp_common, 40762306a36Sopenharmony_ci}; 40862306a36Sopenharmony_ci 40962306a36Sopenharmony_cistruct tsens_plat_data data_9607 = { 41062306a36Sopenharmony_ci .num_sensors = 5, 41162306a36Sopenharmony_ci .ops = &ops_9607, 41262306a36Sopenharmony_ci .feat = &tsens_v0_1_feat, 41362306a36Sopenharmony_ci .fields = tsens_v0_1_regfields, 41462306a36Sopenharmony_ci}; 415