@@ -46,11 +46,13 @@ struct macsmc_hwmon_fan {
4646};
4747
4848struct macsmc_hwmon_sensors {
49+ struct hwmon_channel_info channel_info ;
4950 struct macsmc_hwmon_sensor * sensors ;
5051 u32 n_sensors ;
5152};
5253
5354struct 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