Lines Matching full:fan
20 * Minimum and maximum FAN allowed speed in percent: from 20% to 100%. Values
22 * setting FAN speed dynamic minimum. For example, if value is set to 14 (40%)
32 * FAN datasheet defines the formula for RPM calculations as RPM = 15/t-high.
114 struct mlxreg_fan *fan = dev_get_drvdata(dev); in mlxreg_fan_read() local
121 tacho = &fan->tacho[channel]; in mlxreg_fan_read()
124 err = regmap_read(fan->regmap, tacho->reg, ®val); in mlxreg_fan_read()
128 *val = MLXREG_FAN_GET_RPM(regval, fan->divider, in mlxreg_fan_read()
129 fan->samples); in mlxreg_fan_read()
133 err = regmap_read(fan->regmap, tacho->reg, ®val); in mlxreg_fan_read()
148 err = regmap_read(fan->regmap, fan->pwm.reg, ®val); in mlxreg_fan_read()
171 struct mlxreg_fan *fan = dev_get_drvdata(dev); in mlxreg_fan_write() local
180 return regmap_write(fan->regmap, fan->pwm.reg, val); in mlxreg_fan_write()
289 struct mlxreg_fan *fan = cdev->devdata; in mlxreg_fan_get_cur_state() local
293 err = regmap_read(fan->regmap, fan->pwm.reg, ®val); in mlxreg_fan_get_cur_state()
295 dev_err(fan->dev, "Failed to query PWM duty\n"); in mlxreg_fan_get_cur_state()
308 struct mlxreg_fan *fan = cdev->devdata; in mlxreg_fan_set_cur_state() local
315 * Verify if this request is for changing allowed FAN dynamical in mlxreg_fan_set_cur_state()
319 * changed from 4 to 6, fan->cooling_levels[0 to 5] will be changed all in mlxreg_fan_set_cur_state()
320 * from 4 to 6. And state 5 (fan->cooling_levels[4]) should be in mlxreg_fan_set_cur_state()
326 fan->cooling_levels[i] = state; in mlxreg_fan_set_cur_state()
328 fan->cooling_levels[i] = i; in mlxreg_fan_set_cur_state()
330 err = regmap_read(fan->regmap, fan->pwm.reg, ®val); in mlxreg_fan_set_cur_state()
332 dev_err(fan->dev, "Failed to query PWM duty\n"); in mlxreg_fan_set_cur_state()
347 state = fan->cooling_levels[state]; in mlxreg_fan_set_cur_state()
348 err = regmap_write(fan->regmap, fan->pwm.reg, in mlxreg_fan_set_cur_state()
351 dev_err(fan->dev, "Failed to write PWM duty\n"); in mlxreg_fan_set_cur_state()
363 static int mlxreg_fan_config(struct mlxreg_fan *fan, in mlxreg_fan_config() argument
370 fan->samples = MLXREG_FAN_TACHO_SAMPLES_PER_PULSE_DEF; in mlxreg_fan_config()
371 fan->divider = MLXREG_FAN_TACHO_DIVIDER_DEF; in mlxreg_fan_config()
375 dev_err(fan->dev, "too many tacho entries: %s\n", in mlxreg_fan_config()
379 fan->tacho[tacho_num].reg = data->reg; in mlxreg_fan_config()
380 fan->tacho[tacho_num].mask = data->mask; in mlxreg_fan_config()
381 fan->tacho[tacho_num++].connected = true; in mlxreg_fan_config()
383 if (fan->pwm.connected) { in mlxreg_fan_config()
384 dev_err(fan->dev, "duplicate pwm entry: %s\n", in mlxreg_fan_config()
388 fan->pwm.reg = data->reg; in mlxreg_fan_config()
389 fan->pwm.connected = true; in mlxreg_fan_config()
392 dev_err(fan->dev, "duplicate conf entry: %s\n", in mlxreg_fan_config()
398 dev_err(fan->dev, "invalid conf entry params: %s\n", in mlxreg_fan_config()
402 fan->samples = data->mask; in mlxreg_fan_config()
403 fan->divider = data->bit; in mlxreg_fan_config()
406 dev_err(fan->dev, "invalid label: %s\n", data->label); in mlxreg_fan_config()
413 fan->cooling_levels[i] = MLXREG_FAN_SPEED_MIN_LEVEL; in mlxreg_fan_config()
415 fan->cooling_levels[i] = i; in mlxreg_fan_config()
423 struct mlxreg_fan *fan; in mlxreg_fan_probe() local
433 fan = devm_kzalloc(&pdev->dev, sizeof(*fan), GFP_KERNEL); in mlxreg_fan_probe()
434 if (!fan) in mlxreg_fan_probe()
437 fan->dev = &pdev->dev; in mlxreg_fan_probe()
438 fan->regmap = pdata->regmap; in mlxreg_fan_probe()
439 platform_set_drvdata(pdev, fan); in mlxreg_fan_probe()
441 err = mlxreg_fan_config(fan, pdata); in mlxreg_fan_probe()
446 fan, in mlxreg_fan_probe()
455 fan->cdev = thermal_cooling_device_register("mlxreg_fan", fan, in mlxreg_fan_probe()
457 if (IS_ERR(fan->cdev)) { in mlxreg_fan_probe()
459 return PTR_ERR(fan->cdev); in mlxreg_fan_probe()
468 struct mlxreg_fan *fan = platform_get_drvdata(pdev); in mlxreg_fan_remove() local
471 thermal_cooling_device_unregister(fan->cdev); in mlxreg_fan_remove()
478 .name = "mlxreg-fan",
487 MODULE_DESCRIPTION("Mellanox FAN driver");
489 MODULE_ALIAS("platform:mlxreg-fan");