Lines Matching refs:fan
77 * @fan: private data;
86 struct mlxreg_fan *fan;
123 struct mlxreg_fan *fan = dev_get_drvdata(dev);
131 tacho = &fan->tacho[channel];
138 if (tacho->prsnt && fan->tachos_per_drwr) {
139 err = regmap_read(fan->regmap, tacho->prsnt, ®val);
147 if (BIT(channel / fan->tachos_per_drwr) & regval) {
154 err = regmap_read(fan->regmap, tacho->reg, ®val);
164 *val = MLXREG_FAN_GET_RPM(regval, fan->divider,
165 fan->samples);
169 err = regmap_read(fan->regmap, tacho->reg, ®val);
182 pwm = &fan->pwm[channel];
185 err = regmap_read(fan->regmap, pwm->reg, ®val);
208 struct mlxreg_fan *fan = dev_get_drvdata(dev);
218 pwm = &fan->pwm[channel];
231 return regmap_write(fan->regmap, pwm->reg, val);
289 HWMON_CHANNEL_INFO(fan,
345 struct mlxreg_fan *fan = pwm->fan;
349 err = regmap_read(fan->regmap, pwm->reg, ®val);
351 dev_err(fan->dev, "Failed to query PWM duty\n");
365 struct mlxreg_fan *fan = pwm->fan;
375 err = regmap_write(fan->regmap, pwm->reg,
378 dev_err(fan->dev, "Failed to write PWM duty\n");
390 static int mlxreg_fan_connect_verify(struct mlxreg_fan *fan,
396 err = regmap_read(fan->regmap, data->capability, ®val);
398 dev_err(fan->dev, "Failed to query capability register 0x%08x\n",
406 static int mlxreg_pwm_connect_verify(struct mlxreg_fan *fan,
412 err = regmap_read(fan->regmap, data->reg, ®val);
414 dev_err(fan->dev, "Failed to query pwm register 0x%08x\n",
422 static int mlxreg_fan_speed_divider_get(struct mlxreg_fan *fan,
428 err = regmap_read(fan->regmap, data->capability, ®val);
430 dev_err(fan->dev, "Failed to query capability register 0x%08x\n",
442 fan->divider = regval * MLXREG_FAN_TACHO_DIV_MIN;
447 static int mlxreg_fan_config(struct mlxreg_fan *fan,
455 fan->samples = MLXREG_FAN_TACHO_SAMPLES_PER_PULSE_DEF;
456 fan->divider = MLXREG_FAN_TACHO_DIV_DEF;
460 dev_err(fan->dev, "too many tacho entries: %s\n",
466 err = mlxreg_fan_connect_verify(fan, data);
475 fan->tacho[tacho_num].reg = data->reg;
476 fan->tacho[tacho_num].mask = data->mask;
477 fan->tacho[tacho_num].prsnt = data->reg_prsnt;
478 fan->tacho[tacho_num++].connected = true;
482 dev_err(fan->dev, "too many pwm entries: %s\n",
489 err = mlxreg_pwm_connect_verify(fan, data);
496 fan->pwm[pwm_num].reg = data->reg;
497 fan->pwm[pwm_num].connected = true;
501 dev_err(fan->dev, "duplicate conf entry: %s\n",
507 dev_err(fan->dev, "invalid conf entry params: %s\n",
512 err = mlxreg_fan_speed_divider_get(fan, data);
517 fan->samples = data->mask;
519 fan->divider = data->bit;
523 dev_err(fan->dev, "invalid label: %s\n", data->label);
533 err = regmap_read(fan->regmap, pdata->capability, ®val);
535 dev_err(fan->dev, "Failed to query capability register 0x%08x\n",
542 dev_err(fan->dev, "Configuration is invalid: drawers num %d tachos num %d\n",
548 fan->tachos_per_drwr = tacho_avail / drwr_avail;
554 static int mlxreg_fan_cooling_config(struct device *dev, struct mlxreg_fan *fan)
559 struct mlxreg_fan_pwm *pwm = &fan->pwm[i];
563 pwm->fan = fan;
582 struct mlxreg_fan *fan;
592 fan = devm_kzalloc(dev, sizeof(*fan), GFP_KERNEL);
593 if (!fan)
596 fan->dev = dev;
597 fan->regmap = pdata->regmap;
599 err = mlxreg_fan_config(fan, pdata);
604 fan,
613 err = mlxreg_fan_cooling_config(dev, fan);
620 .name = "mlxreg-fan",
630 MODULE_ALIAS("platform:mlxreg-fan");