[MTD] [NAND] avr32: atmel_nand platform code for AT32AP700x
This function initializes and adds a platform_device for a NAND flash interface on SMC chip select 3. Signed-off-by: Håvard Skinnemoen <haavard.skinnemoen@atmel.com> Signed-off-by: David Woodhouse <dwmw2@infradead.org>
This commit is contained in:
Родитель
e1677ce4e4
Коммит
62090a08ab
|
@ -1729,6 +1729,58 @@ fail:
|
|||
}
|
||||
#endif
|
||||
|
||||
/* --------------------------------------------------------------------
|
||||
* NAND Flash / SmartMedia
|
||||
* -------------------------------------------------------------------- */
|
||||
static struct resource smc_cs3_resource[] __initdata = {
|
||||
{
|
||||
.start = 0x0c000000,
|
||||
.end = 0x0fffffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = 0xfff03c00,
|
||||
.end = 0xfff03fff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
|
||||
struct platform_device *__init
|
||||
at32_add_device_nand(unsigned int id, struct atmel_nand_data *data)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
|
||||
if (id != 0 || !data)
|
||||
return NULL;
|
||||
|
||||
pdev = platform_device_alloc("atmel_nand", id);
|
||||
if (!pdev)
|
||||
goto fail;
|
||||
|
||||
if (platform_device_add_resources(pdev, smc_cs3_resource,
|
||||
ARRAY_SIZE(smc_cs3_resource)))
|
||||
goto fail;
|
||||
|
||||
if (platform_device_add_data(pdev, data,
|
||||
sizeof(struct atmel_nand_data)))
|
||||
goto fail;
|
||||
|
||||
set_ebi_sfr_bits(HMATRIX_BIT(CS3A));
|
||||
if (data->enable_pin)
|
||||
at32_select_gpio(data->enable_pin,
|
||||
AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH);
|
||||
if (data->rdy_pin)
|
||||
at32_select_gpio(data->rdy_pin, 0);
|
||||
if (data->det_pin)
|
||||
at32_select_gpio(data->det_pin, 0);
|
||||
|
||||
platform_device_add(pdev);
|
||||
return pdev;
|
||||
|
||||
fail:
|
||||
platform_device_put(pdev);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------
|
||||
* AC97C
|
||||
* -------------------------------------------------------------------- */
|
||||
|
|
|
@ -85,4 +85,17 @@ struct platform_device *
|
|||
at32_add_device_cf(unsigned int id, unsigned int extint,
|
||||
struct cf_platform_data *data);
|
||||
|
||||
/* NAND / SmartMedia */
|
||||
struct atmel_nand_data {
|
||||
int enable_pin; /* chip enable */
|
||||
int det_pin; /* card detect */
|
||||
int rdy_pin; /* ready/busy */
|
||||
u8 ale; /* address line number connected to ALE */
|
||||
u8 cle; /* address line number connected to CLE */
|
||||
u8 bus_width_16; /* buswidth is 16 bit */
|
||||
struct mtd_partition *(*partition_info)(int size, int *num_partitions);
|
||||
};
|
||||
struct platform_device *
|
||||
at32_add_device_nand(unsigned int id, struct atmel_nand_data *data);
|
||||
|
||||
#endif /* __ASM_ARCH_BOARD_H */
|
||||
|
|
Загрузка…
Ссылка в новой задаче