]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/char/tpm/tpm_nsc.c
[PATCH] tpm: command duration update
[linux-2.6-omap-h63xx.git] / drivers / char / tpm / tpm_nsc.c
index 3dbbe9686c76bffdadd21df90714de250e670339..4c8bc06c7d95af6462d867014c8528a2cc93a12e 100644 (file)
@@ -250,7 +250,7 @@ static struct attribute * nsc_attrs[] = {
 
 static struct attribute_group nsc_attr_grp = { .attrs = nsc_attrs };
 
-static struct tpm_vendor_specific tpm_nsc = {
+static const struct tpm_vendor_specific tpm_nsc = {
        .recv = tpm_nsc_recv,
        .send = tpm_nsc_send,
        .cancel = tpm_nsc_cancel,
@@ -286,7 +286,8 @@ static int __init init_nsc(void)
        int rc = 0;
        int lo, hi;
        int nscAddrBase = TPM_ADDR;
-
+       struct tpm_chip *chip;
+       unsigned long base;
 
        /* verify that it is a National part (SID) */
        if (tpm_read_index(TPM_ADDR, NSC_SID_INDEX) != 0xEF) {
@@ -300,7 +301,7 @@ static int __init init_nsc(void)
 
        hi = tpm_read_index(nscAddrBase, TPM_NSC_BASE0_HI);
        lo = tpm_read_index(nscAddrBase, TPM_NSC_BASE0_LO);
-       tpm_nsc.base = (hi<<8) | lo;
+       base = (hi<<8) | lo;
 
        /* enable the DPM module */
        tpm_write_index(nscAddrBase, NSC_LDC_INDEX, 0x01);
@@ -320,13 +321,15 @@ static int __init init_nsc(void)
        if ((rc = platform_device_register(pdev)) < 0)
                goto err_free_dev;
 
-       if (request_region(tpm_nsc.base, 2, "tpm_nsc0") == NULL ) {
+       if (request_region(base, 2, "tpm_nsc0") == NULL ) {
                rc = -EBUSY;
                goto err_unreg_dev;
        }
 
-       if ((rc = tpm_register_hardware(&pdev->dev, &tpm_nsc)) < 0)
+       if (!(chip = tpm_register_hardware(&pdev->dev, &tpm_nsc))) {
+               rc = -ENODEV;
                goto err_rel_reg;
+       }
 
        dev_dbg(&pdev->dev, "NSC TPM detected\n");
        dev_dbg(&pdev->dev,
@@ -361,10 +364,12 @@ static int __init init_nsc(void)
                 "NSC TPM revision %d\n",
                 tpm_read_index(nscAddrBase, 0x27) & 0x1F);
 
+       chip->vendor.base = base;
+
        return 0;
 
 err_rel_reg:
-       release_region(tpm_nsc.base, 2);
+       release_region(base, 2);
 err_unreg_dev:
        platform_device_unregister(pdev);
 err_free_dev: