git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/shaggy...
[pandora-kernel.git]
/
drivers
/
ata
/
pata_winbond.c
diff --git
a/drivers/ata/pata_winbond.c
b/drivers/ata/pata_winbond.c
index
cc4ad27
..
7116a9e
100644
(file)
--- a/
drivers/ata/pata_winbond.c
+++ b/
drivers/ata/pata_winbond.c
@@
-16,7
+16,7
@@
#include <linux/platform_device.h>
#define DRV_NAME "pata_winbond"
#include <linux/platform_device.h>
#define DRV_NAME "pata_winbond"
-#define DRV_VERSION "0.0.
2
"
+#define DRV_VERSION "0.0.
3
"
#define NR_HOST 4 /* Two winbond controllers, two channels each */
#define NR_HOST 4 /* Two winbond controllers, two channels each */
@@
-94,7
+94,7
@@
static void winbond_set_piomode(struct ata_port *ap, struct ata_device *adev)
static void winbond_data_xfer(struct ata_device *adev, unsigned char *buf, unsigned int buflen, int write_data)
{
static void winbond_data_xfer(struct ata_device *adev, unsigned char *buf, unsigned int buflen, int write_data)
{
- struct ata_port *ap = adev->ap;
+ struct ata_port *ap = adev->
link->
ap;
int slop = buflen & 3;
if (ata_id_has_dword_io(adev->id)) {
int slop = buflen & 3;
if (ata_id_has_dword_io(adev->id)) {
@@
-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)) {
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);
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 {
} 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);
}
}
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 = {
};
static struct ata_port_operations winbond_port_ops = {
- .port_disable = ata_port_disable,
.set_piomode = winbond_set_piomode,
.tf_load = ata_tf_load,
.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_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);
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;
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;
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);
rc = -ENOMEM;
cmd_addr = devm_ioport_map(&pdev->dev, cmd_port, 8);
- ctl_addr = devm_ioport_map(&pdev->dev, c
md_port + 0x0206
, 1);
+ ctl_addr = devm_ioport_map(&pdev->dev, c
tl_port
, 1);
if (!cmd_addr || !ctl_addr)
goto err_unregister;
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;
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 (request_region(port, 2, "pata_winbond")) {
ret = winbond_init_one(port);
- if(ret <= 0)
+ if
(ret <= 0)
release_region(port, 2);
else ct+= ret;
}
release_region(port, 2);
else ct+= ret;
}