tpm_nsc.c (c203e45f069af47ca7623e4dcd8c00bfba2722e4) | tpm_nsc.c (09f50c95425318232c534d931d8c28b96a3ce2c5) |
---|---|
1/* 2 * Copyright (C) 2004 IBM Corporation 3 * 4 * Authors: 5 * Leendert van Doorn <leendert@watson.ibm.com> 6 * Dave Safford <safford@watson.ibm.com> 7 * Reiner Sailer <sailer@watson.ibm.com> 8 * Kylene Hall <kjhall@us.ibm.com> --- 259 unchanged lines hidden (view full) --- 268{ 269 struct tpm_chip *chip = dev_get_drvdata(dev); 270 if ( chip ) { 271 release_region(chip->vendor.base, 2); 272 tpm_remove_hardware(chip->dev); 273 } 274} 275 | 1/* 2 * Copyright (C) 2004 IBM Corporation 3 * 4 * Authors: 5 * Leendert van Doorn <leendert@watson.ibm.com> 6 * Dave Safford <safford@watson.ibm.com> 7 * Reiner Sailer <sailer@watson.ibm.com> 8 * Kylene Hall <kjhall@us.ibm.com> --- 259 unchanged lines hidden (view full) --- 268{ 269 struct tpm_chip *chip = dev_get_drvdata(dev); 270 if ( chip ) { 271 release_region(chip->vendor.base, 2); 272 tpm_remove_hardware(chip->dev); 273 } 274} 275 |
276static struct device_driver nsc_drv = { 277 .name = "tpm_nsc", 278 .bus = &platform_bus_type, 279 .owner = THIS_MODULE, 280 .suspend = tpm_pm_suspend, 281 .resume = tpm_pm_resume, | 276static int tpm_nsc_suspend(struct platform_device *dev, pm_message_t msg) 277{ 278 return tpm_pm_suspend(&dev->dev, msg); 279} 280 281static int tpm_nsc_resume(struct platform_device *dev) 282{ 283 return tpm_pm_resume(&dev->dev); 284} 285 286static struct platform_driver nsc_drv = { 287 .suspend = tpm_nsc_suspend, 288 .resume = tpm_nsc_resume, 289 .driver = { 290 .name = "tpm_nsc", 291 .owner = THIS_MODULE, 292 }, |
282}; 283 284static int __init init_nsc(void) 285{ 286 int rc = 0; 287 int lo, hi, err; 288 int nscAddrBase = TPM_ADDR; 289 struct tpm_chip *chip; 290 unsigned long base; 291 292 /* verify that it is a National part (SID) */ 293 if (tpm_read_index(TPM_ADDR, NSC_SID_INDEX) != 0xEF) { 294 nscAddrBase = (tpm_read_index(TPM_SUPERIO_ADDR, 0x2C)<<8)| 295 (tpm_read_index(TPM_SUPERIO_ADDR, 0x2B)&0xFE); 296 if (tpm_read_index(nscAddrBase, NSC_SID_INDEX) != 0xF6) 297 return -ENODEV; 298 } 299 | 293}; 294 295static int __init init_nsc(void) 296{ 297 int rc = 0; 298 int lo, hi, err; 299 int nscAddrBase = TPM_ADDR; 300 struct tpm_chip *chip; 301 unsigned long base; 302 303 /* verify that it is a National part (SID) */ 304 if (tpm_read_index(TPM_ADDR, NSC_SID_INDEX) != 0xEF) { 305 nscAddrBase = (tpm_read_index(TPM_SUPERIO_ADDR, 0x2C)<<8)| 306 (tpm_read_index(TPM_SUPERIO_ADDR, 0x2B)&0xFE); 307 if (tpm_read_index(nscAddrBase, NSC_SID_INDEX) != 0xF6) 308 return -ENODEV; 309 } 310 |
300 err = driver_register(&nsc_drv); | 311 err = platform_driver_register(&nsc_drv); |
301 if (err) 302 return err; 303 304 hi = tpm_read_index(nscAddrBase, TPM_NSC_BASE0_HI); 305 lo = tpm_read_index(nscAddrBase, TPM_NSC_BASE0_LO); 306 base = (hi<<8) | lo; 307 308 /* enable the DPM module */ 309 tpm_write_index(nscAddrBase, NSC_LDC_INDEX, 0x01); 310 | 312 if (err) 313 return err; 314 315 hi = tpm_read_index(nscAddrBase, TPM_NSC_BASE0_HI); 316 lo = tpm_read_index(nscAddrBase, TPM_NSC_BASE0_LO); 317 base = (hi<<8) | lo; 318 319 /* enable the DPM module */ 320 tpm_write_index(nscAddrBase, NSC_LDC_INDEX, 0x01); 321 |
311 pdev = kzalloc(sizeof(struct platform_device), GFP_KERNEL); | 322 pdev = platform_device_alloc("tpm_nscl0", -1); |
312 if (!pdev) { 313 rc = -ENOMEM; 314 goto err_unreg_drv; 315 } 316 | 323 if (!pdev) { 324 rc = -ENOMEM; 325 goto err_unreg_drv; 326 } 327 |
317 pdev->name = "tpm_nscl0"; 318 pdev->id = -1; | |
319 pdev->num_resources = 0; | 328 pdev->num_resources = 0; |
329 pdev->dev.driver = &nsc_drv.driver; |
|
320 pdev->dev.release = tpm_nsc_remove; | 330 pdev->dev.release = tpm_nsc_remove; |
321 pdev->dev.driver = &nsc_drv; | |
322 323 if ((rc = platform_device_register(pdev)) < 0) 324 goto err_free_dev; 325 326 if (request_region(base, 2, "tpm_nsc0") == NULL ) { 327 rc = -EBUSY; 328 goto err_unreg_dev; 329 } --- 42 unchanged lines hidden (view full) --- 372 373err_rel_reg: 374 release_region(base, 2); 375err_unreg_dev: 376 platform_device_unregister(pdev); 377err_free_dev: 378 kfree(pdev); 379err_unreg_drv: | 331 332 if ((rc = platform_device_register(pdev)) < 0) 333 goto err_free_dev; 334 335 if (request_region(base, 2, "tpm_nsc0") == NULL ) { 336 rc = -EBUSY; 337 goto err_unreg_dev; 338 } --- 42 unchanged lines hidden (view full) --- 381 382err_rel_reg: 383 release_region(base, 2); 384err_unreg_dev: 385 platform_device_unregister(pdev); 386err_free_dev: 387 kfree(pdev); 388err_unreg_drv: |
380 driver_unregister(&nsc_drv); | 389 platform_driver_unregister(&nsc_drv); |
381 return rc; 382} 383 384static void __exit cleanup_nsc(void) 385{ 386 if (pdev) { 387 tpm_nsc_remove(&pdev->dev); 388 platform_device_unregister(pdev); 389 kfree(pdev); 390 pdev = NULL; 391 } 392 | 390 return rc; 391} 392 393static void __exit cleanup_nsc(void) 394{ 395 if (pdev) { 396 tpm_nsc_remove(&pdev->dev); 397 platform_device_unregister(pdev); 398 kfree(pdev); 399 pdev = NULL; 400 } 401 |
393 driver_unregister(&nsc_drv); | 402 platform_driver_unregister(&nsc_drv); |
394} 395 396module_init(init_nsc); 397module_exit(cleanup_nsc); 398 399MODULE_AUTHOR("Leendert van Doorn (leendert@watson.ibm.com)"); 400MODULE_DESCRIPTION("TPM Driver"); 401MODULE_VERSION("2.0"); 402MODULE_LICENSE("GPL"); | 403} 404 405module_init(init_nsc); 406module_exit(cleanup_nsc); 407 408MODULE_AUTHOR("Leendert van Doorn (leendert@watson.ibm.com)"); 409MODULE_DESCRIPTION("TPM Driver"); 410MODULE_VERSION("2.0"); 411MODULE_LICENSE("GPL"); |