Lines Matching +full:enum +full:- +full:model
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * k8temp.c - Linux kernel module for hardware monitoring
19 #define TEMP_FROM_REG(val) (((((val) >> 16) & 0xff) - 49) * 1000)
28 u8 sensorsp; /* sensor presence bits - SEL_CORE, SEL_PLACE */
39 static int is_rev_g_desktop(u8 model) in is_rev_g_desktop() argument
43 if (model < 0x69) in is_rev_g_desktop()
46 if (model == 0xc1 || model == 0x6c || model == 0x7c) in is_rev_g_desktop()
58 if ((model == 0x6f || model == 0x7f) && in is_rev_g_desktop()
63 if (model == 0x6b && in is_rev_g_desktop()
71 k8temp_is_visible(const void *drvdata, enum hwmon_sensor_types type, in k8temp_is_visible()
76 if ((channel & 1) && !(data->sensorsp & SEL_PLACE)) in k8temp_is_visible()
79 if ((channel & 2) && !(data->sensorsp & SEL_CORE)) in k8temp_is_visible()
86 k8temp_read(struct device *dev, enum hwmon_sensor_types type, in k8temp_read()
90 struct pci_dev *pdev = to_pci_dev(dev->parent); in k8temp_read()
98 core ^= data->swap_core_select; in k8temp_read()
100 mutex_lock(&data->update_lock); in k8temp_read()
109 mutex_unlock(&data->update_lock); in k8temp_read()
111 *val = TEMP_FROM_REG(temp) + data->temp_offset; in k8temp_read()
137 u8 model, stepping; in k8temp_probe() local
141 data = devm_kzalloc(&pdev->dev, sizeof(struct k8temp_data), GFP_KERNEL); in k8temp_probe()
143 return -ENOMEM; in k8temp_probe()
145 model = boot_cpu_data.x86_model; in k8temp_probe()
148 /* feature available since SH-C0, exclude older revisions */ in k8temp_probe()
149 if ((model == 4 && stepping == 0) || in k8temp_probe()
150 (model == 5 && stepping <= 1)) in k8temp_probe()
151 return -ENODEV; in k8temp_probe()
157 if (model >= 0x40) { in k8temp_probe()
158 data->swap_core_select = 1; in k8temp_probe()
159 dev_warn(&pdev->dev, in k8temp_probe()
160 "Temperature readouts might be wrong - check erratum #141\n"); in k8temp_probe()
168 if (is_rev_g_desktop(model)) in k8temp_probe()
169 data->temp_offset = 21000; in k8temp_probe()
177 dev_err(&pdev->dev, "Configuration bit(s) stuck at 1!\n"); in k8temp_probe()
178 return -ENODEV; in k8temp_probe()
185 pci_read_config_byte(pdev, REG_TEMP, &data->sensorsp); in k8temp_probe()
187 if (data->sensorsp & SEL_PLACE) { in k8temp_probe()
192 if (!((temp >> 16) & 0xff)) /* if temp is 0 -49C is unlikely */ in k8temp_probe()
193 data->sensorsp &= ~SEL_PLACE; in k8temp_probe()
196 if (data->sensorsp & SEL_CORE) { in k8temp_probe()
200 if (!((temp >> 16) & 0xff)) /* if temp is 0 -49C is unlikely */ in k8temp_probe()
201 data->sensorsp &= ~SEL_CORE; in k8temp_probe()
204 mutex_init(&data->update_lock); in k8temp_probe()
206 hwmon_dev = devm_hwmon_device_register_with_info(&pdev->dev, in k8temp_probe()