Skip to content

Commit 22a1828

Browse files
committed
hwmon: macsmc: Avoid global writable hwmon_chip_info
Should be squashed into "hwmon: add macsmc-hwmon driver" Signed-off-by: Janne Grunau <j@jannau.net>
1 parent 0ec1e17 commit 22a1828

1 file changed

Lines changed: 41 additions & 62 deletions

File tree

drivers/hwmon/macsmc-hwmon.c

Lines changed: 41 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,13 @@ struct macsmc_hwmon_fan {
4646
};
4747

4848
struct macsmc_hwmon_sensors {
49+
struct hwmon_channel_info channel_info;
4950
struct macsmc_hwmon_sensor *sensors;
5051
u32 n_sensors;
5152
};
5253

5354
struct macsmc_hwmon_fans {
55+
struct hwmon_channel_info channel_info;
5456
struct macsmc_hwmon_fan *fans;
5557
u32 n_fans;
5658
};
@@ -59,8 +61,9 @@ struct macsmc_hwmon {
5961
struct device *dev;
6062
struct apple_smc *smc;
6163
struct device *hwmon_dev;
64+
struct hwmon_chip_info chip_info;
6265
/* Chip + sensor types + NULL */
63-
struct hwmon_channel_info channel_infos[1 + NUM_SENSOR_TYPES + 1];
66+
const struct hwmon_channel_info *channel_infos[1 + NUM_SENSOR_TYPES + 1];
6467
struct macsmc_hwmon_sensors temp;
6568
struct macsmc_hwmon_sensors volt;
6669
struct macsmc_hwmon_sensors curr;
@@ -226,11 +229,6 @@ static const struct hwmon_ops macsmc_hwmon_ops = {
226229
.write = macsmc_hwmon_write,
227230
};
228231

229-
static struct hwmon_chip_info macsmc_hwmon_info = {
230-
.ops = &macsmc_hwmon_ops,
231-
.info = NULL, /* see macsmc_hwmon_create_infos */
232-
};
233-
234232
/*
235233
* Get the key metadata, including key data type, from the SMC.
236234
*/
@@ -450,99 +448,86 @@ static void macsmc_hwmon_populate_fan_configs(u32 *configs,
450448
configs[idx + 1] = 0;
451449
}
452450

453-
static int macsmc_hwmon_create_infos(struct macsmc_hwmon *hwmon,
454-
struct hwmon_channel_info **info_list)
451+
static int macsmc_hwmon_create_infos(struct macsmc_hwmon *hwmon)
455452
{
456453
int i = 0;
454+
struct hwmon_channel_info *channel_info;
457455

458456
/* chip */
459-
hwmon->channel_infos[i].type = hwmon_chip;
460-
hwmon->channel_infos[i].config = devm_kzalloc(hwmon->dev, sizeof(u32) * 2,
461-
GFP_KERNEL);
462-
if (!hwmon->channel_infos[i].config)
463-
return -ENOMEM;
464-
macsmc_hwmon_populate_configs((u32 *)hwmon->channel_infos[i].config, 1,
465-
HWMON_C_REGISTER_TZ);
466-
info_list[i] = &hwmon->channel_infos[i];
457+
hwmon->channel_infos[i++] = HWMON_CHANNEL_INFO(chip, HWMON_C_REGISTER_TZ);
467458

468459
if (hwmon->temp.n_sensors) {
469-
i++;
470-
hwmon->channel_infos[i].type = hwmon_temp;
471-
hwmon->channel_infos[i].config = devm_kzalloc(hwmon->dev,
460+
channel_info = &hwmon->temp.channel_info;
461+
channel_info->type = hwmon_temp;
462+
channel_info->config = devm_kzalloc(hwmon->dev,
472463
sizeof(u32) * hwmon->temp.n_sensors + 1,
473464
GFP_KERNEL);
474-
if (!hwmon->channel_infos[i].config)
465+
if (!channel_info->config)
475466
return -ENOMEM;
476467

477-
macsmc_hwmon_populate_configs((u32 *)hwmon->channel_infos[i].config,
468+
macsmc_hwmon_populate_configs((u32 *)channel_info->config,
478469
hwmon->temp.n_sensors,
479470
(HWMON_T_INPUT | HWMON_T_LABEL));
480-
481-
info_list[i] = &hwmon->channel_infos[i];
482-
471+
hwmon->channel_infos[i++] = channel_info;
483472
}
484473

485474
if (hwmon->volt.n_sensors) {
486-
i++;
487-
hwmon->channel_infos[i].type = hwmon_in;
488-
hwmon->channel_infos[i].config = devm_kzalloc(hwmon->dev,
475+
channel_info = &hwmon->volt.channel_info;
476+
channel_info->type = hwmon_in;
477+
channel_info->config = devm_kzalloc(hwmon->dev,
489478
sizeof(u32) * hwmon->volt.n_sensors + 1,
490479
GFP_KERNEL);
491-
if (!hwmon->channel_infos[i].config)
480+
if (!channel_info->config)
492481
return -ENOMEM;
493482

494-
macsmc_hwmon_populate_configs((u32 *)hwmon->channel_infos[i].config,
483+
macsmc_hwmon_populate_configs((u32 *)channel_info->config,
495484
hwmon->volt.n_sensors,
496485
(HWMON_I_INPUT | HWMON_I_LABEL));
497-
498-
info_list[i] = &hwmon->channel_infos[i];
486+
hwmon->channel_infos[i++] = channel_info;
499487
}
500488

501489
if (hwmon->curr.n_sensors) {
502-
i++;
503-
hwmon->channel_infos[i].type = hwmon_curr;
504-
hwmon->channel_infos[i].config = devm_kzalloc(hwmon->dev,
490+
channel_info = &hwmon->curr.channel_info;
491+
channel_info->type = hwmon_curr;
492+
channel_info->config = devm_kzalloc(hwmon->dev,
505493
sizeof(u32) * hwmon->curr.n_sensors + 1,
506494
GFP_KERNEL);
507-
if (!hwmon->channel_infos[i].config)
495+
if (!channel_info->config)
508496
return -ENOMEM;
509497

510-
macsmc_hwmon_populate_configs((u32 *)hwmon->channel_infos[i].config,
498+
macsmc_hwmon_populate_configs((u32 *)channel_info->config,
511499
hwmon->curr.n_sensors,
512500
(HWMON_C_INPUT | HWMON_C_LABEL));
513-
514-
info_list[i] = &hwmon->channel_infos[i];
501+
hwmon->channel_infos[i++] = channel_info;
515502
}
516503

517504
if (hwmon->power.n_sensors) {
518-
i++;
519-
hwmon->channel_infos[i].type = hwmon_power;
520-
hwmon->channel_infos[i].config = devm_kzalloc(hwmon->dev,
505+
channel_info = &hwmon->power.channel_info;
506+
channel_info->type = hwmon_power;
507+
channel_info->config = devm_kzalloc(hwmon->dev,
521508
sizeof(u32) * hwmon->power.n_sensors + 1,
522509
GFP_KERNEL);
523-
if (!hwmon->channel_infos[i].config)
510+
if (!channel_info->config)
524511
return -ENOMEM;
525512

526-
macsmc_hwmon_populate_configs((u32 *)hwmon->channel_infos[i].config,
513+
macsmc_hwmon_populate_configs((u32 *)channel_info->config,
527514
hwmon->power.n_sensors,
528515
(HWMON_P_INPUT | HWMON_P_LABEL));
529-
530-
info_list[i] = &hwmon->channel_infos[i];
516+
hwmon->channel_infos[i++] = channel_info;
531517
}
532518

533519
if (hwmon->fan.n_fans) {
534-
i++;
535-
hwmon->channel_infos[i].type = hwmon_fan;
536-
hwmon->channel_infos[i].config = devm_kzalloc(hwmon->dev,
520+
channel_info = &hwmon->fan.channel_info;
521+
channel_info->type = hwmon_fan;
522+
channel_info->config = devm_kzalloc(hwmon->dev,
537523
sizeof(u32) * hwmon->fan.n_fans + 1,
538524
GFP_KERNEL);
539-
if (!hwmon->channel_infos[i].config)
525+
if (!channel_info->config)
540526
return -ENOMEM;
541527

542-
macsmc_hwmon_populate_fan_configs((u32 *)hwmon->channel_infos[i].config,
528+
macsmc_hwmon_populate_fan_configs((u32 *)channel_info->config,
543529
hwmon->fan.n_fans, &hwmon->fan);
544-
545-
info_list[i] = &hwmon->channel_infos[i];
530+
hwmon->channel_infos[i++] = channel_info;
546531
}
547532

548533
return 0;
@@ -553,7 +538,6 @@ static int macsmc_hwmon_probe(struct platform_device *pdev)
553538
struct apple_smc *smc = dev_get_drvdata(pdev->dev.parent);
554539
struct macsmc_hwmon *hwmon;
555540
struct device_node *hwmon_node;
556-
struct hwmon_channel_info **macsmc_chip_info = NULL;
557541
int ret = 0;
558542

559543
hwmon = devm_kzalloc(&pdev->dev, sizeof(struct macsmc_hwmon), GFP_KERNEL);
@@ -582,21 +566,16 @@ static int macsmc_hwmon_probe(struct platform_device *pdev)
582566
return -ENODEV;
583567
}
584568

585-
macsmc_chip_info = devm_kzalloc(hwmon->dev,
586-
sizeof(struct hwmon_channel_info *) * (1 + NUM_SENSOR_TYPES + 1),
587-
GFP_KERNEL);
588-
if (!macsmc_chip_info)
589-
return -ENOMEM;
590-
591-
ret = macsmc_hwmon_create_infos(hwmon, macsmc_chip_info);
569+
ret = macsmc_hwmon_create_infos(hwmon);
592570
if (ret)
593571
return ret;
594572

595-
macsmc_hwmon_info.info = (const struct hwmon_channel_info **)macsmc_chip_info;
573+
hwmon->chip_info.ops = &macsmc_hwmon_ops;
574+
hwmon->chip_info.info = (const struct hwmon_channel_info *const *)&hwmon->channel_infos;
596575

597576
hwmon->hwmon_dev = devm_hwmon_device_register_with_info(&pdev->dev,
598577
"macsmc_hwmon", hwmon,
599-
&macsmc_hwmon_info, NULL);
578+
&hwmon->chip_info, NULL);
600579
if (IS_ERR(hwmon->hwmon_dev))
601580
return dev_err_probe(hwmon->dev, PTR_ERR(hwmon->hwmon_dev),
602581
"Probing SMC hwmon device failed!\n");

0 commit comments

Comments
 (0)