@@ -3500,6 +3500,7 @@ static void pmbus_remove_symlink(void *symlink)
3500
3500
3501
3501
struct pmbus_debugfs_data {
3502
3502
u8 reg ;
3503
+ u32 flag ;
3503
3504
const char * name ;
3504
3505
};
3505
3506
@@ -3512,14 +3513,27 @@ static const struct pmbus_debugfs_data pmbus_debugfs_block_data[] = {
3512
3513
{ .reg = PMBUS_MFR_SERIAL , .name = "mfr_serial" },
3513
3514
};
3514
3515
3516
+ static const struct pmbus_debugfs_data pmbus_debugfs_status_data [] = {
3517
+ { .reg = PMBUS_STATUS_VOUT , .flag = PMBUS_HAVE_STATUS_VOUT , .name = "status%d_vout" },
3518
+ { .reg = PMBUS_STATUS_IOUT , .flag = PMBUS_HAVE_STATUS_IOUT , .name = "status%d_iout" },
3519
+ { .reg = PMBUS_STATUS_INPUT , .flag = PMBUS_HAVE_STATUS_INPUT , .name = "status%d_input" },
3520
+ { .reg = PMBUS_STATUS_TEMPERATURE , .flag = PMBUS_HAVE_STATUS_TEMP ,
3521
+ .name = "status%d_temp" },
3522
+ { .reg = PMBUS_STATUS_FAN_12 , .flag = PMBUS_HAVE_STATUS_FAN12 , .name = "status%d_fan12" },
3523
+ { .reg = PMBUS_STATUS_FAN_34 , .flag = PMBUS_HAVE_STATUS_FAN34 , .name = "status%d_fan34" },
3524
+ { .reg = PMBUS_STATUS_CML , .name = "status%d_cml" },
3525
+ { .reg = PMBUS_STATUS_OTHER , .name = "status%d_other" },
3526
+ { .reg = PMBUS_STATUS_MFR_SPECIFIC , .name = "status%d_mfr" },
3527
+ };
3528
+
3515
3529
static void pmbus_init_debugfs (struct i2c_client * client ,
3516
3530
struct pmbus_data * data )
3517
3531
{
3518
3532
struct dentry * symlink_d , * debugfs = client -> debugfs ;
3519
3533
struct pmbus_debugfs_entry * entries ;
3520
3534
const char * pathname , * symlink ;
3521
3535
char name [PMBUS_NAME_SIZE ];
3522
- int i , idx = 0 ;
3536
+ int page , i , idx = 0 ;
3523
3537
3524
3538
/*
3525
3539
* client->debugfs may be NULL or an ERR_PTR(). dentry_path_raw()
@@ -3555,11 +3569,12 @@ static void pmbus_init_debugfs(struct i2c_client *client,
3555
3569
* Allocate the max possible entries we need.
3556
3570
* device specific:
3557
3571
* ARRAY_SIZE(pmbus_debugfs_block_data) + 1
3558
- * 10 entries page-specific
3572
+ * page specific:
3573
+ * ARRAY_SIZE(pmbus_debugfs_status_data) + 1
3559
3574
*/
3560
3575
entries = devm_kcalloc (data -> dev ,
3561
3576
ARRAY_SIZE (pmbus_debugfs_block_data ) + 1 +
3562
- data -> info -> pages * 10 ,
3577
+ data -> info -> pages * ( ARRAY_SIZE ( pmbus_debugfs_status_data ) + 1 ) ,
3563
3578
sizeof (* entries ), GFP_KERNEL );
3564
3579
if (!entries )
3565
3580
return ;
@@ -3595,107 +3610,32 @@ static void pmbus_init_debugfs(struct i2c_client *client,
3595
3610
}
3596
3611
3597
3612
/* Add page specific entries */
3598
- for (i = 0 ; i < data -> info -> pages ; ++ i ) {
3613
+ for (page = 0 ; page < data -> info -> pages ; ++ page ) {
3599
3614
/* Check accessibility of status register if it's not page 0 */
3600
- if (!i || pmbus_check_status_register (client , i )) {
3615
+ if (!page || pmbus_check_status_register (client , page )) {
3601
3616
/* No need to set reg as we have special read op. */
3602
3617
entries [idx ].client = client ;
3603
- entries [idx ].page = i ;
3604
- scnprintf (name , PMBUS_NAME_SIZE , "status%d" , i );
3618
+ entries [idx ].page = page ;
3619
+ scnprintf (name , PMBUS_NAME_SIZE , "status%d" , page );
3605
3620
debugfs_create_file (name , 0444 , debugfs ,
3606
3621
& entries [idx ++ ],
3607
3622
& pmbus_debugfs_ops_status );
3608
3623
}
3609
3624
3610
- if (data -> info -> func [i ] & PMBUS_HAVE_STATUS_VOUT ) {
3611
- entries [idx ].client = client ;
3612
- entries [idx ].page = i ;
3613
- entries [idx ].reg = PMBUS_STATUS_VOUT ;
3614
- scnprintf (name , PMBUS_NAME_SIZE , "status%d_vout" , i );
3615
- debugfs_create_file (name , 0444 , debugfs ,
3616
- & entries [idx ++ ],
3617
- & pmbus_debugfs_ops );
3618
- }
3619
-
3620
- if (data -> info -> func [i ] & PMBUS_HAVE_STATUS_IOUT ) {
3621
- entries [idx ].client = client ;
3622
- entries [idx ].page = i ;
3623
- entries [idx ].reg = PMBUS_STATUS_IOUT ;
3624
- scnprintf (name , PMBUS_NAME_SIZE , "status%d_iout" , i );
3625
- debugfs_create_file (name , 0444 , debugfs ,
3626
- & entries [idx ++ ],
3627
- & pmbus_debugfs_ops );
3628
- }
3629
-
3630
- if (data -> info -> func [i ] & PMBUS_HAVE_STATUS_INPUT ) {
3631
- entries [idx ].client = client ;
3632
- entries [idx ].page = i ;
3633
- entries [idx ].reg = PMBUS_STATUS_INPUT ;
3634
- scnprintf (name , PMBUS_NAME_SIZE , "status%d_input" , i );
3635
- debugfs_create_file (name , 0444 , debugfs ,
3636
- & entries [idx ++ ],
3637
- & pmbus_debugfs_ops );
3638
- }
3639
-
3640
- if (data -> info -> func [i ] & PMBUS_HAVE_STATUS_TEMP ) {
3641
- entries [idx ].client = client ;
3642
- entries [idx ].page = i ;
3643
- entries [idx ].reg = PMBUS_STATUS_TEMPERATURE ;
3644
- scnprintf (name , PMBUS_NAME_SIZE , "status%d_temp" , i );
3645
- debugfs_create_file (name , 0444 , debugfs ,
3646
- & entries [idx ++ ],
3647
- & pmbus_debugfs_ops );
3648
- }
3649
-
3650
- if (pmbus_check_byte_register (client , i , PMBUS_STATUS_CML )) {
3651
- entries [idx ].client = client ;
3652
- entries [idx ].page = i ;
3653
- entries [idx ].reg = PMBUS_STATUS_CML ;
3654
- scnprintf (name , PMBUS_NAME_SIZE , "status%d_cml" , i );
3655
- debugfs_create_file (name , 0444 , debugfs ,
3656
- & entries [idx ++ ],
3657
- & pmbus_debugfs_ops );
3658
- }
3659
-
3660
- if (pmbus_check_byte_register (client , i , PMBUS_STATUS_OTHER )) {
3661
- entries [idx ].client = client ;
3662
- entries [idx ].page = i ;
3663
- entries [idx ].reg = PMBUS_STATUS_OTHER ;
3664
- scnprintf (name , PMBUS_NAME_SIZE , "status%d_other" , i );
3665
- debugfs_create_file (name , 0444 , debugfs ,
3666
- & entries [idx ++ ],
3667
- & pmbus_debugfs_ops );
3668
- }
3669
-
3670
- if (pmbus_check_byte_register (client , i ,
3671
- PMBUS_STATUS_MFR_SPECIFIC )) {
3672
- entries [idx ].client = client ;
3673
- entries [idx ].page = i ;
3674
- entries [idx ].reg = PMBUS_STATUS_MFR_SPECIFIC ;
3675
- scnprintf (name , PMBUS_NAME_SIZE , "status%d_mfr" , i );
3676
- debugfs_create_file (name , 0444 , debugfs ,
3677
- & entries [idx ++ ],
3678
- & pmbus_debugfs_ops );
3679
- }
3680
-
3681
- if (data -> info -> func [i ] & PMBUS_HAVE_STATUS_FAN12 ) {
3682
- entries [idx ].client = client ;
3683
- entries [idx ].page = i ;
3684
- entries [idx ].reg = PMBUS_STATUS_FAN_12 ;
3685
- scnprintf (name , PMBUS_NAME_SIZE , "status%d_fan12" , i );
3686
- debugfs_create_file (name , 0444 , debugfs ,
3687
- & entries [idx ++ ],
3688
- & pmbus_debugfs_ops );
3689
- }
3690
-
3691
- if (data -> info -> func [i ] & PMBUS_HAVE_STATUS_FAN34 ) {
3692
- entries [idx ].client = client ;
3693
- entries [idx ].page = i ;
3694
- entries [idx ].reg = PMBUS_STATUS_FAN_34 ;
3695
- scnprintf (name , PMBUS_NAME_SIZE , "status%d_fan34" , i );
3696
- debugfs_create_file (name , 0444 , debugfs ,
3697
- & entries [idx ++ ],
3698
- & pmbus_debugfs_ops );
3625
+ for (i = 0 ; i < ARRAY_SIZE (pmbus_debugfs_status_data ); i ++ ) {
3626
+ const struct pmbus_debugfs_data * d =
3627
+ & pmbus_debugfs_status_data [i ];
3628
+
3629
+ if ((data -> info -> func [page ] & d -> flag ) ||
3630
+ (!d -> flag && pmbus_check_byte_register (client , page , d -> reg ))) {
3631
+ entries [idx ].client = client ;
3632
+ entries [idx ].page = page ;
3633
+ entries [idx ].reg = d -> reg ;
3634
+ scnprintf (name , PMBUS_NAME_SIZE , d -> name , page );
3635
+ debugfs_create_file (name , 0444 , debugfs ,
3636
+ & entries [idx ++ ],
3637
+ & pmbus_debugfs_ops );
3638
+ }
3699
3639
}
3700
3640
}
3701
3641
}
0 commit comments