SVN-Revision: 33387master
parent
10cd35c0e7
commit
4fd67c3cd4
@ -0,0 +1,95 @@ |
|||||||
|
/*
|
||||||
|
* Atheros AR934X SoCs built-in NAND flash controller support |
||||||
|
* |
||||||
|
* Copyright (C) 2011-2012 Gabor Juhos <juhosg@openwrt.org> |
||||||
|
* |
||||||
|
* This program is free software; you can redistribute it and/or modify it |
||||||
|
* under the terms of the GNU General Public License version 2 as published |
||||||
|
* by the Free Software Foundation. |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <linux/kernel.h> |
||||||
|
#include <linux/delay.h> |
||||||
|
#include <linux/init.h> |
||||||
|
#include <linux/irq.h> |
||||||
|
#include <linux/dma-mapping.h> |
||||||
|
#include <linux/etherdevice.h> |
||||||
|
#include <linux/platform_device.h> |
||||||
|
#include <linux/platform/ar934x_nfc.h> |
||||||
|
|
||||||
|
#include <asm/mach-ath79/ath79.h> |
||||||
|
#include <asm/mach-ath79/ar71xx_regs.h> |
||||||
|
|
||||||
|
#include "dev-nfc.h" |
||||||
|
|
||||||
|
static struct resource ath79_nfc_resources[2]; |
||||||
|
static u64 ar934x_nfc_dmamask = DMA_BIT_MASK(32); |
||||||
|
static struct ar934x_nfc_platform_data ath79_nfc_data; |
||||||
|
|
||||||
|
static struct platform_device ath79_nfc_device = { |
||||||
|
.name = AR934X_NFC_DRIVER_NAME, |
||||||
|
.id = -1, |
||||||
|
.resource = ath79_nfc_resources, |
||||||
|
.num_resources = ARRAY_SIZE(ath79_nfc_resources), |
||||||
|
.dev = { |
||||||
|
.dma_mask = &ar934x_nfc_dmamask, |
||||||
|
.coherent_dma_mask = DMA_BIT_MASK(32), |
||||||
|
.platform_data = &ath79_nfc_data, |
||||||
|
}, |
||||||
|
}; |
||||||
|
|
||||||
|
static void ar934x_nfc_hw_reset(bool active) |
||||||
|
{ |
||||||
|
if (active) { |
||||||
|
ath79_device_reset_set(AR934X_RESET_NANDF); |
||||||
|
udelay(100); |
||||||
|
|
||||||
|
ath79_device_reset_set(AR934X_RESET_ETH_SWITCH_ANALOG); |
||||||
|
udelay(250); |
||||||
|
} else { |
||||||
|
ath79_device_reset_clear(AR934X_RESET_ETH_SWITCH_ANALOG); |
||||||
|
udelay(250); |
||||||
|
|
||||||
|
ath79_device_reset_clear(AR934X_RESET_NANDF); |
||||||
|
udelay(100); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
static void ar934x_nfc_setup(void) |
||||||
|
{ |
||||||
|
ath79_nfc_resources[0].start = AR934X_NFC_BASE; |
||||||
|
ath79_nfc_resources[0].end = AR934X_NFC_BASE + AR934X_NFC_SIZE - 1; |
||||||
|
ath79_nfc_resources[0].flags = IORESOURCE_MEM; |
||||||
|
|
||||||
|
ath79_nfc_resources[1].start = ATH79_MISC_IRQ(21); |
||||||
|
ath79_nfc_resources[1].end = ATH79_MISC_IRQ(21); |
||||||
|
ath79_nfc_resources[1].flags = IORESOURCE_IRQ; |
||||||
|
|
||||||
|
ath79_nfc_data.hw_reset = ar934x_nfc_hw_reset; |
||||||
|
|
||||||
|
platform_device_register(&ath79_nfc_device); |
||||||
|
} |
||||||
|
|
||||||
|
void __init ath79_nfc_set_select_chip(void (*f)(int chip_no)) |
||||||
|
{ |
||||||
|
ath79_nfc_data.select_chip = f; |
||||||
|
} |
||||||
|
|
||||||
|
void __init ath79_nfc_set_scan_fixup(int (*f)(struct mtd_info *mtd)) |
||||||
|
{ |
||||||
|
ath79_nfc_data.scan_fixup = f; |
||||||
|
} |
||||||
|
|
||||||
|
void __init ath79_nfc_set_parts(struct mtd_partition *parts, int nr_parts) |
||||||
|
{ |
||||||
|
ath79_nfc_data.parts = parts; |
||||||
|
ath79_nfc_data.nr_parts = nr_parts; |
||||||
|
} |
||||||
|
|
||||||
|
void __init ath79_register_nfc(void) |
||||||
|
{ |
||||||
|
if (soc_is_ar934x()) |
||||||
|
ar934x_nfc_setup(); |
||||||
|
else |
||||||
|
BUG(); |
||||||
|
} |
@ -0,0 +1,27 @@ |
|||||||
|
/*
|
||||||
|
* Atheros AR934X SoCs built-in NAND Flash Controller support |
||||||
|
* |
||||||
|
* Copyright (C) 2011-2012 Gabor Juhos <juhosg@openwrt.org> |
||||||
|
* |
||||||
|
* This program is free software; you can redistribute it and/or modify it |
||||||
|
* under the terms of the GNU General Public License version 2 as published |
||||||
|
* by the Free Software Foundation. |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _ATH79_DEV_NFC_H |
||||||
|
#define _ATH79_DEV_NFC_H |
||||||
|
|
||||||
|
#ifdef CONFIG_ATH79_DEV_NFC |
||||||
|
void ath79_nfc_set_parts(struct mtd_partition *parts, int nr_parts); |
||||||
|
void ath79_nfc_set_select_chip(void (*f)(int chip_no)); |
||||||
|
void ath79_nfc_set_scan_fixup(int (*f)(struct mtd_info *mtd)); |
||||||
|
void ath79_register_nfc(void); |
||||||
|
#else |
||||||
|
static inline void ath79_nfc_set_parts(struct mtd_partition *parts, |
||||||
|
int nr_parts) {} |
||||||
|
static inline void ath79_nfc_set_select_chip(void (*f)(int chip_no)) {} |
||||||
|
static inline void ath79_nfc_set_scan_fixup(int (*f)(struct mtd_info *mtd)) {} |
||||||
|
static inline void ath79_register_nfc(void) {} |
||||||
|
#endif |
||||||
|
|
||||||
|
#endif /* _ATH79_DEV_NFC_H */ |
Loading…
Reference in new issue