[MTD] chips: make sharps driver usable again

Update the pre-CFI Sharp driver sharps.c so it compiles. map_read32 /
map_write32 no longer exist in the kernel so the driver is totally broken
as it stands. The replacement functions use different parameters resulting
in the other changes.

Change collie to use this driver until someone works out why the cfi driver
fails on that machine.

Signed-off-by: Richard Purdie <rpurdie@rpsys.net>
Tested-by: Pavel Machek <pavel@suse.cz>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

authored by Richard Purdie and committed by Thomas Gleixner ee2d49de 72af3b2c

+66 -57
+66 -57
drivers/mtd/chips/sharp.c
··· 4 4 * Copyright 2000,2001 David A. Schleef <ds@schleef.org> 5 5 * 2000,2001 Lineo, Inc. 6 6 * 7 - * $Id: sharp.c,v 1.16 2005/11/07 11:14:23 gleixner Exp $ 7 + * $Id: sharp.c,v 1.17 2005/11/29 14:28:28 gleixner Exp $ 8 8 * 9 9 * Devices supported: 10 10 * LH28F016SCT Symmetrical block flash memory, 2Mx8 ··· 160 160 return mtd; 161 161 } 162 162 163 + static inline void sharp_send_cmd(struct map_info *map, unsigned long cmd, unsigned long adr) 164 + { 165 + map_word map_cmd; 166 + map_cmd.x[0] = cmd; 167 + map_write(map, map_cmd, adr); 168 + } 169 + 163 170 static int sharp_probe_map(struct map_info *map,struct mtd_info *mtd) 164 171 { 165 - unsigned long tmp; 172 + map_word tmp, read0, read4; 166 173 unsigned long base = 0; 167 - u32 read0, read4; 168 174 int width = 4; 169 175 170 - tmp = map_read32(map, base+0); 176 + tmp = map_read(map, base+0); 171 177 172 - map_write32(map, CMD_READ_ID, base+0); 178 + sharp_send_cmd(map, CMD_READ_ID, base+0); 173 179 174 - read0=map_read32(map, base+0); 175 - read4=map_read32(map, base+4); 176 - if(read0 == 0x89898989){ 180 + read0 = map_read(map, base+0); 181 + read4 = map_read(map, base+4); 182 + if(read0.x[0] == 0x89898989){ 177 183 printk("Looks like sharp flash\n"); 178 - switch(read4){ 184 + switch(read4.x[0]){ 179 185 case 0xaaaaaaaa: 180 186 case 0xa0a0a0a0: 181 187 /* aa - LH28F016SCT-L95 2Mx8, 32 64k blocks*/ ··· 203 197 return width; 204 198 #endif 205 199 default: 206 - printk("Sort-of looks like sharp flash, 0x%08x 0x%08x\n", 207 - read0,read4); 200 + printk("Sort-of looks like sharp flash, 0x%08lx 0x%08lx\n", 201 + read0.x[0], read4.x[0]); 208 202 } 209 - }else if((map_read32(map, base+0) == CMD_READ_ID)){ 203 + }else if((map_read(map, base+0).x[0] == CMD_READ_ID)){ 210 204 /* RAM, probably */ 211 205 printk("Looks like RAM\n"); 212 - map_write32(map, tmp, base+0); 206 + map_write(map, tmp, base+0); 213 207 }else{ 214 - printk("Doesn't look like sharp flash, 0x%08x 0x%08x\n", 215 - read0,read4); 208 + printk("Doesn't look like sharp flash, 0x%08lx 0x%08lx\n", 209 + read0.x[0], read4.x[0]); 216 210 } 217 211 218 212 return 0; ··· 221 215 /* This function returns with the chip->mutex lock held. */ 222 216 static int sharp_wait(struct map_info *map, struct flchip *chip) 223 217 { 224 - int status, i; 218 + int i; 219 + map_word status; 225 220 unsigned long timeo = jiffies + HZ; 226 221 DECLARE_WAITQUEUE(wait, current); 227 222 int adr = 0; ··· 232 225 233 226 switch(chip->state){ 234 227 case FL_READY: 235 - map_write32(map,CMD_READ_STATUS,adr); 228 + sharp_send_cmd(map, CMD_READ_STATUS, adr); 236 229 chip->state = FL_STATUS; 237 230 case FL_STATUS: 238 231 for(i=0;i<100;i++){ 239 - status = map_read32(map,adr); 240 - if((status & SR_READY)==SR_READY) 232 + status = map_read(map, adr); 233 + if((status.x[0] & SR_READY)==SR_READY) 241 234 break; 242 235 udelay(1); 243 236 } ··· 261 254 goto retry; 262 255 } 263 256 264 - map_write32(map,CMD_RESET, adr); 257 + sharp_send_cmd(map, CMD_RESET, adr); 265 258 266 259 chip->state = FL_READY; 267 260 ··· 358 351 int timeo; 359 352 int try; 360 353 int i; 361 - int status = 0; 354 + map_word data, status; 362 355 356 + status.x[0] = 0; 363 357 ret = sharp_wait(map,chip); 364 358 365 359 for(try=0;try<10;try++){ 366 - map_write32(map,CMD_BYTE_WRITE,adr); 360 + sharp_send_cmd(map, CMD_BYTE_WRITE, adr); 367 361 /* cpu_to_le32 -> hack to fix the writel be->le conversion */ 368 - map_write32(map,cpu_to_le32(datum),adr); 362 + data.x[0] = cpu_to_le32(datum); 363 + map_write(map, data, adr); 369 364 370 365 chip->state = FL_WRITING; 371 366 372 367 timeo = jiffies + (HZ/2); 373 368 374 - map_write32(map,CMD_READ_STATUS,adr); 369 + sharp_send_cmd(map, CMD_READ_STATUS, adr); 375 370 for(i=0;i<100;i++){ 376 - status = map_read32(map,adr); 377 - if((status & SR_READY)==SR_READY) 371 + status = map_read(map, adr); 372 + if((status.x[0] & SR_READY) == SR_READY) 378 373 break; 379 374 } 380 375 if(i==100){ 381 376 printk("sharp: timed out writing\n"); 382 377 } 383 378 384 - if(!(status&SR_ERRORS)) 379 + if(!(status.x[0] & SR_ERRORS)) 385 380 break; 386 381 387 - printk("sharp: error writing byte at addr=%08lx status=%08x\n",adr,status); 382 + printk("sharp: error writing byte at addr=%08lx status=%08lx\n", adr, status.x[0]); 388 383 389 - map_write32(map,CMD_CLEAR_STATUS,adr); 384 + sharp_send_cmd(map, CMD_CLEAR_STATUS, adr); 390 385 } 391 - map_write32(map,CMD_RESET,adr); 386 + sharp_send_cmd(map, CMD_RESET, adr); 392 387 chip->state = FL_READY; 393 388 394 389 wake_up(&chip->wq); ··· 443 434 { 444 435 int ret; 445 436 unsigned long timeo; 446 - int status; 437 + map_word status; 447 438 DECLARE_WAITQUEUE(wait, current); 448 439 449 - map_write32(map,CMD_READ_STATUS,adr); 450 - status = map_read32(map,adr); 440 + sharp_send_cmd(map, CMD_READ_STATUS, adr); 441 + status = map_read(map, adr); 451 442 452 443 timeo = jiffies + HZ; 453 444 454 445 while(time_before(jiffies, timeo)){ 455 - map_write32(map,CMD_READ_STATUS,adr); 456 - status = map_read32(map,adr); 457 - if((status & SR_READY)==SR_READY){ 446 + sharp_send_cmd(map, CMD_READ_STATUS, adr); 447 + status = map_read(map, adr); 448 + if((status.x[0] & SR_READY)==SR_READY){ 458 449 ret = 0; 459 450 goto out; 460 451 } ··· 485 476 { 486 477 int ret; 487 478 //int timeo; 488 - int status; 479 + map_word status; 489 480 //int i; 490 481 491 482 //printk("sharp_erase_oneblock()\n"); ··· 495 486 sharp_unlock_oneblock(map,chip,adr); 496 487 #endif 497 488 498 - map_write32(map,CMD_BLOCK_ERASE_1,adr); 499 - map_write32(map,CMD_BLOCK_ERASE_2,adr); 489 + sharp_send_cmd(map, CMD_BLOCK_ERASE_1, adr); 490 + sharp_send_cmd(map, CMD_BLOCK_ERASE_2, adr); 500 491 501 492 chip->state = FL_ERASING; 502 493 503 494 ret = sharp_do_wait_for_ready(map,chip,adr); 504 495 if(ret<0)return ret; 505 496 506 - map_write32(map,CMD_READ_STATUS,adr); 507 - status = map_read32(map,adr); 497 + sharp_send_cmd(map, CMD_READ_STATUS, adr); 498 + status = map_read(map, adr); 508 499 509 - if(!(status&SR_ERRORS)){ 510 - map_write32(map,CMD_RESET,adr); 500 + if(!(status.x[0] & SR_ERRORS)){ 501 + sharp_send_cmd(map, CMD_RESET, adr); 511 502 chip->state = FL_READY; 512 503 //spin_unlock_bh(chip->mutex); 513 504 return 0; 514 505 } 515 506 516 - printk("sharp: error erasing block at addr=%08lx status=%08x\n",adr,status); 517 - map_write32(map,CMD_CLEAR_STATUS,adr); 507 + printk("sharp: error erasing block at addr=%08lx status=%08lx\n", adr, status.x[0]); 508 + sharp_send_cmd(map, CMD_CLEAR_STATUS, adr); 518 509 519 510 //spin_unlock_bh(chip->mutex); 520 511 ··· 526 517 unsigned long adr) 527 518 { 528 519 int i; 529 - int status; 520 + map_word status; 530 521 531 - map_write32(map,CMD_CLEAR_BLOCK_LOCKS_1,adr); 532 - map_write32(map,CMD_CLEAR_BLOCK_LOCKS_2,adr); 522 + sharp_send_cmd(map, CMD_CLEAR_BLOCK_LOCKS_1, adr); 523 + sharp_send_cmd(map, CMD_CLEAR_BLOCK_LOCKS_2, adr); 533 524 534 525 udelay(100); 535 526 536 - status = map_read32(map,adr); 537 - printk("status=%08x\n",status); 527 + status = map_read(map, adr); 528 + printk("status=%08lx\n", status.x[0]); 538 529 539 530 for(i=0;i<1000;i++){ 540 - //map_write32(map,CMD_READ_STATUS,adr); 541 - status = map_read32(map,adr); 542 - if((status & SR_READY)==SR_READY) 531 + //sharp_send_cmd(map, CMD_READ_STATUS, adr); 532 + status = map_read(map, adr); 533 + if((status.x[0] & SR_READY) == SR_READY) 543 534 break; 544 535 udelay(100); 545 536 } ··· 547 538 printk("sharp: timed out unlocking block\n"); 548 539 } 549 540 550 - if(!(status&SR_ERRORS)){ 551 - map_write32(map,CMD_RESET,adr); 541 + if(!(status.x[0] & SR_ERRORS)){ 542 + sharp_send_cmd(map, CMD_RESET, adr); 552 543 chip->state = FL_READY; 553 544 return; 554 545 } 555 546 556 - printk("sharp: error unlocking block at addr=%08lx status=%08x\n",adr,status); 557 - map_write32(map,CMD_CLEAR_STATUS,adr); 547 + printk("sharp: error unlocking block at addr=%08lx status=%08lx\n", adr, status.x[0]); 548 + sharp_send_cmd(map, CMD_CLEAR_STATUS, adr); 558 549 } 559 550 #endif 560 551