Skip to content

Commit 11e6f4c

Browse files
Nicolas Pitredlezcano
authored andcommitted
thermal/drivers/mediatek/lvts_thermal: Allow early empty sensor slots
Some systems don't always populate sensor controller slots starting at slot 0. Use a bitmap instead of a count to indicate valid sensor slots. Also create a pretty iterator for that. About that iterator: it causes checkpatch to complain with "ERROR: Macros with multiple statements should be enclosed in a do - while loop". However this is not possible here. And many similar iterators do exist using the same form in the tree already. Signed-off-by: Nicolas Pitre <[email protected]> Signed-off-by: Daniel Lezcano <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent 684cbb4 commit 11e6f4c

File tree

1 file changed

+37
-26
lines changed

1 file changed

+37
-26
lines changed

drivers/thermal/mediatek/lvts_thermal.c

Lines changed: 37 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,23 @@ struct lvts_ctrl_data {
107107
struct lvts_sensor_data lvts_sensor[LVTS_SENSOR_MAX];
108108
int cal_offset[LVTS_SENSOR_MAX];
109109
int num_lvts_sensor;
110+
u8 valid_sensor_mask;
110111
int offset;
111112
int mode;
112113
};
113114

115+
#define VALID_SENSOR_MAP(s0, s1, s2, s3) \
116+
.valid_sensor_mask = (((s0) ? BIT(0) : 0) | \
117+
((s1) ? BIT(1) : 0) | \
118+
((s2) ? BIT(2) : 0) | \
119+
((s3) ? BIT(3) : 0))
120+
121+
#define lvts_for_each_valid_sensor(i, lvts_ctrl_data) \
122+
for ((i) = 0; (i) < LVTS_SENSOR_MAX; (i)++) \
123+
if (!((lvts_ctrl_data)->valid_sensor_mask & BIT(i))) \
124+
continue; \
125+
else
126+
114127
struct lvts_data {
115128
const struct lvts_ctrl_data *lvts_ctrl;
116129
int num_lvts_ctrl;
@@ -134,7 +147,6 @@ struct lvts_ctrl {
134147
const struct lvts_data *lvts_data;
135148
u32 calibration[LVTS_SENSOR_MAX];
136149
u32 hw_tshut_raw_temp;
137-
int num_lvts_sensor;
138150
int mode;
139151
void __iomem *base;
140152
int low_thresh;
@@ -346,7 +358,7 @@ static bool lvts_should_update_thresh(struct lvts_ctrl *lvts_ctrl, int high)
346358
if (high > lvts_ctrl->high_thresh)
347359
return true;
348360

349-
for (i = 0; i < lvts_ctrl->num_lvts_sensor; i++)
361+
lvts_for_each_valid_sensor(i, lvts_ctrl->lvts_data->lvts_ctrl)
350362
if (lvts_ctrl->sensors[i].high_thresh == lvts_ctrl->high_thresh
351363
&& lvts_ctrl->sensors[i].low_thresh == lvts_ctrl->low_thresh)
352364
return false;
@@ -550,6 +562,7 @@ static int lvts_sensor_init(struct device *dev, struct lvts_ctrl *lvts_ctrl,
550562
const struct lvts_ctrl_data *lvts_ctrl_data)
551563
{
552564
struct lvts_sensor *lvts_sensor = lvts_ctrl->sensors;
565+
553566
void __iomem *msr_regs[] = {
554567
LVTS_MSR0(lvts_ctrl->base),
555568
LVTS_MSR1(lvts_ctrl->base),
@@ -566,7 +579,7 @@ static int lvts_sensor_init(struct device *dev, struct lvts_ctrl *lvts_ctrl,
566579

567580
int i;
568581

569-
for (i = 0; i < lvts_ctrl_data->num_lvts_sensor; i++) {
582+
lvts_for_each_valid_sensor(i, lvts_ctrl_data) {
570583

571584
int dt_id = lvts_ctrl_data->lvts_sensor[i].dt_id;
572585

@@ -606,8 +619,6 @@ static int lvts_sensor_init(struct device *dev, struct lvts_ctrl *lvts_ctrl,
606619
lvts_sensor[i].high_thresh = INT_MIN;
607620
};
608621

609-
lvts_ctrl->num_lvts_sensor = lvts_ctrl_data->num_lvts_sensor;
610-
611622
return 0;
612623
}
613624

@@ -678,7 +689,7 @@ static int lvts_calibration_init(struct device *dev, struct lvts_ctrl *lvts_ctrl
678689
{
679690
int i;
680691

681-
for (i = 0; i < lvts_ctrl_data->num_lvts_sensor; i++) {
692+
lvts_for_each_valid_sensor(i, lvts_ctrl_data) {
682693
const struct lvts_sensor_data *sensor =
683694
&lvts_ctrl_data->lvts_sensor[i];
684695

@@ -1103,7 +1114,7 @@ static int lvts_ctrl_start(struct device *dev, struct lvts_ctrl *lvts_ctrl)
11031114
u32 *sensor_bitmap = lvts_ctrl->mode == LVTS_MSR_IMMEDIATE_MODE ?
11041115
sensor_imm_bitmap : sensor_filt_bitmap;
11051116

1106-
for (i = 0; i < lvts_ctrl->num_lvts_sensor; i++) {
1117+
lvts_for_each_valid_sensor(i, lvts_ctrl->lvts_data->lvts_ctrl) {
11071118

11081119
int dt_id = lvts_sensors[i].dt_id;
11091120

@@ -1326,7 +1337,7 @@ static const struct lvts_ctrl_data mt7988_lvts_ap_data_ctrl[] = {
13261337
{ .dt_id = MT7988_ETH2P5G_1,
13271338
.cal_offsets = { 0x0c, 0x0d, 0x0e } }
13281339
},
1329-
.num_lvts_sensor = 4,
1340+
VALID_SENSOR_MAP(1, 1, 1, 1),
13301341
.offset = 0x0,
13311342
},
13321343
{
@@ -1340,7 +1351,7 @@ static const struct lvts_ctrl_data mt7988_lvts_ap_data_ctrl[] = {
13401351
{ .dt_id = MT7988_ETHWARP_1,
13411352
.cal_offsets = { 0x20, 0x21, 0x22 } }
13421353
},
1343-
.num_lvts_sensor = 4,
1354+
VALID_SENSOR_MAP(1, 1, 1, 1),
13441355
.offset = 0x100,
13451356
}
13461357
};
@@ -1403,7 +1414,7 @@ static const struct lvts_ctrl_data mt8186_lvts_data_ctrl[] = {
14031414
{ .dt_id = MT8186_CAM,
14041415
.cal_offsets = { 12, 13, 14 } }
14051416
},
1406-
.num_lvts_sensor = 4,
1417+
VALID_SENSOR_MAP(1, 1, 1, 1),
14071418
.offset = 0x0,
14081419
},
14091420
{
@@ -1413,7 +1424,7 @@ static const struct lvts_ctrl_data mt8186_lvts_data_ctrl[] = {
14131424
{ .dt_id = MT8186_BIG_CPU1,
14141425
.cal_offsets = { 27, 20, 21 } }
14151426
},
1416-
.num_lvts_sensor = 2,
1427+
VALID_SENSOR_MAP(1, 1, 0, 0),
14171428
.offset = 0x100,
14181429
},
14191430
{
@@ -1425,7 +1436,7 @@ static const struct lvts_ctrl_data mt8186_lvts_data_ctrl[] = {
14251436
{ .dt_id = MT8186_MFG,
14261437
.cal_offsets = { 39, 32, 33 } }
14271438
},
1428-
.num_lvts_sensor = 3,
1439+
VALID_SENSOR_MAP(1, 1, 1, 0),
14291440
.offset = 0x200,
14301441
}
14311442
};
@@ -1438,7 +1449,7 @@ static const struct lvts_ctrl_data mt8192_lvts_mcu_data_ctrl[] = {
14381449
{ .dt_id = MT8192_MCU_BIG_CPU1,
14391450
.cal_offsets = { 0x08, 0x09, 0x0a } }
14401451
},
1441-
.num_lvts_sensor = 2,
1452+
VALID_SENSOR_MAP(1, 1, 0, 0),
14421453
.offset = 0x0,
14431454
.mode = LVTS_MSR_FILTERED_MODE,
14441455
},
@@ -1449,7 +1460,7 @@ static const struct lvts_ctrl_data mt8192_lvts_mcu_data_ctrl[] = {
14491460
{ .dt_id = MT8192_MCU_BIG_CPU3,
14501461
.cal_offsets = { 0x10, 0x11, 0x12 } }
14511462
},
1452-
.num_lvts_sensor = 2,
1463+
VALID_SENSOR_MAP(1, 1, 0, 0),
14531464
.offset = 0x100,
14541465
.mode = LVTS_MSR_FILTERED_MODE,
14551466
},
@@ -1464,7 +1475,7 @@ static const struct lvts_ctrl_data mt8192_lvts_mcu_data_ctrl[] = {
14641475
{ .dt_id = MT8192_MCU_LITTLE_CPU3,
14651476
.cal_offsets = { 0x20, 0x21, 0x22 } }
14661477
},
1467-
.num_lvts_sensor = 4,
1478+
VALID_SENSOR_MAP(1, 1, 1, 1),
14681479
.offset = 0x200,
14691480
.mode = LVTS_MSR_FILTERED_MODE,
14701481
}
@@ -1478,7 +1489,7 @@ static const struct lvts_ctrl_data mt8192_lvts_ap_data_ctrl[] = {
14781489
{ .dt_id = MT8192_AP_VPU1,
14791490
.cal_offsets = { 0x28, 0x29, 0x2a } }
14801491
},
1481-
.num_lvts_sensor = 2,
1492+
VALID_SENSOR_MAP(1, 1, 0, 0),
14821493
.offset = 0x0,
14831494
},
14841495
{
@@ -1488,7 +1499,7 @@ static const struct lvts_ctrl_data mt8192_lvts_ap_data_ctrl[] = {
14881499
{ .dt_id = MT8192_AP_GPU1,
14891500
.cal_offsets = { 0x30, 0x31, 0x32 } }
14901501
},
1491-
.num_lvts_sensor = 2,
1502+
VALID_SENSOR_MAP(1, 1, 0, 0),
14921503
.offset = 0x100,
14931504
},
14941505
{
@@ -1498,7 +1509,7 @@ static const struct lvts_ctrl_data mt8192_lvts_ap_data_ctrl[] = {
14981509
{ .dt_id = MT8192_AP_CAM,
14991510
.cal_offsets = { 0x38, 0x39, 0x3a } },
15001511
},
1501-
.num_lvts_sensor = 2,
1512+
VALID_SENSOR_MAP(1, 1, 0, 0),
15021513
.offset = 0x200,
15031514
},
15041515
{
@@ -1510,7 +1521,7 @@ static const struct lvts_ctrl_data mt8192_lvts_ap_data_ctrl[] = {
15101521
{ .dt_id = MT8192_AP_MD2,
15111522
.cal_offsets = { 0x44, 0x45, 0x46 } }
15121523
},
1513-
.num_lvts_sensor = 3,
1524+
VALID_SENSOR_MAP(1, 1, 1, 0),
15141525
.offset = 0x300,
15151526
}
15161527
};
@@ -1523,7 +1534,7 @@ static const struct lvts_ctrl_data mt8195_lvts_mcu_data_ctrl[] = {
15231534
{ .dt_id = MT8195_MCU_BIG_CPU1,
15241535
.cal_offsets = { 0x07, 0x08, 0x09 } }
15251536
},
1526-
.num_lvts_sensor = 2,
1537+
VALID_SENSOR_MAP(1, 1, 0, 0),
15271538
.offset = 0x0,
15281539
},
15291540
{
@@ -1533,7 +1544,7 @@ static const struct lvts_ctrl_data mt8195_lvts_mcu_data_ctrl[] = {
15331544
{ .dt_id = MT8195_MCU_BIG_CPU3,
15341545
.cal_offsets = { 0x10, 0x11, 0x12 } }
15351546
},
1536-
.num_lvts_sensor = 2,
1547+
VALID_SENSOR_MAP(1, 1, 0, 0),
15371548
.offset = 0x100,
15381549
},
15391550
{
@@ -1547,7 +1558,7 @@ static const struct lvts_ctrl_data mt8195_lvts_mcu_data_ctrl[] = {
15471558
{ .dt_id = MT8195_MCU_LITTLE_CPU3,
15481559
.cal_offsets = { 0x1f, 0x20, 0x21 } }
15491560
},
1550-
.num_lvts_sensor = 4,
1561+
VALID_SENSOR_MAP(1, 1, 1, 1),
15511562
.offset = 0x200,
15521563
}
15531564
};
@@ -1560,7 +1571,7 @@ static const struct lvts_ctrl_data mt8195_lvts_ap_data_ctrl[] = {
15601571
{ .dt_id = MT8195_AP_VPU1,
15611572
.cal_offsets = { 0x28, 0x29, 0x2a } }
15621573
},
1563-
.num_lvts_sensor = 2,
1574+
VALID_SENSOR_MAP(1, 1, 0, 0),
15641575
.offset = 0x0,
15651576
},
15661577
{
@@ -1570,7 +1581,7 @@ static const struct lvts_ctrl_data mt8195_lvts_ap_data_ctrl[] = {
15701581
{ .dt_id = MT8195_AP_GPU1,
15711582
.cal_offsets = { 0x31, 0x32, 0x33 } }
15721583
},
1573-
.num_lvts_sensor = 2,
1584+
VALID_SENSOR_MAP(1, 1, 0, 0),
15741585
.offset = 0x100,
15751586
},
15761587
{
@@ -1582,7 +1593,7 @@ static const struct lvts_ctrl_data mt8195_lvts_ap_data_ctrl[] = {
15821593
{ .dt_id = MT8195_AP_INFRA,
15831594
.cal_offsets = { 0x3d, 0x3e, 0x3f } }
15841595
},
1585-
.num_lvts_sensor = 3,
1596+
VALID_SENSOR_MAP(1, 1, 1, 0),
15861597
.offset = 0x200,
15871598
},
15881599
{
@@ -1592,7 +1603,7 @@ static const struct lvts_ctrl_data mt8195_lvts_ap_data_ctrl[] = {
15921603
{ .dt_id = MT8195_AP_CAM1,
15931604
.cal_offsets = { 0x46, 0x47, 0x48 } }
15941605
},
1595-
.num_lvts_sensor = 2,
1606+
VALID_SENSOR_MAP(1, 1, 0, 0),
15961607
.offset = 0x300,
15971608
}
15981609
};

0 commit comments

Comments
 (0)