#define _ASM_IA64_DEVICE_H
 
 struct dev_archdata {
-#ifdef CONFIG_ACPI
-       void    *acpi_handle;
-#endif
 #ifdef CONFIG_INTEL_IOMMU
        void *iommu; /* hook for IOMMU specific extension */
 #endif
 
 #define _ASM_X86_DEVICE_H
 
 struct dev_archdata {
-#ifdef CONFIG_ACPI
-       void    *acpi_handle;
-#endif
 #ifdef CONFIG_X86_DEV_DMA_OPS
        struct dma_map_ops *dma_ops;
 #endif
 
        char physical_node_name[sizeof(PHYSICAL_NODE_STRING) + 2];
        int retval = -EINVAL;
 
-       if (dev->archdata.acpi_handle) {
+       if (dev->acpi_handle) {
                dev_warn(dev, "Drivers changed 'acpi_handle'\n");
                return -EINVAL;
        }
        acpi_dev->physical_node_count++;
        mutex_unlock(&acpi_dev->physical_node_lock);
 
-       dev->archdata.acpi_handle = handle;
+       dev->acpi_handle = handle;
 
        if (!physical_node->node_id)
                strcpy(physical_node_name, PHYSICAL_NODE_STRING);
        acpi_status status;
        struct list_head *node, *next;
 
-       if (!dev->archdata.acpi_handle)
+       if (!dev->acpi_handle)
                return 0;
 
-       status = acpi_bus_get_device(dev->archdata.acpi_handle,
-               &acpi_dev);
+       status = acpi_bus_get_device(dev->acpi_handle, &acpi_dev);
        if (ACPI_FAILURE(status))
                goto err;
 
 
                sysfs_remove_link(&acpi_dev->dev.kobj, physical_node_name);
                sysfs_remove_link(&dev->kobj, "firmware_node");
-               dev->archdata.acpi_handle = NULL;
+               dev->acpi_handle = NULL;
                /* acpi_bind_one increase refcnt by one */
                put_device(dev);
                kfree(entry);
        if (!ret) {
                struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
 
-               acpi_get_name(dev->archdata.acpi_handle,
-                             ACPI_FULL_PATHNAME, &buffer);
+               acpi_get_name(dev->acpi_handle, ACPI_FULL_PATHNAME, &buffer);
                DBG("Device %s -> %s\n", dev_name(dev), (char *)buffer.pointer);
                kfree(buffer.pointer);
        } else
 
 int acpi_is_root_bridge(acpi_handle);
 acpi_handle acpi_get_pci_rootbridge_handle(unsigned int, unsigned int);
 struct acpi_pci_root *acpi_pci_find_root(acpi_handle handle);
-#define DEVICE_ACPI_HANDLE(dev) ((acpi_handle)((dev)->archdata.acpi_handle))
+#define DEVICE_ACPI_HANDLE(dev) ((acpi_handle)((dev)->acpi_handle))
 
 int acpi_enable_wakeup_device_power(struct acpi_device *dev, int state);
 int acpi_disable_wakeup_device_power(struct acpi_device *dev);
 
  * @mod_name:  Used for built-in modules.
  * @suppress_bind_attrs: Disables bind/unbind via sysfs.
  * @of_match_table: The open firmware table.
+ * @acpi_match_table: The ACPI match table.
  * @probe:     Called to query the existence of a specific device,
  *             whether this driver can work with it, and bind the driver
  *             to a specific device.
        bool suppress_bind_attrs;       /* disables bind/unbind via sysfs */
 
        const struct of_device_id       *of_match_table;
+       const struct acpi_device_id     *acpi_match_table;
 
        int (*probe) (struct device *dev);
        int (*remove) (struct device *dev);
  * @dma_mem:   Internal for coherent mem override.
  * @archdata:  For arch-specific additions.
  * @of_node:   Associated device tree node.
+ * @acpi_handle: Associated ACPI device node's namespace handle.
  * @devt:      For creating the sysfs "dev".
  * @id:                device instance
  * @devres_lock: Spinlock to protect the resource of the device.
        struct dev_archdata     archdata;
 
        struct device_node      *of_node; /* associated device tree node */
+       void                    *acpi_handle; /* associated ACPI device node */
 
        dev_t                   devt;   /* dev_t, creates the sysfs "dev" */
        u32                     id;     /* device instance */