Commit a0f403bc authored by Sergei Shtylyov's avatar Sergei Shtylyov Committed by Bartlomiej Zolnierkiewicz

palm_bk3710: add UltraDMA/100 support

This controller supports UltraDMA up to mode 5 but it should be clocked with
at least twice the data strobe frequency, so enable mode 5 for 100+ MHz IDECLK.

While at it, start passing the correct device to clk_get() -- it worked anyway
but WTF? :-/
Signed-off-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent 7fa897b9
...@@ -82,6 +82,7 @@ static const struct palm_bk3710_udmatiming palm_bk3710_udmatimings[6] = { ...@@ -82,6 +82,7 @@ static const struct palm_bk3710_udmatiming palm_bk3710_udmatimings[6] = {
{100, 120}, /* UDMA Mode 2 */ {100, 120}, /* UDMA Mode 2 */
{100, 90}, /* UDMA Mode 3 */ {100, 90}, /* UDMA Mode 3 */
{100, 60}, /* UDMA Mode 4 */ {100, 60}, /* UDMA Mode 4 */
{85, 40}, /* UDMA Mode 5 */
}; };
static void palm_bk3710_setudmamode(void __iomem *base, unsigned int dev, static void palm_bk3710_setudmamode(void __iomem *base, unsigned int dev,
...@@ -334,12 +335,11 @@ static const struct ide_port_ops palm_bk3710_ports_ops = { ...@@ -334,12 +335,11 @@ static const struct ide_port_ops palm_bk3710_ports_ops = {
.cable_detect = palm_bk3710_cable_detect, .cable_detect = palm_bk3710_cable_detect,
}; };
static const struct ide_port_info __devinitdata palm_bk3710_port_info = { static struct ide_port_info __devinitdata palm_bk3710_port_info = {
.init_dma = palm_bk3710_init_dma, .init_dma = palm_bk3710_init_dma,
.port_ops = &palm_bk3710_ports_ops, .port_ops = &palm_bk3710_ports_ops,
.host_flags = IDE_HFLAG_MMIO, .host_flags = IDE_HFLAG_MMIO,
.pio_mask = ATA_PIO4, .pio_mask = ATA_PIO4,
.udma_mask = ATA_UDMA4, /* (input clk 99MHz) */
.mwdma_mask = ATA_MWDMA2, .mwdma_mask = ATA_MWDMA2,
}; };
...@@ -352,7 +352,7 @@ static int __devinit palm_bk3710_probe(struct platform_device *pdev) ...@@ -352,7 +352,7 @@ static int __devinit palm_bk3710_probe(struct platform_device *pdev)
int i, rc; int i, rc;
hw_regs_t hw, *hws[] = { &hw, NULL, NULL, NULL }; hw_regs_t hw, *hws[] = { &hw, NULL, NULL, NULL };
clk = clk_get(NULL, "IDECLK"); clk = clk_get(&pdev->dev, "IDECLK");
if (IS_ERR(clk)) if (IS_ERR(clk))
return -ENODEV; return -ENODEV;
...@@ -392,6 +392,9 @@ static int __devinit palm_bk3710_probe(struct platform_device *pdev) ...@@ -392,6 +392,9 @@ static int __devinit palm_bk3710_probe(struct platform_device *pdev)
hw.irq = irq->start; hw.irq = irq->start;
hw.chipset = ide_palm3710; hw.chipset = ide_palm3710;
palm_bk3710_port_info.udma_mask = rate < 100000000 ? ATA_UDMA4 :
ATA_UDMA5;
rc = ide_host_add(&palm_bk3710_port_info, hws, NULL); rc = ide_host_add(&palm_bk3710_port_info, hws, NULL);
if (rc) if (rc)
goto out; goto out;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment