along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- $Id: elan-104nc.c,v 1.21 2004/07/12 22:38:29 dwmw2 Exp $
+ $Id: elan-104nc.c,v 1.18 2003/06/23 07:37:02 dwmw2 Exp $
The ELAN-104NC has up to 8 Mibyte of Intel StrataFlash (28F320/28F640) in x16
mode. This drivers uses the CFI probe and Intel Extended Command Set drivers.
}
-static map_word elan_104nc_read16(struct map_info *map, unsigned long ofs)
+static __u8 elan_104nc_read8(struct map_info *map, unsigned long ofs)
{
- map_word ret;
+ __u8 ret;
spin_lock(&elan_104nc_spin);
elan_104nc_page(map, ofs);
- ret.x[0] = readw(iomapadr + (ofs & WINDOW_MASK));
+ ret = readb(iomapadr + (ofs & WINDOW_MASK));
+ spin_unlock(&elan_104nc_spin);
+ return ret;
+}
+
+static __u16 elan_104nc_read16(struct map_info *map, unsigned long ofs)
+{
+ __u16 ret;
+ spin_lock(&elan_104nc_spin);
+ elan_104nc_page(map, ofs);
+ ret = readw(iomapadr + (ofs & WINDOW_MASK));
+ spin_unlock(&elan_104nc_spin);
+ return ret;
+}
+
+static __u32 elan_104nc_read32(struct map_info *map, unsigned long ofs)
+{
+ __u32 ret;
+ spin_lock(&elan_104nc_spin);
+ elan_104nc_page(map, ofs);
+ ret = readl(iomapadr + (ofs & WINDOW_MASK));
spin_unlock(&elan_104nc_spin);
return ret;
}
static void elan_104nc_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len)
{
- while (len) {
+ while(len) {
unsigned long thislen = len;
if (len > (WINDOW_LENGTH - (from & WINDOW_MASK)))
thislen = WINDOW_LENGTH-(from & WINDOW_MASK);
}
}
-static void elan_104nc_write16(struct map_info *map, map_word d, unsigned long adr)
+static void elan_104nc_write8(struct map_info *map, __u8 d, unsigned long adr)
+{
+ spin_lock(&elan_104nc_spin);
+ elan_104nc_page(map, adr);
+ writeb(d, iomapadr + (adr & WINDOW_MASK));
+ spin_unlock(&elan_104nc_spin);
+}
+
+static void elan_104nc_write16(struct map_info *map, __u16 d, unsigned long adr)
+{
+ spin_lock(&elan_104nc_spin);
+ elan_104nc_page(map, adr);
+ writew(d, iomapadr + (adr & WINDOW_MASK));
+ spin_unlock(&elan_104nc_spin);
+}
+
+static void elan_104nc_write32(struct map_info *map, __u32 d, unsigned long adr)
{
spin_lock(&elan_104nc_spin);
elan_104nc_page(map, adr);
- writew(d.x[0], iomapadr + (adr & WINDOW_MASK));
+ writel(d, iomapadr + (adr & WINDOW_MASK));
spin_unlock(&elan_104nc_spin);
}
.size = 8*1024*1024, /* this must be set to a maximum possible amount
of flash so the cfi probe routines find all
the chips */
- .bankwidth = 2,
- .read = elan_104nc_read16,
+ .buswidth = 2,
+ .read8 = elan_104nc_read8,
+ .read16 = elan_104nc_read16,
+ .read32 = elan_104nc_read32,
.copy_from = elan_104nc_copy_from,
- .write = elan_104nc_write16,
+ .write8 = elan_104nc_write8,
+ .write16 = elan_104nc_write16,
+ .write32 = elan_104nc_write32,
.copy_to = elan_104nc_copy_to
};