aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/hwmon/k8temp.c25
1 files changed, 7 insertions, 18 deletions
diff --git a/drivers/hwmon/k8temp.c b/drivers/hwmon/k8temp.c
index 35aac82ee8eb..49a69c5b3b8d 100644
--- a/drivers/hwmon/k8temp.c
+++ b/drivers/hwmon/k8temp.c
@@ -183,21 +183,17 @@ static int __devinit k8temp_probe(struct pci_dev *pdev,
183 u8 model, stepping; 183 u8 model, stepping;
184 struct k8temp_data *data; 184 struct k8temp_data *data;
185 185
186 data = kzalloc(sizeof(struct k8temp_data), GFP_KERNEL); 186 data = devm_kzalloc(&pdev->dev, sizeof(struct k8temp_data), GFP_KERNEL);
187 if (!data) { 187 if (!data)
188 err = -ENOMEM; 188 return -ENOMEM;
189 goto exit;
190 }
191 189
192 model = boot_cpu_data.x86_model; 190 model = boot_cpu_data.x86_model;
193 stepping = boot_cpu_data.x86_mask; 191 stepping = boot_cpu_data.x86_mask;
194 192
195 /* feature available since SH-C0, exclude older revisions */ 193 /* feature available since SH-C0, exclude older revisions */
196 if (((model == 4) && (stepping == 0)) || 194 if ((model == 4 && stepping == 0) ||
197 ((model == 5) && (stepping <= 1))) { 195 (model == 5 && stepping <= 1))
198 err = -ENODEV; 196 return -ENODEV;
199 goto exit_free;
200 }
201 197
202 /* 198 /*
203 * AMD NPT family 0fh, i.e. RevF and RevG: 199 * AMD NPT family 0fh, i.e. RevF and RevG:
@@ -224,8 +220,7 @@ static int __devinit k8temp_probe(struct pci_dev *pdev,
224 220
225 if (scfg & (SEL_PLACE | SEL_CORE)) { 221 if (scfg & (SEL_PLACE | SEL_CORE)) {
226 dev_err(&pdev->dev, "Configuration bit(s) stuck at 1!\n"); 222 dev_err(&pdev->dev, "Configuration bit(s) stuck at 1!\n");
227 err = -ENODEV; 223 return -ENODEV;
228 goto exit_free;
229 } 224 }
230 225
231 scfg |= (SEL_PLACE | SEL_CORE); 226 scfg |= (SEL_PLACE | SEL_CORE);
@@ -307,10 +302,6 @@ exit_remove:
307 device_remove_file(&pdev->dev, 302 device_remove_file(&pdev->dev,
308 &sensor_dev_attr_temp4_input.dev_attr); 303 &sensor_dev_attr_temp4_input.dev_attr);
309 device_remove_file(&pdev->dev, &dev_attr_name); 304 device_remove_file(&pdev->dev, &dev_attr_name);
310exit_free:
311 pci_set_drvdata(pdev, NULL);
312 kfree(data);
313exit:
314 return err; 305 return err;
315} 306}
316 307
@@ -328,8 +319,6 @@ static void __devexit k8temp_remove(struct pci_dev *pdev)
328 device_remove_file(&pdev->dev, 319 device_remove_file(&pdev->dev,
329 &sensor_dev_attr_temp4_input.dev_attr); 320 &sensor_dev_attr_temp4_input.dev_attr);
330 device_remove_file(&pdev->dev, &dev_attr_name); 321 device_remove_file(&pdev->dev, &dev_attr_name);
331 pci_set_drvdata(pdev, NULL);
332 kfree(data);
333} 322}
334 323
335static struct pci_driver k8temp_driver = { 324static struct pci_driver k8temp_driver = {