@@ -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,89 @@ 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 const struct hwmon_channel_info * const macsmc_chip_channel_info =
452+ HWMON_CHANNEL_INFO (chip , HWMON_C_REGISTER_TZ );
453+
454+ static int macsmc_hwmon_create_infos (struct macsmc_hwmon * hwmon )
455455{
456456 int i = 0 ;
457+ struct hwmon_channel_info * channel_info ;
457458
458459 /* 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 ];
460+ hwmon -> channel_infos [i ++ ] = macsmc_chip_channel_info ;
467461
468462 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 ,
463+ channel_info = & hwmon -> temp . channel_info ;
464+ channel_info -> type = hwmon_temp ;
465+ channel_info -> config = devm_kzalloc (hwmon -> dev ,
472466 sizeof (u32 ) * hwmon -> temp .n_sensors + 1 ,
473467 GFP_KERNEL );
474- if (!hwmon -> channel_infos [ i ]. config )
468+ if (!channel_info -> config )
475469 return - ENOMEM ;
476470
477- macsmc_hwmon_populate_configs ((u32 * )hwmon -> channel_infos [ i ]. config ,
471+ macsmc_hwmon_populate_configs ((u32 * )channel_info -> config ,
478472 hwmon -> temp .n_sensors ,
479473 (HWMON_T_INPUT | HWMON_T_LABEL ));
480-
481- info_list [i ] = & hwmon -> channel_infos [i ];
482-
474+ hwmon -> channel_infos [i ++ ] = channel_info ;
483475 }
484476
485477 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 ,
478+ channel_info = & hwmon -> volt . channel_info ;
479+ channel_info -> type = hwmon_in ;
480+ channel_info -> config = devm_kzalloc (hwmon -> dev ,
489481 sizeof (u32 ) * hwmon -> volt .n_sensors + 1 ,
490482 GFP_KERNEL );
491- if (!hwmon -> channel_infos [ i ]. config )
483+ if (!channel_info -> config )
492484 return - ENOMEM ;
493485
494- macsmc_hwmon_populate_configs ((u32 * )hwmon -> channel_infos [ i ]. config ,
486+ macsmc_hwmon_populate_configs ((u32 * )channel_info -> config ,
495487 hwmon -> volt .n_sensors ,
496488 (HWMON_I_INPUT | HWMON_I_LABEL ));
497-
498- info_list [i ] = & hwmon -> channel_infos [i ];
489+ hwmon -> channel_infos [i ++ ] = channel_info ;
499490 }
500491
501492 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 ,
493+ channel_info = & hwmon -> curr . channel_info ;
494+ channel_info -> type = hwmon_curr ;
495+ channel_info -> config = devm_kzalloc (hwmon -> dev ,
505496 sizeof (u32 ) * hwmon -> curr .n_sensors + 1 ,
506497 GFP_KERNEL );
507- if (!hwmon -> channel_infos [ i ]. config )
498+ if (!channel_info -> config )
508499 return - ENOMEM ;
509500
510- macsmc_hwmon_populate_configs ((u32 * )hwmon -> channel_infos [ i ]. config ,
501+ macsmc_hwmon_populate_configs ((u32 * )channel_info -> config ,
511502 hwmon -> curr .n_sensors ,
512503 (HWMON_C_INPUT | HWMON_C_LABEL ));
513-
514- info_list [i ] = & hwmon -> channel_infos [i ];
504+ hwmon -> channel_infos [i ++ ] = channel_info ;
515505 }
516506
517507 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 ,
508+ channel_info = & hwmon -> power . channel_info ;
509+ channel_info -> type = hwmon_power ;
510+ channel_info -> config = devm_kzalloc (hwmon -> dev ,
521511 sizeof (u32 ) * hwmon -> power .n_sensors + 1 ,
522512 GFP_KERNEL );
523- if (!hwmon -> channel_infos [ i ]. config )
513+ if (!channel_info -> config )
524514 return - ENOMEM ;
525515
526- macsmc_hwmon_populate_configs ((u32 * )hwmon -> channel_infos [ i ]. config ,
516+ macsmc_hwmon_populate_configs ((u32 * )channel_info -> config ,
527517 hwmon -> power .n_sensors ,
528518 (HWMON_P_INPUT | HWMON_P_LABEL ));
529-
530- info_list [i ] = & hwmon -> channel_infos [i ];
519+ hwmon -> channel_infos [i ++ ] = channel_info ;
531520 }
532521
533522 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 ,
523+ channel_info = & hwmon -> fan . channel_info ;
524+ channel_info -> type = hwmon_fan ;
525+ channel_info -> config = devm_kzalloc (hwmon -> dev ,
537526 sizeof (u32 ) * hwmon -> fan .n_fans + 1 ,
538527 GFP_KERNEL );
539- if (!hwmon -> channel_infos [ i ]. config )
528+ if (!channel_info -> config )
540529 return - ENOMEM ;
541530
542- macsmc_hwmon_populate_fan_configs ((u32 * )hwmon -> channel_infos [ i ]. config ,
531+ macsmc_hwmon_populate_fan_configs ((u32 * )channel_info -> config ,
543532 hwmon -> fan .n_fans , & hwmon -> fan );
544-
545- info_list [i ] = & hwmon -> channel_infos [i ];
533+ hwmon -> channel_infos [i ++ ] = channel_info ;
546534 }
547535
548536 return 0 ;
@@ -553,7 +541,6 @@ static int macsmc_hwmon_probe(struct platform_device *pdev)
553541 struct apple_smc * smc = dev_get_drvdata (pdev -> dev .parent );
554542 struct macsmc_hwmon * hwmon ;
555543 struct device_node * hwmon_node ;
556- struct hwmon_channel_info * * macsmc_chip_info = NULL ;
557544 int ret = 0 ;
558545
559546 hwmon = devm_kzalloc (& pdev -> dev , sizeof (struct macsmc_hwmon ), GFP_KERNEL );
@@ -582,21 +569,16 @@ static int macsmc_hwmon_probe(struct platform_device *pdev)
582569 return - ENODEV ;
583570 }
584571
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 );
572+ ret = macsmc_hwmon_create_infos (hwmon );
592573 if (ret )
593574 return ret ;
594575
595- macsmc_hwmon_info .info = (const struct hwmon_channel_info * * )macsmc_chip_info ;
576+ hwmon -> chip_info .ops = & macsmc_hwmon_ops ;
577+ hwmon -> chip_info .info = (const struct hwmon_channel_info * const * )& hwmon -> channel_infos ;
596578
597579 hwmon -> hwmon_dev = devm_hwmon_device_register_with_info (& pdev -> dev ,
598580 "macsmc_hwmon" , hwmon ,
599- & macsmc_hwmon_info , NULL );
581+ & hwmon -> chip_info , NULL );
600582 if (IS_ERR (hwmon -> hwmon_dev ))
601583 return dev_err_probe (hwmon -> dev , PTR_ERR (hwmon -> hwmon_dev ),
602584 "Probing SMC hwmon device failed!\n" );
0 commit comments