@@ -116,6 +116,7 @@ struct lvts_data {
116
116
int num_lvts_ctrl ;
117
117
int temp_factor ;
118
118
int temp_offset ;
119
+ int gt_calib_bit_offset ;
119
120
};
120
121
121
122
struct lvts_sensor {
@@ -745,20 +746,21 @@ static int lvts_calibration_read(struct device *dev, struct lvts_domain *lvts_td
745
746
return 0 ;
746
747
}
747
748
748
- static int lvts_golden_temp_init (struct device * dev , u8 * calib , int temp_offset )
749
+ static int lvts_golden_temp_init (struct device * dev , u8 * calib ,
750
+ const struct lvts_data * lvts_data )
749
751
{
750
752
u32 gt ;
751
753
752
754
/*
753
- * The golden temp information is contained in the 4th byte (index = 3)
754
- * of efuse data.
755
+ * The golden temp information is contained in the first 32-bit
756
+ * word of efuse data at a specific bit offset .
755
757
*/
756
- gt = calib [ 3 ] ;
758
+ gt = ((( u32 * ) calib )[ 0 ] >> lvts_data -> gt_calib_bit_offset ) & 0xff ;
757
759
758
760
if (gt && gt < LVTS_GOLDEN_TEMP_MAX )
759
761
golden_temp = gt ;
760
762
761
- golden_temp_offset = golden_temp * 500 + temp_offset ;
763
+ golden_temp_offset = golden_temp * 500 + lvts_data -> temp_offset ;
762
764
763
765
return 0 ;
764
766
}
@@ -777,7 +779,7 @@ static int lvts_ctrl_init(struct device *dev, struct lvts_domain *lvts_td,
777
779
if (ret )
778
780
return ret ;
779
781
780
- ret = lvts_golden_temp_init (dev , lvts_td -> calib , lvts_data -> temp_offset );
782
+ ret = lvts_golden_temp_init (dev , lvts_td -> calib , lvts_data );
781
783
if (ret )
782
784
return ret ;
783
785
@@ -1600,41 +1602,47 @@ static const struct lvts_data mt7988_lvts_ap_data = {
1600
1602
.num_lvts_ctrl = ARRAY_SIZE (mt7988_lvts_ap_data_ctrl ),
1601
1603
.temp_factor = LVTS_COEFF_A_MT7988 ,
1602
1604
.temp_offset = LVTS_COEFF_B_MT7988 ,
1605
+ .gt_calib_bit_offset = 24 ,
1603
1606
};
1604
1607
1605
1608
static const struct lvts_data mt8186_lvts_data = {
1606
1609
.lvts_ctrl = mt8186_lvts_data_ctrl ,
1607
1610
.num_lvts_ctrl = ARRAY_SIZE (mt8186_lvts_data_ctrl ),
1608
1611
.temp_factor = LVTS_COEFF_A_MT7988 ,
1609
1612
.temp_offset = LVTS_COEFF_B_MT7988 ,
1613
+ .gt_calib_bit_offset = 24 ,
1610
1614
};
1611
1615
1612
1616
static const struct lvts_data mt8192_lvts_mcu_data = {
1613
1617
.lvts_ctrl = mt8192_lvts_mcu_data_ctrl ,
1614
1618
.num_lvts_ctrl = ARRAY_SIZE (mt8192_lvts_mcu_data_ctrl ),
1615
1619
.temp_factor = LVTS_COEFF_A_MT8195 ,
1616
1620
.temp_offset = LVTS_COEFF_B_MT8195 ,
1621
+ .gt_calib_bit_offset = 24 ,
1617
1622
};
1618
1623
1619
1624
static const struct lvts_data mt8192_lvts_ap_data = {
1620
1625
.lvts_ctrl = mt8192_lvts_ap_data_ctrl ,
1621
1626
.num_lvts_ctrl = ARRAY_SIZE (mt8192_lvts_ap_data_ctrl ),
1622
1627
.temp_factor = LVTS_COEFF_A_MT8195 ,
1623
1628
.temp_offset = LVTS_COEFF_B_MT8195 ,
1629
+ .gt_calib_bit_offset = 24 ,
1624
1630
};
1625
1631
1626
1632
static const struct lvts_data mt8195_lvts_mcu_data = {
1627
1633
.lvts_ctrl = mt8195_lvts_mcu_data_ctrl ,
1628
1634
.num_lvts_ctrl = ARRAY_SIZE (mt8195_lvts_mcu_data_ctrl ),
1629
1635
.temp_factor = LVTS_COEFF_A_MT8195 ,
1630
1636
.temp_offset = LVTS_COEFF_B_MT8195 ,
1637
+ .gt_calib_bit_offset = 24 ,
1631
1638
};
1632
1639
1633
1640
static const struct lvts_data mt8195_lvts_ap_data = {
1634
1641
.lvts_ctrl = mt8195_lvts_ap_data_ctrl ,
1635
1642
.num_lvts_ctrl = ARRAY_SIZE (mt8195_lvts_ap_data_ctrl ),
1636
1643
.temp_factor = LVTS_COEFF_A_MT8195 ,
1637
1644
.temp_offset = LVTS_COEFF_B_MT8195 ,
1645
+ .gt_calib_bit_offset = 24 ,
1638
1646
};
1639
1647
1640
1648
static const struct of_device_id lvts_of_match [] = {
0 commit comments