Re: mux driver

2009-05-17 Thread Ilya Petrov
2009/5/16 Daniel Ribeiro :
> Yes, I think that tty_ops is the best. It is already used for MUX -> IPC
> write(), and it should be used for the read() too.

there is no read() in tty drivers. tty driver only adds data to buffer.

-- 
 wbr, Ilya
 ICQ: none, Jabber: ilya.muro...@jabber.ru



[PATCH] cfi_cmdset_0001.c: quirk for PF38F4476.

2009-05-17 Thread Daniel Ribeiro
This chip reports CFI 1.3, but the CFI PRI is like CFI 1.1. Add a quirk
to pass probe on this chip.
(This patch depends on "cfi_cmdset_0001.c: CFI 1.0 and CFI 1.1")
(sent again with CC to Nicolas Pitre)

Signed-off-by: Daniel Ribeiro 
---
 drivers/mtd/chips/cfi_cmdset_0001.c |   12 
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/drivers/mtd/chips/cfi_cmdset_0001.c 
b/drivers/mtd/chips/cfi_cmdset_0001.c
index bf07d14..0e01ab9 100644
--- a/drivers/mtd/chips/cfi_cmdset_0001.c
+++ b/drivers/mtd/chips/cfi_cmdset_0001.c
@@ -46,6 +46,7 @@
 #define MANUFACTURER_INTEL 0x0089
 #define I82802AB   0x00ad
 #define I82802AC   0x00ac
+#define PF38F4476  0x881c
 #define MANUFACTURER_ST 0x0020
 #define M50LPW080   0x002F
 #define M50FLW080A 0x0080
@@ -315,9 +316,18 @@ static struct cfi_fixup fixup_table[] = {
{ 0, 0, NULL, NULL }
 };
 
+static void cfi_fixup_major_minor(struct cfi_private *cfi,
+   struct cfi_pri_intelext *extp)
+{
+   if (cfi->mfr == MANUFACTURER_INTEL &&
+   cfi->id == PF38F4476 && extp->MinorVersion == '3')
+   extp->MinorVersion = '1';
+}
+
 static inline struct cfi_pri_intelext *
 read_pri_intelext(struct map_info *map, __u16 adr)
 {
+   struct cfi_private *cfi = map->fldrv_priv;
struct cfi_pri_intelext *extp;
unsigned int extra_size = 0;
unsigned int extp_size = sizeof(*extp);
@@ -327,6 +337,8 @@ read_pri_intelext(struct map_info *map, __u16 adr)
if (!extp)
return NULL;
 
+   cfi_fixup_major_minor(cfi, extp);
+
if (extp->MajorVersion != '1' ||
(extp->MinorVersion < '0' || extp->MinorVersion > '5')) {
printk(KERN_ERR "  Unknown Intel/Sharp Extended Query "
-- 
tg: (385157b..) mtd/pf38f4476-fix (depends on: mtd/cfi1.1-has-extra-too)

-- 
Daniel Ribeiro




[PATCH] cfi_cmdset_0001.c: CFI 1.0 and CFI 1.1

2009-05-17 Thread Daniel Ribeiro
This patch allows otpinfo for CFI >= 1.0 and burst read for CFI >= 1.1.
(sent again with CC to Nicolas Pitre)

references:
1.0:http://www.datasheetcatalog.org/datasheets2/81/816884_1.pdf

1.1:http://milkymist.org/doc/MT28F640J3.pdf
http://www.delorie.com/agenda/specs/29066709.pdf

Signed-off-by: Daniel Ribeiro 
---
 drivers/mtd/chips/cfi_cmdset_0001.c |   14 ++
 1 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/drivers/mtd/chips/cfi_cmdset_0001.c 
b/drivers/mtd/chips/cfi_cmdset_0001.c
index c240454..bf07d14 100644
--- a/drivers/mtd/chips/cfi_cmdset_0001.c
+++ b/drivers/mtd/chips/cfi_cmdset_0001.c
@@ -319,6 +319,7 @@ static inline struct cfi_pri_intelext *
 read_pri_intelext(struct map_info *map, __u16 adr)
 {
struct cfi_pri_intelext *extp;
+   unsigned int extra_size = 0;
unsigned int extp_size = sizeof(*extp);
 
  again:
@@ -340,19 +341,24 @@ read_pri_intelext(struct map_info *map, __u16 adr)
extp->BlkStatusRegMask = le16_to_cpu(extp->BlkStatusRegMask);
extp->ProtRegAddr = le16_to_cpu(extp->ProtRegAddr);
 
-   if (extp->MajorVersion == '1' && extp->MinorVersion >= '3') {
-   unsigned int extra_size = 0;
-   int nb_parts, i;
+   if (extp->MinorVersion >= '0') {
+   extra_size = 0;
 
/* Protection Register info */
extra_size += (extp->NumProtectionFields - 1) *
  sizeof(struct cfi_intelext_otpinfo);
+   }
 
+   if (extp->MinorVersion >= '1') {
/* Burst Read info */
extra_size += 2;
if (extp_size < sizeof(*extp) + extra_size)
goto need_more;
-   extra_size += extp->extra[extra_size-1];
+   extra_size += extp->extra[extra_size - 1];
+   }
+
+   if (extp->MinorVersion >= '3') {
+   int nb_parts, i;
 
/* Number of hardware-partitions */
extra_size += 1;
-- 
tg: (1406de8..) mtd/cfi1.1-has-extra-too (depends on: master)

-- 
Daniel Ribeiro