mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2024-12-28 00:32:00 +00:00
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/srini/nvmem.git
This commit is contained in:
commit
4e833e4c19
@ -71,14 +71,16 @@ static int imx_ocotp_reg_read(void *context, unsigned int offset, void *val, siz
|
||||
u32 *buf;
|
||||
void *p;
|
||||
int i;
|
||||
u8 skipbytes;
|
||||
|
||||
index = offset;
|
||||
num_bytes = round_up(bytes, 4);
|
||||
if (offset + bytes > priv->data->size)
|
||||
bytes = priv->data->size - offset;
|
||||
|
||||
index = offset >> 2;
|
||||
skipbytes = offset - (index << 2);
|
||||
num_bytes = round_up(bytes + skipbytes, 4);
|
||||
count = num_bytes >> 2;
|
||||
|
||||
if (count > ((priv->data->size >> 2) - index))
|
||||
count = (priv->data->size >> 2) - index;
|
||||
|
||||
p = kzalloc(num_bytes, GFP_KERNEL);
|
||||
if (!p)
|
||||
return -ENOMEM;
|
||||
@ -100,7 +102,7 @@ static int imx_ocotp_reg_read(void *context, unsigned int offset, void *val, siz
|
||||
*buf++ = readl_relaxed(reg + (i << 2));
|
||||
}
|
||||
|
||||
memcpy(val, (u8 *)p, bytes);
|
||||
memcpy(val, ((u8 *)p) + skipbytes, bytes);
|
||||
|
||||
mutex_unlock(&priv->lock);
|
||||
|
||||
@ -109,6 +111,26 @@ static int imx_ocotp_reg_read(void *context, unsigned int offset, void *val, siz
|
||||
return 0;
|
||||
};
|
||||
|
||||
static int imx_ocotp_cell_pp(void *context, const char *id, int index,
|
||||
unsigned int offset, void *data, size_t bytes)
|
||||
{
|
||||
u8 *buf = data;
|
||||
int i;
|
||||
|
||||
/* Deal with some post processing of nvmem cell data */
|
||||
if (id && !strcmp(id, "mac-address"))
|
||||
for (i = 0; i < bytes / 2; i++)
|
||||
swap(buf[i], buf[bytes - i - 1]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void imx_ocotp_fixup_dt_cell_info(struct nvmem_device *nvmem,
|
||||
struct nvmem_cell_info *cell)
|
||||
{
|
||||
cell->read_post_process = imx_ocotp_cell_pp;
|
||||
}
|
||||
|
||||
static int imx_ele_ocotp_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
@ -131,10 +153,12 @@ static int imx_ele_ocotp_probe(struct platform_device *pdev)
|
||||
priv->config.owner = THIS_MODULE;
|
||||
priv->config.size = priv->data->size;
|
||||
priv->config.reg_read = priv->data->reg_read;
|
||||
priv->config.word_size = 4;
|
||||
priv->config.word_size = 1;
|
||||
priv->config.stride = 1;
|
||||
priv->config.priv = priv;
|
||||
priv->config.read_only = true;
|
||||
priv->config.add_legacy_fixed_of_cells = true;
|
||||
priv->config.fixup_dt_cell_info = imx_ocotp_fixup_dt_cell_info;
|
||||
mutex_init(&priv->lock);
|
||||
|
||||
nvmem = devm_nvmem_register(dev, &priv->config);
|
||||
|
Loading…
Reference in New Issue
Block a user