]> Git Repo - linux.git/commitdiff
Merge branch 'for-3.15' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata
authorLinus Torvalds <[email protected]>
Mon, 31 Mar 2014 22:27:37 +0000 (15:27 -0700)
committerLinus Torvalds <[email protected]>
Mon, 31 Mar 2014 22:27:37 +0000 (15:27 -0700)
Pull libata updates from Tejun Heo:
 "A lot of activities on libata side this time.

   - A lot of changes around ahci.  Various embedded platforms are
     implementing ahci controllers.  Some were built atop ahci_platform,
     others were doing their own things.  Hans made some structural
     changes to libahci and librarized ahci_platform so that ahci
     platform drivers can share more common code.  A couple platform
     drivers are added on top of that and several are added to replace
     older drivers which were doing their own things (older ones are
     scheduled to be removed).

   - Dan finishes the patchset to make libata PM operations
     asynchronous.  Combined with one patch being routed through scsi,
     this should speed resume measurably.

   - Various fixes and cleanups from Bartlomiej and others"

* 'for-3.15' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata: (61 commits)
  ata: fix Marvell SATA driver dependencies
  ata: fix ARASAN CompactFlash PATA driver dependencies
  ata: remove superfluous casts
  ata: sata_highbank: remove superfluous cast
  ata: fix Calxeda Highbank SATA driver dependencies
  ata: fix R-Car SATA driver dependencies
  ARM: davinci: da850: update SATA AHCI support
  ata: add new-style AHCI platform driver for DaVinci DA850 AHCI controller
  ata: move library code from ahci_platform.c to libahci_platform.c
  ata: ahci_platform: fix ahci_platform_data->suspend method handling
  libata: remove unused ata_sas_port_async_resume() stub
  libata.h: add stub for ata_sas_port_resume
  libata: async resume
  libata, libsas: kill pm_result and related cleanup
  ata: Fix compiler warning with APM X-Gene host controller driver
  arm64: Add APM X-Gene SoC AHCI SATA host controller DTS entries
  ata: Add APM X-Gene SoC AHCI SATA host controller driver
  Documentation: Add documentation for the APM X-Gene SoC SATA host controller DTS binding
  arm64: Add APM X-Gene SoC 15Gbps Multi-purpose PHY DTS entries
  ata: ahci_sunxi: fix code formatting
  ...

1  2 
drivers/ata/Kconfig
drivers/ata/ahci.c
drivers/ata/libata-core.c
drivers/ata/pata_imx.c
drivers/ata/sata_sil.c

diff --combined drivers/ata/Kconfig
index 868429a47be41a2c50ff146389df25dfcb8f5b30,71bd29ce0c5cd6856df450e233425d5bc3de9d74..20e03a7eb8b431f692e534f6a3d895a2c2cd9476
@@@ -11,13 -11,13 +11,13 @@@ config HAVE_PATA_PLATFOR
          to update the PATA_PLATFORM entry.
  
  menuconfig ATA
-       tristate "Serial ATA and Parallel ATA drivers"
+       tristate "Serial ATA and Parallel ATA drivers (libata)"
        depends on HAS_IOMEM
        depends on BLOCK
        depends on !(M32R || M68K || S390) || BROKEN
        select SCSI
        ---help---
-         If you want to use a ATA hard disk, ATA tape drive, ATA CD-ROM or
+         If you want to use an ATA hard disk, ATA tape drive, ATA CD-ROM or
          any other ATA device under Linux, say Y and make sure that you know
          the name of your ATA host adapter (the card inside your computer
          that "speaks" the ATA protocol, also called ATA controller),
@@@ -60,7 -60,7 +60,7 @@@ config ATA_ACP
  
  config SATA_ZPODD
        bool "SATA Zero Power Optical Disc Drive (ZPODD) support"
-       depends on ATA_ACPI
+       depends on ATA_ACPI && PM_RUNTIME
        default n
        help
          This option adds support for SATA Zero Power Optical Disc
@@@ -97,15 -97,48 +97,48 @@@ config SATA_AHCI_PLATFOR
  
          If unsure, say N.
  
+ config AHCI_DA850
+       tristate "DaVinci DA850 AHCI SATA support"
+       depends on ARCH_DAVINCI_DA850
+       help
+         This option enables support for the DaVinci DA850 SoC's
+         onboard AHCI SATA.
+         If unsure, say N.
+ config AHCI_ST
+       tristate "ST AHCI SATA support"
+       depends on ARCH_STI
+       help
+         This option enables support for ST AHCI SATA controller.
+         If unsure, say N.
  config AHCI_IMX
        tristate "Freescale i.MX AHCI SATA support"
-       depends on SATA_AHCI_PLATFORM && MFD_SYSCON
+       depends on MFD_SYSCON
        help
          This option enables support for the Freescale i.MX SoC's
          onboard AHCI SATA.
  
          If unsure, say N.
  
+ config AHCI_SUNXI
+       tristate "Allwinner sunxi AHCI SATA support"
+       depends on ARCH_SUNXI
+       help
+         This option enables support for the Allwinner sunxi SoC's
+         onboard AHCI SATA.
+         If unsure, say N.
+ config AHCI_XGENE
+       tristate "APM X-Gene 6.0Gbps AHCI SATA host controller support"
+       depends on ARM64 || COMPILE_TEST
+       select PHY_XGENE
+       help
+        This option enables support for APM X-Gene SoC SATA host controller.
  config SATA_FSL
        tristate "Freescale 3.0Gbps SATA support"
        depends on FSL_SOC
@@@ -239,6 -272,7 +272,7 @@@ config SATA_DWC_VDEBU
  
  config SATA_HIGHBANK
        tristate "Calxeda Highbank SATA support"
+       depends on ARCH_HIGHBANK || COMPILE_TEST
        help
          This option enables support for the Calxeda Highbank SoC's
          onboard SATA.
  
  config SATA_MV
        tristate "Marvell SATA support"
+       depends on PCI || ARCH_DOVE || ARCH_KIRKWOOD || ARCH_MV78XX0 || \
+                  ARCH_MVEBU || ARCH_ORION5X || COMPILE_TEST
 +      select GENERIC_PHY
        help
          This option enables support for the Marvell Serial ATA family.
          Currently supports 88SX[56]0[48][01] PCI(-X) chips,
@@@ -273,6 -308,7 +309,7 @@@ config SATA_PROMIS
  
  config SATA_RCAR
        tristate "Renesas R-Car SATA support"
+       depends on ARCH_SHMOBILE || COMPILE_TEST
        help
          This option enables support for Renesas R-Car Serial ATA.
  
@@@ -352,6 -388,7 +389,7 @@@ config PATA_AM
  
  config PATA_ARASAN_CF
        tristate "ARASAN CompactFlash PATA Controller Support"
+       depends on ARCH_SPEAR13XX || COMPILE_TEST
        depends on DMADEVICES
        select DMA_ENGINE
        help
@@@ -403,7 -440,7 +441,7 @@@ config PATA_CMD64
  
  config PATA_CS5520
        tristate "CS5510/5520 PATA support"
-       depends on PCI
+       depends on PCI && (X86_32 || COMPILE_TEST)
        help
          This option enables support for the Cyrix 5510/5520
          companion chip used with the MediaGX/Geode processor family.
  
  config PATA_CS5530
        tristate "CS5530 PATA support"
-       depends on PCI
+       depends on PCI && (X86_32 || COMPILE_TEST)
        help
          This option enables support for the Cyrix/NatSemi/AMD CS5530
          companion chip used with the MediaGX/Geode processor family.
  
  config PATA_CS5535
        tristate "CS5535 PATA support (Experimental)"
-       depends on PCI && X86 && !X86_64
+       depends on PCI && X86_32
        help
          This option enables support for the NatSemi/AMD CS5535
          companion chip used with the Geode processor family.
  
  config PATA_CS5536
        tristate "CS5536 PATA support"
-       depends on PCI
+       depends on PCI && (X86_32 || MIPS || COMPILE_TEST)
        help
          This option enables support for the AMD CS5536
          companion chip used with the Geode LX processor family.
@@@ -666,7 -703,7 +704,7 @@@ config PATA_RD
  
  config PATA_SC1200
        tristate "SC1200 PATA support"
-       depends on PCI
+       depends on PCI && (X86_32 || COMPILE_TEST)
        help
          This option enables support for the NatSemi/AMD SC1200 SoC
          companion chip used with the Geode processor family.
diff --combined drivers/ata/ahci.c
index c81d809c111b238e72f65d185add59f5bef4fade,1d4efe5406044b17889a6fa45449379c292cdb96..a52a5b662f35ecceb992fd41943ef5f636834838
@@@ -35,7 -35,6 +35,6 @@@
  #include <linux/kernel.h>
  #include <linux/module.h>
  #include <linux/pci.h>
- #include <linux/init.h>
  #include <linux/blkdev.h>
  #include <linux/delay.h>
  #include <linux/interrupt.h>
@@@ -61,7 -60,6 +60,7 @@@ enum board_ids 
        /* board IDs by feature in alphabetical order */
        board_ahci,
        board_ahci_ign_iferr,
 +      board_ahci_noncq,
        board_ahci_nosntf,
        board_ahci_yes_fbs,
  
@@@ -122,13 -120,6 +121,13 @@@ static const struct ata_port_info ahci_
                .udma_mask      = ATA_UDMA6,
                .port_ops       = &ahci_ops,
        },
 +      [board_ahci_noncq] = {
 +              AHCI_HFLAGS     (AHCI_HFLAG_NO_NCQ),
 +              .flags          = AHCI_FLAG_COMMON,
 +              .pio_mask       = ATA_PIO4,
 +              .udma_mask      = ATA_UDMA6,
 +              .port_ops       = &ahci_ops,
 +      },
        [board_ahci_nosntf] = {
                AHCI_HFLAGS     (AHCI_HFLAG_NO_SNTF),
                .flags          = AHCI_FLAG_COMMON,
@@@ -460,12 -451,6 +459,12 @@@ static const struct pci_device_id ahci_
        { PCI_VDEVICE(ASMEDIA, 0x0611), board_ahci },   /* ASM1061 */
        { PCI_VDEVICE(ASMEDIA, 0x0612), board_ahci },   /* ASM1062 */
  
 +      /*
 +       * Samsung SSDs found on some macbooks.  NCQ times out.
 +       * https://bugzilla.kernel.org/show_bug.cgi?id=60731
 +       */
 +      { PCI_VDEVICE(SAMSUNG, 0x1600), board_ahci_noncq },
 +
        /* Enmotus */
        { PCI_DEVICE(0x1c44, 0x8000), board_ahci },
  
@@@ -578,6 -563,7 +577,7 @@@ static int ahci_vt8251_hardreset(struc
                                 unsigned long deadline)
  {
        struct ata_port *ap = link->ap;
+       struct ahci_host_priv *hpriv = ap->host->private_data;
        bool online;
        int rc;
  
        rc = sata_link_hardreset(link, sata_ehc_deb_timing(&link->eh_context),
                                 deadline, &online, NULL);
  
-       ahci_start_engine(ap);
+       hpriv->start_engine(ap);
  
        DPRINTK("EXIT, rc=%d, class=%u\n", rc, *class);
  
@@@ -603,6 -589,7 +603,7 @@@ static int ahci_p5wdh_hardreset(struct 
  {
        struct ata_port *ap = link->ap;
        struct ahci_port_priv *pp = ap->private_data;
+       struct ahci_host_priv *hpriv = ap->host->private_data;
        u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG;
        struct ata_taskfile tf;
        bool online;
        rc = sata_link_hardreset(link, sata_ehc_deb_timing(&link->eh_context),
                                 deadline, &online, NULL);
  
-       ahci_start_engine(ap);
+       hpriv->start_engine(ap);
  
        /* The pseudo configuration device on SIMG4726 attached to
         * ASUS P5W-DH Deluxe doesn't send signature FIS after
@@@ -1184,10 -1171,8 +1185,10 @@@ static int ahci_init_interrupts(struct 
  
        nvec = rc;
        rc = pci_enable_msi_block(pdev, nvec);
 -      if (rc)
 +      if (rc < 0)
                goto intx;
 +      else if (rc > 0)
 +              goto single_msi;
  
        return nvec;
  
index 8cb2522d592ac87f7b144f1f41d244cd5df777dc,c37eb02c7136e19bab2b3f29eb472db2ccfc1ed9..34406f7fdd7a1274da79601489a30e6df774290c
@@@ -4175,7 -4175,6 +4175,7 @@@ static const struct ata_blacklist_entr
  
        /* Seagate Momentus SpinPoint M8 seem to have FPMDA_AA issues */
        { "ST1000LM024 HN-M101MBB", "2AR10001", ATA_HORKAGE_BROKEN_FPDMA_AA },
 +      { "ST1000LM024 HN-M101MBB", "2BA30001", ATA_HORKAGE_BROKEN_FPDMA_AA },
  
        /* Blacklist entries taken from Silicon Image 3124/3132
           Windows driver .inf file - also several Linux problem reports */
  
        /* devices that don't properly handle queued TRIM commands */
        { "Micron_M500*",               NULL,   ATA_HORKAGE_NO_NCQ_TRIM, },
 -      { "Crucial_CT???M500SSD1",      NULL,   ATA_HORKAGE_NO_NCQ_TRIM, },
 +      { "Crucial_CT???M500SSD*",      NULL,   ATA_HORKAGE_NO_NCQ_TRIM, },
  
        /*
         * Some WD SATA-I drives spin up and down erratically when the link
@@@ -5352,22 -5351,17 +5352,17 @@@ bool ata_link_offline(struct ata_link *
  }
  
  #ifdef CONFIG_PM
- static int ata_port_request_pm(struct ata_port *ap, pm_message_t mesg,
-                              unsigned int action, unsigned int ehi_flags,
-                              int *async)
+ static void ata_port_request_pm(struct ata_port *ap, pm_message_t mesg,
+                               unsigned int action, unsigned int ehi_flags,
+                               bool async)
  {
        struct ata_link *link;
        unsigned long flags;
-       int rc = 0;
  
        /* Previous resume operation might still be in
         * progress.  Wait for PM_PENDING to clear.
         */
        if (ap->pflags & ATA_PFLAG_PM_PENDING) {
-               if (async) {
-                       *async = -EAGAIN;
-                       return 0;
-               }
                ata_port_wait_eh(ap);
                WARN_ON(ap->pflags & ATA_PFLAG_PM_PENDING);
        }
        spin_lock_irqsave(ap->lock, flags);
  
        ap->pm_mesg = mesg;
-       if (async)
-               ap->pm_result = async;
-       else
-               ap->pm_result = &rc;
        ap->pflags |= ATA_PFLAG_PM_PENDING;
        ata_for_each_link(link, ap, HOST_FIRST) {
                link->eh_info.action |= action;
  
        spin_unlock_irqrestore(ap->lock, flags);
  
-       /* wait and check result */
        if (!async) {
                ata_port_wait_eh(ap);
                WARN_ON(ap->pflags & ATA_PFLAG_PM_PENDING);
        }
-       return rc;
  }
  
- static int __ata_port_suspend_common(struct ata_port *ap, pm_message_t mesg, int *async)
+ /*
+  * On some hardware, device fails to respond after spun down for suspend.  As
+  * the device won't be used before being resumed, we don't need to touch the
+  * device.  Ask EH to skip the usual stuff and proceed directly to suspend.
+  *
+  * http://thread.gmane.org/gmane.linux.ide/46764
+  */
+ static const unsigned int ata_port_suspend_ehi = ATA_EHI_QUIET
+                                                | ATA_EHI_NO_AUTOPSY
+                                                | ATA_EHI_NO_RECOVERY;
+ static void ata_port_suspend(struct ata_port *ap, pm_message_t mesg)
  {
-       /*
-        * On some hardware, device fails to respond after spun down
-        * for suspend.  As the device won't be used before being
-        * resumed, we don't need to touch the device.  Ask EH to skip
-        * the usual stuff and proceed directly to suspend.
-        *
-        * http://thread.gmane.org/gmane.linux.ide/46764
-        */
-       unsigned int ehi_flags = ATA_EHI_QUIET | ATA_EHI_NO_AUTOPSY |
-                                ATA_EHI_NO_RECOVERY;
-       return ata_port_request_pm(ap, mesg, 0, ehi_flags, async);
+       ata_port_request_pm(ap, mesg, 0, ata_port_suspend_ehi, false);
  }
  
- static int ata_port_suspend_common(struct device *dev, pm_message_t mesg)
+ static void ata_port_suspend_async(struct ata_port *ap, pm_message_t mesg)
  {
-       struct ata_port *ap = to_ata_port(dev);
-       return __ata_port_suspend_common(ap, mesg, NULL);
+       ata_port_request_pm(ap, mesg, 0, ata_port_suspend_ehi, true);
  }
  
- static int ata_port_suspend(struct device *dev)
+ static int ata_port_pm_suspend(struct device *dev)
  {
+       struct ata_port *ap = to_ata_port(dev);
        if (pm_runtime_suspended(dev))
                return 0;
  
-       return ata_port_suspend_common(dev, PMSG_SUSPEND);
+       ata_port_suspend(ap, PMSG_SUSPEND);
+       return 0;
  }
  
- static int ata_port_do_freeze(struct device *dev)
+ static int ata_port_pm_freeze(struct device *dev)
  {
+       struct ata_port *ap = to_ata_port(dev);
        if (pm_runtime_suspended(dev))
                return 0;
  
-       return ata_port_suspend_common(dev, PMSG_FREEZE);
+       ata_port_suspend(ap, PMSG_FREEZE);
+       return 0;
  }
  
- static int ata_port_poweroff(struct device *dev)
+ static int ata_port_pm_poweroff(struct device *dev)
  {
-       return ata_port_suspend_common(dev, PMSG_HIBERNATE);
+       ata_port_suspend(to_ata_port(dev), PMSG_HIBERNATE);
+       return 0;
  }
  
- static int __ata_port_resume_common(struct ata_port *ap, pm_message_t mesg,
-                                   int *async)
- {
-       int rc;
+ static const unsigned int ata_port_resume_ehi = ATA_EHI_NO_AUTOPSY
+                                               | ATA_EHI_QUIET;
  
-       rc = ata_port_request_pm(ap, mesg, ATA_EH_RESET,
-               ATA_EHI_NO_AUTOPSY | ATA_EHI_QUIET, async);
-       return rc;
+ static void ata_port_resume(struct ata_port *ap, pm_message_t mesg)
+ {
+       ata_port_request_pm(ap, mesg, ATA_EH_RESET, ata_port_resume_ehi, false);
  }
  
- static int ata_port_resume_common(struct device *dev, pm_message_t mesg)
+ static void ata_port_resume_async(struct ata_port *ap, pm_message_t mesg)
  {
-       struct ata_port *ap = to_ata_port(dev);
-       return __ata_port_resume_common(ap, mesg, NULL);
+       ata_port_request_pm(ap, mesg, ATA_EH_RESET, ata_port_resume_ehi, true);
  }
  
- static int ata_port_resume(struct device *dev)
+ static int ata_port_pm_resume(struct device *dev)
  {
-       int rc;
-       rc = ata_port_resume_common(dev, PMSG_RESUME);
-       if (!rc) {
-               pm_runtime_disable(dev);
-               pm_runtime_set_active(dev);
-               pm_runtime_enable(dev);
-       }
-       return rc;
+       ata_port_resume_async(to_ata_port(dev), PMSG_RESUME);
+       pm_runtime_disable(dev);
+       pm_runtime_set_active(dev);
+       pm_runtime_enable(dev);
+       return 0;
  }
  
  /*
@@@ -5500,21 -5483,23 +5484,23 @@@ static int ata_port_runtime_idle(struc
  
  static int ata_port_runtime_suspend(struct device *dev)
  {
-       return ata_port_suspend_common(dev, PMSG_AUTO_SUSPEND);
+       ata_port_suspend(to_ata_port(dev), PMSG_AUTO_SUSPEND);
+       return 0;
  }
  
  static int ata_port_runtime_resume(struct device *dev)
  {
-       return ata_port_resume_common(dev, PMSG_AUTO_RESUME);
+       ata_port_resume(to_ata_port(dev), PMSG_AUTO_RESUME);
+       return 0;
  }
  
  static const struct dev_pm_ops ata_port_pm_ops = {
-       .suspend = ata_port_suspend,
-       .resume = ata_port_resume,
-       .freeze = ata_port_do_freeze,
-       .thaw = ata_port_resume,
-       .poweroff = ata_port_poweroff,
-       .restore = ata_port_resume,
+       .suspend = ata_port_pm_suspend,
+       .resume = ata_port_pm_resume,
+       .freeze = ata_port_pm_freeze,
+       .thaw = ata_port_pm_resume,
+       .poweroff = ata_port_pm_poweroff,
+       .restore = ata_port_pm_resume,
  
        .runtime_suspend = ata_port_runtime_suspend,
        .runtime_resume = ata_port_runtime_resume,
   * level. sas suspend/resume is async to allow parallel port recovery
   * since sas has multiple ata_port instances per Scsi_Host.
   */
int ata_sas_port_async_suspend(struct ata_port *ap, int *async)
void ata_sas_port_suspend(struct ata_port *ap)
  {
-       return __ata_port_suspend_common(ap, PMSG_SUSPEND, async);
+       ata_port_suspend_async(ap, PMSG_SUSPEND);
  }
- EXPORT_SYMBOL_GPL(ata_sas_port_async_suspend);
+ EXPORT_SYMBOL_GPL(ata_sas_port_suspend);
  
int ata_sas_port_async_resume(struct ata_port *ap, int *async)
void ata_sas_port_resume(struct ata_port *ap)
  {
-       return __ata_port_resume_common(ap, PMSG_RESUME, async);
+       ata_port_resume_async(ap, PMSG_RESUME);
  }
- EXPORT_SYMBOL_GPL(ata_sas_port_async_resume);
+ EXPORT_SYMBOL_GPL(ata_sas_port_resume);
  
  /**
   *    ata_host_suspend - suspend host
diff --combined drivers/ata/pata_imx.c
index b0b18ec5465ffe32bae62d11f97d1b0cba8c313c,161769343ce7d46d37197792cb4f185f315e0c83..e0872db913d65d1f120a753ac2f313162add41dd
@@@ -15,7 -15,6 +15,6 @@@
   */
  #include <linux/kernel.h>
  #include <linux/module.h>
- #include <linux/init.h>
  #include <linux/blkdev.h>
  #include <scsi/scsi_host.h>
  #include <linux/ata.h>
@@@ -100,13 -99,9 +99,9 @@@ static int pata_imx_probe(struct platfo
        struct resource *io_res;
        int ret;
  
-       io_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       if (io_res == NULL)
-               return -EINVAL;
        irq = platform_get_irq(pdev, 0);
-       if (irq <= 0)
-               return -EINVAL;
+       if (irq < 0)
+               return irq;
  
        priv = devm_kzalloc(&pdev->dev,
                                sizeof(struct pata_imx_priv), GFP_KERNEL);
                return PTR_ERR(priv->clk);
        }
  
 -      clk_prepare_enable(priv->clk);
 +      ret = clk_prepare_enable(priv->clk);
 +      if (ret)
 +              return ret;
  
        host = ata_host_alloc(&pdev->dev, 1);
        if (!host) {
        ap->pio_mask = ATA_PIO0;
        ap->flags |= ATA_FLAG_SLAVE_POSS;
  
-       priv->host_regs = devm_ioremap(&pdev->dev, io_res->start,
-               resource_size(io_res));
-       if (!priv->host_regs) {
-               dev_err(&pdev->dev, "failed to map IO/CTL base\n");
-               ret = -EBUSY;
+       io_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       priv->host_regs = devm_ioremap_resource(&pdev->dev, io_res);
+       if (IS_ERR(priv->host_regs)) {
+               ret = PTR_ERR(priv->host_regs);
                goto err;
        }
  
@@@ -214,9 -206,7 +208,9 @@@ static int pata_imx_resume(struct devic
        struct ata_host *host = dev_get_drvdata(dev);
        struct pata_imx_priv *priv = host->private_data;
  
 -      clk_prepare_enable(priv->clk);
 +      int ret = clk_prepare_enable(priv->clk);
 +      if (ret)
 +              return ret;
  
        __raw_writel(priv->ata_ctl, priv->host_regs + PATA_IMX_ATA_CONTROL);
  
diff --combined drivers/ata/sata_sil.c
index b7695e804635b87c0d7c787be1d900facaa68963,e476e7b9a44184bfe647738d5c918ee61b76b9e5..3062f8605b2955956bff191d6034530ce7fbd636
@@@ -37,7 -37,6 +37,6 @@@
  #include <linux/kernel.h>
  #include <linux/module.h>
  #include <linux/pci.h>
- #include <linux/init.h>
  #include <linux/blkdev.h>
  #include <linux/delay.h>
  #include <linux/interrupt.h>
@@@ -157,7 -156,6 +156,7 @@@ static const struct sil_drivelist 
        { "ST380011ASL",        SIL_QUIRK_MOD15WRITE },
        { "ST3120022ASL",       SIL_QUIRK_MOD15WRITE },
        { "ST3160021ASL",       SIL_QUIRK_MOD15WRITE },
 +      { "TOSHIBA MK2561GSYN", SIL_QUIRK_MOD15WRITE },
        { "Maxtor 4D060H3",     SIL_QUIRK_UDMA5MAX },
        { }
  };
This page took 0.120863 seconds and 4 git commands to generate.