dev->gtf_cache = NULL;
 }
 
-static acpi_handle ap_acpi_handle(struct ata_port *ap)
+/**
+ * ata_ap_acpi_handle - provide the acpi_handle for an ata_port
+ * @ap: the acpi_handle returned will correspond to this port
+ *
+ * Returns the acpi_handle for the ACPI namespace object corresponding to
+ * the ata_port passed into the function, or NULL if no such object exists
+ */
+acpi_handle ata_ap_acpi_handle(struct ata_port *ap)
 {
        if (ap->flags & ATA_FLAG_ACPI_SATA)
                return NULL;
                return acpi_get_child(DEVICE_ACPI_HANDLE(ap->host->dev),
                                ap->port_no);
 }
+EXPORT_SYMBOL(ata_ap_acpi_handle);
 
-static acpi_handle dev_acpi_handle(struct ata_device *dev)
+/**
+ * ata_dev_acpi_handle - provide the acpi_handle for an ata_device
+ * @dev: the acpi_device returned will correspond to this port
+ *
+ * Returns the acpi_handle for the ACPI namespace object corresponding to
+ * the ata_device passed into the function, or NULL if no such object exists
+ */
+acpi_handle ata_dev_acpi_handle(struct ata_device *dev)
 {
        acpi_integer adr;
        struct ata_port *ap = dev->link->ap;
                        adr = SATA_ADR(ap->port_no, dev->link->pmp);
                return acpi_get_child(DEVICE_ACPI_HANDLE(ap->host->dev), adr);
        } else
-               return acpi_get_child(ap_acpi_handle(ap), dev->devno);
-}
-
-/**
- * ata_acpi_associate_sata_port - associate SATA port with ACPI objects
- * @ap: target SATA port
- *
- * Look up ACPI objects associated with @ap and initialize acpi_handle
- * fields of @ap, the port and devices accordingly.
- *
- * LOCKING:
- * EH context.
- *
- * RETURNS:
- * 0 on success, -errno on failure.
- */
-void ata_acpi_associate_sata_port(struct ata_port *ap)
-{
-       WARN_ON(!(ap->flags & ATA_FLAG_ACPI_SATA));
-
-       if (!sata_pmp_attached(ap)) {
-               u64 adr = SATA_ADR(ap->port_no, NO_PORT_MULT);
-
-               ap->link.device->acpi_handle =
-                       acpi_get_child(ap->host->acpi_handle, adr);
-       } else {
-               struct ata_link *link;
-
-               ap->link.device->acpi_handle = NULL;
-
-               ata_for_each_link(link, ap, EDGE) {
-                       u64 adr = SATA_ADR(ap->port_no, link->pmp);
-
-                       link->device->acpi_handle =
-                               acpi_get_child(ap->host->acpi_handle, adr);
-               }
-       }
-}
-
-static void ata_acpi_associate_ide_port(struct ata_port *ap)
-{
-       int max_devices, i;
-
-       ap->acpi_handle = acpi_get_child(ap->host->acpi_handle, ap->port_no);
-       if (!ap->acpi_handle)
-               return;
-
-       max_devices = 1;
-       if (ap->flags & ATA_FLAG_SLAVE_POSS)
-               max_devices++;
-
-       for (i = 0; i < max_devices; i++) {
-               struct ata_device *dev = &ap->link.device[i];
-
-               dev->acpi_handle = acpi_get_child(ap->acpi_handle, i);
-       }
-
-       if (ata_acpi_gtm(ap, &ap->__acpi_init_gtm) == 0)
-               ap->pflags |= ATA_PFLAG_INIT_GTM_VALID;
+               return acpi_get_child(ata_ap_acpi_handle(ap), dev->devno);
 }
+EXPORT_SYMBOL(ata_dev_acpi_handle);
 
 /* @ap and @dev are the same as ata_acpi_handle_hotplug() */
 static void ata_acpi_detach_device(struct ata_port *ap, struct ata_device *dev)
        .uevent = ata_acpi_ap_uevent,
 };
 
-/**
- * ata_acpi_associate - associate ATA host with ACPI objects
- * @host: target ATA host
- *
- * Look up ACPI objects associated with @host and initialize
- * acpi_handle fields of @host, its ports and devices accordingly.
- *
- * LOCKING:
- * EH context.
- *
- * RETURNS:
- * 0 on success, -errno on failure.
- */
-void ata_acpi_associate(struct ata_host *host)
-{
-       int i, j;
-
-       if (!is_pci_dev(host->dev) || libata_noacpi)
-               return;
-
-       host->acpi_handle = DEVICE_ACPI_HANDLE(host->dev);
-       if (!host->acpi_handle)
-               return;
-
-       for (i = 0; i < host->n_ports; i++) {
-               struct ata_port *ap = host->ports[i];
-
-               if (host->ports[0]->flags & ATA_FLAG_ACPI_SATA)
-                       ata_acpi_associate_sata_port(ap);
-               else
-                       ata_acpi_associate_ide_port(ap);
-
-               if (ap->acpi_handle) {
-                       /* we might be on a docking station */
-                       register_hotplug_dock_device(ap->acpi_handle,
-                                            &ata_acpi_ap_dock_ops, ap);
-               }
-
-               for (j = 0; j < ata_link_max_devices(&ap->link); j++) {
-                       struct ata_device *dev = &ap->link.device[j];
-
-                       if (dev->acpi_handle) {
-                               /* we might be on a docking station */
-                               register_hotplug_dock_device(dev->acpi_handle,
-                                            &ata_acpi_dev_dock_ops, dev);
-                       }
-               }
-       }
-}
-
 /**
  * ata_acpi_dissociate - dissociate ATA host from ACPI objects
  * @host: target ATA host
                struct ata_port *ap = host->ports[i];
                const struct ata_acpi_gtm *gtm = ata_acpi_init_gtm(ap);
 
-               if (ap->acpi_handle && gtm)
+               if (ata_ap_acpi_handle(ap) && gtm)
                        ata_acpi_stm(ap, gtm);
        }
 }
        acpi_status status;
        int rc = 0;
 
-       status = acpi_evaluate_object(ap->acpi_handle, "_GTM", NULL, &output);
+       status = acpi_evaluate_object(ata_ap_acpi_handle(ap), "_GTM", NULL,
+                                     &output);
 
        rc = -ENOENT;
        if (status == AE_NOT_FOUND)
        input.count = 3;
        input.pointer = in_params;
 
-       status = acpi_evaluate_object(ap->acpi_handle, "_STM", &input, NULL);
+       status = acpi_evaluate_object(ata_ap_acpi_handle(ap), "_STM", &input,
+                                     NULL);
 
        if (status == AE_NOT_FOUND)
                return -ENOENT;
                            __func__, ap->port_no);
 
        /* _GTF has no input parameters */
-       status = acpi_evaluate_object(dev->acpi_handle, "_GTF", NULL, &output);
+       status = acpi_evaluate_object(ata_dev_acpi_handle(dev), "_GTF", NULL,
+                                     &output);
        out_obj = dev->gtf_cache = output.pointer;
 
        if (ACPI_FAILURE(status)) {
 
        /* It's OK for _SDD to be missing too. */
        swap_buf_le16(dev->id, ATA_ID_WORDS);
-       status = acpi_evaluate_object(dev->acpi_handle, "_SDD", &input, NULL);
+       status = acpi_evaluate_object(ata_dev_acpi_handle(dev), "_SDD", &input,
+                                     NULL);
        swap_buf_le16(dev->id, ATA_ID_WORDS);
 
        if (status == AE_NOT_FOUND)
        const struct ata_acpi_gtm *gtm = ata_acpi_init_gtm(ap);
        struct ata_device *dev;
 
-       if (ap->acpi_handle && gtm) {
+       if (ata_ap_acpi_handle(ap) && gtm) {
                /* _GTM valid */
 
                /* restore timing parameters */
 {
        struct ata_device *dev;
 
-       if (!ap->acpi_handle || (ap->flags & ATA_FLAG_ACPI_SATA))
+       if (!ata_ap_acpi_handle(ap) || (ap->flags & ATA_FLAG_ACPI_SATA))
                return;
 
        /* channel first and then drives for power on and vica versa
           for power off */
        if (state.event == PM_EVENT_ON)
-               acpi_bus_set_power(ap->acpi_handle, ACPI_STATE_D0);
+               acpi_bus_set_power(ata_ap_acpi_handle(ap), ACPI_STATE_D0);
 
        ata_for_each_dev(dev, &ap->link, ENABLED) {
-               if (dev->acpi_handle)
-                       acpi_bus_set_power(dev->acpi_handle,
+               if (ata_dev_acpi_handle(dev))
+                       acpi_bus_set_power(ata_dev_acpi_handle(dev),
                                state.event == PM_EVENT_ON ?
                                        ACPI_STATE_D0 : ACPI_STATE_D3);
        }
        if (state.event != PM_EVENT_ON)
-               acpi_bus_set_power(ap->acpi_handle, ACPI_STATE_D3);
+               acpi_bus_set_power(ata_ap_acpi_handle(ap), ACPI_STATE_D3);
 }
 
 /**
        int nr_executed = 0;
        int rc;
 
-       if (!dev->acpi_handle)
+       if (!ata_dev_acpi_handle(dev))
                return 0;
 
        /* do we need to do _GTF? */
        }
 
        ata_dev_warn(dev, "ACPI: failed the second time, disabled\n");
-       dev->acpi_handle = NULL;
 
        /* We can safely continue if no _GTF command has been executed
         * and port is not frozen.
        else
                ata_dev = &ap->link.device[sdev->id];
 
-       *handle = dev_acpi_handle(ata_dev);
+       *handle = ata_dev_acpi_handle(ata_dev);
 
        if (!*handle)
                return -ENODEV;