projects
/
GitHub
/
mt8127
/
android_kernel_alcatel_ttab.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
palm_bk3710: add warm-plug support
[GitHub/mt8127/android_kernel_alcatel_ttab.git]
/
drivers
/
ide
/
arm
/
palm_bk3710.c
diff --git
a/drivers/ide/arm/palm_bk3710.c
b/drivers/ide/arm/palm_bk3710.c
index 8e1f6bd338872c0fe08a985e81e75019c3f26983..d024ac8fad14c95d2ac734f1c2f5d5549e5eda20 100644
(file)
--- a/
drivers/ide/arm/palm_bk3710.c
+++ b/
drivers/ide/arm/palm_bk3710.c
@@
-96,11
+96,11
@@
static void palm_bk3710_setudmamode(void __iomem *base, unsigned int dev,
u16 val16;
/* DMA Data Setup */
u16 val16;
/* DMA Data Setup */
- t0 =
(palm_bk3710_udmatimings[mode].cycletime + ide_palm_clk - 1)
-
/ ide_palm_clk
- 1;
- tenv =
(20 + ide_palm_clk - 1) / ide_palm_clk
- 1;
- trp =
(palm_bk3710_udmatimings[mode].rptime + ide_palm_clk - 1)
-
/ ide_palm_clk
- 1;
+ t0 =
DIV_ROUND_UP(palm_bk3710_udmatimings[mode].cycletime,
+
ide_palm_clk)
- 1;
+ tenv =
DIV_ROUND_UP(20, ide_palm_clk)
- 1;
+ trp =
DIV_ROUND_UP(palm_bk3710_udmatimings[mode].rptime,
+
ide_palm_clk)
- 1;
/* udmatim Register */
val16 = readw(base + BK3710_UDMATIM) & (dev ? 0xFF0F : 0xFFF0);
/* udmatim Register */
val16 = readw(base + BK3710_UDMATIM) & (dev ? 0xFF0F : 0xFFF0);
@@
-141,8
+141,8
@@
static void palm_bk3710_setdmamode(void __iomem *base, unsigned int dev,
cycletime = max_t(int, t->cycle, min_cycle);
/* DMA Data Setup */
cycletime = max_t(int, t->cycle, min_cycle);
/* DMA Data Setup */
- t0 =
(cycletime + ide_palm_clk - 1) / ide_palm_clk
;
- td =
(t->active + ide_palm_clk - 1) / ide_palm_clk
;
+ t0 =
DIV_ROUND_UP(cycletime, ide_palm_clk)
;
+ td =
DIV_ROUND_UP(t->active, ide_palm_clk)
;
tkw = t0 - td - 1;
td -= 1;
tkw = t0 - td - 1;
td -= 1;
@@
-168,9
+168,9
@@
static void palm_bk3710_setpiomode(void __iomem *base, ide_drive_t *mate,
struct ide_timing *t;
/* PIO Data Setup */
struct ide_timing *t;
/* PIO Data Setup */
- t0 =
(cycletime + ide_palm_clk - 1) / ide_palm_clk
;
- t2 =
(ide_timing_find_mode(XFER_PIO_0 + mode)->active +
-
ide_palm_clk - 1) / ide_palm_clk
;
+ t0 =
DIV_ROUND_UP(cycletime, ide_palm_clk)
;
+ t2 =
DIV_ROUND_UP(ide_timing_find_mode(XFER_PIO_0 + mode)->active,
+
ide_palm_clk)
;
t2i = t0 - t2 - 1;
t2 -= 1;
t2i = t0 - t2 - 1;
t2 -= 1;
@@
-192,8
+192,8
@@
static void palm_bk3710_setpiomode(void __iomem *base, ide_drive_t *mate,
/* TASKFILE Setup */
t = ide_timing_find_mode(XFER_PIO_0 + mode);
/* TASKFILE Setup */
t = ide_timing_find_mode(XFER_PIO_0 + mode);
- t0 =
(t->cyc8b + ide_palm_clk - 1) / ide_palm_clk
;
- t2 =
(t->act8b + ide_palm_clk - 1) / ide_palm_clk
;
+ t0 =
DIV_ROUND_UP(t->cyc8b, ide_palm_clk)
;
+ t2 =
DIV_ROUND_UP(t->act8b, ide_palm_clk)
;
t2i = t0 - t2 - 1;
t2 -= 1;
t2i = t0 - t2 - 1;
t2 -= 1;
@@
-317,17
+317,32
@@
static u8 __devinit palm_bk3710_cable_detect(ide_hwif_t *hwif)
return ATA_CBL_PATA80;
}
return ATA_CBL_PATA80;
}
-static void __devinit palm_bk3710_init_hwif(ide_hwif_t *hwif)
+static int __devinit palm_bk3710_init_dma(ide_hwif_t *hwif,
+ const struct ide_port_info *d)
{
{
- hwif->set_pio_mode = palm_bk3710_set_pio_mode;
-
hwif->set_dma_mode = palm_bk3710_set_dma_mode
;
+ unsigned long base =
+
hwif->io_ports.data_addr - IDE_PALM_ATA_PRI_REG_OFFSET
;
- hwif->cable_detect = palm_bk3710_cable_detect;
+ printk(KERN_INFO " %s: MMIO-DMA\n", hwif->name);
+
+ if (ide_allocate_dma_engine(hwif))
+ return -1;
+
+ ide_setup_dma(hwif, base);
+
+ return 0;
}
}
+static const struct ide_port_ops palm_bk3710_ports_ops = {
+ .set_pio_mode = palm_bk3710_set_pio_mode,
+ .set_dma_mode = palm_bk3710_set_dma_mode,
+ .cable_detect = palm_bk3710_cable_detect,
+};
+
static const struct ide_port_info __devinitdata palm_bk3710_port_info = {
static const struct ide_port_info __devinitdata palm_bk3710_port_info = {
- .init_hwif = palm_bk3710_init_hwif,
- .host_flags = IDE_HFLAG_NO_DMA, /* hack (no PCI) */
+ .init_dma = palm_bk3710_init_dma,
+ .port_ops = &palm_bk3710_ports_ops,
+ .host_flags = IDE_HFLAG_MMIO,
.pio_mask = ATA_PIO4,
.udma_mask = ATA_UDMA4, /* (input clk 99MHz) */
.mwdma_mask = ATA_MWDMA2,
.pio_mask = ATA_PIO4,
.udma_mask = ATA_UDMA4, /* (input clk 99MHz) */
.mwdma_mask = ATA_MWDMA2,
@@
-372,46
+387,41
@@
static int __devinit palm_bk3710_probe(struct platform_device *pdev)
pribase = mem->start + IDE_PALM_ATA_PRI_REG_OFFSET;
for (i = 0; i < IDE_NR_PORTS - 2; i++)
pribase = mem->start + IDE_PALM_ATA_PRI_REG_OFFSET;
for (i = 0; i < IDE_NR_PORTS - 2; i++)
- hw.io_ports[i] = pribase + i;
- hw.io_ports
[IDE_CONTROL_OFFSET]
= mem->start +
+ hw.io_ports
_array
[i] = pribase + i;
+ hw.io_ports
.ctl_addr
= mem->start +
IDE_PALM_ATA_PRI_CTL_OFFSET;
hw.irq = irq->start;
hw.chipset = ide_palm3710;
IDE_PALM_ATA_PRI_CTL_OFFSET;
hw.irq = irq->start;
hw.chipset = ide_palm3710;
- hwif = ide_
deprecated_find_port(hw.io_ports[IDE_DATA_OFFSET]
);
+ hwif = ide_
find_port(
);
if (hwif == NULL)
goto out;
i = hwif->index;
if (hwif == NULL)
goto out;
i = hwif->index;
- if (hwif->present)
- ide_unregister(i, 0, 0);
- else if (!hwif->hold)
- ide_init_port_data(hwif, i);
-
+ ide_init_port_data(hwif, i);
ide_init_port_hw(hwif, &hw);
hwif->mmio = 1;
default_hwif_mmiops(hwif);
ide_init_port_hw(hwif, &hw);
hwif->mmio = 1;
default_hwif_mmiops(hwif);
- ide_setup_dma(hwif, mem->start);
-
idx[0] = i;
ide_device_add(idx, &palm_bk3710_port_info);
idx[0] = i;
ide_device_add(idx, &palm_bk3710_port_info);
- if (!hwif->present)
- goto out;
-
return 0;
out:
printk(KERN_WARNING "Palm Chip BK3710 IDE Register Fail\n");
return -ENODEV;
}
return 0;
out:
printk(KERN_WARNING "Palm Chip BK3710 IDE Register Fail\n");
return -ENODEV;
}
+/* work with hotplug and coldplug */
+MODULE_ALIAS("platform:palm_bk3710");
+
static struct platform_driver platform_bk_driver = {
.driver = {
.name = "palm_bk3710",
static struct platform_driver platform_bk_driver = {
.driver = {
.name = "palm_bk3710",
+ .owner = THIS_MODULE,
},
.probe = palm_bk3710_probe,
.remove = NULL,
},
.probe = palm_bk3710_probe,
.remove = NULL,