Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/shaggy...
[pandora-kernel.git] / drivers / ata / pata_winbond.c
index c375703..7116a9e 100644 (file)
@@ -104,14 +104,12 @@ static void winbond_data_xfer(struct ata_device *adev, unsigned char *buf, unsig
                        ioread32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
 
                if (unlikely(slop)) {
-                       u32 pad;
+                       __le32 pad = 0;
                        if (write_data) {
                                memcpy(&pad, buf + buflen - slop, slop);
-                               pad = le32_to_cpu(pad);
-                               iowrite32(pad, ap->ioaddr.data_addr);
+                               iowrite32(le32_to_cpu(pad), ap->ioaddr.data_addr);
                        } else {
-                               pad = ioread32(ap->ioaddr.data_addr);
-                               pad = cpu_to_le16(pad);
+                               pad = cpu_to_le32(ioread32(ap->ioaddr.data_addr));
                                memcpy(buf + buflen - slop, &pad, slop);
                        }
                }
@@ -138,7 +136,6 @@ static struct scsi_host_template winbond_sht = {
 };
 
 static struct ata_port_operations winbond_port_ops = {
-       .port_disable   = ata_port_disable,
        .set_piomode    = winbond_set_piomode,
 
        .tf_load        = ata_tf_load,
@@ -160,9 +157,8 @@ static struct ata_port_operations winbond_port_ops = {
 
        .irq_clear      = ata_bmdma_irq_clear,
        .irq_on         = ata_irq_on,
-       .irq_ack        = ata_irq_ack,
 
-       .port_start     = ata_port_start,
+       .port_start     = ata_sff_port_start,
 };
 
 /**
@@ -199,6 +195,7 @@ static __init int winbond_init_one(unsigned long port)
 
        for (i = 0; i < 2 ; i ++) {
                unsigned long cmd_port = 0x1F0 - (0x80 * i);
+               unsigned long ctl_port = cmd_port + 0x206;
                struct ata_host *host;
                struct ata_port *ap;
                void __iomem *cmd_addr, *ctl_addr;
@@ -214,14 +211,16 @@ static __init int winbond_init_one(unsigned long port)
                host = ata_host_alloc(&pdev->dev, 1);
                if (!host)
                        goto err_unregister;
+               ap = host->ports[0];
 
                rc = -ENOMEM;
                cmd_addr = devm_ioport_map(&pdev->dev, cmd_port, 8);
-               ctl_addr = devm_ioport_map(&pdev->dev, cmd_port + 0x0206, 1);
+               ctl_addr = devm_ioport_map(&pdev->dev, ctl_port, 1);
                if (!cmd_addr || !ctl_addr)
                        goto err_unregister;
 
-               ap = host->ports[0];
+               ata_port_desc(ap, "cmd 0x%lx ctl 0x%lx", cmd_port, ctl_port);
+
                ap->ops = &winbond_port_ops;
                ap->pio_mask = 0x1F;
                ap->flags |= ATA_FLAG_SLAVE_POSS;
@@ -278,7 +277,7 @@ static __init int winbond_init(void)
 
                        if (request_region(port, 2, "pata_winbond")) {
                                ret = winbond_init_one(port);
-                               if(ret <= 0)
+                               if (ret <= 0)
                                        release_region(port, 2);
                                else ct+= ret;
                        }