diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2024-01-12 13:27:40 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2024-01-12 13:27:40 -0800 |
commit | 5dfec3cf3efbd897d774e3b5c08c2f0deaf9b5ad (patch) | |
tree | df527b523e97fba2c54ba409468575a027225638 /drivers/hwmon/npcm750-pwm-fan.c | |
parent | 7912a6391f3ee7eb9f9a69227a209d502679bc0c (diff) | |
parent | 41c71105a845ec1458680f01644d032a5fbbe0d9 (diff) |
Merge tag 'hwmon-for-v6.8' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging
Pull hwmon updates from Guenter Roeck:
"New drivers:
- pmbus: Support for MPS Multi-phase mp2856/mp2857 controller
- pmbus: Support for MPS Multi-phase mp5990
- Driver for Gigabyte AORUS Waterforce AIO coolers
Added support to existing drivers:
- lm75: Support for AMS AS6200 temperature sensor
- k10temp: Support for AMD Family 19h Model 8h
- max31827: Support for max31828 and max31829
- sht3x: Support for sts3x
- Add support for WMI SMM interface, and various related improvements.
Add support for Optiplex 7000
- emc1403: Support for EMC1442
- npcm750-pwm-fan: Support for NPCM8xx
- nct6775: Add support for 2 additional fan controls
Minor improvements and bug fixes:
- gigabyte_waterforce: Mark status report as received under a spinlock
- aquacomputer_d5next: Remove unneeded CONFIG_DEBUG_FS #ifdef
- gpio-fan: Convert txt bindings to yaml
- smsc47m1: Various cleanups / improvements
- corsair-cpro: use NULL instead of 0
- hp-wmi-sensors: Fix failure to load on EliteDesk 800 G6
- tmp513: Various cleanups
- peci/dimmtemp: Bump timeout
- pc87360: Bounds check data->innr usage
- nct6775: Fix fan speed set failure in automatic mode
- ABI: sysfs-class-hwmon: document various missing attributes
- lm25066, max6650, nct6775: Use i2c_get_match_data()
- aspeed-pwm-tacho: Fix -Wstringop-overflow warning"
* tag 'hwmon-for-v6.8' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging: (59 commits)
hwmon: (gigabyte_waterforce) Mark status report as received under a spinlock
hwmon: (lm75) Fix tmp112 default config
hwmon: (lm75) Add AMS AS6200 temperature sensor
dt-bindings: hwmon: (lm75) Add AMS AS6200 temperature sensor
hwmon: (lm75) remove now-unused include
hwmon: (pmbus) Add support for MPS Multi-phase mp2856/mp2857 controller
dt-bindings: Add MP2856/MP2857 voltage regulator device
hwmon: (aquacomputer_d5next) Remove unneeded CONFIG_DEBUG_FS #ifdef
dt-bindings: hwmon: gpio-fan: Convert txt bindings to yaml
hwmon: (k10temp) Add support for AMD Family 19h Model 8h
hwmon: Add driver for Gigabyte AORUS Waterforce AIO coolers
hwmon: (smsc47m1) Rename global platform device variable
hwmon: (smsc47m1) Simplify device registration
hwmon: (smsc47m1) Convert to platform remove callback returning void
hwmon: (smsc47m1) Mark driver struct with __refdata to prevent section mismatch
MAINTAINERS: Add maintainer for Baikal-T1 PVT hwmon driver
hwmon: (sht3x) add sts3x support
hwmon: (pmbus) Add ltc4286 driver
dt-bindings: hwmon: Add lltc ltc4286 driver bindings
hwmon: (max31827) Add custom attribute for resolution
...
Diffstat (limited to 'drivers/hwmon/npcm750-pwm-fan.c')
-rw-r--r-- | drivers/hwmon/npcm750-pwm-fan.c | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/drivers/hwmon/npcm750-pwm-fan.c b/drivers/hwmon/npcm750-pwm-fan.c index 4702e4edc662..d9733da8ea34 100644 --- a/drivers/hwmon/npcm750-pwm-fan.c +++ b/drivers/hwmon/npcm750-pwm-fan.c @@ -46,9 +46,9 @@ #define NPCM7XX_PWM_CTRL_CH3_EN_BIT BIT(16) /* Define the maximum PWM channel number */ -#define NPCM7XX_PWM_MAX_CHN_NUM 8 +#define NPCM7XX_PWM_MAX_CHN_NUM 12 #define NPCM7XX_PWM_MAX_CHN_NUM_IN_A_MODULE 4 -#define NPCM7XX_PWM_MAX_MODULES 2 +#define NPCM7XX_PWM_MAX_MODULES 3 /* Define the Counter Register, value = 100 for match 100% */ #define NPCM7XX_PWM_COUNTER_DEFAULT_NUM 255 @@ -171,6 +171,10 @@ #define FAN_PREPARE_TO_GET_FIRST_CAPTURE 0x01 #define FAN_ENOUGH_SAMPLE 0x02 +struct npcm_hwmon_info { + u32 pwm_max_channel; +}; + struct npcm7xx_fan_dev { u8 fan_st_flg; u8 fan_pls_per_rev; @@ -204,6 +208,7 @@ struct npcm7xx_pwm_fan_data { struct timer_list fan_timer; struct npcm7xx_fan_dev fan_dev[NPCM7XX_FAN_MAX_CHN_NUM]; struct npcm7xx_cooling_device *cdev[NPCM7XX_PWM_MAX_CHN_NUM]; + const struct npcm_hwmon_info *info; u8 fan_select; }; @@ -542,7 +547,7 @@ static umode_t npcm7xx_pwm_is_visible(const void *_data, u32 attr, int channel) { const struct npcm7xx_pwm_fan_data *data = _data; - if (!data->pwm_present[channel]) + if (!data->pwm_present[channel] || channel >= data->info->pwm_max_channel) return 0; switch (attr) { @@ -638,6 +643,10 @@ static const struct hwmon_channel_info * const npcm7xx_info[] = { HWMON_PWM_INPUT, HWMON_PWM_INPUT, HWMON_PWM_INPUT, + HWMON_PWM_INPUT, + HWMON_PWM_INPUT, + HWMON_PWM_INPUT, + HWMON_PWM_INPUT, HWMON_PWM_INPUT), HWMON_CHANNEL_INFO(fan, HWMON_F_INPUT, @@ -670,6 +679,14 @@ static const struct hwmon_chip_info npcm7xx_chip_info = { .info = npcm7xx_info, }; +static const struct npcm_hwmon_info npxm7xx_hwmon_info = { + .pwm_max_channel = 8, +}; + +static const struct npcm_hwmon_info npxm8xx_hwmon_info = { + .pwm_max_channel = 12, +}; + static u32 npcm7xx_pwm_init(struct npcm7xx_pwm_fan_data *data) { int m, ch; @@ -925,6 +942,10 @@ static int npcm7xx_pwm_fan_probe(struct platform_device *pdev) if (!data) return -ENOMEM; + data->info = device_get_match_data(dev); + if (!data->info) + return -EINVAL; + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pwm"); if (!res) { dev_err(dev, "pwm resource not found\n"); @@ -1017,7 +1038,8 @@ static int npcm7xx_pwm_fan_probe(struct platform_device *pdev) } static const struct of_device_id of_pwm_fan_match_table[] = { - { .compatible = "nuvoton,npcm750-pwm-fan", }, + { .compatible = "nuvoton,npcm750-pwm-fan", .data = &npxm7xx_hwmon_info}, + { .compatible = "nuvoton,npcm845-pwm-fan", .data = &npxm8xx_hwmon_info}, {}, }; MODULE_DEVICE_TABLE(of, of_pwm_fan_match_table); |