tpm_tis: Use devm_ioremap_resource
[cascardo/linux.git] / drivers / char / tpm / tpm_tis.c
index 2ccad8a..7407835 100644 (file)
@@ -66,8 +66,7 @@ enum tis_defaults {
 };
 
 struct tpm_info {
-       unsigned long start;
-       unsigned long len;
+       struct resource res;
        /* irq > 0 means: use irq $irq;
         * irq = 0 means: autoprobe for an irq;
         * irq = -1 means: no irq support
@@ -76,8 +75,11 @@ struct tpm_info {
 };
 
 static struct tpm_info tis_default_info = {
-       .start = TIS_MEM_BASE,
-       .len = TIS_MEM_LEN,
+       .res = {
+               .start = TIS_MEM_BASE,
+               .end = TIS_MEM_BASE + TIS_MEM_LEN - 1,
+               .flags = IORESOURCE_MEM,
+       },
        .irq = 0,
 };
 
@@ -691,9 +693,9 @@ static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info,
        chip->acpi_dev_handle = acpi_dev_handle;
 #endif
 
-       chip->vendor.iobase = devm_ioremap(dev, tpm_info->start, tpm_info->len);
-       if (!chip->vendor.iobase)
-               return -EIO;
+       chip->vendor.iobase = devm_ioremap_resource(dev, &tpm_info->res);
+       if (IS_ERR(chip->vendor.iobase))
+               return PTR_ERR(chip->vendor.iobase);
 
        /* Maximum timeouts */
        chip->vendor.timeout_a = TIS_TIMEOUT_A_MAX;
@@ -874,9 +876,12 @@ static int tpm_tis_pnp_init(struct pnp_dev *pnp_dev,
 {
        struct tpm_info tpm_info = {};
        acpi_handle acpi_dev_handle = NULL;
+       struct resource *res;
 
-       tpm_info.start = pnp_mem_start(pnp_dev, 0);
-       tpm_info.len = pnp_mem_len(pnp_dev, 0);
+       res = pnp_get_resource(pnp_dev, IORESOURCE_MEM, 0);
+       if (!res)
+               return -ENODEV;
+       tpm_info.res = *res;
 
        if (pnp_irq_valid(pnp_dev, 0))
                tpm_info.irq = pnp_irq(pnp_dev, 0);
@@ -939,12 +944,10 @@ static int tpm_check_resource(struct acpi_resource *ares, void *data)
        struct tpm_info *tpm_info = (struct tpm_info *) data;
        struct resource res;
 
-       if (acpi_dev_resource_interrupt(ares, 0, &res)) {
+       if (acpi_dev_resource_interrupt(ares, 0, &res))
                tpm_info->irq = res.start;
-       } else if (acpi_dev_resource_memory(ares, &res)) {
-               tpm_info->start = res.start;
-               tpm_info->len = resource_size(&res);
-       }
+       else if (acpi_dev_resource_memory(ares, &res))
+               tpm_info->res = res;
 
        return 1;
 }
@@ -977,7 +980,7 @@ static int tpm_tis_acpi_init(struct acpi_device *acpi_dev)
 
        acpi_dev_free_resource_list(&resources);
 
-       if (tpm_info.start == 0 && tpm_info.len == 0) {
+       if (resource_type(&tpm_info.res) != IORESOURCE_MEM) {
                dev_err(&acpi_dev->dev,
                        FW_BUG "TPM2 ACPI table does not define a memory resource\n");
                return -EINVAL;