Skip to content

Commit

Permalink
[AVR32] Platform code for pata_at32
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Kristoffer Nyborg Gregertsen authored and Haavard Skinnemoen committed Oct 23, 2007
1 parent 55b70a0 commit 48021bd
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 0 deletions.
65 changes: 65 additions & 0 deletions arch/avr32/mach-at32ap/at32ap7000.c
Original file line number Diff line number Diff line change
Expand Up @@ -1227,6 +1227,71 @@ at32_add_device_usba(unsigned int id, struct usba_platform_data *data)
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
* -------------------------------------------------------------------- */
Expand Down
7 changes: 7 additions & 0 deletions include/asm-avr32/arch-at32ap/board.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 48021bd

Please sign in to comment.