lkml.org 
[lkml]   [2016]   [Jan]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH linux-next v2 07/14] mtd: spi-nor: fix support of Spansion memories
    Date
    This patch is only a transitional one. It concludes the series of patches
    to select op codes and protocols by manufacturer.

    Signed-off-by: Cyrille Pitchen <cyrille.pitchen@atmel.com>
    ---
    drivers/mtd/spi-nor/spi-nor.c | 53 ++++++++++++++++++++++++++++++-------------
    1 file changed, 37 insertions(+), 16 deletions(-)

    diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
    index db76af852198..067425c7a0ff 100644
    --- a/drivers/mtd/spi-nor/spi-nor.c
    +++ b/drivers/mtd/spi-nor/spi-nor.c
    @@ -1466,10 +1466,35 @@ static int micron_set_single_mode(struct spi_nor *nor)
    return 0;
    }

    -static int set_quad_mode(struct spi_nor *nor, const struct flash_info *info)
    +static int spansion_set_quad_mode(struct spi_nor *nor)
    {
    int status;

    + status = spansion_quad_enable(nor);
    + if (status) {
    + dev_err(nor->dev, "Spansion quad-read not enabled\n");
    + return -EINVAL;
    + }
    + nor->read_proto = SNOR_PROTO_1_1_4;
    + nor->read_opcode = SPINOR_OP_READ_1_1_4;
    + return 0;
    +}
    +
    +static int spansion_set_dual_mode(struct spi_nor *nor)
    +{
    + nor->read_proto = SNOR_PROTO_1_1_2;
    + nor->read_opcode = SPINOR_OP_READ_1_1_2;
    + return 0;
    +}
    +
    +static int spansion_set_single_mode(struct spi_nor *nor)
    +{
    + nor->read_proto = SNOR_PROTO_1_1_1;
    + return 0;
    +}
    +
    +static int set_quad_mode(struct spi_nor *nor, const struct flash_info *info)
    +{
    switch (JEDEC_MFR(info)) {
    case SNOR_MFR_MACRONIX:
    return macronix_set_quad_mode(nor);
    @@ -1481,20 +1506,13 @@ static int set_quad_mode(struct spi_nor *nor, const struct flash_info *info)
    return micron_set_quad_mode(nor);

    case SNOR_MFR_SPANSION:
    - status = spansion_quad_enable(nor);
    - if (status) {
    - dev_err(nor->dev, "Spansion quad-read not enabled\n");
    - return -EINVAL;
    - }
    - nor->read_proto = SNOR_PROTO_1_1_4;
    - break;
    + return spansion_set_quad_mode(nor);

    default:
    - return -EINVAL;
    + break;
    }

    - nor->read_opcode = SPINOR_OP_READ_1_1_4;
    - return 0;
    + return -EINVAL;
    }

    static int set_dual_mode(struct spi_nor *nor, const struct flash_info *info)
    @@ -1509,13 +1527,14 @@ static int set_dual_mode(struct spi_nor *nor, const struct flash_info *info)
    case SNOR_MFR_MICRON:
    return micron_set_dual_mode(nor);

    + case SNOR_MFR_SPANSION:
    + return spansion_set_dual_mode(nor);
    +
    default:
    - nor->read_proto = SNOR_PROTO_1_1_2;
    break;
    }

    - nor->read_opcode = SPINOR_OP_READ_1_1_2;
    - return 0;
    + return -EINVAL;
    }

    static int set_single_mode(struct spi_nor *nor, const struct flash_info *info)
    @@ -1530,12 +1549,14 @@ static int set_single_mode(struct spi_nor *nor, const struct flash_info *info)
    case SNOR_MFR_MICRON:
    return micron_set_single_mode(nor);

    + case SNOR_MFR_SPANSION:
    + return spansion_set_single_mode(nor);
    +
    default:
    - nor->read_proto = SNOR_PROTO_1_1_1;
    break;
    }

    - return 0;
    + return -EINVAL;
    }

    static int spi_nor_check(struct spi_nor *nor)
    --
    1.8.2.2
    \
     
     \ /
      Last update: 2016-01-08 17:41    [W:3.327 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site