diff mbox series

[v1,1/1] hwmon: (nct6775) Fix use of undefined variable

Message ID 20230619133257.57569-1-andriy.shevchenko@linux.intel.com (mailing list archive)
State Rejected
Headers show
Series [v1,1/1] hwmon: (nct6775) Fix use of undefined variable | expand

Commit Message

Andy Shevchenko June 19, 2023, 1:32 p.m. UTC
It's unknown how, but in one place in the code the undefined variable
is still in use. Replace it with the respective bitmap API call.

Fixes: d7f4737c37b5 ("hwmon: (nct6775) Switch to use bitmap type and APIs")
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/hwmon/nct6775-core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Andy Shevchenko June 19, 2023, 1:59 p.m. UTC | #1
On Mon, Jun 19, 2023 at 04:32:57PM +0300, Andy Shevchenko wrote:
> It's unknown how, but in one place in the code the undefined variable
> is still in use. Replace it with the respective bitmap API call.

zOMG, it's against internal patch. Sorry for the noise.
kernel test robot June 19, 2023, 3:06 p.m. UTC | #2
Hi Andy,

kernel test robot noticed the following build warnings:

[auto build test WARNING on groeck-staging/hwmon-next]
[also build test WARNING on next-20230619]
[cannot apply to linus/master v6.4-rc7]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Andy-Shevchenko/hwmon-nct6775-Fix-use-of-undefined-variable/20230619-213352
base:   https://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git hwmon-next
patch link:    https://lore.kernel.org/r/20230619133257.57569-1-andriy.shevchenko%40linux.intel.com
patch subject: [PATCH v1 1/1] hwmon: (nct6775) Fix use of undefined variable
config: microblaze-randconfig-r024-20230619 (https://download.01.org/0day-ci/archive/20230619/202306192237.sKU74boL-lkp@intel.com/config)
compiler: microblaze-linux-gcc (GCC) 12.3.0
reproduce: (https://download.01.org/0day-ci/archive/20230619/202306192237.sKU74boL-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202306192237.sKU74boL-lkp@intel.com/

All warnings (new ones prefixed by >>):

   drivers/hwmon/nct6775-core.c: In function 'nct6775_probe':
>> drivers/hwmon/nct6775-core.c:3854:32: warning: passing argument 1 of 'bitmap_set' makes pointer from integer without a cast [-Wint-conversion]
    3854 |                 bitmap_set(data->have_in, 0, 15);
         |                            ~~~~^~~~~~~~~
         |                                |
         |                                u16 {aka short unsigned int}
   In file included from include/linux/cpumask.h:12,
                    from include/linux/mm_types_task.h:14,
                    from include/linux/mm_types.h:5,
                    from include/linux/buildid.h:5,
                    from include/linux/module.h:14,
                    from drivers/hwmon/nct6775-core.c:44:
   include/linux/bitmap.h:453:55: note: expected 'long unsigned int *' but argument is of type 'u16' {aka 'short unsigned int'}
     453 | static __always_inline void bitmap_set(unsigned long *map, unsigned int start,
         |                                        ~~~~~~~~~~~~~~~^~~


vim +/bitmap_set +3854 drivers/hwmon/nct6775-core.c

  3444	
  3445	int nct6775_probe(struct device *dev, struct nct6775_data *data,
  3446			  const struct regmap_config *regmapcfg)
  3447	{
  3448		int i, s, err = 0;
  3449		int mask, available;
  3450		u16 src;
  3451		const u16 *reg_temp, *reg_temp_over, *reg_temp_hyst, *reg_temp_config;
  3452		const u16 *reg_temp_mon, *reg_temp_alternate, *reg_temp_crit;
  3453		const u16 *reg_temp_crit_l = NULL, *reg_temp_crit_h = NULL;
  3454		int num_reg_temp, num_reg_temp_mon, num_reg_tsi_temp;
  3455		struct device *hwmon_dev;
  3456		struct sensor_template_group tsi_temp_tg;
  3457	
  3458		data->regmap = devm_regmap_init(dev, NULL, data, regmapcfg);
  3459		if (IS_ERR(data->regmap))
  3460			return PTR_ERR(data->regmap);
  3461	
  3462		mutex_init(&data->update_lock);
  3463		data->name = nct6775_device_names[data->kind];
  3464		data->bank = 0xff;		/* Force initial bank selection */
  3465	
  3466		switch (data->kind) {
  3467		case nct6106:
  3468			data->in_num = 9;
  3469			data->pwm_num = 3;
  3470			data->auto_pwm_num = 4;
  3471			data->temp_fixed_num = 3;
  3472			data->num_temp_alarms = 6;
  3473			data->num_temp_beeps = 6;
  3474	
  3475			data->fan_from_reg = fan_from_reg13;
  3476			data->fan_from_reg_min = fan_from_reg13;
  3477	
  3478			data->temp_label = nct6776_temp_label;
  3479			data->temp_mask = NCT6776_TEMP_MASK;
  3480			data->virt_temp_mask = NCT6776_VIRT_TEMP_MASK;
  3481	
  3482			data->REG_VBAT = NCT6106_REG_VBAT;
  3483			data->REG_DIODE = NCT6106_REG_DIODE;
  3484			data->DIODE_MASK = NCT6106_DIODE_MASK;
  3485			data->REG_VIN = NCT6106_REG_IN;
  3486			data->REG_IN_MINMAX[0] = NCT6106_REG_IN_MIN;
  3487			data->REG_IN_MINMAX[1] = NCT6106_REG_IN_MAX;
  3488			data->REG_TARGET = NCT6106_REG_TARGET;
  3489			data->REG_FAN = NCT6106_REG_FAN;
  3490			data->REG_FAN_MODE = NCT6106_REG_FAN_MODE;
  3491			data->REG_FAN_MIN = NCT6106_REG_FAN_MIN;
  3492			data->REG_FAN_PULSES = NCT6106_REG_FAN_PULSES;
  3493			data->FAN_PULSE_SHIFT = NCT6106_FAN_PULSE_SHIFT;
  3494			data->REG_FAN_TIME[0] = NCT6106_REG_FAN_STOP_TIME;
  3495			data->REG_FAN_TIME[1] = NCT6106_REG_FAN_STEP_UP_TIME;
  3496			data->REG_FAN_TIME[2] = NCT6106_REG_FAN_STEP_DOWN_TIME;
  3497			data->REG_TOLERANCE_H = NCT6106_REG_TOLERANCE_H;
  3498			data->REG_PWM[0] = NCT6116_REG_PWM;
  3499			data->REG_PWM[1] = NCT6106_REG_FAN_START_OUTPUT;
  3500			data->REG_PWM[2] = NCT6106_REG_FAN_STOP_OUTPUT;
  3501			data->REG_PWM[5] = NCT6106_REG_WEIGHT_DUTY_STEP;
  3502			data->REG_PWM[6] = NCT6106_REG_WEIGHT_DUTY_BASE;
  3503			data->REG_PWM_READ = NCT6106_REG_PWM_READ;
  3504			data->REG_PWM_MODE = NCT6106_REG_PWM_MODE;
  3505			data->PWM_MODE_MASK = NCT6106_PWM_MODE_MASK;
  3506			data->REG_AUTO_TEMP = NCT6106_REG_AUTO_TEMP;
  3507			data->REG_AUTO_PWM = NCT6106_REG_AUTO_PWM;
  3508			data->REG_CRITICAL_TEMP = NCT6106_REG_CRITICAL_TEMP;
  3509			data->REG_CRITICAL_TEMP_TOLERANCE
  3510			  = NCT6106_REG_CRITICAL_TEMP_TOLERANCE;
  3511			data->REG_CRITICAL_PWM_ENABLE = NCT6106_REG_CRITICAL_PWM_ENABLE;
  3512			data->CRITICAL_PWM_ENABLE_MASK
  3513			  = NCT6106_CRITICAL_PWM_ENABLE_MASK;
  3514			data->REG_CRITICAL_PWM = NCT6106_REG_CRITICAL_PWM;
  3515			data->REG_TEMP_OFFSET = NCT6106_REG_TEMP_OFFSET;
  3516			data->REG_TEMP_SOURCE = NCT6106_REG_TEMP_SOURCE;
  3517			data->REG_TEMP_SEL = NCT6116_REG_TEMP_SEL;
  3518			data->REG_WEIGHT_TEMP_SEL = NCT6106_REG_WEIGHT_TEMP_SEL;
  3519			data->REG_WEIGHT_TEMP[0] = NCT6106_REG_WEIGHT_TEMP_STEP;
  3520			data->REG_WEIGHT_TEMP[1] = NCT6106_REG_WEIGHT_TEMP_STEP_TOL;
  3521			data->REG_WEIGHT_TEMP[2] = NCT6106_REG_WEIGHT_TEMP_BASE;
  3522			data->REG_ALARM = NCT6106_REG_ALARM;
  3523			data->ALARM_BITS = NCT6106_ALARM_BITS;
  3524			data->REG_BEEP = NCT6106_REG_BEEP;
  3525			data->BEEP_BITS = NCT6106_BEEP_BITS;
  3526			data->REG_TSI_TEMP = NCT6106_REG_TSI_TEMP;
  3527	
  3528			reg_temp = NCT6106_REG_TEMP;
  3529			reg_temp_mon = NCT6106_REG_TEMP_MON;
  3530			num_reg_temp = ARRAY_SIZE(NCT6106_REG_TEMP);
  3531			num_reg_temp_mon = ARRAY_SIZE(NCT6106_REG_TEMP_MON);
  3532			num_reg_tsi_temp = ARRAY_SIZE(NCT6106_REG_TSI_TEMP);
  3533			reg_temp_over = NCT6106_REG_TEMP_OVER;
  3534			reg_temp_hyst = NCT6106_REG_TEMP_HYST;
  3535			reg_temp_config = NCT6106_REG_TEMP_CONFIG;
  3536			reg_temp_alternate = NCT6106_REG_TEMP_ALTERNATE;
  3537			reg_temp_crit = NCT6106_REG_TEMP_CRIT;
  3538			reg_temp_crit_l = NCT6106_REG_TEMP_CRIT_L;
  3539			reg_temp_crit_h = NCT6106_REG_TEMP_CRIT_H;
  3540	
  3541			break;
  3542		case nct6116:
  3543			data->in_num = 9;
  3544			data->pwm_num = 3;
  3545			data->auto_pwm_num = 4;
  3546			data->temp_fixed_num = 3;
  3547			data->num_temp_alarms = 3;
  3548			data->num_temp_beeps = 3;
  3549	
  3550			data->fan_from_reg = fan_from_reg13;
  3551			data->fan_from_reg_min = fan_from_reg13;
  3552	
  3553			data->temp_label = nct6776_temp_label;
  3554			data->temp_mask = NCT6776_TEMP_MASK;
  3555			data->virt_temp_mask = NCT6776_VIRT_TEMP_MASK;
  3556	
  3557			data->REG_VBAT = NCT6106_REG_VBAT;
  3558			data->REG_DIODE = NCT6106_REG_DIODE;
  3559			data->DIODE_MASK = NCT6106_DIODE_MASK;
  3560			data->REG_VIN = NCT6106_REG_IN;
  3561			data->REG_IN_MINMAX[0] = NCT6106_REG_IN_MIN;
  3562			data->REG_IN_MINMAX[1] = NCT6106_REG_IN_MAX;
  3563			data->REG_TARGET = NCT6116_REG_TARGET;
  3564			data->REG_FAN = NCT6116_REG_FAN;
  3565			data->REG_FAN_MODE = NCT6116_REG_FAN_MODE;
  3566			data->REG_FAN_MIN = NCT6116_REG_FAN_MIN;
  3567			data->REG_FAN_PULSES = NCT6116_REG_FAN_PULSES;
  3568			data->FAN_PULSE_SHIFT = NCT6116_FAN_PULSE_SHIFT;
  3569			data->REG_FAN_TIME[0] = NCT6116_REG_FAN_STOP_TIME;
  3570			data->REG_FAN_TIME[1] = NCT6116_REG_FAN_STEP_UP_TIME;
  3571			data->REG_FAN_TIME[2] = NCT6116_REG_FAN_STEP_DOWN_TIME;
  3572			data->REG_TOLERANCE_H = NCT6116_REG_TOLERANCE_H;
  3573			data->REG_PWM[0] = NCT6116_REG_PWM;
  3574			data->REG_PWM[1] = NCT6116_REG_FAN_START_OUTPUT;
  3575			data->REG_PWM[2] = NCT6116_REG_FAN_STOP_OUTPUT;
  3576			data->REG_PWM[5] = NCT6106_REG_WEIGHT_DUTY_STEP;
  3577			data->REG_PWM[6] = NCT6106_REG_WEIGHT_DUTY_BASE;
  3578			data->REG_PWM_READ = NCT6106_REG_PWM_READ;
  3579			data->REG_PWM_MODE = NCT6106_REG_PWM_MODE;
  3580			data->PWM_MODE_MASK = NCT6106_PWM_MODE_MASK;
  3581			data->REG_AUTO_TEMP = NCT6116_REG_AUTO_TEMP;
  3582			data->REG_AUTO_PWM = NCT6116_REG_AUTO_PWM;
  3583			data->REG_CRITICAL_TEMP = NCT6116_REG_CRITICAL_TEMP;
  3584			data->REG_CRITICAL_TEMP_TOLERANCE
  3585			  = NCT6116_REG_CRITICAL_TEMP_TOLERANCE;
  3586			data->REG_CRITICAL_PWM_ENABLE = NCT6116_REG_CRITICAL_PWM_ENABLE;
  3587			data->CRITICAL_PWM_ENABLE_MASK
  3588			  = NCT6106_CRITICAL_PWM_ENABLE_MASK;
  3589			data->REG_CRITICAL_PWM = NCT6116_REG_CRITICAL_PWM;
  3590			data->REG_TEMP_OFFSET = NCT6106_REG_TEMP_OFFSET;
  3591			data->REG_TEMP_SOURCE = NCT6116_REG_TEMP_SOURCE;
  3592			data->REG_TEMP_SEL = NCT6116_REG_TEMP_SEL;
  3593			data->REG_WEIGHT_TEMP_SEL = NCT6106_REG_WEIGHT_TEMP_SEL;
  3594			data->REG_WEIGHT_TEMP[0] = NCT6106_REG_WEIGHT_TEMP_STEP;
  3595			data->REG_WEIGHT_TEMP[1] = NCT6106_REG_WEIGHT_TEMP_STEP_TOL;
  3596			data->REG_WEIGHT_TEMP[2] = NCT6106_REG_WEIGHT_TEMP_BASE;
  3597			data->REG_ALARM = NCT6106_REG_ALARM;
  3598			data->ALARM_BITS = NCT6116_ALARM_BITS;
  3599			data->REG_BEEP = NCT6106_REG_BEEP;
  3600			data->BEEP_BITS = NCT6116_BEEP_BITS;
  3601			data->REG_TSI_TEMP = NCT6116_REG_TSI_TEMP;
  3602	
  3603			reg_temp = NCT6106_REG_TEMP;
  3604			reg_temp_mon = NCT6106_REG_TEMP_MON;
  3605			num_reg_temp = ARRAY_SIZE(NCT6106_REG_TEMP);
  3606			num_reg_temp_mon = ARRAY_SIZE(NCT6106_REG_TEMP_MON);
  3607			num_reg_tsi_temp = ARRAY_SIZE(NCT6116_REG_TSI_TEMP);
  3608			reg_temp_over = NCT6106_REG_TEMP_OVER;
  3609			reg_temp_hyst = NCT6106_REG_TEMP_HYST;
  3610			reg_temp_config = NCT6106_REG_TEMP_CONFIG;
  3611			reg_temp_alternate = NCT6106_REG_TEMP_ALTERNATE;
  3612			reg_temp_crit = NCT6106_REG_TEMP_CRIT;
  3613			reg_temp_crit_l = NCT6106_REG_TEMP_CRIT_L;
  3614			reg_temp_crit_h = NCT6106_REG_TEMP_CRIT_H;
  3615	
  3616			break;
  3617		case nct6775:
  3618			data->in_num = 9;
  3619			data->pwm_num = 3;
  3620			data->auto_pwm_num = 6;
  3621			data->has_fan_div = true;
  3622			data->temp_fixed_num = 3;
  3623			data->num_temp_alarms = 3;
  3624			data->num_temp_beeps = 3;
  3625	
  3626			data->ALARM_BITS = NCT6775_ALARM_BITS;
  3627			data->BEEP_BITS = NCT6775_BEEP_BITS;
  3628	
  3629			data->fan_from_reg = fan_from_reg16;
  3630			data->fan_from_reg_min = fan_from_reg8;
  3631			data->target_temp_mask = 0x7f;
  3632			data->tolerance_mask = 0x0f;
  3633			data->speed_tolerance_limit = 15;
  3634	
  3635			data->temp_label = nct6775_temp_label;
  3636			data->temp_mask = NCT6775_TEMP_MASK;
  3637			data->virt_temp_mask = NCT6775_VIRT_TEMP_MASK;
  3638	
  3639			data->REG_CONFIG = NCT6775_REG_CONFIG;
  3640			data->REG_VBAT = NCT6775_REG_VBAT;
  3641			data->REG_DIODE = NCT6775_REG_DIODE;
  3642			data->DIODE_MASK = NCT6775_DIODE_MASK;
  3643			data->REG_VIN = NCT6775_REG_IN;
  3644			data->REG_IN_MINMAX[0] = NCT6775_REG_IN_MIN;
  3645			data->REG_IN_MINMAX[1] = NCT6775_REG_IN_MAX;
  3646			data->REG_TARGET = NCT6775_REG_TARGET;
  3647			data->REG_FAN = NCT6775_REG_FAN;
  3648			data->REG_FAN_MODE = NCT6775_REG_FAN_MODE;
  3649			data->REG_FAN_MIN = NCT6775_REG_FAN_MIN;
  3650			data->REG_FAN_PULSES = NCT6775_REG_FAN_PULSES;
  3651			data->FAN_PULSE_SHIFT = NCT6775_FAN_PULSE_SHIFT;
  3652			data->REG_FAN_TIME[0] = NCT6775_REG_FAN_STOP_TIME;
  3653			data->REG_FAN_TIME[1] = NCT6775_REG_FAN_STEP_UP_TIME;
  3654			data->REG_FAN_TIME[2] = NCT6775_REG_FAN_STEP_DOWN_TIME;
  3655			data->REG_PWM[0] = NCT6775_REG_PWM;
  3656			data->REG_PWM[1] = NCT6775_REG_FAN_START_OUTPUT;
  3657			data->REG_PWM[2] = NCT6775_REG_FAN_STOP_OUTPUT;
  3658			data->REG_PWM[3] = NCT6775_REG_FAN_MAX_OUTPUT;
  3659			data->REG_PWM[4] = NCT6775_REG_FAN_STEP_OUTPUT;
  3660			data->REG_PWM[5] = NCT6775_REG_WEIGHT_DUTY_STEP;
  3661			data->REG_PWM_READ = NCT6775_REG_PWM_READ;
  3662			data->REG_PWM_MODE = NCT6775_REG_PWM_MODE;
  3663			data->PWM_MODE_MASK = NCT6775_PWM_MODE_MASK;
  3664			data->REG_AUTO_TEMP = NCT6775_REG_AUTO_TEMP;
  3665			data->REG_AUTO_PWM = NCT6775_REG_AUTO_PWM;
  3666			data->REG_CRITICAL_TEMP = NCT6775_REG_CRITICAL_TEMP;
  3667			data->REG_CRITICAL_TEMP_TOLERANCE
  3668			  = NCT6775_REG_CRITICAL_TEMP_TOLERANCE;
  3669			data->REG_TEMP_OFFSET = NCT6775_REG_TEMP_OFFSET;
  3670			data->REG_TEMP_SOURCE = NCT6775_REG_TEMP_SOURCE;
  3671			data->REG_TEMP_SEL = NCT6775_REG_TEMP_SEL;
  3672			data->REG_WEIGHT_TEMP_SEL = NCT6775_REG_WEIGHT_TEMP_SEL;
  3673			data->REG_WEIGHT_TEMP[0] = NCT6775_REG_WEIGHT_TEMP_STEP;
  3674			data->REG_WEIGHT_TEMP[1] = NCT6775_REG_WEIGHT_TEMP_STEP_TOL;
  3675			data->REG_WEIGHT_TEMP[2] = NCT6775_REG_WEIGHT_TEMP_BASE;
  3676			data->REG_ALARM = NCT6775_REG_ALARM;
  3677			data->REG_BEEP = NCT6775_REG_BEEP;
  3678			data->REG_TSI_TEMP = NCT6775_REG_TSI_TEMP;
  3679	
  3680			reg_temp = NCT6775_REG_TEMP;
  3681			reg_temp_mon = NCT6775_REG_TEMP_MON;
  3682			num_reg_temp = ARRAY_SIZE(NCT6775_REG_TEMP);
  3683			num_reg_temp_mon = ARRAY_SIZE(NCT6775_REG_TEMP_MON);
  3684			num_reg_tsi_temp = ARRAY_SIZE(NCT6775_REG_TSI_TEMP);
  3685			reg_temp_over = NCT6775_REG_TEMP_OVER;
  3686			reg_temp_hyst = NCT6775_REG_TEMP_HYST;
  3687			reg_temp_config = NCT6775_REG_TEMP_CONFIG;
  3688			reg_temp_alternate = NCT6775_REG_TEMP_ALTERNATE;
  3689			reg_temp_crit = NCT6775_REG_TEMP_CRIT;
  3690	
  3691			break;
  3692		case nct6776:
  3693			data->in_num = 9;
  3694			data->pwm_num = 3;
  3695			data->auto_pwm_num = 4;
  3696			data->has_fan_div = false;
  3697			data->temp_fixed_num = 3;
  3698			data->num_temp_alarms = 3;
  3699			data->num_temp_beeps = 6;
  3700	
  3701			data->ALARM_BITS = NCT6776_ALARM_BITS;
  3702			data->BEEP_BITS = NCT6776_BEEP_BITS;
  3703	
  3704			data->fan_from_reg = fan_from_reg13;
  3705			data->fan_from_reg_min = fan_from_reg13;
  3706			data->target_temp_mask = 0xff;
  3707			data->tolerance_mask = 0x07;
  3708			data->speed_tolerance_limit = 63;
  3709	
  3710			data->temp_label = nct6776_temp_label;
  3711			data->temp_mask = NCT6776_TEMP_MASK;
  3712			data->virt_temp_mask = NCT6776_VIRT_TEMP_MASK;
  3713	
  3714			data->REG_CONFIG = NCT6775_REG_CONFIG;
  3715			data->REG_VBAT = NCT6775_REG_VBAT;
  3716			data->REG_DIODE = NCT6775_REG_DIODE;
  3717			data->DIODE_MASK = NCT6775_DIODE_MASK;
  3718			data->REG_VIN = NCT6775_REG_IN;
  3719			data->REG_IN_MINMAX[0] = NCT6775_REG_IN_MIN;
  3720			data->REG_IN_MINMAX[1] = NCT6775_REG_IN_MAX;
  3721			data->REG_TARGET = NCT6775_REG_TARGET;
  3722			data->REG_FAN = NCT6775_REG_FAN;
  3723			data->REG_FAN_MODE = NCT6775_REG_FAN_MODE;
  3724			data->REG_FAN_MIN = NCT6776_REG_FAN_MIN;
  3725			data->REG_FAN_PULSES = NCT6776_REG_FAN_PULSES;
  3726			data->FAN_PULSE_SHIFT = NCT6775_FAN_PULSE_SHIFT;
  3727			data->REG_FAN_TIME[0] = NCT6775_REG_FAN_STOP_TIME;
  3728			data->REG_FAN_TIME[1] = NCT6776_REG_FAN_STEP_UP_TIME;
  3729			data->REG_FAN_TIME[2] = NCT6776_REG_FAN_STEP_DOWN_TIME;
  3730			data->REG_TOLERANCE_H = NCT6776_REG_TOLERANCE_H;
  3731			data->REG_PWM[0] = NCT6775_REG_PWM;
  3732			data->REG_PWM[1] = NCT6775_REG_FAN_START_OUTPUT;
  3733			data->REG_PWM[2] = NCT6775_REG_FAN_STOP_OUTPUT;
  3734			data->REG_PWM[5] = NCT6775_REG_WEIGHT_DUTY_STEP;
  3735			data->REG_PWM[6] = NCT6776_REG_WEIGHT_DUTY_BASE;
  3736			data->REG_PWM_READ = NCT6775_REG_PWM_READ;
  3737			data->REG_PWM_MODE = NCT6776_REG_PWM_MODE;
  3738			data->PWM_MODE_MASK = NCT6776_PWM_MODE_MASK;
  3739			data->REG_AUTO_TEMP = NCT6775_REG_AUTO_TEMP;
  3740			data->REG_AUTO_PWM = NCT6775_REG_AUTO_PWM;
  3741			data->REG_CRITICAL_TEMP = NCT6775_REG_CRITICAL_TEMP;
  3742			data->REG_CRITICAL_TEMP_TOLERANCE
  3743			  = NCT6775_REG_CRITICAL_TEMP_TOLERANCE;
  3744			data->REG_TEMP_OFFSET = NCT6775_REG_TEMP_OFFSET;
  3745			data->REG_TEMP_SOURCE = NCT6775_REG_TEMP_SOURCE;
  3746			data->REG_TEMP_SEL = NCT6775_REG_TEMP_SEL;
  3747			data->REG_WEIGHT_TEMP_SEL = NCT6775_REG_WEIGHT_TEMP_SEL;
  3748			data->REG_WEIGHT_TEMP[0] = NCT6775_REG_WEIGHT_TEMP_STEP;
  3749			data->REG_WEIGHT_TEMP[1] = NCT6775_REG_WEIGHT_TEMP_STEP_TOL;
  3750			data->REG_WEIGHT_TEMP[2] = NCT6775_REG_WEIGHT_TEMP_BASE;
  3751			data->REG_ALARM = NCT6775_REG_ALARM;
  3752			data->REG_BEEP = NCT6776_REG_BEEP;
  3753			data->REG_TSI_TEMP = NCT6776_REG_TSI_TEMP;
  3754	
  3755			reg_temp = NCT6775_REG_TEMP;
  3756			reg_temp_mon = NCT6775_REG_TEMP_MON;
  3757			num_reg_temp = ARRAY_SIZE(NCT6775_REG_TEMP);
  3758			num_reg_temp_mon = ARRAY_SIZE(NCT6775_REG_TEMP_MON);
  3759			num_reg_tsi_temp = ARRAY_SIZE(NCT6776_REG_TSI_TEMP);
  3760			reg_temp_over = NCT6775_REG_TEMP_OVER;
  3761			reg_temp_hyst = NCT6775_REG_TEMP_HYST;
  3762			reg_temp_config = NCT6776_REG_TEMP_CONFIG;
  3763			reg_temp_alternate = NCT6776_REG_TEMP_ALTERNATE;
  3764			reg_temp_crit = NCT6776_REG_TEMP_CRIT;
  3765	
  3766			break;
  3767		case nct6779:
  3768			data->in_num = 15;
  3769			data->pwm_num = 5;
  3770			data->auto_pwm_num = 4;
  3771			data->has_fan_div = false;
  3772			data->temp_fixed_num = 6;
  3773			data->num_temp_alarms = 2;
  3774			data->num_temp_beeps = 2;
  3775	
  3776			data->ALARM_BITS = NCT6779_ALARM_BITS;
  3777			data->BEEP_BITS = NCT6779_BEEP_BITS;
  3778	
  3779			data->fan_from_reg = fan_from_reg_rpm;
  3780			data->fan_from_reg_min = fan_from_reg13;
  3781			data->target_temp_mask = 0xff;
  3782			data->tolerance_mask = 0x07;
  3783			data->speed_tolerance_limit = 63;
  3784	
  3785			data->temp_label = nct6779_temp_label;
  3786			data->temp_mask = NCT6779_TEMP_MASK;
  3787			data->virt_temp_mask = NCT6779_VIRT_TEMP_MASK;
  3788	
  3789			data->REG_CONFIG = NCT6775_REG_CONFIG;
  3790			data->REG_VBAT = NCT6775_REG_VBAT;
  3791			data->REG_DIODE = NCT6775_REG_DIODE;
  3792			data->DIODE_MASK = NCT6775_DIODE_MASK;
  3793			data->REG_VIN = NCT6779_REG_IN;
  3794			data->REG_IN_MINMAX[0] = NCT6775_REG_IN_MIN;
  3795			data->REG_IN_MINMAX[1] = NCT6775_REG_IN_MAX;
  3796			data->REG_TARGET = NCT6775_REG_TARGET;
  3797			data->REG_FAN = NCT6779_REG_FAN;
  3798			data->REG_FAN_MODE = NCT6775_REG_FAN_MODE;
  3799			data->REG_FAN_MIN = NCT6776_REG_FAN_MIN;
  3800			data->REG_FAN_PULSES = NCT6779_REG_FAN_PULSES;
  3801			data->FAN_PULSE_SHIFT = NCT6775_FAN_PULSE_SHIFT;
  3802			data->REG_FAN_TIME[0] = NCT6775_REG_FAN_STOP_TIME;
  3803			data->REG_FAN_TIME[1] = NCT6776_REG_FAN_STEP_UP_TIME;
  3804			data->REG_FAN_TIME[2] = NCT6776_REG_FAN_STEP_DOWN_TIME;
  3805			data->REG_TOLERANCE_H = NCT6776_REG_TOLERANCE_H;
  3806			data->REG_PWM[0] = NCT6775_REG_PWM;
  3807			data->REG_PWM[1] = NCT6775_REG_FAN_START_OUTPUT;
  3808			data->REG_PWM[2] = NCT6775_REG_FAN_STOP_OUTPUT;
  3809			data->REG_PWM[5] = NCT6775_REG_WEIGHT_DUTY_STEP;
  3810			data->REG_PWM[6] = NCT6776_REG_WEIGHT_DUTY_BASE;
  3811			data->REG_PWM_READ = NCT6775_REG_PWM_READ;
  3812			data->REG_PWM_MODE = NCT6776_REG_PWM_MODE;
  3813			data->PWM_MODE_MASK = NCT6776_PWM_MODE_MASK;
  3814			data->REG_AUTO_TEMP = NCT6775_REG_AUTO_TEMP;
  3815			data->REG_AUTO_PWM = NCT6775_REG_AUTO_PWM;
  3816			data->REG_CRITICAL_TEMP = NCT6775_REG_CRITICAL_TEMP;
  3817			data->REG_CRITICAL_TEMP_TOLERANCE
  3818			  = NCT6775_REG_CRITICAL_TEMP_TOLERANCE;
  3819			data->REG_CRITICAL_PWM_ENABLE = NCT6779_REG_CRITICAL_PWM_ENABLE;
  3820			data->CRITICAL_PWM_ENABLE_MASK
  3821			  = NCT6779_CRITICAL_PWM_ENABLE_MASK;
  3822			data->REG_CRITICAL_PWM = NCT6779_REG_CRITICAL_PWM;
  3823			data->REG_TEMP_OFFSET = NCT6779_REG_TEMP_OFFSET;
  3824			data->REG_TEMP_SOURCE = NCT6775_REG_TEMP_SOURCE;
  3825			data->REG_TEMP_SEL = NCT6775_REG_TEMP_SEL;
  3826			data->REG_WEIGHT_TEMP_SEL = NCT6775_REG_WEIGHT_TEMP_SEL;
  3827			data->REG_WEIGHT_TEMP[0] = NCT6775_REG_WEIGHT_TEMP_STEP;
  3828			data->REG_WEIGHT_TEMP[1] = NCT6775_REG_WEIGHT_TEMP_STEP_TOL;
  3829			data->REG_WEIGHT_TEMP[2] = NCT6775_REG_WEIGHT_TEMP_BASE;
  3830			data->REG_ALARM = NCT6779_REG_ALARM;
  3831			data->REG_BEEP = NCT6776_REG_BEEP;
  3832			data->REG_TSI_TEMP = NCT6776_REG_TSI_TEMP;
  3833	
  3834			reg_temp = NCT6779_REG_TEMP;
  3835			reg_temp_mon = NCT6779_REG_TEMP_MON;
  3836			num_reg_temp = ARRAY_SIZE(NCT6779_REG_TEMP);
  3837			num_reg_temp_mon = ARRAY_SIZE(NCT6779_REG_TEMP_MON);
  3838			num_reg_tsi_temp = ARRAY_SIZE(NCT6776_REG_TSI_TEMP);
  3839			reg_temp_over = NCT6779_REG_TEMP_OVER;
  3840			reg_temp_hyst = NCT6779_REG_TEMP_HYST;
  3841			reg_temp_config = NCT6779_REG_TEMP_CONFIG;
  3842			reg_temp_alternate = NCT6779_REG_TEMP_ALTERNATE;
  3843			reg_temp_crit = NCT6779_REG_TEMP_CRIT;
  3844	
  3845			break;
  3846		case nct6791:
  3847		case nct6792:
  3848		case nct6793:
  3849		case nct6795:
  3850		case nct6796:
  3851		case nct6797:
  3852		case nct6798:
  3853		case nct6799:
> 3854			bitmap_set(data->have_in, 0, 15);
  3855			data->pwm_num = (data->kind == nct6796 ||
  3856					 data->kind == nct6797 ||
  3857					 data->kind == nct6798 ||
  3858					 data->kind == nct6799) ? 7 : 6;
  3859			data->auto_pwm_num = 4;
  3860			data->has_fan_div = false;
  3861			data->temp_fixed_num = 6;
  3862			data->num_temp_alarms = 2;
  3863			data->num_temp_beeps = 2;
  3864	
  3865			data->ALARM_BITS = NCT6791_ALARM_BITS;
  3866			data->BEEP_BITS = NCT6779_BEEP_BITS;
  3867	
  3868			data->fan_from_reg = fan_from_reg_rpm;
  3869			data->fan_from_reg_min = fan_from_reg13;
  3870			data->target_temp_mask = 0xff;
  3871			data->tolerance_mask = 0x07;
  3872			data->speed_tolerance_limit = 63;
  3873	
  3874			switch (data->kind) {
  3875			default:
  3876			case nct6791:
  3877				data->temp_label = nct6779_temp_label;
  3878				data->temp_mask = NCT6791_TEMP_MASK;
  3879				data->virt_temp_mask = NCT6791_VIRT_TEMP_MASK;
  3880				break;
  3881			case nct6792:
  3882				data->temp_label = nct6792_temp_label;
  3883				data->temp_mask = NCT6792_TEMP_MASK;
  3884				data->virt_temp_mask = NCT6792_VIRT_TEMP_MASK;
  3885				break;
  3886			case nct6793:
  3887				data->temp_label = nct6793_temp_label;
  3888				data->temp_mask = NCT6793_TEMP_MASK;
  3889				data->virt_temp_mask = NCT6793_VIRT_TEMP_MASK;
  3890				break;
  3891			case nct6795:
  3892			case nct6797:
  3893				data->temp_label = nct6795_temp_label;
  3894				data->temp_mask = NCT6795_TEMP_MASK;
  3895				data->virt_temp_mask = NCT6795_VIRT_TEMP_MASK;
  3896				break;
  3897			case nct6796:
  3898				data->temp_label = nct6796_temp_label;
  3899				data->temp_mask = NCT6796_TEMP_MASK;
  3900				data->virt_temp_mask = NCT6796_VIRT_TEMP_MASK;
  3901				break;
  3902			case nct6798:
  3903				data->temp_label = nct6798_temp_label;
  3904				data->temp_mask = NCT6798_TEMP_MASK;
  3905				data->virt_temp_mask = NCT6798_VIRT_TEMP_MASK;
  3906				break;
  3907			case nct6799:
  3908				data->temp_label = nct6799_temp_label;
  3909				data->temp_mask = NCT6799_TEMP_MASK;
  3910				data->virt_temp_mask = NCT6799_VIRT_TEMP_MASK;
  3911				break;
  3912			}
  3913	
  3914			data->REG_CONFIG = NCT6775_REG_CONFIG;
  3915			data->REG_VBAT = NCT6775_REG_VBAT;
  3916			data->REG_DIODE = NCT6775_REG_DIODE;
  3917			data->DIODE_MASK = NCT6775_DIODE_MASK;
  3918			data->REG_VIN = NCT6779_REG_IN;
  3919			data->REG_IN_MINMAX[0] = NCT6775_REG_IN_MIN;
  3920			data->REG_IN_MINMAX[1] = NCT6775_REG_IN_MAX;
  3921			data->REG_TARGET = NCT6775_REG_TARGET;
  3922			data->REG_FAN = NCT6779_REG_FAN;
  3923			data->REG_FAN_MODE = NCT6775_REG_FAN_MODE;
  3924			data->REG_FAN_MIN = NCT6776_REG_FAN_MIN;
  3925			data->REG_FAN_PULSES = NCT6779_REG_FAN_PULSES;
  3926			data->FAN_PULSE_SHIFT = NCT6775_FAN_PULSE_SHIFT;
  3927			data->REG_FAN_TIME[0] = NCT6775_REG_FAN_STOP_TIME;
  3928			data->REG_FAN_TIME[1] = NCT6776_REG_FAN_STEP_UP_TIME;
  3929			data->REG_FAN_TIME[2] = NCT6776_REG_FAN_STEP_DOWN_TIME;
  3930			data->REG_TOLERANCE_H = NCT6776_REG_TOLERANCE_H;
  3931			data->REG_PWM[0] = NCT6775_REG_PWM;
  3932			data->REG_PWM[1] = NCT6775_REG_FAN_START_OUTPUT;
  3933			data->REG_PWM[2] = NCT6775_REG_FAN_STOP_OUTPUT;
  3934			data->REG_PWM[5] = NCT6791_REG_WEIGHT_DUTY_STEP;
  3935			data->REG_PWM[6] = NCT6791_REG_WEIGHT_DUTY_BASE;
  3936			data->REG_PWM_READ = NCT6775_REG_PWM_READ;
  3937			data->REG_PWM_MODE = NCT6776_REG_PWM_MODE;
  3938			data->PWM_MODE_MASK = NCT6776_PWM_MODE_MASK;
  3939			data->REG_AUTO_TEMP = NCT6775_REG_AUTO_TEMP;
  3940			data->REG_AUTO_PWM = NCT6775_REG_AUTO_PWM;
  3941			data->REG_CRITICAL_TEMP = NCT6775_REG_CRITICAL_TEMP;
  3942			data->REG_CRITICAL_TEMP_TOLERANCE
  3943			  = NCT6775_REG_CRITICAL_TEMP_TOLERANCE;
  3944			data->REG_CRITICAL_PWM_ENABLE = NCT6779_REG_CRITICAL_PWM_ENABLE;
  3945			data->CRITICAL_PWM_ENABLE_MASK
  3946			  = NCT6779_CRITICAL_PWM_ENABLE_MASK;
  3947			data->REG_CRITICAL_PWM = NCT6779_REG_CRITICAL_PWM;
  3948			data->REG_TEMP_OFFSET = NCT6779_REG_TEMP_OFFSET;
  3949			data->REG_TEMP_SOURCE = NCT6775_REG_TEMP_SOURCE;
  3950			data->REG_TEMP_SEL = NCT6775_REG_TEMP_SEL;
  3951			data->REG_WEIGHT_TEMP_SEL = NCT6791_REG_WEIGHT_TEMP_SEL;
  3952			data->REG_WEIGHT_TEMP[0] = NCT6791_REG_WEIGHT_TEMP_STEP;
  3953			data->REG_WEIGHT_TEMP[1] = NCT6791_REG_WEIGHT_TEMP_STEP_TOL;
  3954			data->REG_WEIGHT_TEMP[2] = NCT6791_REG_WEIGHT_TEMP_BASE;
  3955			data->REG_ALARM = NCT6791_REG_ALARM;
  3956			if (data->kind == nct6791)
  3957				data->REG_BEEP = NCT6776_REG_BEEP;
  3958			else
  3959				data->REG_BEEP = NCT6792_REG_BEEP;
  3960			switch (data->kind) {
  3961			case nct6791:
  3962			case nct6792:
  3963			case nct6793:
  3964				data->REG_TSI_TEMP = NCT6776_REG_TSI_TEMP;
  3965				num_reg_tsi_temp = ARRAY_SIZE(NCT6776_REG_TSI_TEMP);
  3966				break;
  3967			case nct6795:
  3968			case nct6796:
  3969			case nct6797:
  3970			case nct6798:
  3971			case nct6799:
  3972				data->REG_TSI_TEMP = NCT6796_REG_TSI_TEMP;
  3973				num_reg_tsi_temp = ARRAY_SIZE(NCT6796_REG_TSI_TEMP);
  3974				break;
  3975			default:
  3976				num_reg_tsi_temp = 0;
  3977				break;
  3978			}
  3979	
  3980			reg_temp = NCT6779_REG_TEMP;
  3981			num_reg_temp = ARRAY_SIZE(NCT6779_REG_TEMP);
  3982			if (data->kind == nct6791) {
  3983				reg_temp_mon = NCT6779_REG_TEMP_MON;
  3984				num_reg_temp_mon = ARRAY_SIZE(NCT6779_REG_TEMP_MON);
  3985			} else {
  3986				reg_temp_mon = NCT6792_REG_TEMP_MON;
  3987				num_reg_temp_mon = ARRAY_SIZE(NCT6792_REG_TEMP_MON);
  3988			}
  3989			reg_temp_over = NCT6779_REG_TEMP_OVER;
  3990			reg_temp_hyst = NCT6779_REG_TEMP_HYST;
  3991			reg_temp_config = NCT6779_REG_TEMP_CONFIG;
  3992			reg_temp_alternate = NCT6779_REG_TEMP_ALTERNATE;
  3993			reg_temp_crit = NCT6779_REG_TEMP_CRIT;
  3994	
  3995			break;
  3996		default:
  3997			return -ENODEV;
  3998		}
  3999		data->have_in = BIT(data->in_num) - 1;
  4000		data->have_temp = 0;
  4001	
  4002		/*
  4003		 * On some boards, not all available temperature sources are monitored,
  4004		 * even though some of the monitoring registers are unused.
  4005		 * Get list of unused monitoring registers, then detect if any fan
  4006		 * controls are configured to use unmonitored temperature sources.
  4007		 * If so, assign the unmonitored temperature sources to available
  4008		 * monitoring registers.
  4009		 */
  4010		mask = 0;
  4011		available = 0;
  4012		for (i = 0; i < num_reg_temp; i++) {
  4013			if (reg_temp[i] == 0)
  4014				continue;
  4015	
  4016			err = nct6775_read_value(data, data->REG_TEMP_SOURCE[i], &src);
  4017			if (err)
  4018				return err;
  4019			src &= 0x1f;
  4020			if (!src || (mask & BIT(src)))
  4021				available |= BIT(i);
  4022	
  4023			mask |= BIT(src);
  4024		}
  4025	
  4026		/*
  4027		 * Now find unmonitored temperature registers and enable monitoring
  4028		 * if additional monitoring registers are available.
  4029		 */
  4030		err = add_temp_sensors(data, data->REG_TEMP_SEL, &available, &mask);
  4031		if (err)
  4032			return err;
  4033		err = add_temp_sensors(data, data->REG_WEIGHT_TEMP_SEL, &available, &mask);
  4034		if (err)
  4035			return err;
  4036	
  4037		mask = 0;
  4038		s = NUM_TEMP_FIXED;	/* First dynamic temperature attribute */
  4039		for (i = 0; i < num_reg_temp; i++) {
  4040			if (reg_temp[i] == 0)
  4041				continue;
  4042	
  4043			err = nct6775_read_value(data, data->REG_TEMP_SOURCE[i], &src);
  4044			if (err)
  4045				return err;
  4046			src &= 0x1f;
  4047			if (!src || (mask & BIT(src)))
  4048				continue;
  4049	
  4050			if (!(data->temp_mask & BIT(src))) {
  4051				dev_info(dev,
  4052					 "Invalid temperature source %d at index %d, source register 0x%x, temp register 0x%x\n",
  4053					 src, i, data->REG_TEMP_SOURCE[i], reg_temp[i]);
  4054				continue;
  4055			}
  4056	
  4057			mask |= BIT(src);
  4058	
  4059			/* Use fixed index for SYSTIN(1), CPUTIN(2), AUXTIN(3) */
  4060			if (src <= data->temp_fixed_num) {
  4061				data->have_temp |= BIT(src - 1);
  4062				data->have_temp_fixed |= BIT(src - 1);
  4063				data->reg_temp[0][src - 1] = reg_temp[i];
  4064				data->reg_temp[1][src - 1] = reg_temp_over[i];
  4065				data->reg_temp[2][src - 1] = reg_temp_hyst[i];
  4066				if (reg_temp_crit_h && reg_temp_crit_h[i])
  4067					data->reg_temp[3][src - 1] = reg_temp_crit_h[i];
  4068				else if (reg_temp_crit[src - 1])
  4069					data->reg_temp[3][src - 1]
  4070					  = reg_temp_crit[src - 1];
  4071				if (reg_temp_crit_l && reg_temp_crit_l[i])
  4072					data->reg_temp[4][src - 1] = reg_temp_crit_l[i];
  4073				data->reg_temp_config[src - 1] = reg_temp_config[i];
  4074				data->temp_src[src - 1] = src;
  4075				continue;
  4076			}
  4077	
  4078			if (s >= NUM_TEMP)
  4079				continue;
  4080	
  4081			/* Use dynamic index for other sources */
  4082			data->have_temp |= BIT(s);
  4083			data->reg_temp[0][s] = reg_temp[i];
  4084			data->reg_temp[1][s] = reg_temp_over[i];
  4085			data->reg_temp[2][s] = reg_temp_hyst[i];
  4086			data->reg_temp_config[s] = reg_temp_config[i];
  4087			if (reg_temp_crit_h && reg_temp_crit_h[i])
  4088				data->reg_temp[3][s] = reg_temp_crit_h[i];
  4089			else if (reg_temp_crit[src - 1])
  4090				data->reg_temp[3][s] = reg_temp_crit[src - 1];
  4091			if (reg_temp_crit_l && reg_temp_crit_l[i])
  4092				data->reg_temp[4][s] = reg_temp_crit_l[i];
  4093	
  4094			data->temp_src[s] = src;
  4095			s++;
  4096		}
  4097	
  4098		/*
  4099		 * Repeat with temperatures used for fan control.
  4100		 * This set of registers does not support limits.
  4101		 */
  4102		for (i = 0; i < num_reg_temp_mon; i++) {
  4103			if (reg_temp_mon[i] == 0)
  4104				continue;
  4105	
  4106			err = nct6775_read_value(data, data->REG_TEMP_SEL[i], &src);
  4107			if (err)
  4108				return err;
  4109			src &= 0x1f;
  4110			if (!src)
  4111				continue;
  4112	
  4113			if (!(data->temp_mask & BIT(src))) {
  4114				dev_info(dev,
  4115					 "Invalid temperature source %d at index %d, source register 0x%x, temp register 0x%x\n",
  4116					 src, i, data->REG_TEMP_SEL[i],
  4117					 reg_temp_mon[i]);
  4118				continue;
  4119			}
  4120	
  4121			/*
  4122			 * For virtual temperature sources, the 'virtual' temperature
  4123			 * for each fan reflects a different temperature, and there
  4124			 * are no duplicates.
  4125			 */
  4126			if (!(data->virt_temp_mask & BIT(src))) {
  4127				if (mask & BIT(src))
  4128					continue;
  4129				mask |= BIT(src);
  4130			}
  4131	
  4132			/* Use fixed index for SYSTIN(1), CPUTIN(2), AUXTIN(3) */
  4133			if (src <= data->temp_fixed_num) {
  4134				if (data->have_temp & BIT(src - 1))
  4135					continue;
  4136				data->have_temp |= BIT(src - 1);
  4137				data->have_temp_fixed |= BIT(src - 1);
  4138				data->reg_temp[0][src - 1] = reg_temp_mon[i];
  4139				data->temp_src[src - 1] = src;
  4140				continue;
  4141			}
  4142	
  4143			if (s >= NUM_TEMP)
  4144				continue;
  4145	
  4146			/* Use dynamic index for other sources */
  4147			data->have_temp |= BIT(s);
  4148			data->reg_temp[0][s] = reg_temp_mon[i];
  4149			data->temp_src[s] = src;
  4150			s++;
  4151		}
  4152
kernel test robot June 19, 2023, 7:46 p.m. UTC | #3
Hi Andy,

kernel test robot noticed the following build errors:

[auto build test ERROR on groeck-staging/hwmon-next]
[also build test ERROR on next-20230619]
[cannot apply to linus/master v6.4-rc7]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Andy-Shevchenko/hwmon-nct6775-Fix-use-of-undefined-variable/20230619-213352
base:   https://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git hwmon-next
patch link:    https://lore.kernel.org/r/20230619133257.57569-1-andriy.shevchenko%40linux.intel.com
patch subject: [PATCH v1 1/1] hwmon: (nct6775) Fix use of undefined variable
config: riscv-randconfig-r042-20230619 (https://download.01.org/0day-ci/archive/20230620/202306200252.DaPAjeGo-lkp@intel.com/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a)
reproduce: (https://download.01.org/0day-ci/archive/20230620/202306200252.DaPAjeGo-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202306200252.DaPAjeGo-lkp@intel.com/

All errors (new ones prefixed by >>):

>> drivers/hwmon/nct6775-core.c:3854:14: error: incompatible integer to pointer conversion passing 'u16' (aka 'unsigned short') to parameter of type 'unsigned long *' [-Wint-conversion]
    3854 |                 bitmap_set(data->have_in, 0, 15);
         |                            ^~~~~~~~~~~~~
   include/linux/bitmap.h:453:55: note: passing argument to parameter 'map' here
     453 | static __always_inline void bitmap_set(unsigned long *map, unsigned int start,
         |                                                       ^
   1 error generated.


vim +3854 drivers/hwmon/nct6775-core.c

  3444	
  3445	int nct6775_probe(struct device *dev, struct nct6775_data *data,
  3446			  const struct regmap_config *regmapcfg)
  3447	{
  3448		int i, s, err = 0;
  3449		int mask, available;
  3450		u16 src;
  3451		const u16 *reg_temp, *reg_temp_over, *reg_temp_hyst, *reg_temp_config;
  3452		const u16 *reg_temp_mon, *reg_temp_alternate, *reg_temp_crit;
  3453		const u16 *reg_temp_crit_l = NULL, *reg_temp_crit_h = NULL;
  3454		int num_reg_temp, num_reg_temp_mon, num_reg_tsi_temp;
  3455		struct device *hwmon_dev;
  3456		struct sensor_template_group tsi_temp_tg;
  3457	
  3458		data->regmap = devm_regmap_init(dev, NULL, data, regmapcfg);
  3459		if (IS_ERR(data->regmap))
  3460			return PTR_ERR(data->regmap);
  3461	
  3462		mutex_init(&data->update_lock);
  3463		data->name = nct6775_device_names[data->kind];
  3464		data->bank = 0xff;		/* Force initial bank selection */
  3465	
  3466		switch (data->kind) {
  3467		case nct6106:
  3468			data->in_num = 9;
  3469			data->pwm_num = 3;
  3470			data->auto_pwm_num = 4;
  3471			data->temp_fixed_num = 3;
  3472			data->num_temp_alarms = 6;
  3473			data->num_temp_beeps = 6;
  3474	
  3475			data->fan_from_reg = fan_from_reg13;
  3476			data->fan_from_reg_min = fan_from_reg13;
  3477	
  3478			data->temp_label = nct6776_temp_label;
  3479			data->temp_mask = NCT6776_TEMP_MASK;
  3480			data->virt_temp_mask = NCT6776_VIRT_TEMP_MASK;
  3481	
  3482			data->REG_VBAT = NCT6106_REG_VBAT;
  3483			data->REG_DIODE = NCT6106_REG_DIODE;
  3484			data->DIODE_MASK = NCT6106_DIODE_MASK;
  3485			data->REG_VIN = NCT6106_REG_IN;
  3486			data->REG_IN_MINMAX[0] = NCT6106_REG_IN_MIN;
  3487			data->REG_IN_MINMAX[1] = NCT6106_REG_IN_MAX;
  3488			data->REG_TARGET = NCT6106_REG_TARGET;
  3489			data->REG_FAN = NCT6106_REG_FAN;
  3490			data->REG_FAN_MODE = NCT6106_REG_FAN_MODE;
  3491			data->REG_FAN_MIN = NCT6106_REG_FAN_MIN;
  3492			data->REG_FAN_PULSES = NCT6106_REG_FAN_PULSES;
  3493			data->FAN_PULSE_SHIFT = NCT6106_FAN_PULSE_SHIFT;
  3494			data->REG_FAN_TIME[0] = NCT6106_REG_FAN_STOP_TIME;
  3495			data->REG_FAN_TIME[1] = NCT6106_REG_FAN_STEP_UP_TIME;
  3496			data->REG_FAN_TIME[2] = NCT6106_REG_FAN_STEP_DOWN_TIME;
  3497			data->REG_TOLERANCE_H = NCT6106_REG_TOLERANCE_H;
  3498			data->REG_PWM[0] = NCT6116_REG_PWM;
  3499			data->REG_PWM[1] = NCT6106_REG_FAN_START_OUTPUT;
  3500			data->REG_PWM[2] = NCT6106_REG_FAN_STOP_OUTPUT;
  3501			data->REG_PWM[5] = NCT6106_REG_WEIGHT_DUTY_STEP;
  3502			data->REG_PWM[6] = NCT6106_REG_WEIGHT_DUTY_BASE;
  3503			data->REG_PWM_READ = NCT6106_REG_PWM_READ;
  3504			data->REG_PWM_MODE = NCT6106_REG_PWM_MODE;
  3505			data->PWM_MODE_MASK = NCT6106_PWM_MODE_MASK;
  3506			data->REG_AUTO_TEMP = NCT6106_REG_AUTO_TEMP;
  3507			data->REG_AUTO_PWM = NCT6106_REG_AUTO_PWM;
  3508			data->REG_CRITICAL_TEMP = NCT6106_REG_CRITICAL_TEMP;
  3509			data->REG_CRITICAL_TEMP_TOLERANCE
  3510			  = NCT6106_REG_CRITICAL_TEMP_TOLERANCE;
  3511			data->REG_CRITICAL_PWM_ENABLE = NCT6106_REG_CRITICAL_PWM_ENABLE;
  3512			data->CRITICAL_PWM_ENABLE_MASK
  3513			  = NCT6106_CRITICAL_PWM_ENABLE_MASK;
  3514			data->REG_CRITICAL_PWM = NCT6106_REG_CRITICAL_PWM;
  3515			data->REG_TEMP_OFFSET = NCT6106_REG_TEMP_OFFSET;
  3516			data->REG_TEMP_SOURCE = NCT6106_REG_TEMP_SOURCE;
  3517			data->REG_TEMP_SEL = NCT6116_REG_TEMP_SEL;
  3518			data->REG_WEIGHT_TEMP_SEL = NCT6106_REG_WEIGHT_TEMP_SEL;
  3519			data->REG_WEIGHT_TEMP[0] = NCT6106_REG_WEIGHT_TEMP_STEP;
  3520			data->REG_WEIGHT_TEMP[1] = NCT6106_REG_WEIGHT_TEMP_STEP_TOL;
  3521			data->REG_WEIGHT_TEMP[2] = NCT6106_REG_WEIGHT_TEMP_BASE;
  3522			data->REG_ALARM = NCT6106_REG_ALARM;
  3523			data->ALARM_BITS = NCT6106_ALARM_BITS;
  3524			data->REG_BEEP = NCT6106_REG_BEEP;
  3525			data->BEEP_BITS = NCT6106_BEEP_BITS;
  3526			data->REG_TSI_TEMP = NCT6106_REG_TSI_TEMP;
  3527	
  3528			reg_temp = NCT6106_REG_TEMP;
  3529			reg_temp_mon = NCT6106_REG_TEMP_MON;
  3530			num_reg_temp = ARRAY_SIZE(NCT6106_REG_TEMP);
  3531			num_reg_temp_mon = ARRAY_SIZE(NCT6106_REG_TEMP_MON);
  3532			num_reg_tsi_temp = ARRAY_SIZE(NCT6106_REG_TSI_TEMP);
  3533			reg_temp_over = NCT6106_REG_TEMP_OVER;
  3534			reg_temp_hyst = NCT6106_REG_TEMP_HYST;
  3535			reg_temp_config = NCT6106_REG_TEMP_CONFIG;
  3536			reg_temp_alternate = NCT6106_REG_TEMP_ALTERNATE;
  3537			reg_temp_crit = NCT6106_REG_TEMP_CRIT;
  3538			reg_temp_crit_l = NCT6106_REG_TEMP_CRIT_L;
  3539			reg_temp_crit_h = NCT6106_REG_TEMP_CRIT_H;
  3540	
  3541			break;
  3542		case nct6116:
  3543			data->in_num = 9;
  3544			data->pwm_num = 3;
  3545			data->auto_pwm_num = 4;
  3546			data->temp_fixed_num = 3;
  3547			data->num_temp_alarms = 3;
  3548			data->num_temp_beeps = 3;
  3549	
  3550			data->fan_from_reg = fan_from_reg13;
  3551			data->fan_from_reg_min = fan_from_reg13;
  3552	
  3553			data->temp_label = nct6776_temp_label;
  3554			data->temp_mask = NCT6776_TEMP_MASK;
  3555			data->virt_temp_mask = NCT6776_VIRT_TEMP_MASK;
  3556	
  3557			data->REG_VBAT = NCT6106_REG_VBAT;
  3558			data->REG_DIODE = NCT6106_REG_DIODE;
  3559			data->DIODE_MASK = NCT6106_DIODE_MASK;
  3560			data->REG_VIN = NCT6106_REG_IN;
  3561			data->REG_IN_MINMAX[0] = NCT6106_REG_IN_MIN;
  3562			data->REG_IN_MINMAX[1] = NCT6106_REG_IN_MAX;
  3563			data->REG_TARGET = NCT6116_REG_TARGET;
  3564			data->REG_FAN = NCT6116_REG_FAN;
  3565			data->REG_FAN_MODE = NCT6116_REG_FAN_MODE;
  3566			data->REG_FAN_MIN = NCT6116_REG_FAN_MIN;
  3567			data->REG_FAN_PULSES = NCT6116_REG_FAN_PULSES;
  3568			data->FAN_PULSE_SHIFT = NCT6116_FAN_PULSE_SHIFT;
  3569			data->REG_FAN_TIME[0] = NCT6116_REG_FAN_STOP_TIME;
  3570			data->REG_FAN_TIME[1] = NCT6116_REG_FAN_STEP_UP_TIME;
  3571			data->REG_FAN_TIME[2] = NCT6116_REG_FAN_STEP_DOWN_TIME;
  3572			data->REG_TOLERANCE_H = NCT6116_REG_TOLERANCE_H;
  3573			data->REG_PWM[0] = NCT6116_REG_PWM;
  3574			data->REG_PWM[1] = NCT6116_REG_FAN_START_OUTPUT;
  3575			data->REG_PWM[2] = NCT6116_REG_FAN_STOP_OUTPUT;
  3576			data->REG_PWM[5] = NCT6106_REG_WEIGHT_DUTY_STEP;
  3577			data->REG_PWM[6] = NCT6106_REG_WEIGHT_DUTY_BASE;
  3578			data->REG_PWM_READ = NCT6106_REG_PWM_READ;
  3579			data->REG_PWM_MODE = NCT6106_REG_PWM_MODE;
  3580			data->PWM_MODE_MASK = NCT6106_PWM_MODE_MASK;
  3581			data->REG_AUTO_TEMP = NCT6116_REG_AUTO_TEMP;
  3582			data->REG_AUTO_PWM = NCT6116_REG_AUTO_PWM;
  3583			data->REG_CRITICAL_TEMP = NCT6116_REG_CRITICAL_TEMP;
  3584			data->REG_CRITICAL_TEMP_TOLERANCE
  3585			  = NCT6116_REG_CRITICAL_TEMP_TOLERANCE;
  3586			data->REG_CRITICAL_PWM_ENABLE = NCT6116_REG_CRITICAL_PWM_ENABLE;
  3587			data->CRITICAL_PWM_ENABLE_MASK
  3588			  = NCT6106_CRITICAL_PWM_ENABLE_MASK;
  3589			data->REG_CRITICAL_PWM = NCT6116_REG_CRITICAL_PWM;
  3590			data->REG_TEMP_OFFSET = NCT6106_REG_TEMP_OFFSET;
  3591			data->REG_TEMP_SOURCE = NCT6116_REG_TEMP_SOURCE;
  3592			data->REG_TEMP_SEL = NCT6116_REG_TEMP_SEL;
  3593			data->REG_WEIGHT_TEMP_SEL = NCT6106_REG_WEIGHT_TEMP_SEL;
  3594			data->REG_WEIGHT_TEMP[0] = NCT6106_REG_WEIGHT_TEMP_STEP;
  3595			data->REG_WEIGHT_TEMP[1] = NCT6106_REG_WEIGHT_TEMP_STEP_TOL;
  3596			data->REG_WEIGHT_TEMP[2] = NCT6106_REG_WEIGHT_TEMP_BASE;
  3597			data->REG_ALARM = NCT6106_REG_ALARM;
  3598			data->ALARM_BITS = NCT6116_ALARM_BITS;
  3599			data->REG_BEEP = NCT6106_REG_BEEP;
  3600			data->BEEP_BITS = NCT6116_BEEP_BITS;
  3601			data->REG_TSI_TEMP = NCT6116_REG_TSI_TEMP;
  3602	
  3603			reg_temp = NCT6106_REG_TEMP;
  3604			reg_temp_mon = NCT6106_REG_TEMP_MON;
  3605			num_reg_temp = ARRAY_SIZE(NCT6106_REG_TEMP);
  3606			num_reg_temp_mon = ARRAY_SIZE(NCT6106_REG_TEMP_MON);
  3607			num_reg_tsi_temp = ARRAY_SIZE(NCT6116_REG_TSI_TEMP);
  3608			reg_temp_over = NCT6106_REG_TEMP_OVER;
  3609			reg_temp_hyst = NCT6106_REG_TEMP_HYST;
  3610			reg_temp_config = NCT6106_REG_TEMP_CONFIG;
  3611			reg_temp_alternate = NCT6106_REG_TEMP_ALTERNATE;
  3612			reg_temp_crit = NCT6106_REG_TEMP_CRIT;
  3613			reg_temp_crit_l = NCT6106_REG_TEMP_CRIT_L;
  3614			reg_temp_crit_h = NCT6106_REG_TEMP_CRIT_H;
  3615	
  3616			break;
  3617		case nct6775:
  3618			data->in_num = 9;
  3619			data->pwm_num = 3;
  3620			data->auto_pwm_num = 6;
  3621			data->has_fan_div = true;
  3622			data->temp_fixed_num = 3;
  3623			data->num_temp_alarms = 3;
  3624			data->num_temp_beeps = 3;
  3625	
  3626			data->ALARM_BITS = NCT6775_ALARM_BITS;
  3627			data->BEEP_BITS = NCT6775_BEEP_BITS;
  3628	
  3629			data->fan_from_reg = fan_from_reg16;
  3630			data->fan_from_reg_min = fan_from_reg8;
  3631			data->target_temp_mask = 0x7f;
  3632			data->tolerance_mask = 0x0f;
  3633			data->speed_tolerance_limit = 15;
  3634	
  3635			data->temp_label = nct6775_temp_label;
  3636			data->temp_mask = NCT6775_TEMP_MASK;
  3637			data->virt_temp_mask = NCT6775_VIRT_TEMP_MASK;
  3638	
  3639			data->REG_CONFIG = NCT6775_REG_CONFIG;
  3640			data->REG_VBAT = NCT6775_REG_VBAT;
  3641			data->REG_DIODE = NCT6775_REG_DIODE;
  3642			data->DIODE_MASK = NCT6775_DIODE_MASK;
  3643			data->REG_VIN = NCT6775_REG_IN;
  3644			data->REG_IN_MINMAX[0] = NCT6775_REG_IN_MIN;
  3645			data->REG_IN_MINMAX[1] = NCT6775_REG_IN_MAX;
  3646			data->REG_TARGET = NCT6775_REG_TARGET;
  3647			data->REG_FAN = NCT6775_REG_FAN;
  3648			data->REG_FAN_MODE = NCT6775_REG_FAN_MODE;
  3649			data->REG_FAN_MIN = NCT6775_REG_FAN_MIN;
  3650			data->REG_FAN_PULSES = NCT6775_REG_FAN_PULSES;
  3651			data->FAN_PULSE_SHIFT = NCT6775_FAN_PULSE_SHIFT;
  3652			data->REG_FAN_TIME[0] = NCT6775_REG_FAN_STOP_TIME;
  3653			data->REG_FAN_TIME[1] = NCT6775_REG_FAN_STEP_UP_TIME;
  3654			data->REG_FAN_TIME[2] = NCT6775_REG_FAN_STEP_DOWN_TIME;
  3655			data->REG_PWM[0] = NCT6775_REG_PWM;
  3656			data->REG_PWM[1] = NCT6775_REG_FAN_START_OUTPUT;
  3657			data->REG_PWM[2] = NCT6775_REG_FAN_STOP_OUTPUT;
  3658			data->REG_PWM[3] = NCT6775_REG_FAN_MAX_OUTPUT;
  3659			data->REG_PWM[4] = NCT6775_REG_FAN_STEP_OUTPUT;
  3660			data->REG_PWM[5] = NCT6775_REG_WEIGHT_DUTY_STEP;
  3661			data->REG_PWM_READ = NCT6775_REG_PWM_READ;
  3662			data->REG_PWM_MODE = NCT6775_REG_PWM_MODE;
  3663			data->PWM_MODE_MASK = NCT6775_PWM_MODE_MASK;
  3664			data->REG_AUTO_TEMP = NCT6775_REG_AUTO_TEMP;
  3665			data->REG_AUTO_PWM = NCT6775_REG_AUTO_PWM;
  3666			data->REG_CRITICAL_TEMP = NCT6775_REG_CRITICAL_TEMP;
  3667			data->REG_CRITICAL_TEMP_TOLERANCE
  3668			  = NCT6775_REG_CRITICAL_TEMP_TOLERANCE;
  3669			data->REG_TEMP_OFFSET = NCT6775_REG_TEMP_OFFSET;
  3670			data->REG_TEMP_SOURCE = NCT6775_REG_TEMP_SOURCE;
  3671			data->REG_TEMP_SEL = NCT6775_REG_TEMP_SEL;
  3672			data->REG_WEIGHT_TEMP_SEL = NCT6775_REG_WEIGHT_TEMP_SEL;
  3673			data->REG_WEIGHT_TEMP[0] = NCT6775_REG_WEIGHT_TEMP_STEP;
  3674			data->REG_WEIGHT_TEMP[1] = NCT6775_REG_WEIGHT_TEMP_STEP_TOL;
  3675			data->REG_WEIGHT_TEMP[2] = NCT6775_REG_WEIGHT_TEMP_BASE;
  3676			data->REG_ALARM = NCT6775_REG_ALARM;
  3677			data->REG_BEEP = NCT6775_REG_BEEP;
  3678			data->REG_TSI_TEMP = NCT6775_REG_TSI_TEMP;
  3679	
  3680			reg_temp = NCT6775_REG_TEMP;
  3681			reg_temp_mon = NCT6775_REG_TEMP_MON;
  3682			num_reg_temp = ARRAY_SIZE(NCT6775_REG_TEMP);
  3683			num_reg_temp_mon = ARRAY_SIZE(NCT6775_REG_TEMP_MON);
  3684			num_reg_tsi_temp = ARRAY_SIZE(NCT6775_REG_TSI_TEMP);
  3685			reg_temp_over = NCT6775_REG_TEMP_OVER;
  3686			reg_temp_hyst = NCT6775_REG_TEMP_HYST;
  3687			reg_temp_config = NCT6775_REG_TEMP_CONFIG;
  3688			reg_temp_alternate = NCT6775_REG_TEMP_ALTERNATE;
  3689			reg_temp_crit = NCT6775_REG_TEMP_CRIT;
  3690	
  3691			break;
  3692		case nct6776:
  3693			data->in_num = 9;
  3694			data->pwm_num = 3;
  3695			data->auto_pwm_num = 4;
  3696			data->has_fan_div = false;
  3697			data->temp_fixed_num = 3;
  3698			data->num_temp_alarms = 3;
  3699			data->num_temp_beeps = 6;
  3700	
  3701			data->ALARM_BITS = NCT6776_ALARM_BITS;
  3702			data->BEEP_BITS = NCT6776_BEEP_BITS;
  3703	
  3704			data->fan_from_reg = fan_from_reg13;
  3705			data->fan_from_reg_min = fan_from_reg13;
  3706			data->target_temp_mask = 0xff;
  3707			data->tolerance_mask = 0x07;
  3708			data->speed_tolerance_limit = 63;
  3709	
  3710			data->temp_label = nct6776_temp_label;
  3711			data->temp_mask = NCT6776_TEMP_MASK;
  3712			data->virt_temp_mask = NCT6776_VIRT_TEMP_MASK;
  3713	
  3714			data->REG_CONFIG = NCT6775_REG_CONFIG;
  3715			data->REG_VBAT = NCT6775_REG_VBAT;
  3716			data->REG_DIODE = NCT6775_REG_DIODE;
  3717			data->DIODE_MASK = NCT6775_DIODE_MASK;
  3718			data->REG_VIN = NCT6775_REG_IN;
  3719			data->REG_IN_MINMAX[0] = NCT6775_REG_IN_MIN;
  3720			data->REG_IN_MINMAX[1] = NCT6775_REG_IN_MAX;
  3721			data->REG_TARGET = NCT6775_REG_TARGET;
  3722			data->REG_FAN = NCT6775_REG_FAN;
  3723			data->REG_FAN_MODE = NCT6775_REG_FAN_MODE;
  3724			data->REG_FAN_MIN = NCT6776_REG_FAN_MIN;
  3725			data->REG_FAN_PULSES = NCT6776_REG_FAN_PULSES;
  3726			data->FAN_PULSE_SHIFT = NCT6775_FAN_PULSE_SHIFT;
  3727			data->REG_FAN_TIME[0] = NCT6775_REG_FAN_STOP_TIME;
  3728			data->REG_FAN_TIME[1] = NCT6776_REG_FAN_STEP_UP_TIME;
  3729			data->REG_FAN_TIME[2] = NCT6776_REG_FAN_STEP_DOWN_TIME;
  3730			data->REG_TOLERANCE_H = NCT6776_REG_TOLERANCE_H;
  3731			data->REG_PWM[0] = NCT6775_REG_PWM;
  3732			data->REG_PWM[1] = NCT6775_REG_FAN_START_OUTPUT;
  3733			data->REG_PWM[2] = NCT6775_REG_FAN_STOP_OUTPUT;
  3734			data->REG_PWM[5] = NCT6775_REG_WEIGHT_DUTY_STEP;
  3735			data->REG_PWM[6] = NCT6776_REG_WEIGHT_DUTY_BASE;
  3736			data->REG_PWM_READ = NCT6775_REG_PWM_READ;
  3737			data->REG_PWM_MODE = NCT6776_REG_PWM_MODE;
  3738			data->PWM_MODE_MASK = NCT6776_PWM_MODE_MASK;
  3739			data->REG_AUTO_TEMP = NCT6775_REG_AUTO_TEMP;
  3740			data->REG_AUTO_PWM = NCT6775_REG_AUTO_PWM;
  3741			data->REG_CRITICAL_TEMP = NCT6775_REG_CRITICAL_TEMP;
  3742			data->REG_CRITICAL_TEMP_TOLERANCE
  3743			  = NCT6775_REG_CRITICAL_TEMP_TOLERANCE;
  3744			data->REG_TEMP_OFFSET = NCT6775_REG_TEMP_OFFSET;
  3745			data->REG_TEMP_SOURCE = NCT6775_REG_TEMP_SOURCE;
  3746			data->REG_TEMP_SEL = NCT6775_REG_TEMP_SEL;
  3747			data->REG_WEIGHT_TEMP_SEL = NCT6775_REG_WEIGHT_TEMP_SEL;
  3748			data->REG_WEIGHT_TEMP[0] = NCT6775_REG_WEIGHT_TEMP_STEP;
  3749			data->REG_WEIGHT_TEMP[1] = NCT6775_REG_WEIGHT_TEMP_STEP_TOL;
  3750			data->REG_WEIGHT_TEMP[2] = NCT6775_REG_WEIGHT_TEMP_BASE;
  3751			data->REG_ALARM = NCT6775_REG_ALARM;
  3752			data->REG_BEEP = NCT6776_REG_BEEP;
  3753			data->REG_TSI_TEMP = NCT6776_REG_TSI_TEMP;
  3754	
  3755			reg_temp = NCT6775_REG_TEMP;
  3756			reg_temp_mon = NCT6775_REG_TEMP_MON;
  3757			num_reg_temp = ARRAY_SIZE(NCT6775_REG_TEMP);
  3758			num_reg_temp_mon = ARRAY_SIZE(NCT6775_REG_TEMP_MON);
  3759			num_reg_tsi_temp = ARRAY_SIZE(NCT6776_REG_TSI_TEMP);
  3760			reg_temp_over = NCT6775_REG_TEMP_OVER;
  3761			reg_temp_hyst = NCT6775_REG_TEMP_HYST;
  3762			reg_temp_config = NCT6776_REG_TEMP_CONFIG;
  3763			reg_temp_alternate = NCT6776_REG_TEMP_ALTERNATE;
  3764			reg_temp_crit = NCT6776_REG_TEMP_CRIT;
  3765	
  3766			break;
  3767		case nct6779:
  3768			data->in_num = 15;
  3769			data->pwm_num = 5;
  3770			data->auto_pwm_num = 4;
  3771			data->has_fan_div = false;
  3772			data->temp_fixed_num = 6;
  3773			data->num_temp_alarms = 2;
  3774			data->num_temp_beeps = 2;
  3775	
  3776			data->ALARM_BITS = NCT6779_ALARM_BITS;
  3777			data->BEEP_BITS = NCT6779_BEEP_BITS;
  3778	
  3779			data->fan_from_reg = fan_from_reg_rpm;
  3780			data->fan_from_reg_min = fan_from_reg13;
  3781			data->target_temp_mask = 0xff;
  3782			data->tolerance_mask = 0x07;
  3783			data->speed_tolerance_limit = 63;
  3784	
  3785			data->temp_label = nct6779_temp_label;
  3786			data->temp_mask = NCT6779_TEMP_MASK;
  3787			data->virt_temp_mask = NCT6779_VIRT_TEMP_MASK;
  3788	
  3789			data->REG_CONFIG = NCT6775_REG_CONFIG;
  3790			data->REG_VBAT = NCT6775_REG_VBAT;
  3791			data->REG_DIODE = NCT6775_REG_DIODE;
  3792			data->DIODE_MASK = NCT6775_DIODE_MASK;
  3793			data->REG_VIN = NCT6779_REG_IN;
  3794			data->REG_IN_MINMAX[0] = NCT6775_REG_IN_MIN;
  3795			data->REG_IN_MINMAX[1] = NCT6775_REG_IN_MAX;
  3796			data->REG_TARGET = NCT6775_REG_TARGET;
  3797			data->REG_FAN = NCT6779_REG_FAN;
  3798			data->REG_FAN_MODE = NCT6775_REG_FAN_MODE;
  3799			data->REG_FAN_MIN = NCT6776_REG_FAN_MIN;
  3800			data->REG_FAN_PULSES = NCT6779_REG_FAN_PULSES;
  3801			data->FAN_PULSE_SHIFT = NCT6775_FAN_PULSE_SHIFT;
  3802			data->REG_FAN_TIME[0] = NCT6775_REG_FAN_STOP_TIME;
  3803			data->REG_FAN_TIME[1] = NCT6776_REG_FAN_STEP_UP_TIME;
  3804			data->REG_FAN_TIME[2] = NCT6776_REG_FAN_STEP_DOWN_TIME;
  3805			data->REG_TOLERANCE_H = NCT6776_REG_TOLERANCE_H;
  3806			data->REG_PWM[0] = NCT6775_REG_PWM;
  3807			data->REG_PWM[1] = NCT6775_REG_FAN_START_OUTPUT;
  3808			data->REG_PWM[2] = NCT6775_REG_FAN_STOP_OUTPUT;
  3809			data->REG_PWM[5] = NCT6775_REG_WEIGHT_DUTY_STEP;
  3810			data->REG_PWM[6] = NCT6776_REG_WEIGHT_DUTY_BASE;
  3811			data->REG_PWM_READ = NCT6775_REG_PWM_READ;
  3812			data->REG_PWM_MODE = NCT6776_REG_PWM_MODE;
  3813			data->PWM_MODE_MASK = NCT6776_PWM_MODE_MASK;
  3814			data->REG_AUTO_TEMP = NCT6775_REG_AUTO_TEMP;
  3815			data->REG_AUTO_PWM = NCT6775_REG_AUTO_PWM;
  3816			data->REG_CRITICAL_TEMP = NCT6775_REG_CRITICAL_TEMP;
  3817			data->REG_CRITICAL_TEMP_TOLERANCE
  3818			  = NCT6775_REG_CRITICAL_TEMP_TOLERANCE;
  3819			data->REG_CRITICAL_PWM_ENABLE = NCT6779_REG_CRITICAL_PWM_ENABLE;
  3820			data->CRITICAL_PWM_ENABLE_MASK
  3821			  = NCT6779_CRITICAL_PWM_ENABLE_MASK;
  3822			data->REG_CRITICAL_PWM = NCT6779_REG_CRITICAL_PWM;
  3823			data->REG_TEMP_OFFSET = NCT6779_REG_TEMP_OFFSET;
  3824			data->REG_TEMP_SOURCE = NCT6775_REG_TEMP_SOURCE;
  3825			data->REG_TEMP_SEL = NCT6775_REG_TEMP_SEL;
  3826			data->REG_WEIGHT_TEMP_SEL = NCT6775_REG_WEIGHT_TEMP_SEL;
  3827			data->REG_WEIGHT_TEMP[0] = NCT6775_REG_WEIGHT_TEMP_STEP;
  3828			data->REG_WEIGHT_TEMP[1] = NCT6775_REG_WEIGHT_TEMP_STEP_TOL;
  3829			data->REG_WEIGHT_TEMP[2] = NCT6775_REG_WEIGHT_TEMP_BASE;
  3830			data->REG_ALARM = NCT6779_REG_ALARM;
  3831			data->REG_BEEP = NCT6776_REG_BEEP;
  3832			data->REG_TSI_TEMP = NCT6776_REG_TSI_TEMP;
  3833	
  3834			reg_temp = NCT6779_REG_TEMP;
  3835			reg_temp_mon = NCT6779_REG_TEMP_MON;
  3836			num_reg_temp = ARRAY_SIZE(NCT6779_REG_TEMP);
  3837			num_reg_temp_mon = ARRAY_SIZE(NCT6779_REG_TEMP_MON);
  3838			num_reg_tsi_temp = ARRAY_SIZE(NCT6776_REG_TSI_TEMP);
  3839			reg_temp_over = NCT6779_REG_TEMP_OVER;
  3840			reg_temp_hyst = NCT6779_REG_TEMP_HYST;
  3841			reg_temp_config = NCT6779_REG_TEMP_CONFIG;
  3842			reg_temp_alternate = NCT6779_REG_TEMP_ALTERNATE;
  3843			reg_temp_crit = NCT6779_REG_TEMP_CRIT;
  3844	
  3845			break;
  3846		case nct6791:
  3847		case nct6792:
  3848		case nct6793:
  3849		case nct6795:
  3850		case nct6796:
  3851		case nct6797:
  3852		case nct6798:
  3853		case nct6799:
> 3854			bitmap_set(data->have_in, 0, 15);
  3855			data->pwm_num = (data->kind == nct6796 ||
  3856					 data->kind == nct6797 ||
  3857					 data->kind == nct6798 ||
  3858					 data->kind == nct6799) ? 7 : 6;
  3859			data->auto_pwm_num = 4;
  3860			data->has_fan_div = false;
  3861			data->temp_fixed_num = 6;
  3862			data->num_temp_alarms = 2;
  3863			data->num_temp_beeps = 2;
  3864	
  3865			data->ALARM_BITS = NCT6791_ALARM_BITS;
  3866			data->BEEP_BITS = NCT6779_BEEP_BITS;
  3867	
  3868			data->fan_from_reg = fan_from_reg_rpm;
  3869			data->fan_from_reg_min = fan_from_reg13;
  3870			data->target_temp_mask = 0xff;
  3871			data->tolerance_mask = 0x07;
  3872			data->speed_tolerance_limit = 63;
  3873	
  3874			switch (data->kind) {
  3875			default:
  3876			case nct6791:
  3877				data->temp_label = nct6779_temp_label;
  3878				data->temp_mask = NCT6791_TEMP_MASK;
  3879				data->virt_temp_mask = NCT6791_VIRT_TEMP_MASK;
  3880				break;
  3881			case nct6792:
  3882				data->temp_label = nct6792_temp_label;
  3883				data->temp_mask = NCT6792_TEMP_MASK;
  3884				data->virt_temp_mask = NCT6792_VIRT_TEMP_MASK;
  3885				break;
  3886			case nct6793:
  3887				data->temp_label = nct6793_temp_label;
  3888				data->temp_mask = NCT6793_TEMP_MASK;
  3889				data->virt_temp_mask = NCT6793_VIRT_TEMP_MASK;
  3890				break;
  3891			case nct6795:
  3892			case nct6797:
  3893				data->temp_label = nct6795_temp_label;
  3894				data->temp_mask = NCT6795_TEMP_MASK;
  3895				data->virt_temp_mask = NCT6795_VIRT_TEMP_MASK;
  3896				break;
  3897			case nct6796:
  3898				data->temp_label = nct6796_temp_label;
  3899				data->temp_mask = NCT6796_TEMP_MASK;
  3900				data->virt_temp_mask = NCT6796_VIRT_TEMP_MASK;
  3901				break;
  3902			case nct6798:
  3903				data->temp_label = nct6798_temp_label;
  3904				data->temp_mask = NCT6798_TEMP_MASK;
  3905				data->virt_temp_mask = NCT6798_VIRT_TEMP_MASK;
  3906				break;
  3907			case nct6799:
  3908				data->temp_label = nct6799_temp_label;
  3909				data->temp_mask = NCT6799_TEMP_MASK;
  3910				data->virt_temp_mask = NCT6799_VIRT_TEMP_MASK;
  3911				break;
  3912			}
  3913	
  3914			data->REG_CONFIG = NCT6775_REG_CONFIG;
  3915			data->REG_VBAT = NCT6775_REG_VBAT;
  3916			data->REG_DIODE = NCT6775_REG_DIODE;
  3917			data->DIODE_MASK = NCT6775_DIODE_MASK;
  3918			data->REG_VIN = NCT6779_REG_IN;
  3919			data->REG_IN_MINMAX[0] = NCT6775_REG_IN_MIN;
  3920			data->REG_IN_MINMAX[1] = NCT6775_REG_IN_MAX;
  3921			data->REG_TARGET = NCT6775_REG_TARGET;
  3922			data->REG_FAN = NCT6779_REG_FAN;
  3923			data->REG_FAN_MODE = NCT6775_REG_FAN_MODE;
  3924			data->REG_FAN_MIN = NCT6776_REG_FAN_MIN;
  3925			data->REG_FAN_PULSES = NCT6779_REG_FAN_PULSES;
  3926			data->FAN_PULSE_SHIFT = NCT6775_FAN_PULSE_SHIFT;
  3927			data->REG_FAN_TIME[0] = NCT6775_REG_FAN_STOP_TIME;
  3928			data->REG_FAN_TIME[1] = NCT6776_REG_FAN_STEP_UP_TIME;
  3929			data->REG_FAN_TIME[2] = NCT6776_REG_FAN_STEP_DOWN_TIME;
  3930			data->REG_TOLERANCE_H = NCT6776_REG_TOLERANCE_H;
  3931			data->REG_PWM[0] = NCT6775_REG_PWM;
  3932			data->REG_PWM[1] = NCT6775_REG_FAN_START_OUTPUT;
  3933			data->REG_PWM[2] = NCT6775_REG_FAN_STOP_OUTPUT;
  3934			data->REG_PWM[5] = NCT6791_REG_WEIGHT_DUTY_STEP;
  3935			data->REG_PWM[6] = NCT6791_REG_WEIGHT_DUTY_BASE;
  3936			data->REG_PWM_READ = NCT6775_REG_PWM_READ;
  3937			data->REG_PWM_MODE = NCT6776_REG_PWM_MODE;
  3938			data->PWM_MODE_MASK = NCT6776_PWM_MODE_MASK;
  3939			data->REG_AUTO_TEMP = NCT6775_REG_AUTO_TEMP;
  3940			data->REG_AUTO_PWM = NCT6775_REG_AUTO_PWM;
  3941			data->REG_CRITICAL_TEMP = NCT6775_REG_CRITICAL_TEMP;
  3942			data->REG_CRITICAL_TEMP_TOLERANCE
  3943			  = NCT6775_REG_CRITICAL_TEMP_TOLERANCE;
  3944			data->REG_CRITICAL_PWM_ENABLE = NCT6779_REG_CRITICAL_PWM_ENABLE;
  3945			data->CRITICAL_PWM_ENABLE_MASK
  3946			  = NCT6779_CRITICAL_PWM_ENABLE_MASK;
  3947			data->REG_CRITICAL_PWM = NCT6779_REG_CRITICAL_PWM;
  3948			data->REG_TEMP_OFFSET = NCT6779_REG_TEMP_OFFSET;
  3949			data->REG_TEMP_SOURCE = NCT6775_REG_TEMP_SOURCE;
  3950			data->REG_TEMP_SEL = NCT6775_REG_TEMP_SEL;
  3951			data->REG_WEIGHT_TEMP_SEL = NCT6791_REG_WEIGHT_TEMP_SEL;
  3952			data->REG_WEIGHT_TEMP[0] = NCT6791_REG_WEIGHT_TEMP_STEP;
  3953			data->REG_WEIGHT_TEMP[1] = NCT6791_REG_WEIGHT_TEMP_STEP_TOL;
  3954			data->REG_WEIGHT_TEMP[2] = NCT6791_REG_WEIGHT_TEMP_BASE;
  3955			data->REG_ALARM = NCT6791_REG_ALARM;
  3956			if (data->kind == nct6791)
  3957				data->REG_BEEP = NCT6776_REG_BEEP;
  3958			else
  3959				data->REG_BEEP = NCT6792_REG_BEEP;
  3960			switch (data->kind) {
  3961			case nct6791:
  3962			case nct6792:
  3963			case nct6793:
  3964				data->REG_TSI_TEMP = NCT6776_REG_TSI_TEMP;
  3965				num_reg_tsi_temp = ARRAY_SIZE(NCT6776_REG_TSI_TEMP);
  3966				break;
  3967			case nct6795:
  3968			case nct6796:
  3969			case nct6797:
  3970			case nct6798:
  3971			case nct6799:
  3972				data->REG_TSI_TEMP = NCT6796_REG_TSI_TEMP;
  3973				num_reg_tsi_temp = ARRAY_SIZE(NCT6796_REG_TSI_TEMP);
  3974				break;
  3975			default:
  3976				num_reg_tsi_temp = 0;
  3977				break;
  3978			}
  3979	
  3980			reg_temp = NCT6779_REG_TEMP;
  3981			num_reg_temp = ARRAY_SIZE(NCT6779_REG_TEMP);
  3982			if (data->kind == nct6791) {
  3983				reg_temp_mon = NCT6779_REG_TEMP_MON;
  3984				num_reg_temp_mon = ARRAY_SIZE(NCT6779_REG_TEMP_MON);
  3985			} else {
  3986				reg_temp_mon = NCT6792_REG_TEMP_MON;
  3987				num_reg_temp_mon = ARRAY_SIZE(NCT6792_REG_TEMP_MON);
  3988			}
  3989			reg_temp_over = NCT6779_REG_TEMP_OVER;
  3990			reg_temp_hyst = NCT6779_REG_TEMP_HYST;
  3991			reg_temp_config = NCT6779_REG_TEMP_CONFIG;
  3992			reg_temp_alternate = NCT6779_REG_TEMP_ALTERNATE;
  3993			reg_temp_crit = NCT6779_REG_TEMP_CRIT;
  3994	
  3995			break;
  3996		default:
  3997			return -ENODEV;
  3998		}
  3999		data->have_in = BIT(data->in_num) - 1;
  4000		data->have_temp = 0;
  4001	
  4002		/*
  4003		 * On some boards, not all available temperature sources are monitored,
  4004		 * even though some of the monitoring registers are unused.
  4005		 * Get list of unused monitoring registers, then detect if any fan
  4006		 * controls are configured to use unmonitored temperature sources.
  4007		 * If so, assign the unmonitored temperature sources to available
  4008		 * monitoring registers.
  4009		 */
  4010		mask = 0;
  4011		available = 0;
  4012		for (i = 0; i < num_reg_temp; i++) {
  4013			if (reg_temp[i] == 0)
  4014				continue;
  4015	
  4016			err = nct6775_read_value(data, data->REG_TEMP_SOURCE[i], &src);
  4017			if (err)
  4018				return err;
  4019			src &= 0x1f;
  4020			if (!src || (mask & BIT(src)))
  4021				available |= BIT(i);
  4022	
  4023			mask |= BIT(src);
  4024		}
  4025	
  4026		/*
  4027		 * Now find unmonitored temperature registers and enable monitoring
  4028		 * if additional monitoring registers are available.
  4029		 */
  4030		err = add_temp_sensors(data, data->REG_TEMP_SEL, &available, &mask);
  4031		if (err)
  4032			return err;
  4033		err = add_temp_sensors(data, data->REG_WEIGHT_TEMP_SEL, &available, &mask);
  4034		if (err)
  4035			return err;
  4036	
  4037		mask = 0;
  4038		s = NUM_TEMP_FIXED;	/* First dynamic temperature attribute */
  4039		for (i = 0; i < num_reg_temp; i++) {
  4040			if (reg_temp[i] == 0)
  4041				continue;
  4042	
  4043			err = nct6775_read_value(data, data->REG_TEMP_SOURCE[i], &src);
  4044			if (err)
  4045				return err;
  4046			src &= 0x1f;
  4047			if (!src || (mask & BIT(src)))
  4048				continue;
  4049	
  4050			if (!(data->temp_mask & BIT(src))) {
  4051				dev_info(dev,
  4052					 "Invalid temperature source %d at index %d, source register 0x%x, temp register 0x%x\n",
  4053					 src, i, data->REG_TEMP_SOURCE[i], reg_temp[i]);
  4054				continue;
  4055			}
  4056	
  4057			mask |= BIT(src);
  4058	
  4059			/* Use fixed index for SYSTIN(1), CPUTIN(2), AUXTIN(3) */
  4060			if (src <= data->temp_fixed_num) {
  4061				data->have_temp |= BIT(src - 1);
  4062				data->have_temp_fixed |= BIT(src - 1);
  4063				data->reg_temp[0][src - 1] = reg_temp[i];
  4064				data->reg_temp[1][src - 1] = reg_temp_over[i];
  4065				data->reg_temp[2][src - 1] = reg_temp_hyst[i];
  4066				if (reg_temp_crit_h && reg_temp_crit_h[i])
  4067					data->reg_temp[3][src - 1] = reg_temp_crit_h[i];
  4068				else if (reg_temp_crit[src - 1])
  4069					data->reg_temp[3][src - 1]
  4070					  = reg_temp_crit[src - 1];
  4071				if (reg_temp_crit_l && reg_temp_crit_l[i])
  4072					data->reg_temp[4][src - 1] = reg_temp_crit_l[i];
  4073				data->reg_temp_config[src - 1] = reg_temp_config[i];
  4074				data->temp_src[src - 1] = src;
  4075				continue;
  4076			}
  4077	
  4078			if (s >= NUM_TEMP)
  4079				continue;
  4080	
  4081			/* Use dynamic index for other sources */
  4082			data->have_temp |= BIT(s);
  4083			data->reg_temp[0][s] = reg_temp[i];
  4084			data->reg_temp[1][s] = reg_temp_over[i];
  4085			data->reg_temp[2][s] = reg_temp_hyst[i];
  4086			data->reg_temp_config[s] = reg_temp_config[i];
  4087			if (reg_temp_crit_h && reg_temp_crit_h[i])
  4088				data->reg_temp[3][s] = reg_temp_crit_h[i];
  4089			else if (reg_temp_crit[src - 1])
  4090				data->reg_temp[3][s] = reg_temp_crit[src - 1];
  4091			if (reg_temp_crit_l && reg_temp_crit_l[i])
  4092				data->reg_temp[4][s] = reg_temp_crit_l[i];
  4093	
  4094			data->temp_src[s] = src;
  4095			s++;
  4096		}
  4097	
  4098		/*
  4099		 * Repeat with temperatures used for fan control.
  4100		 * This set of registers does not support limits.
  4101		 */
  4102		for (i = 0; i < num_reg_temp_mon; i++) {
  4103			if (reg_temp_mon[i] == 0)
  4104				continue;
  4105	
  4106			err = nct6775_read_value(data, data->REG_TEMP_SEL[i], &src);
  4107			if (err)
  4108				return err;
  4109			src &= 0x1f;
  4110			if (!src)
  4111				continue;
  4112	
  4113			if (!(data->temp_mask & BIT(src))) {
  4114				dev_info(dev,
  4115					 "Invalid temperature source %d at index %d, source register 0x%x, temp register 0x%x\n",
  4116					 src, i, data->REG_TEMP_SEL[i],
  4117					 reg_temp_mon[i]);
  4118				continue;
  4119			}
  4120	
  4121			/*
  4122			 * For virtual temperature sources, the 'virtual' temperature
  4123			 * for each fan reflects a different temperature, and there
  4124			 * are no duplicates.
  4125			 */
  4126			if (!(data->virt_temp_mask & BIT(src))) {
  4127				if (mask & BIT(src))
  4128					continue;
  4129				mask |= BIT(src);
  4130			}
  4131	
  4132			/* Use fixed index for SYSTIN(1), CPUTIN(2), AUXTIN(3) */
  4133			if (src <= data->temp_fixed_num) {
  4134				if (data->have_temp & BIT(src - 1))
  4135					continue;
  4136				data->have_temp |= BIT(src - 1);
  4137				data->have_temp_fixed |= BIT(src - 1);
  4138				data->reg_temp[0][src - 1] = reg_temp_mon[i];
  4139				data->temp_src[src - 1] = src;
  4140				continue;
  4141			}
  4142	
  4143			if (s >= NUM_TEMP)
  4144				continue;
  4145	
  4146			/* Use dynamic index for other sources */
  4147			data->have_temp |= BIT(s);
  4148			data->reg_temp[0][s] = reg_temp_mon[i];
  4149			data->temp_src[s] = src;
  4150			s++;
  4151		}
  4152
kernel test robot June 20, 2023, 3:21 a.m. UTC | #4
Hi Andy,

kernel test robot noticed the following build warnings:

[auto build test WARNING on groeck-staging/hwmon-next]
[also build test WARNING on next-20230619]
[cannot apply to linus/master v6.4-rc7]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Andy-Shevchenko/hwmon-nct6775-Fix-use-of-undefined-variable/20230619-213352
base:   https://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git hwmon-next
patch link:    https://lore.kernel.org/r/20230619133257.57569-1-andriy.shevchenko%40linux.intel.com
patch subject: [PATCH v1 1/1] hwmon: (nct6775) Fix use of undefined variable
config: nios2-randconfig-s053-20230618 (https://download.01.org/0day-ci/archive/20230620/202306201028.JdLRkqNh-lkp@intel.com/config)
compiler: nios2-linux-gcc (GCC) 12.3.0
reproduce: (https://download.01.org/0day-ci/archive/20230620/202306201028.JdLRkqNh-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202306201028.JdLRkqNh-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
>> drivers/hwmon/nct6775-core.c:3854:32: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned long *map @@     got unsigned short [usertype] have_in @@
   drivers/hwmon/nct6775-core.c:3854:32: sparse:     expected unsigned long *map
   drivers/hwmon/nct6775-core.c:3854:32: sparse:     got unsigned short [usertype] have_in
>> drivers/hwmon/nct6775-core.c:3854:28: sparse: sparse: non size-preserving integer to pointer cast

vim +3854 drivers/hwmon/nct6775-core.c

  3444	
  3445	int nct6775_probe(struct device *dev, struct nct6775_data *data,
  3446			  const struct regmap_config *regmapcfg)
  3447	{
  3448		int i, s, err = 0;
  3449		int mask, available;
  3450		u16 src;
  3451		const u16 *reg_temp, *reg_temp_over, *reg_temp_hyst, *reg_temp_config;
  3452		const u16 *reg_temp_mon, *reg_temp_alternate, *reg_temp_crit;
  3453		const u16 *reg_temp_crit_l = NULL, *reg_temp_crit_h = NULL;
  3454		int num_reg_temp, num_reg_temp_mon, num_reg_tsi_temp;
  3455		struct device *hwmon_dev;
  3456		struct sensor_template_group tsi_temp_tg;
  3457	
  3458		data->regmap = devm_regmap_init(dev, NULL, data, regmapcfg);
  3459		if (IS_ERR(data->regmap))
  3460			return PTR_ERR(data->regmap);
  3461	
  3462		mutex_init(&data->update_lock);
  3463		data->name = nct6775_device_names[data->kind];
  3464		data->bank = 0xff;		/* Force initial bank selection */
  3465	
  3466		switch (data->kind) {
  3467		case nct6106:
  3468			data->in_num = 9;
  3469			data->pwm_num = 3;
  3470			data->auto_pwm_num = 4;
  3471			data->temp_fixed_num = 3;
  3472			data->num_temp_alarms = 6;
  3473			data->num_temp_beeps = 6;
  3474	
  3475			data->fan_from_reg = fan_from_reg13;
  3476			data->fan_from_reg_min = fan_from_reg13;
  3477	
  3478			data->temp_label = nct6776_temp_label;
  3479			data->temp_mask = NCT6776_TEMP_MASK;
  3480			data->virt_temp_mask = NCT6776_VIRT_TEMP_MASK;
  3481	
  3482			data->REG_VBAT = NCT6106_REG_VBAT;
  3483			data->REG_DIODE = NCT6106_REG_DIODE;
  3484			data->DIODE_MASK = NCT6106_DIODE_MASK;
  3485			data->REG_VIN = NCT6106_REG_IN;
  3486			data->REG_IN_MINMAX[0] = NCT6106_REG_IN_MIN;
  3487			data->REG_IN_MINMAX[1] = NCT6106_REG_IN_MAX;
  3488			data->REG_TARGET = NCT6106_REG_TARGET;
  3489			data->REG_FAN = NCT6106_REG_FAN;
  3490			data->REG_FAN_MODE = NCT6106_REG_FAN_MODE;
  3491			data->REG_FAN_MIN = NCT6106_REG_FAN_MIN;
  3492			data->REG_FAN_PULSES = NCT6106_REG_FAN_PULSES;
  3493			data->FAN_PULSE_SHIFT = NCT6106_FAN_PULSE_SHIFT;
  3494			data->REG_FAN_TIME[0] = NCT6106_REG_FAN_STOP_TIME;
  3495			data->REG_FAN_TIME[1] = NCT6106_REG_FAN_STEP_UP_TIME;
  3496			data->REG_FAN_TIME[2] = NCT6106_REG_FAN_STEP_DOWN_TIME;
  3497			data->REG_TOLERANCE_H = NCT6106_REG_TOLERANCE_H;
  3498			data->REG_PWM[0] = NCT6116_REG_PWM;
  3499			data->REG_PWM[1] = NCT6106_REG_FAN_START_OUTPUT;
  3500			data->REG_PWM[2] = NCT6106_REG_FAN_STOP_OUTPUT;
  3501			data->REG_PWM[5] = NCT6106_REG_WEIGHT_DUTY_STEP;
  3502			data->REG_PWM[6] = NCT6106_REG_WEIGHT_DUTY_BASE;
  3503			data->REG_PWM_READ = NCT6106_REG_PWM_READ;
  3504			data->REG_PWM_MODE = NCT6106_REG_PWM_MODE;
  3505			data->PWM_MODE_MASK = NCT6106_PWM_MODE_MASK;
  3506			data->REG_AUTO_TEMP = NCT6106_REG_AUTO_TEMP;
  3507			data->REG_AUTO_PWM = NCT6106_REG_AUTO_PWM;
  3508			data->REG_CRITICAL_TEMP = NCT6106_REG_CRITICAL_TEMP;
  3509			data->REG_CRITICAL_TEMP_TOLERANCE
  3510			  = NCT6106_REG_CRITICAL_TEMP_TOLERANCE;
  3511			data->REG_CRITICAL_PWM_ENABLE = NCT6106_REG_CRITICAL_PWM_ENABLE;
  3512			data->CRITICAL_PWM_ENABLE_MASK
  3513			  = NCT6106_CRITICAL_PWM_ENABLE_MASK;
  3514			data->REG_CRITICAL_PWM = NCT6106_REG_CRITICAL_PWM;
  3515			data->REG_TEMP_OFFSET = NCT6106_REG_TEMP_OFFSET;
  3516			data->REG_TEMP_SOURCE = NCT6106_REG_TEMP_SOURCE;
  3517			data->REG_TEMP_SEL = NCT6116_REG_TEMP_SEL;
  3518			data->REG_WEIGHT_TEMP_SEL = NCT6106_REG_WEIGHT_TEMP_SEL;
  3519			data->REG_WEIGHT_TEMP[0] = NCT6106_REG_WEIGHT_TEMP_STEP;
  3520			data->REG_WEIGHT_TEMP[1] = NCT6106_REG_WEIGHT_TEMP_STEP_TOL;
  3521			data->REG_WEIGHT_TEMP[2] = NCT6106_REG_WEIGHT_TEMP_BASE;
  3522			data->REG_ALARM = NCT6106_REG_ALARM;
  3523			data->ALARM_BITS = NCT6106_ALARM_BITS;
  3524			data->REG_BEEP = NCT6106_REG_BEEP;
  3525			data->BEEP_BITS = NCT6106_BEEP_BITS;
  3526			data->REG_TSI_TEMP = NCT6106_REG_TSI_TEMP;
  3527	
  3528			reg_temp = NCT6106_REG_TEMP;
  3529			reg_temp_mon = NCT6106_REG_TEMP_MON;
  3530			num_reg_temp = ARRAY_SIZE(NCT6106_REG_TEMP);
  3531			num_reg_temp_mon = ARRAY_SIZE(NCT6106_REG_TEMP_MON);
  3532			num_reg_tsi_temp = ARRAY_SIZE(NCT6106_REG_TSI_TEMP);
  3533			reg_temp_over = NCT6106_REG_TEMP_OVER;
  3534			reg_temp_hyst = NCT6106_REG_TEMP_HYST;
  3535			reg_temp_config = NCT6106_REG_TEMP_CONFIG;
  3536			reg_temp_alternate = NCT6106_REG_TEMP_ALTERNATE;
  3537			reg_temp_crit = NCT6106_REG_TEMP_CRIT;
  3538			reg_temp_crit_l = NCT6106_REG_TEMP_CRIT_L;
  3539			reg_temp_crit_h = NCT6106_REG_TEMP_CRIT_H;
  3540	
  3541			break;
  3542		case nct6116:
  3543			data->in_num = 9;
  3544			data->pwm_num = 3;
  3545			data->auto_pwm_num = 4;
  3546			data->temp_fixed_num = 3;
  3547			data->num_temp_alarms = 3;
  3548			data->num_temp_beeps = 3;
  3549	
  3550			data->fan_from_reg = fan_from_reg13;
  3551			data->fan_from_reg_min = fan_from_reg13;
  3552	
  3553			data->temp_label = nct6776_temp_label;
  3554			data->temp_mask = NCT6776_TEMP_MASK;
  3555			data->virt_temp_mask = NCT6776_VIRT_TEMP_MASK;
  3556	
  3557			data->REG_VBAT = NCT6106_REG_VBAT;
  3558			data->REG_DIODE = NCT6106_REG_DIODE;
  3559			data->DIODE_MASK = NCT6106_DIODE_MASK;
  3560			data->REG_VIN = NCT6106_REG_IN;
  3561			data->REG_IN_MINMAX[0] = NCT6106_REG_IN_MIN;
  3562			data->REG_IN_MINMAX[1] = NCT6106_REG_IN_MAX;
  3563			data->REG_TARGET = NCT6116_REG_TARGET;
  3564			data->REG_FAN = NCT6116_REG_FAN;
  3565			data->REG_FAN_MODE = NCT6116_REG_FAN_MODE;
  3566			data->REG_FAN_MIN = NCT6116_REG_FAN_MIN;
  3567			data->REG_FAN_PULSES = NCT6116_REG_FAN_PULSES;
  3568			data->FAN_PULSE_SHIFT = NCT6116_FAN_PULSE_SHIFT;
  3569			data->REG_FAN_TIME[0] = NCT6116_REG_FAN_STOP_TIME;
  3570			data->REG_FAN_TIME[1] = NCT6116_REG_FAN_STEP_UP_TIME;
  3571			data->REG_FAN_TIME[2] = NCT6116_REG_FAN_STEP_DOWN_TIME;
  3572			data->REG_TOLERANCE_H = NCT6116_REG_TOLERANCE_H;
  3573			data->REG_PWM[0] = NCT6116_REG_PWM;
  3574			data->REG_PWM[1] = NCT6116_REG_FAN_START_OUTPUT;
  3575			data->REG_PWM[2] = NCT6116_REG_FAN_STOP_OUTPUT;
  3576			data->REG_PWM[5] = NCT6106_REG_WEIGHT_DUTY_STEP;
  3577			data->REG_PWM[6] = NCT6106_REG_WEIGHT_DUTY_BASE;
  3578			data->REG_PWM_READ = NCT6106_REG_PWM_READ;
  3579			data->REG_PWM_MODE = NCT6106_REG_PWM_MODE;
  3580			data->PWM_MODE_MASK = NCT6106_PWM_MODE_MASK;
  3581			data->REG_AUTO_TEMP = NCT6116_REG_AUTO_TEMP;
  3582			data->REG_AUTO_PWM = NCT6116_REG_AUTO_PWM;
  3583			data->REG_CRITICAL_TEMP = NCT6116_REG_CRITICAL_TEMP;
  3584			data->REG_CRITICAL_TEMP_TOLERANCE
  3585			  = NCT6116_REG_CRITICAL_TEMP_TOLERANCE;
  3586			data->REG_CRITICAL_PWM_ENABLE = NCT6116_REG_CRITICAL_PWM_ENABLE;
  3587			data->CRITICAL_PWM_ENABLE_MASK
  3588			  = NCT6106_CRITICAL_PWM_ENABLE_MASK;
  3589			data->REG_CRITICAL_PWM = NCT6116_REG_CRITICAL_PWM;
  3590			data->REG_TEMP_OFFSET = NCT6106_REG_TEMP_OFFSET;
  3591			data->REG_TEMP_SOURCE = NCT6116_REG_TEMP_SOURCE;
  3592			data->REG_TEMP_SEL = NCT6116_REG_TEMP_SEL;
  3593			data->REG_WEIGHT_TEMP_SEL = NCT6106_REG_WEIGHT_TEMP_SEL;
  3594			data->REG_WEIGHT_TEMP[0] = NCT6106_REG_WEIGHT_TEMP_STEP;
  3595			data->REG_WEIGHT_TEMP[1] = NCT6106_REG_WEIGHT_TEMP_STEP_TOL;
  3596			data->REG_WEIGHT_TEMP[2] = NCT6106_REG_WEIGHT_TEMP_BASE;
  3597			data->REG_ALARM = NCT6106_REG_ALARM;
  3598			data->ALARM_BITS = NCT6116_ALARM_BITS;
  3599			data->REG_BEEP = NCT6106_REG_BEEP;
  3600			data->BEEP_BITS = NCT6116_BEEP_BITS;
  3601			data->REG_TSI_TEMP = NCT6116_REG_TSI_TEMP;
  3602	
  3603			reg_temp = NCT6106_REG_TEMP;
  3604			reg_temp_mon = NCT6106_REG_TEMP_MON;
  3605			num_reg_temp = ARRAY_SIZE(NCT6106_REG_TEMP);
  3606			num_reg_temp_mon = ARRAY_SIZE(NCT6106_REG_TEMP_MON);
  3607			num_reg_tsi_temp = ARRAY_SIZE(NCT6116_REG_TSI_TEMP);
  3608			reg_temp_over = NCT6106_REG_TEMP_OVER;
  3609			reg_temp_hyst = NCT6106_REG_TEMP_HYST;
  3610			reg_temp_config = NCT6106_REG_TEMP_CONFIG;
  3611			reg_temp_alternate = NCT6106_REG_TEMP_ALTERNATE;
  3612			reg_temp_crit = NCT6106_REG_TEMP_CRIT;
  3613			reg_temp_crit_l = NCT6106_REG_TEMP_CRIT_L;
  3614			reg_temp_crit_h = NCT6106_REG_TEMP_CRIT_H;
  3615	
  3616			break;
  3617		case nct6775:
  3618			data->in_num = 9;
  3619			data->pwm_num = 3;
  3620			data->auto_pwm_num = 6;
  3621			data->has_fan_div = true;
  3622			data->temp_fixed_num = 3;
  3623			data->num_temp_alarms = 3;
  3624			data->num_temp_beeps = 3;
  3625	
  3626			data->ALARM_BITS = NCT6775_ALARM_BITS;
  3627			data->BEEP_BITS = NCT6775_BEEP_BITS;
  3628	
  3629			data->fan_from_reg = fan_from_reg16;
  3630			data->fan_from_reg_min = fan_from_reg8;
  3631			data->target_temp_mask = 0x7f;
  3632			data->tolerance_mask = 0x0f;
  3633			data->speed_tolerance_limit = 15;
  3634	
  3635			data->temp_label = nct6775_temp_label;
  3636			data->temp_mask = NCT6775_TEMP_MASK;
  3637			data->virt_temp_mask = NCT6775_VIRT_TEMP_MASK;
  3638	
  3639			data->REG_CONFIG = NCT6775_REG_CONFIG;
  3640			data->REG_VBAT = NCT6775_REG_VBAT;
  3641			data->REG_DIODE = NCT6775_REG_DIODE;
  3642			data->DIODE_MASK = NCT6775_DIODE_MASK;
  3643			data->REG_VIN = NCT6775_REG_IN;
  3644			data->REG_IN_MINMAX[0] = NCT6775_REG_IN_MIN;
  3645			data->REG_IN_MINMAX[1] = NCT6775_REG_IN_MAX;
  3646			data->REG_TARGET = NCT6775_REG_TARGET;
  3647			data->REG_FAN = NCT6775_REG_FAN;
  3648			data->REG_FAN_MODE = NCT6775_REG_FAN_MODE;
  3649			data->REG_FAN_MIN = NCT6775_REG_FAN_MIN;
  3650			data->REG_FAN_PULSES = NCT6775_REG_FAN_PULSES;
  3651			data->FAN_PULSE_SHIFT = NCT6775_FAN_PULSE_SHIFT;
  3652			data->REG_FAN_TIME[0] = NCT6775_REG_FAN_STOP_TIME;
  3653			data->REG_FAN_TIME[1] = NCT6775_REG_FAN_STEP_UP_TIME;
  3654			data->REG_FAN_TIME[2] = NCT6775_REG_FAN_STEP_DOWN_TIME;
  3655			data->REG_PWM[0] = NCT6775_REG_PWM;
  3656			data->REG_PWM[1] = NCT6775_REG_FAN_START_OUTPUT;
  3657			data->REG_PWM[2] = NCT6775_REG_FAN_STOP_OUTPUT;
  3658			data->REG_PWM[3] = NCT6775_REG_FAN_MAX_OUTPUT;
  3659			data->REG_PWM[4] = NCT6775_REG_FAN_STEP_OUTPUT;
  3660			data->REG_PWM[5] = NCT6775_REG_WEIGHT_DUTY_STEP;
  3661			data->REG_PWM_READ = NCT6775_REG_PWM_READ;
  3662			data->REG_PWM_MODE = NCT6775_REG_PWM_MODE;
  3663			data->PWM_MODE_MASK = NCT6775_PWM_MODE_MASK;
  3664			data->REG_AUTO_TEMP = NCT6775_REG_AUTO_TEMP;
  3665			data->REG_AUTO_PWM = NCT6775_REG_AUTO_PWM;
  3666			data->REG_CRITICAL_TEMP = NCT6775_REG_CRITICAL_TEMP;
  3667			data->REG_CRITICAL_TEMP_TOLERANCE
  3668			  = NCT6775_REG_CRITICAL_TEMP_TOLERANCE;
  3669			data->REG_TEMP_OFFSET = NCT6775_REG_TEMP_OFFSET;
  3670			data->REG_TEMP_SOURCE = NCT6775_REG_TEMP_SOURCE;
  3671			data->REG_TEMP_SEL = NCT6775_REG_TEMP_SEL;
  3672			data->REG_WEIGHT_TEMP_SEL = NCT6775_REG_WEIGHT_TEMP_SEL;
  3673			data->REG_WEIGHT_TEMP[0] = NCT6775_REG_WEIGHT_TEMP_STEP;
  3674			data->REG_WEIGHT_TEMP[1] = NCT6775_REG_WEIGHT_TEMP_STEP_TOL;
  3675			data->REG_WEIGHT_TEMP[2] = NCT6775_REG_WEIGHT_TEMP_BASE;
  3676			data->REG_ALARM = NCT6775_REG_ALARM;
  3677			data->REG_BEEP = NCT6775_REG_BEEP;
  3678			data->REG_TSI_TEMP = NCT6775_REG_TSI_TEMP;
  3679	
  3680			reg_temp = NCT6775_REG_TEMP;
  3681			reg_temp_mon = NCT6775_REG_TEMP_MON;
  3682			num_reg_temp = ARRAY_SIZE(NCT6775_REG_TEMP);
  3683			num_reg_temp_mon = ARRAY_SIZE(NCT6775_REG_TEMP_MON);
  3684			num_reg_tsi_temp = ARRAY_SIZE(NCT6775_REG_TSI_TEMP);
  3685			reg_temp_over = NCT6775_REG_TEMP_OVER;
  3686			reg_temp_hyst = NCT6775_REG_TEMP_HYST;
  3687			reg_temp_config = NCT6775_REG_TEMP_CONFIG;
  3688			reg_temp_alternate = NCT6775_REG_TEMP_ALTERNATE;
  3689			reg_temp_crit = NCT6775_REG_TEMP_CRIT;
  3690	
  3691			break;
  3692		case nct6776:
  3693			data->in_num = 9;
  3694			data->pwm_num = 3;
  3695			data->auto_pwm_num = 4;
  3696			data->has_fan_div = false;
  3697			data->temp_fixed_num = 3;
  3698			data->num_temp_alarms = 3;
  3699			data->num_temp_beeps = 6;
  3700	
  3701			data->ALARM_BITS = NCT6776_ALARM_BITS;
  3702			data->BEEP_BITS = NCT6776_BEEP_BITS;
  3703	
  3704			data->fan_from_reg = fan_from_reg13;
  3705			data->fan_from_reg_min = fan_from_reg13;
  3706			data->target_temp_mask = 0xff;
  3707			data->tolerance_mask = 0x07;
  3708			data->speed_tolerance_limit = 63;
  3709	
  3710			data->temp_label = nct6776_temp_label;
  3711			data->temp_mask = NCT6776_TEMP_MASK;
  3712			data->virt_temp_mask = NCT6776_VIRT_TEMP_MASK;
  3713	
  3714			data->REG_CONFIG = NCT6775_REG_CONFIG;
  3715			data->REG_VBAT = NCT6775_REG_VBAT;
  3716			data->REG_DIODE = NCT6775_REG_DIODE;
  3717			data->DIODE_MASK = NCT6775_DIODE_MASK;
  3718			data->REG_VIN = NCT6775_REG_IN;
  3719			data->REG_IN_MINMAX[0] = NCT6775_REG_IN_MIN;
  3720			data->REG_IN_MINMAX[1] = NCT6775_REG_IN_MAX;
  3721			data->REG_TARGET = NCT6775_REG_TARGET;
  3722			data->REG_FAN = NCT6775_REG_FAN;
  3723			data->REG_FAN_MODE = NCT6775_REG_FAN_MODE;
  3724			data->REG_FAN_MIN = NCT6776_REG_FAN_MIN;
  3725			data->REG_FAN_PULSES = NCT6776_REG_FAN_PULSES;
  3726			data->FAN_PULSE_SHIFT = NCT6775_FAN_PULSE_SHIFT;
  3727			data->REG_FAN_TIME[0] = NCT6775_REG_FAN_STOP_TIME;
  3728			data->REG_FAN_TIME[1] = NCT6776_REG_FAN_STEP_UP_TIME;
  3729			data->REG_FAN_TIME[2] = NCT6776_REG_FAN_STEP_DOWN_TIME;
  3730			data->REG_TOLERANCE_H = NCT6776_REG_TOLERANCE_H;
  3731			data->REG_PWM[0] = NCT6775_REG_PWM;
  3732			data->REG_PWM[1] = NCT6775_REG_FAN_START_OUTPUT;
  3733			data->REG_PWM[2] = NCT6775_REG_FAN_STOP_OUTPUT;
  3734			data->REG_PWM[5] = NCT6775_REG_WEIGHT_DUTY_STEP;
  3735			data->REG_PWM[6] = NCT6776_REG_WEIGHT_DUTY_BASE;
  3736			data->REG_PWM_READ = NCT6775_REG_PWM_READ;
  3737			data->REG_PWM_MODE = NCT6776_REG_PWM_MODE;
  3738			data->PWM_MODE_MASK = NCT6776_PWM_MODE_MASK;
  3739			data->REG_AUTO_TEMP = NCT6775_REG_AUTO_TEMP;
  3740			data->REG_AUTO_PWM = NCT6775_REG_AUTO_PWM;
  3741			data->REG_CRITICAL_TEMP = NCT6775_REG_CRITICAL_TEMP;
  3742			data->REG_CRITICAL_TEMP_TOLERANCE
  3743			  = NCT6775_REG_CRITICAL_TEMP_TOLERANCE;
  3744			data->REG_TEMP_OFFSET = NCT6775_REG_TEMP_OFFSET;
  3745			data->REG_TEMP_SOURCE = NCT6775_REG_TEMP_SOURCE;
  3746			data->REG_TEMP_SEL = NCT6775_REG_TEMP_SEL;
  3747			data->REG_WEIGHT_TEMP_SEL = NCT6775_REG_WEIGHT_TEMP_SEL;
  3748			data->REG_WEIGHT_TEMP[0] = NCT6775_REG_WEIGHT_TEMP_STEP;
  3749			data->REG_WEIGHT_TEMP[1] = NCT6775_REG_WEIGHT_TEMP_STEP_TOL;
  3750			data->REG_WEIGHT_TEMP[2] = NCT6775_REG_WEIGHT_TEMP_BASE;
  3751			data->REG_ALARM = NCT6775_REG_ALARM;
  3752			data->REG_BEEP = NCT6776_REG_BEEP;
  3753			data->REG_TSI_TEMP = NCT6776_REG_TSI_TEMP;
  3754	
  3755			reg_temp = NCT6775_REG_TEMP;
  3756			reg_temp_mon = NCT6775_REG_TEMP_MON;
  3757			num_reg_temp = ARRAY_SIZE(NCT6775_REG_TEMP);
  3758			num_reg_temp_mon = ARRAY_SIZE(NCT6775_REG_TEMP_MON);
  3759			num_reg_tsi_temp = ARRAY_SIZE(NCT6776_REG_TSI_TEMP);
  3760			reg_temp_over = NCT6775_REG_TEMP_OVER;
  3761			reg_temp_hyst = NCT6775_REG_TEMP_HYST;
  3762			reg_temp_config = NCT6776_REG_TEMP_CONFIG;
  3763			reg_temp_alternate = NCT6776_REG_TEMP_ALTERNATE;
  3764			reg_temp_crit = NCT6776_REG_TEMP_CRIT;
  3765	
  3766			break;
  3767		case nct6779:
  3768			data->in_num = 15;
  3769			data->pwm_num = 5;
  3770			data->auto_pwm_num = 4;
  3771			data->has_fan_div = false;
  3772			data->temp_fixed_num = 6;
  3773			data->num_temp_alarms = 2;
  3774			data->num_temp_beeps = 2;
  3775	
  3776			data->ALARM_BITS = NCT6779_ALARM_BITS;
  3777			data->BEEP_BITS = NCT6779_BEEP_BITS;
  3778	
  3779			data->fan_from_reg = fan_from_reg_rpm;
  3780			data->fan_from_reg_min = fan_from_reg13;
  3781			data->target_temp_mask = 0xff;
  3782			data->tolerance_mask = 0x07;
  3783			data->speed_tolerance_limit = 63;
  3784	
  3785			data->temp_label = nct6779_temp_label;
  3786			data->temp_mask = NCT6779_TEMP_MASK;
  3787			data->virt_temp_mask = NCT6779_VIRT_TEMP_MASK;
  3788	
  3789			data->REG_CONFIG = NCT6775_REG_CONFIG;
  3790			data->REG_VBAT = NCT6775_REG_VBAT;
  3791			data->REG_DIODE = NCT6775_REG_DIODE;
  3792			data->DIODE_MASK = NCT6775_DIODE_MASK;
  3793			data->REG_VIN = NCT6779_REG_IN;
  3794			data->REG_IN_MINMAX[0] = NCT6775_REG_IN_MIN;
  3795			data->REG_IN_MINMAX[1] = NCT6775_REG_IN_MAX;
  3796			data->REG_TARGET = NCT6775_REG_TARGET;
  3797			data->REG_FAN = NCT6779_REG_FAN;
  3798			data->REG_FAN_MODE = NCT6775_REG_FAN_MODE;
  3799			data->REG_FAN_MIN = NCT6776_REG_FAN_MIN;
  3800			data->REG_FAN_PULSES = NCT6779_REG_FAN_PULSES;
  3801			data->FAN_PULSE_SHIFT = NCT6775_FAN_PULSE_SHIFT;
  3802			data->REG_FAN_TIME[0] = NCT6775_REG_FAN_STOP_TIME;
  3803			data->REG_FAN_TIME[1] = NCT6776_REG_FAN_STEP_UP_TIME;
  3804			data->REG_FAN_TIME[2] = NCT6776_REG_FAN_STEP_DOWN_TIME;
  3805			data->REG_TOLERANCE_H = NCT6776_REG_TOLERANCE_H;
  3806			data->REG_PWM[0] = NCT6775_REG_PWM;
  3807			data->REG_PWM[1] = NCT6775_REG_FAN_START_OUTPUT;
  3808			data->REG_PWM[2] = NCT6775_REG_FAN_STOP_OUTPUT;
  3809			data->REG_PWM[5] = NCT6775_REG_WEIGHT_DUTY_STEP;
  3810			data->REG_PWM[6] = NCT6776_REG_WEIGHT_DUTY_BASE;
  3811			data->REG_PWM_READ = NCT6775_REG_PWM_READ;
  3812			data->REG_PWM_MODE = NCT6776_REG_PWM_MODE;
  3813			data->PWM_MODE_MASK = NCT6776_PWM_MODE_MASK;
  3814			data->REG_AUTO_TEMP = NCT6775_REG_AUTO_TEMP;
  3815			data->REG_AUTO_PWM = NCT6775_REG_AUTO_PWM;
  3816			data->REG_CRITICAL_TEMP = NCT6775_REG_CRITICAL_TEMP;
  3817			data->REG_CRITICAL_TEMP_TOLERANCE
  3818			  = NCT6775_REG_CRITICAL_TEMP_TOLERANCE;
  3819			data->REG_CRITICAL_PWM_ENABLE = NCT6779_REG_CRITICAL_PWM_ENABLE;
  3820			data->CRITICAL_PWM_ENABLE_MASK
  3821			  = NCT6779_CRITICAL_PWM_ENABLE_MASK;
  3822			data->REG_CRITICAL_PWM = NCT6779_REG_CRITICAL_PWM;
  3823			data->REG_TEMP_OFFSET = NCT6779_REG_TEMP_OFFSET;
  3824			data->REG_TEMP_SOURCE = NCT6775_REG_TEMP_SOURCE;
  3825			data->REG_TEMP_SEL = NCT6775_REG_TEMP_SEL;
  3826			data->REG_WEIGHT_TEMP_SEL = NCT6775_REG_WEIGHT_TEMP_SEL;
  3827			data->REG_WEIGHT_TEMP[0] = NCT6775_REG_WEIGHT_TEMP_STEP;
  3828			data->REG_WEIGHT_TEMP[1] = NCT6775_REG_WEIGHT_TEMP_STEP_TOL;
  3829			data->REG_WEIGHT_TEMP[2] = NCT6775_REG_WEIGHT_TEMP_BASE;
  3830			data->REG_ALARM = NCT6779_REG_ALARM;
  3831			data->REG_BEEP = NCT6776_REG_BEEP;
  3832			data->REG_TSI_TEMP = NCT6776_REG_TSI_TEMP;
  3833	
  3834			reg_temp = NCT6779_REG_TEMP;
  3835			reg_temp_mon = NCT6779_REG_TEMP_MON;
  3836			num_reg_temp = ARRAY_SIZE(NCT6779_REG_TEMP);
  3837			num_reg_temp_mon = ARRAY_SIZE(NCT6779_REG_TEMP_MON);
  3838			num_reg_tsi_temp = ARRAY_SIZE(NCT6776_REG_TSI_TEMP);
  3839			reg_temp_over = NCT6779_REG_TEMP_OVER;
  3840			reg_temp_hyst = NCT6779_REG_TEMP_HYST;
  3841			reg_temp_config = NCT6779_REG_TEMP_CONFIG;
  3842			reg_temp_alternate = NCT6779_REG_TEMP_ALTERNATE;
  3843			reg_temp_crit = NCT6779_REG_TEMP_CRIT;
  3844	
  3845			break;
  3846		case nct6791:
  3847		case nct6792:
  3848		case nct6793:
  3849		case nct6795:
  3850		case nct6796:
  3851		case nct6797:
  3852		case nct6798:
  3853		case nct6799:
> 3854			bitmap_set(data->have_in, 0, 15);
  3855			data->pwm_num = (data->kind == nct6796 ||
  3856					 data->kind == nct6797 ||
  3857					 data->kind == nct6798 ||
  3858					 data->kind == nct6799) ? 7 : 6;
  3859			data->auto_pwm_num = 4;
  3860			data->has_fan_div = false;
  3861			data->temp_fixed_num = 6;
  3862			data->num_temp_alarms = 2;
  3863			data->num_temp_beeps = 2;
  3864	
  3865			data->ALARM_BITS = NCT6791_ALARM_BITS;
  3866			data->BEEP_BITS = NCT6779_BEEP_BITS;
  3867	
  3868			data->fan_from_reg = fan_from_reg_rpm;
  3869			data->fan_from_reg_min = fan_from_reg13;
  3870			data->target_temp_mask = 0xff;
  3871			data->tolerance_mask = 0x07;
  3872			data->speed_tolerance_limit = 63;
  3873	
  3874			switch (data->kind) {
  3875			default:
  3876			case nct6791:
  3877				data->temp_label = nct6779_temp_label;
  3878				data->temp_mask = NCT6791_TEMP_MASK;
  3879				data->virt_temp_mask = NCT6791_VIRT_TEMP_MASK;
  3880				break;
  3881			case nct6792:
  3882				data->temp_label = nct6792_temp_label;
  3883				data->temp_mask = NCT6792_TEMP_MASK;
  3884				data->virt_temp_mask = NCT6792_VIRT_TEMP_MASK;
  3885				break;
  3886			case nct6793:
  3887				data->temp_label = nct6793_temp_label;
  3888				data->temp_mask = NCT6793_TEMP_MASK;
  3889				data->virt_temp_mask = NCT6793_VIRT_TEMP_MASK;
  3890				break;
  3891			case nct6795:
  3892			case nct6797:
  3893				data->temp_label = nct6795_temp_label;
  3894				data->temp_mask = NCT6795_TEMP_MASK;
  3895				data->virt_temp_mask = NCT6795_VIRT_TEMP_MASK;
  3896				break;
  3897			case nct6796:
  3898				data->temp_label = nct6796_temp_label;
  3899				data->temp_mask = NCT6796_TEMP_MASK;
  3900				data->virt_temp_mask = NCT6796_VIRT_TEMP_MASK;
  3901				break;
  3902			case nct6798:
  3903				data->temp_label = nct6798_temp_label;
  3904				data->temp_mask = NCT6798_TEMP_MASK;
  3905				data->virt_temp_mask = NCT6798_VIRT_TEMP_MASK;
  3906				break;
  3907			case nct6799:
  3908				data->temp_label = nct6799_temp_label;
  3909				data->temp_mask = NCT6799_TEMP_MASK;
  3910				data->virt_temp_mask = NCT6799_VIRT_TEMP_MASK;
  3911				break;
  3912			}
  3913	
  3914			data->REG_CONFIG = NCT6775_REG_CONFIG;
  3915			data->REG_VBAT = NCT6775_REG_VBAT;
  3916			data->REG_DIODE = NCT6775_REG_DIODE;
  3917			data->DIODE_MASK = NCT6775_DIODE_MASK;
  3918			data->REG_VIN = NCT6779_REG_IN;
  3919			data->REG_IN_MINMAX[0] = NCT6775_REG_IN_MIN;
  3920			data->REG_IN_MINMAX[1] = NCT6775_REG_IN_MAX;
  3921			data->REG_TARGET = NCT6775_REG_TARGET;
  3922			data->REG_FAN = NCT6779_REG_FAN;
  3923			data->REG_FAN_MODE = NCT6775_REG_FAN_MODE;
  3924			data->REG_FAN_MIN = NCT6776_REG_FAN_MIN;
  3925			data->REG_FAN_PULSES = NCT6779_REG_FAN_PULSES;
  3926			data->FAN_PULSE_SHIFT = NCT6775_FAN_PULSE_SHIFT;
  3927			data->REG_FAN_TIME[0] = NCT6775_REG_FAN_STOP_TIME;
  3928			data->REG_FAN_TIME[1] = NCT6776_REG_FAN_STEP_UP_TIME;
  3929			data->REG_FAN_TIME[2] = NCT6776_REG_FAN_STEP_DOWN_TIME;
  3930			data->REG_TOLERANCE_H = NCT6776_REG_TOLERANCE_H;
  3931			data->REG_PWM[0] = NCT6775_REG_PWM;
  3932			data->REG_PWM[1] = NCT6775_REG_FAN_START_OUTPUT;
  3933			data->REG_PWM[2] = NCT6775_REG_FAN_STOP_OUTPUT;
  3934			data->REG_PWM[5] = NCT6791_REG_WEIGHT_DUTY_STEP;
  3935			data->REG_PWM[6] = NCT6791_REG_WEIGHT_DUTY_BASE;
  3936			data->REG_PWM_READ = NCT6775_REG_PWM_READ;
  3937			data->REG_PWM_MODE = NCT6776_REG_PWM_MODE;
  3938			data->PWM_MODE_MASK = NCT6776_PWM_MODE_MASK;
  3939			data->REG_AUTO_TEMP = NCT6775_REG_AUTO_TEMP;
  3940			data->REG_AUTO_PWM = NCT6775_REG_AUTO_PWM;
  3941			data->REG_CRITICAL_TEMP = NCT6775_REG_CRITICAL_TEMP;
  3942			data->REG_CRITICAL_TEMP_TOLERANCE
  3943			  = NCT6775_REG_CRITICAL_TEMP_TOLERANCE;
  3944			data->REG_CRITICAL_PWM_ENABLE = NCT6779_REG_CRITICAL_PWM_ENABLE;
  3945			data->CRITICAL_PWM_ENABLE_MASK
  3946			  = NCT6779_CRITICAL_PWM_ENABLE_MASK;
  3947			data->REG_CRITICAL_PWM = NCT6779_REG_CRITICAL_PWM;
  3948			data->REG_TEMP_OFFSET = NCT6779_REG_TEMP_OFFSET;
  3949			data->REG_TEMP_SOURCE = NCT6775_REG_TEMP_SOURCE;
  3950			data->REG_TEMP_SEL = NCT6775_REG_TEMP_SEL;
  3951			data->REG_WEIGHT_TEMP_SEL = NCT6791_REG_WEIGHT_TEMP_SEL;
  3952			data->REG_WEIGHT_TEMP[0] = NCT6791_REG_WEIGHT_TEMP_STEP;
  3953			data->REG_WEIGHT_TEMP[1] = NCT6791_REG_WEIGHT_TEMP_STEP_TOL;
  3954			data->REG_WEIGHT_TEMP[2] = NCT6791_REG_WEIGHT_TEMP_BASE;
  3955			data->REG_ALARM = NCT6791_REG_ALARM;
  3956			if (data->kind == nct6791)
  3957				data->REG_BEEP = NCT6776_REG_BEEP;
  3958			else
  3959				data->REG_BEEP = NCT6792_REG_BEEP;
  3960			switch (data->kind) {
  3961			case nct6791:
  3962			case nct6792:
  3963			case nct6793:
  3964				data->REG_TSI_TEMP = NCT6776_REG_TSI_TEMP;
  3965				num_reg_tsi_temp = ARRAY_SIZE(NCT6776_REG_TSI_TEMP);
  3966				break;
  3967			case nct6795:
  3968			case nct6796:
  3969			case nct6797:
  3970			case nct6798:
  3971			case nct6799:
  3972				data->REG_TSI_TEMP = NCT6796_REG_TSI_TEMP;
  3973				num_reg_tsi_temp = ARRAY_SIZE(NCT6796_REG_TSI_TEMP);
  3974				break;
  3975			default:
  3976				num_reg_tsi_temp = 0;
  3977				break;
  3978			}
  3979	
  3980			reg_temp = NCT6779_REG_TEMP;
  3981			num_reg_temp = ARRAY_SIZE(NCT6779_REG_TEMP);
  3982			if (data->kind == nct6791) {
  3983				reg_temp_mon = NCT6779_REG_TEMP_MON;
  3984				num_reg_temp_mon = ARRAY_SIZE(NCT6779_REG_TEMP_MON);
  3985			} else {
  3986				reg_temp_mon = NCT6792_REG_TEMP_MON;
  3987				num_reg_temp_mon = ARRAY_SIZE(NCT6792_REG_TEMP_MON);
  3988			}
  3989			reg_temp_over = NCT6779_REG_TEMP_OVER;
  3990			reg_temp_hyst = NCT6779_REG_TEMP_HYST;
  3991			reg_temp_config = NCT6779_REG_TEMP_CONFIG;
  3992			reg_temp_alternate = NCT6779_REG_TEMP_ALTERNATE;
  3993			reg_temp_crit = NCT6779_REG_TEMP_CRIT;
  3994	
  3995			break;
  3996		default:
  3997			return -ENODEV;
  3998		}
  3999		data->have_in = BIT(data->in_num) - 1;
  4000		data->have_temp = 0;
  4001	
  4002		/*
  4003		 * On some boards, not all available temperature sources are monitored,
  4004		 * even though some of the monitoring registers are unused.
  4005		 * Get list of unused monitoring registers, then detect if any fan
  4006		 * controls are configured to use unmonitored temperature sources.
  4007		 * If so, assign the unmonitored temperature sources to available
  4008		 * monitoring registers.
  4009		 */
  4010		mask = 0;
  4011		available = 0;
  4012		for (i = 0; i < num_reg_temp; i++) {
  4013			if (reg_temp[i] == 0)
  4014				continue;
  4015	
  4016			err = nct6775_read_value(data, data->REG_TEMP_SOURCE[i], &src);
  4017			if (err)
  4018				return err;
  4019			src &= 0x1f;
  4020			if (!src || (mask & BIT(src)))
  4021				available |= BIT(i);
  4022	
  4023			mask |= BIT(src);
  4024		}
  4025	
  4026		/*
  4027		 * Now find unmonitored temperature registers and enable monitoring
  4028		 * if additional monitoring registers are available.
  4029		 */
  4030		err = add_temp_sensors(data, data->REG_TEMP_SEL, &available, &mask);
  4031		if (err)
  4032			return err;
  4033		err = add_temp_sensors(data, data->REG_WEIGHT_TEMP_SEL, &available, &mask);
  4034		if (err)
  4035			return err;
  4036	
  4037		mask = 0;
  4038		s = NUM_TEMP_FIXED;	/* First dynamic temperature attribute */
  4039		for (i = 0; i < num_reg_temp; i++) {
  4040			if (reg_temp[i] == 0)
  4041				continue;
  4042	
  4043			err = nct6775_read_value(data, data->REG_TEMP_SOURCE[i], &src);
  4044			if (err)
  4045				return err;
  4046			src &= 0x1f;
  4047			if (!src || (mask & BIT(src)))
  4048				continue;
  4049	
  4050			if (!(data->temp_mask & BIT(src))) {
  4051				dev_info(dev,
  4052					 "Invalid temperature source %d at index %d, source register 0x%x, temp register 0x%x\n",
  4053					 src, i, data->REG_TEMP_SOURCE[i], reg_temp[i]);
  4054				continue;
  4055			}
  4056	
  4057			mask |= BIT(src);
  4058	
  4059			/* Use fixed index for SYSTIN(1), CPUTIN(2), AUXTIN(3) */
  4060			if (src <= data->temp_fixed_num) {
  4061				data->have_temp |= BIT(src - 1);
  4062				data->have_temp_fixed |= BIT(src - 1);
  4063				data->reg_temp[0][src - 1] = reg_temp[i];
  4064				data->reg_temp[1][src - 1] = reg_temp_over[i];
  4065				data->reg_temp[2][src - 1] = reg_temp_hyst[i];
  4066				if (reg_temp_crit_h && reg_temp_crit_h[i])
  4067					data->reg_temp[3][src - 1] = reg_temp_crit_h[i];
  4068				else if (reg_temp_crit[src - 1])
  4069					data->reg_temp[3][src - 1]
  4070					  = reg_temp_crit[src - 1];
  4071				if (reg_temp_crit_l && reg_temp_crit_l[i])
  4072					data->reg_temp[4][src - 1] = reg_temp_crit_l[i];
  4073				data->reg_temp_config[src - 1] = reg_temp_config[i];
  4074				data->temp_src[src - 1] = src;
  4075				continue;
  4076			}
  4077	
  4078			if (s >= NUM_TEMP)
  4079				continue;
  4080	
  4081			/* Use dynamic index for other sources */
  4082			data->have_temp |= BIT(s);
  4083			data->reg_temp[0][s] = reg_temp[i];
  4084			data->reg_temp[1][s] = reg_temp_over[i];
  4085			data->reg_temp[2][s] = reg_temp_hyst[i];
  4086			data->reg_temp_config[s] = reg_temp_config[i];
  4087			if (reg_temp_crit_h && reg_temp_crit_h[i])
  4088				data->reg_temp[3][s] = reg_temp_crit_h[i];
  4089			else if (reg_temp_crit[src - 1])
  4090				data->reg_temp[3][s] = reg_temp_crit[src - 1];
  4091			if (reg_temp_crit_l && reg_temp_crit_l[i])
  4092				data->reg_temp[4][s] = reg_temp_crit_l[i];
  4093	
  4094			data->temp_src[s] = src;
  4095			s++;
  4096		}
  4097	
  4098		/*
  4099		 * Repeat with temperatures used for fan control.
  4100		 * This set of registers does not support limits.
  4101		 */
  4102		for (i = 0; i < num_reg_temp_mon; i++) {
  4103			if (reg_temp_mon[i] == 0)
  4104				continue;
  4105	
  4106			err = nct6775_read_value(data, data->REG_TEMP_SEL[i], &src);
  4107			if (err)
  4108				return err;
  4109			src &= 0x1f;
  4110			if (!src)
  4111				continue;
  4112	
  4113			if (!(data->temp_mask & BIT(src))) {
  4114				dev_info(dev,
  4115					 "Invalid temperature source %d at index %d, source register 0x%x, temp register 0x%x\n",
  4116					 src, i, data->REG_TEMP_SEL[i],
  4117					 reg_temp_mon[i]);
  4118				continue;
  4119			}
  4120	
  4121			/*
  4122			 * For virtual temperature sources, the 'virtual' temperature
  4123			 * for each fan reflects a different temperature, and there
  4124			 * are no duplicates.
  4125			 */
  4126			if (!(data->virt_temp_mask & BIT(src))) {
  4127				if (mask & BIT(src))
  4128					continue;
  4129				mask |= BIT(src);
  4130			}
  4131	
  4132			/* Use fixed index for SYSTIN(1), CPUTIN(2), AUXTIN(3) */
  4133			if (src <= data->temp_fixed_num) {
  4134				if (data->have_temp & BIT(src - 1))
  4135					continue;
  4136				data->have_temp |= BIT(src - 1);
  4137				data->have_temp_fixed |= BIT(src - 1);
  4138				data->reg_temp[0][src - 1] = reg_temp_mon[i];
  4139				data->temp_src[src - 1] = src;
  4140				continue;
  4141			}
  4142	
  4143			if (s >= NUM_TEMP)
  4144				continue;
  4145	
  4146			/* Use dynamic index for other sources */
  4147			data->have_temp |= BIT(s);
  4148			data->reg_temp[0][s] = reg_temp_mon[i];
  4149			data->temp_src[s] = src;
  4150			s++;
  4151		}
  4152
diff mbox series

Patch

diff --git a/drivers/hwmon/nct6775-core.c b/drivers/hwmon/nct6775-core.c
index a334fcf9406d..56aa68875c42 100644
--- a/drivers/hwmon/nct6775-core.c
+++ b/drivers/hwmon/nct6775-core.c
@@ -3829,7 +3829,7 @@  int nct6775_probe(struct device *dev, struct nct6775_data *data,
 	case nct6797:
 	case nct6798:
 	case nct6799:
-		data->in_num = 15;
+		bitmap_set(data->have_in, 0, 15);
 		data->pwm_num = (data->kind == nct6796 ||
 				 data->kind == nct6797 ||
 				 data->kind == nct6798 ||