icside: don't use hwif->hwif_data

* Move ecard_set_drvdata() from icside_probe() to icside_register_v{5,6}(),
  then use state->ioc_base instead of hwif->hwif_data in icside_maskproc()
  and icside_dma_test_irq().

While at it:

* Add sel field to struct icside_state, then use state->{sel,ioc_base}
  instead of ->{select,config}_data in icside_dma_setup().

There should be no functional changes caused by this patch.

Cc: Russell King <rmk@arm.linux.org.uk>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
Bartlomiej Zolnierkiewicz 2008-07-16 20:33:40 +02:00
parent dccdf52737
commit 26839f09ca

View file

@ -68,6 +68,7 @@ struct icside_state {
unsigned int enabled; unsigned int enabled;
void __iomem *irq_port; void __iomem *irq_port;
void __iomem *ioc_base; void __iomem *ioc_base;
unsigned int sel;
unsigned int type; unsigned int type;
ide_hwif_t *hwif[2]; ide_hwif_t *hwif[2];
}; };
@ -165,7 +166,8 @@ static const expansioncard_ops_t icside_ops_arcin_v6 = {
static void icside_maskproc(ide_drive_t *drive, int mask) static void icside_maskproc(ide_drive_t *drive, int mask)
{ {
ide_hwif_t *hwif = HWIF(drive); ide_hwif_t *hwif = HWIF(drive);
struct icside_state *state = hwif->hwif_data; struct expansion_card *ec = ECARD_DEV(hwif->dev);
struct icside_state *state = ecard_get_drvdata(ec);
unsigned long flags; unsigned long flags;
local_irq_save(flags); local_irq_save(flags);
@ -308,6 +310,7 @@ static int icside_dma_setup(ide_drive_t *drive)
{ {
ide_hwif_t *hwif = HWIF(drive); ide_hwif_t *hwif = HWIF(drive);
struct expansion_card *ec = ECARD_DEV(hwif->dev); struct expansion_card *ec = ECARD_DEV(hwif->dev);
struct icside_state *state = ecard_get_drvdata(ec);
struct request *rq = hwif->hwgroup->rq; struct request *rq = hwif->hwgroup->rq;
unsigned int dma_mode; unsigned int dma_mode;
@ -331,7 +334,7 @@ static int icside_dma_setup(ide_drive_t *drive)
/* /*
* Route the DMA signals to the correct interface. * Route the DMA signals to the correct interface.
*/ */
writeb(hwif->select_data, hwif->config_data); writeb(state->sel | hwif->channel, state->ioc_base);
/* /*
* Select the correct timing for this drive. * Select the correct timing for this drive.
@ -359,7 +362,8 @@ static void icside_dma_exec_cmd(ide_drive_t *drive, u8 cmd)
static int icside_dma_test_irq(ide_drive_t *drive) static int icside_dma_test_irq(ide_drive_t *drive)
{ {
ide_hwif_t *hwif = HWIF(drive); ide_hwif_t *hwif = HWIF(drive);
struct icside_state *state = hwif->hwif_data; struct expansion_card *ec = ECARD_DEV(hwif->dev);
struct icside_state *state = ecard_get_drvdata(ec);
return readb(state->irq_port + return readb(state->irq_port +
(hwif->channel ? (hwif->channel ?
@ -472,6 +476,8 @@ icside_register_v5(struct icside_state *state, struct expansion_card *ec)
state->hwif[0] = hwif; state->hwif[0] = hwif;
ecard_set_drvdata(ec, state);
idx[0] = hwif->index; idx[0] = hwif->index;
ide_device_add(idx, NULL); ide_device_add(idx, NULL);
@ -525,6 +531,7 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)
state->irq_port = easi_base; state->irq_port = easi_base;
state->ioc_base = ioc_base; state->ioc_base = ioc_base;
state->sel = sel;
/* /*
* Be on the safe side - disable interrupts * Be on the safe side - disable interrupts
@ -545,13 +552,7 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)
state->hwif[0] = hwif; state->hwif[0] = hwif;
state->hwif[1] = mate; state->hwif[1] = mate;
hwif->hwif_data = state; ecard_set_drvdata(ec, state);
hwif->config_data = (unsigned long)ioc_base;
hwif->select_data = sel;
mate->hwif_data = state;
mate->config_data = (unsigned long)ioc_base;
mate->select_data = sel | 1;
if (ec->dma != NO_DMA && !request_dma(ec->dma, hwif->name)) { if (ec->dma != NO_DMA && !request_dma(ec->dma, hwif->name)) {
d.init_dma = icside_dma_init; d.init_dma = icside_dma_init;
@ -627,10 +628,8 @@ icside_probe(struct expansion_card *ec, const struct ecard_id *id)
break; break;
} }
if (ret == 0) { if (ret == 0)
ecard_set_drvdata(ec, state);
goto out; goto out;
}
kfree(state); kfree(state);
release: release: