Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1ab9dd09 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* git://git.infradead.org/mtd-2.6:
  [MTD] Whitespace cleanup in SSFDC driver.
  [MTD] SSFDC translation layer minor cleanup
  [MTD] Fix dependencies with CONFIG_MTD=m
parents f7425b16 08d3ad6a
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -101,7 +101,7 @@ config MTD_REDBOOT_PARTS_READONLY

config MTD_CMDLINE_PARTS
	bool "Command line partition table parsing"
	depends on MTD_PARTITIONS = "y"
	depends on MTD_PARTITIONS = "y" && MTD = "y"
	---help---
	  Allow generic configuration of the MTD partition tables via the kernel
	  command line. Multiple flash resources are supported for hardware where
@@ -264,7 +264,7 @@ config RFD_FTL
		http://www.gensw.com/pages/prod/bios/rfd.htm

config SSFDC
	bool "NAND SSFDC (SmartMedia) read only translation layer"
	tristate "NAND SSFDC (SmartMedia) read only translation layer"
	depends on MTD
	default n
	help
+32 −26
Original line number Diff line number Diff line
@@ -10,7 +10,6 @@
 * published by the Free Software Foundation.
 */

#include <linux/config.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
@@ -29,7 +28,7 @@ struct ssfdcr_record {
	int cis_block;			/* block n. containing CIS/IDI */
	int erase_size;			/* phys_block_size */
	unsigned short *logic_block_map; /* all zones (max 8192 phys blocks on
					    the 128MB) */
					    the 128MiB) */
	int map_len;			/* n. phys_blocks on the card */
};

@@ -43,11 +42,11 @@ struct ssfdcr_record {
#define MAX_LOGIC_BLK_PER_ZONE	1000
#define MAX_PHYS_BLK_PER_ZONE	1024

#define KB(x)	( (x) * 1024L )
#define MB(x)	( KB(x) * 1024L )
#define KiB(x)	( (x) * 1024L )
#define MiB(x)	( KiB(x) * 1024L )

/** CHS Table
		1MB	2MB	4MB	8MB	16MB	32MB	64MB	128MB
		1MiB	2MiB	4MiB	8MiB	16MiB	32MiB	64MiB	128MiB
NCylinder	125	125	250	250	500	500	500	500
NHead		4	4	4	4	4	8	8	16
NSector		4	8	8	16	16	16	32	32
@@ -64,14 +63,14 @@ typedef struct {

/* Must be ordered by size */
static const chs_entry_t chs_table[] = {
	{ MB(  1), 125,  4,  4 },
	{ MB(  2), 125,  4,  8 },
	{ MB(  4), 250,  4,  8 },
	{ MB(  8), 250,  4, 16 },
	{ MB( 16), 500,  4, 16 },
	{ MB( 32), 500,  8, 16 },
	{ MB( 64), 500,  8, 32 },
	{ MB(128), 500, 16, 32 },
	{ MiB(  1), 125,  4,  4 },
	{ MiB(  2), 125,  4,  8 },
	{ MiB(  4), 250,  4,  8 },
	{ MiB(  8), 250,  4, 16 },
	{ MiB( 16), 500,  4, 16 },
	{ MiB( 32), 500,  8, 16 },
	{ MiB( 64), 500,  8, 32 },
	{ MiB(128), 500, 16, 32 },
	{ 0 },
};

@@ -109,14 +108,19 @@ static int get_valid_cis_sector(struct mtd_info *mtd)
	int ret, k, cis_sector;
	size_t retlen;
	loff_t offset;
	uint8_t sect_buf[SECTOR_SIZE];
	uint8_t *sect_buf;

	cis_sector = -1;

	sect_buf = kmalloc(SECTOR_SIZE, GFP_KERNEL);
	if (!sect_buf)
		goto out;

	/*
	 * Look for CIS/IDI sector on the first GOOD block (give up after 4 bad
	 * blocks). If the first good block doesn't contain CIS number the flash
	 * is not SSFDC formatted
	 */
	cis_sector = -1;
	for (k = 0, offset = 0; k < 4; k++, offset += mtd->erasesize) {
		if (!mtd->block_isbad(mtd, offset)) {
			ret = mtd->read(mtd, offset, SECTOR_SIZE, &retlen,
@@ -140,6 +144,8 @@ static int get_valid_cis_sector(struct mtd_info *mtd)
		}
	}

	kfree(sect_buf);
 out:
	return cis_sector;
}

@@ -245,8 +251,8 @@ static int build_logical_block_map(struct ssfdcr_record *ssfdc)
	struct mtd_info *mtd = ssfdc->mbd.mtd;

	DEBUG(MTD_DEBUG_LEVEL1, "SSFDC_RO: build_block_map() nblks=%d (%luK)\n",
		ssfdc->map_len, (unsigned long)ssfdc->map_len *
		ssfdc->erase_size / 1024 );
	      ssfdc->map_len,
	      (unsigned long)ssfdc->map_len * ssfdc->erase_size / 1024);

	/* Scan every physical block, skip CIS block */
	for (phys_block = ssfdc->cis_block + 1; phys_block < ssfdc->map_len;