diff options
author | Uwe Kleine-König <u.kleine-koenig@pengutronix.de> | 2013-03-04 17:35:24 +0100 |
---|---|---|
committer | David Woodhouse <David.Woodhouse@intel.com> | 2013-04-05 11:58:34 +0100 |
commit | 5dc63fa2c2e149dd3e8128e54c9ca251d0558ea0 (patch) | |
tree | bd41eea01066cec5f1babbb43c7b839eafed13b6 /drivers/mtd/mtdchar.c | |
parent | 6b75152bbfce9bed30de44189d6032099c74c855 (diff) | |
download | linux-stable-5dc63fa2c2e149dd3e8128e54c9ca251d0558ea0.tar.gz linux-stable-5dc63fa2c2e149dd3e8128e54c9ca251d0558ea0.tar.bz2 linux-stable-5dc63fa2c2e149dd3e8128e54c9ca251d0558ea0.zip |
mtd: mtdchar: handle chips that have user otp but no factory otp
Before this patch mtd_read_fact_prot_reg was used to check availability
for both MTD_OTP_FACTORY and MTD_OTP_USER access. This made accessing
user otp for chips that don't have a factory otp area impossible. So use
the right wrapper depending on the intended area to be accessed.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'drivers/mtd/mtdchar.c')
-rw-r--r-- | drivers/mtd/mtdchar.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c index 92ab30ab00dc..c2b6729da496 100644 --- a/drivers/mtd/mtdchar.c +++ b/drivers/mtd/mtdchar.c @@ -370,28 +370,30 @@ static int otp_select_filemode(struct mtd_file_info *mfi, int mode) { struct mtd_info *mtd = mfi->mtd; size_t retlen; - int ret = 0; - - /* - * Make a fake call to mtd_read_fact_prot_reg() to check if OTP - * operations are supported. - */ - if (mtd_read_fact_prot_reg(mtd, -1, 0, &retlen, NULL) == -EOPNOTSUPP) - return -EOPNOTSUPP; switch (mode) { case MTD_OTP_FACTORY: + if (mtd_read_fact_prot_reg(mtd, -1, 0, &retlen, NULL) == + -EOPNOTSUPP) + return -EOPNOTSUPP; + mfi->mode = MTD_FILE_MODE_OTP_FACTORY; break; case MTD_OTP_USER: + if (mtd_read_user_prot_reg(mtd, -1, 0, &retlen, NULL) == + -EOPNOTSUPP) + return -EOPNOTSUPP; + mfi->mode = MTD_FILE_MODE_OTP_USER; break; - default: - ret = -EINVAL; case MTD_OTP_OFF: + mfi->mode = MTD_FILE_MODE_NORMAL; break; + default: + return -EINVAL; } - return ret; + + return 0; } #else # define otp_select_filemode(f,m) -EOPNOTSUPP |