diff options
| author | Ingo Molnar <mingo@elte.hu> | 2008-11-12 14:39:21 +0300 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2008-11-12 14:39:21 +0300 |
| commit | 708b8eae0fd532af73ea8350e6dcc10255ff7376 (patch) | |
| tree | f336436934fd79bc91aff7112a9beb10bc4e839f /include/linux/mtd | |
| parent | d98d38f2014ab79f28c126ff175d034891f7aefc (diff) | |
| parent | f21f237cf55494c3a4209de323281a3b0528da10 (diff) | |
| download | linux-708b8eae0fd532af73ea8350e6dcc10255ff7376.tar.xz | |
Merge branch 'linus' into core/locking
Diffstat (limited to 'include/linux/mtd')
| -rw-r--r-- | include/linux/mtd/cfi.h | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/include/linux/mtd/cfi.h b/include/linux/mtd/cfi.h index ee5124ec319e..00e2b575021f 100644 --- a/include/linux/mtd/cfi.h +++ b/include/linux/mtd/cfi.h @@ -282,9 +282,25 @@ struct cfi_private { /* * Returns the command address according to the given geometry. */ -static inline uint32_t cfi_build_cmd_addr(uint32_t cmd_ofs, int interleave, int type) +static inline uint32_t cfi_build_cmd_addr(uint32_t cmd_ofs, + struct map_info *map, struct cfi_private *cfi) { - return (cmd_ofs * type) * interleave; + unsigned bankwidth = map_bankwidth(map); + unsigned interleave = cfi_interleave(cfi); + unsigned type = cfi->device_type; + uint32_t addr; + + addr = (cmd_ofs * type) * interleave; + + /* Modify the unlock address if we are in compatiblity mode. + * For 16bit devices on 8 bit busses + * and 32bit devices on 16 bit busses + * set the low bit of the alternating bit sequence of the address. + */ + if (((type * interleave) > bankwidth) && ((uint8_t)cmd_ofs == 0xaa)) + addr |= (type >> 1)*interleave; + + return addr; } /* @@ -430,7 +446,7 @@ static inline uint32_t cfi_send_gen_cmd(u_char cmd, uint32_t cmd_addr, uint32_t int type, map_word *prev_val) { map_word val; - uint32_t addr = base + cfi_build_cmd_addr(cmd_addr, cfi_interleave(cfi), type); + uint32_t addr = base + cfi_build_cmd_addr(cmd_addr, map, cfi); val = cfi_build_cmd(cmd, map, cfi); if (prev_val) |
