Commit e367095d authored by Sakari Ailus's avatar Sakari Ailus Committed by Mauro Carvalho Chehab

media: smiapp: Refactor reading NVM page

Split out reading a single NVM page into a separate function.
Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
parent a5b1d541
...@@ -970,56 +970,65 @@ static int smiapp_update_mode(struct smiapp_sensor *sensor) ...@@ -970,56 +970,65 @@ static int smiapp_update_mode(struct smiapp_sensor *sensor)
* SMIA++ NVM handling * SMIA++ NVM handling
* *
*/ */
static int smiapp_read_nvm(struct smiapp_sensor *sensor,
unsigned char *nvm) static int smiapp_read_nvm_page(struct smiapp_sensor *sensor, u32 p, u8 *nvm)
{ {
u32 i, s, p, np, v; unsigned int i;
int rval = 0, rval2; int rval;
np = sensor->nvm_size / SMIAPP_NVM_PAGE_SIZE; rval = smiapp_write(sensor,
for (p = 0; p < np; p++) { SMIAPP_REG_U8_DATA_TRANSFER_IF_1_PAGE_SELECT, p);
rval = smiapp_write( if (rval)
return rval;
rval = smiapp_write(sensor, SMIAPP_REG_U8_DATA_TRANSFER_IF_1_CTRL,
SMIAPP_DATA_TRANSFER_IF_1_CTRL_EN);
if (rval)
return rval;
for (i = 1000; i > 0; i--) {
u32 s;
rval = smiapp_read(
sensor, sensor,
SMIAPP_REG_U8_DATA_TRANSFER_IF_1_PAGE_SELECT, p); SMIAPP_REG_U8_DATA_TRANSFER_IF_1_STATUS, &s);
if (rval)
goto out;
rval = smiapp_write(sensor,
SMIAPP_REG_U8_DATA_TRANSFER_IF_1_CTRL,
SMIAPP_DATA_TRANSFER_IF_1_CTRL_EN);
if (rval) if (rval)
goto out; return rval;
for (i = 1000; i > 0; i--) { if (s & SMIAPP_DATA_TRANSFER_IF_1_STATUS_RD_READY)
rval = smiapp_read( break;
sensor, }
SMIAPP_REG_U8_DATA_TRANSFER_IF_1_STATUS, &s); if (!i)
return -ETIMEDOUT;
if (rval) for (i = 0; i < SMIAPP_NVM_PAGE_SIZE; i++) {
goto out; u32 v;
if (s & SMIAPP_DATA_TRANSFER_IF_1_STATUS_RD_READY) rval = smiapp_read(sensor,
break; SMIAPP_REG_U8_DATA_TRANSFER_IF_1_DATA_0 + i,
&v);
if (rval)
return rval;
} *nvm++ = v;
if (!i) { }
rval = -ETIMEDOUT;
goto out;
}
for (i = 0; i < SMIAPP_NVM_PAGE_SIZE; i++) { return 0;
rval = smiapp_read( }
sensor,
SMIAPP_REG_U8_DATA_TRANSFER_IF_1_DATA_0 + i,
&v);
if (rval)
goto out;
*nvm++ = v; static int smiapp_read_nvm(struct smiapp_sensor *sensor,
} unsigned char *nvm)
{
u32 p, np;
int rval = 0, rval2;
np = sensor->nvm_size / SMIAPP_NVM_PAGE_SIZE;
for (p = 0; p < np && !rval; p++) {
rval = smiapp_read_nvm_page(sensor, p, nvm);
nvm += SMIAPP_NVM_PAGE_SIZE;
} }
out:
rval2 = smiapp_write(sensor, SMIAPP_REG_U8_DATA_TRANSFER_IF_1_CTRL, 0); rval2 = smiapp_write(sensor, SMIAPP_REG_U8_DATA_TRANSFER_IF_1_CTRL, 0);
if (rval < 0) if (rval < 0)
return rval; return rval;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment