aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd/mtdchar.c
diff options
context:
space:
mode:
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>2013-03-04 11:35:24 -0500
committerDavid Woodhouse <David.Woodhouse@intel.com>2013-04-05 06:58:34 -0400
commit5dc63fa2c2e149dd3e8128e54c9ca251d0558ea0 (patch)
treebd41eea01066cec5f1babbb43c7b839eafed13b6 /drivers/mtd/mtdchar.c
parent6b75152bbfce9bed30de44189d6032099c74c855 (diff)
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.c24
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)
370{ 370{
371 struct mtd_info *mtd = mfi->mtd; 371 struct mtd_info *mtd = mfi->mtd;
372 size_t retlen; 372 size_t retlen;
373 int ret = 0;
374
375 /*
376 * Make a fake call to mtd_read_fact_prot_reg() to check if OTP
377 * operations are supported.
378 */
379 if (mtd_read_fact_prot_reg(mtd, -1, 0, &retlen, NULL) == -EOPNOTSUPP)
380 return -EOPNOTSUPP;
381 373
382 switch (mode) { 374 switch (mode) {
383 case MTD_OTP_FACTORY: 375 case MTD_OTP_FACTORY:
376 if (mtd_read_fact_prot_reg(mtd, -1, 0, &retlen, NULL) ==
377 -EOPNOTSUPP)
378 return -EOPNOTSUPP;
379
384 mfi->mode = MTD_FILE_MODE_OTP_FACTORY; 380 mfi->mode = MTD_FILE_MODE_OTP_FACTORY;
385 break; 381 break;
386 case MTD_OTP_USER: 382 case MTD_OTP_USER:
383 if (mtd_read_user_prot_reg(mtd, -1, 0, &retlen, NULL) ==
384 -EOPNOTSUPP)
385 return -EOPNOTSUPP;
386
387 mfi->mode = MTD_FILE_MODE_OTP_USER; 387 mfi->mode = MTD_FILE_MODE_OTP_USER;
388 break; 388 break;
389 default:
390 ret = -EINVAL;
391 case MTD_OTP_OFF: 389 case MTD_OTP_OFF:
390 mfi->mode = MTD_FILE_MODE_NORMAL;
392 break; 391 break;
392 default:
393 return -EINVAL;
393 } 394 }
394 return ret; 395
396 return 0;
395} 397}
396#else 398#else
397# define otp_select_filemode(f,m) -EOPNOTSUPP 399# define otp_select_filemode(f,m) -EOPNOTSUPP