ahci: Introduce ahci_set_em_messages()
authorAnton Vorontsov <avorontsov@ru.mvista.com>
Wed, 3 Mar 2010 17:17:45 +0000 (20:17 +0300)
committerJeff Garzik <jgarzik@redhat.com>
Fri, 14 May 2010 21:08:01 +0000 (17:08 -0400)
Factor out some ahci_em_messages handling code from ahci_init_one().
We would like to reuse it for non-PCI devices.

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
drivers/ata/ahci.c

index a69e5b0..d5dc123 100644 (file)
@@ -3270,6 +3270,29 @@ static inline void ahci_gtf_filter_workaround(struct ata_host *host)
 {}
 #endif
 
+static void ahci_set_em_messages(struct ahci_host_priv *hpriv,
+                                struct ata_port_info *pi)
+{
+       u8 messages;
+       void __iomem *mmio = hpriv->mmio;
+       u32 em_loc = readl(mmio + HOST_EM_LOC);
+       u32 em_ctl = readl(mmio + HOST_EM_CTL);
+
+       if (!ahci_em_messages || !(hpriv->cap & HOST_CAP_EMS))
+               return;
+
+       messages = (em_ctl & EM_CTRL_MSG_TYPE) >> 16;
+
+       /* we only support LED message type right now */
+       if ((messages & 0x01) && (ahci_em_messages == 1)) {
+               /* store em_loc */
+               hpriv->em_loc = ((em_loc >> 16) * 4);
+               pi->flags |= ATA_FLAG_EM;
+               if (!(em_ctl & EM_CTL_ALHD))
+                       pi->flags |= ATA_FLAG_SW_ACTIVITY;
+       }
+}
+
 static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
        static int printed_version;
@@ -3373,23 +3396,7 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
        if (hpriv->cap & HOST_CAP_PMP)
                pi.flags |= ATA_FLAG_PMP;
 
-       if (ahci_em_messages && (hpriv->cap & HOST_CAP_EMS)) {
-               u8 messages;
-               void __iomem *mmio = hpriv->mmio;
-               u32 em_loc = readl(mmio + HOST_EM_LOC);
-               u32 em_ctl = readl(mmio + HOST_EM_CTL);
-
-               messages = (em_ctl & EM_CTRL_MSG_TYPE) >> 16;
-
-               /* we only support LED message type right now */
-               if ((messages & 0x01) && (ahci_em_messages == 1)) {
-                       /* store em_loc */
-                       hpriv->em_loc = ((em_loc >> 16) * 4);
-                       pi.flags |= ATA_FLAG_EM;
-                       if (!(em_ctl & EM_CTL_ALHD))
-                               pi.flags |= ATA_FLAG_SW_ACTIVITY;
-               }
-       }
+       ahci_set_em_messages(hpriv, &pi);
 
        if (ahci_broken_system_poweroff(pdev)) {
                pi.flags |= ATA_FLAG_NO_POWEROFF_SPINDOWN;