From: Matthias Kaehlcke The MTD ST M25Pxx driver uses a semaphore as mutex. Use the mutex API instead of the (binary) semaphore. Signed-off-by: Matthias Kaehlcke Cc: David Woodhouse Signed-off-by: Andrew Morton --- drivers/mtd/devices/m25p80.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff -puN drivers/mtd/devices/m25p80.c~use-mutex-instead-of-semaphore-in-the-mtd-st-m25pxx-driver drivers/mtd/devices/m25p80.c --- a/drivers/mtd/devices/m25p80.c~use-mutex-instead-of-semaphore-in-the-mtd-st-m25pxx-driver +++ a/drivers/mtd/devices/m25p80.c @@ -24,8 +24,7 @@ #include #include #include - -#include +#include /* NOTE: AT 25F and SST 25LF series are very similar, @@ -201,13 +200,13 @@ static int m25p80_erase(struct mtd_info addr = instr->addr; len = instr->len; - down(&flash->lock); + mutex_lock(&flash->lock); /* now erase those sectors */ while (len) { if (erase_sector(flash, addr)) { instr->state = MTD_ERASE_FAILED; - up(&flash->lock); + mutex_unlock(&flash->lock); return -EIO; } @@ -215,7 +214,7 @@ static int m25p80_erase(struct mtd_info len -= mtd->erasesize; } - up(&flash->lock); + mutex_unlock(&flash->lock); instr->state = MTD_ERASE_DONE; mtd_erase_callback(instr); @@ -260,12 +259,12 @@ static int m25p80_read(struct mtd_info * if (retlen) *retlen = 0; - down(&flash->lock); + mutex_lock(&flash->lock); /* Wait till previous write/erase is done. */ if (wait_till_ready(flash)) { /* REVISIT status return?? */ - up(&flash->lock); + mutex_unlock(&flash->lock); return 1; } @@ -281,7 +280,7 @@ static int m25p80_read(struct mtd_info * *retlen = m.actual_length - sizeof(flash->command); - up(&flash->lock); + mutex_unlock(&flash->lock); return 0; } @@ -323,7 +322,7 @@ static int m25p80_write(struct mtd_info t[1].tx_buf = buf; spi_message_add_tail(&t[1], &m); - down(&flash->lock); + mutex_lock(&flash->lock); /* Wait until finished previous write command. */ if (wait_till_ready(flash)) @@ -384,7 +383,7 @@ static int m25p80_write(struct mtd_info } } - up(&flash->lock); + mutex_unlock(&flash->lock); return 0; } @@ -456,7 +455,7 @@ static int __devinit m25p_probe(struct s return -ENOMEM; flash->spi = spi; - init_MUTEX(&flash->lock); + mutex_init(&flash->lock); dev_set_drvdata(&spi->dev, flash); if (data->name) _