forked from Minki/linux
[AVR32] Platform code for pata_at32
This patch adds platform code for PATA devices on the AP7000. [hskinnemoen@atmel.com: board code left out for now since stk1000 doesn't support IDE out of the box] Signed-off-by: Kristoffer Nyborg Gregertsen <kngregertsen@norway.atmel.com> Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
This commit is contained in:
parent
55b70a0300
commit
48021bd93c
@ -1227,6 +1227,71 @@ out_free_pdev:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------
|
||||
* IDE
|
||||
* -------------------------------------------------------------------- */
|
||||
static struct ide_platform_data at32_ide0_data;
|
||||
static struct resource at32_ide0_resource[] = {
|
||||
{
|
||||
.start = 0x04000000,
|
||||
.end = 0x07ffffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
IRQ(~0UL), /* Magic IRQ will be overridden */
|
||||
};
|
||||
DEFINE_DEV_DATA(at32_ide, 0);
|
||||
|
||||
struct platform_device *__init
|
||||
at32_add_device_ide(unsigned int id, unsigned int extint,
|
||||
struct ide_platform_data *data)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
unsigned int extint_pin;
|
||||
|
||||
switch (extint) {
|
||||
case 0:
|
||||
extint_pin = GPIO_PIN_PB(25);
|
||||
break;
|
||||
case 1:
|
||||
extint_pin = GPIO_PIN_PB(26);
|
||||
break;
|
||||
case 2:
|
||||
extint_pin = GPIO_PIN_PB(27);
|
||||
break;
|
||||
case 3:
|
||||
extint_pin = GPIO_PIN_PB(28);
|
||||
break;
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
switch (id) {
|
||||
case 0:
|
||||
pdev = &at32_ide0_device;
|
||||
select_peripheral(PE(19), PERIPH_A, 0); /* CFCE1 -> CS0_N */
|
||||
select_peripheral(PE(20), PERIPH_A, 0); /* CFCE2 -> CS1_N */
|
||||
select_peripheral(PE(21), PERIPH_A, 0); /* NCS4 -> OE_N */
|
||||
select_peripheral(PE(23), PERIPH_A, 0); /* CFRNW -> DIR */
|
||||
select_peripheral(PE(24), PERIPH_A, 0); /* NWAIT <- IORDY */
|
||||
set_ebi_sfr_bits(HMATRIX_BIT(CS4A));
|
||||
data->cs = 4;
|
||||
break;
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
at32_select_periph(extint_pin, GPIO_PERIPH_A, AT32_GPIOF_DEGLITCH);
|
||||
|
||||
pdev->resource[1].start = EIM_IRQ_BASE + extint;
|
||||
pdev->resource[1].end = pdev->resource[1].start;
|
||||
|
||||
memcpy(pdev->dev.platform_data, data, sizeof(struct ide_platform_data));
|
||||
|
||||
platform_device_register(pdev);
|
||||
|
||||
return pdev;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------
|
||||
* GCLK
|
||||
* -------------------------------------------------------------------- */
|
||||
|
@ -44,6 +44,13 @@ struct usba_platform_data {
|
||||
struct platform_device *
|
||||
at32_add_device_usba(unsigned int id, struct usba_platform_data *data);
|
||||
|
||||
struct ide_platform_data {
|
||||
u8 cs;
|
||||
};
|
||||
struct platform_device *
|
||||
at32_add_device_ide(unsigned int id, unsigned int extint,
|
||||
struct ide_platform_data *data);
|
||||
|
||||
/* depending on what's hooked up, not all SSC pins will be used */
|
||||
#define ATMEL_SSC_TK 0x01
|
||||
#define ATMEL_SSC_TF 0x02
|
||||
|
Loading…
Reference in New Issue
Block a user