Lines Matching refs:cell

205 static void nvmem_cell_drop(struct nvmem_cell *cell)  in nvmem_cell_drop()  argument
208 list_del(&cell->node); in nvmem_cell_drop()
210 kfree(cell); in nvmem_cell_drop()
215 struct nvmem_cell *cell; in nvmem_device_remove_all_cells() local
219 cell = list_entry(p, struct nvmem_cell, node); in nvmem_device_remove_all_cells()
220 if (cell->nvmem == nvmem) in nvmem_device_remove_all_cells()
221 nvmem_cell_drop(cell); in nvmem_device_remove_all_cells()
225 static void nvmem_cell_add(struct nvmem_cell *cell) in nvmem_cell_add() argument
228 list_add_tail(&cell->node, &nvmem_cells); in nvmem_cell_add()
234 struct nvmem_cell *cell) in nvmem_cell_info_to_nvmem_cell() argument
236 cell->nvmem = nvmem; in nvmem_cell_info_to_nvmem_cell()
237 cell->offset = info->offset; in nvmem_cell_info_to_nvmem_cell()
238 cell->bytes = info->bytes; in nvmem_cell_info_to_nvmem_cell()
239 cell->name = info->name; in nvmem_cell_info_to_nvmem_cell()
241 cell->bit_offset = info->bit_offset; in nvmem_cell_info_to_nvmem_cell()
242 cell->nbits = info->nbits; in nvmem_cell_info_to_nvmem_cell()
244 if (cell->nbits) in nvmem_cell_info_to_nvmem_cell()
245 cell->bytes = DIV_ROUND_UP(cell->nbits + cell->bit_offset, in nvmem_cell_info_to_nvmem_cell()
248 if (!IS_ALIGNED(cell->offset, nvmem->stride)) { in nvmem_cell_info_to_nvmem_cell()
251 cell->name, nvmem->stride); in nvmem_cell_info_to_nvmem_cell()
409 struct nvmem_cell *cell = nvmem_find_cell(cell_id); in __nvmem_device_get() local
411 if (cell) { in __nvmem_device_get()
412 nvmem = cell->nvmem; in __nvmem_device_get()
413 *cellp = cell; in __nvmem_device_get()
592 struct nvmem_cell *cell = NULL; in nvmem_cell_get_from_list() local
595 nvmem = __nvmem_device_get(NULL, &cell, cell_id); in nvmem_cell_get_from_list()
599 return cell; in nvmem_cell_get_from_list()
617 struct nvmem_cell *cell; in of_nvmem_cell_get() local
644 cell = kzalloc(sizeof(*cell), GFP_KERNEL); in of_nvmem_cell_get()
645 if (!cell) { in of_nvmem_cell_get()
650 cell->nvmem = nvmem; in of_nvmem_cell_get()
651 cell->offset = be32_to_cpup(addr++); in of_nvmem_cell_get()
652 cell->bytes = be32_to_cpup(addr); in of_nvmem_cell_get()
653 cell->name = cell_np->name; in of_nvmem_cell_get()
657 cell->bit_offset = be32_to_cpup(addr++); in of_nvmem_cell_get()
658 cell->nbits = be32_to_cpup(addr); in of_nvmem_cell_get()
661 if (cell->nbits) in of_nvmem_cell_get()
662 cell->bytes = DIV_ROUND_UP(cell->nbits + cell->bit_offset, in of_nvmem_cell_get()
665 if (!IS_ALIGNED(cell->offset, nvmem->stride)) { in of_nvmem_cell_get()
668 cell->name, nvmem->stride); in of_nvmem_cell_get()
673 nvmem_cell_add(cell); in of_nvmem_cell_get()
675 return cell; in of_nvmem_cell_get()
678 kfree(cell); in of_nvmem_cell_get()
700 struct nvmem_cell *cell; in nvmem_cell_get() local
703 cell = of_nvmem_cell_get(dev->of_node, cell_id); in nvmem_cell_get()
704 if (!IS_ERR(cell) || PTR_ERR(cell) == -EPROBE_DEFER) in nvmem_cell_get()
705 return cell; in nvmem_cell_get()
729 struct nvmem_cell **ptr, *cell; in devm_nvmem_cell_get() local
735 cell = nvmem_cell_get(dev, id); in devm_nvmem_cell_get()
736 if (!IS_ERR(cell)) { in devm_nvmem_cell_get()
737 *ptr = cell; in devm_nvmem_cell_get()
743 return cell; in devm_nvmem_cell_get()
763 void devm_nvmem_cell_put(struct device *dev, struct nvmem_cell *cell) in devm_nvmem_cell_put() argument
768 devm_nvmem_cell_match, cell); in devm_nvmem_cell_put()
779 void nvmem_cell_put(struct nvmem_cell *cell) in nvmem_cell_put() argument
781 struct nvmem_device *nvmem = cell->nvmem; in nvmem_cell_put()
784 nvmem_cell_drop(cell); in nvmem_cell_put()
788 static inline void nvmem_shift_read_buffer_in_place(struct nvmem_cell *cell, in nvmem_shift_read_buffer_in_place() argument
792 int i, bit_offset = cell->bit_offset; in nvmem_shift_read_buffer_in_place()
800 for (i = 1; i < cell->bytes; i++) { in nvmem_shift_read_buffer_in_place()
809 if (cell->bytes != DIV_ROUND_UP(cell->nbits, BITS_PER_BYTE)) in nvmem_shift_read_buffer_in_place()
813 *p &= GENMASK((cell->nbits%BITS_PER_BYTE) - 1, 0); in nvmem_shift_read_buffer_in_place()
817 struct nvmem_cell *cell, in __nvmem_cell_read() argument
822 rc = regmap_raw_read(nvmem->regmap, cell->offset, buf, cell->bytes); in __nvmem_cell_read()
828 if (cell->bit_offset || cell->nbits) in __nvmem_cell_read()
829 nvmem_shift_read_buffer_in_place(cell, buf); in __nvmem_cell_read()
831 *len = cell->bytes; in __nvmem_cell_read()
845 void *nvmem_cell_read(struct nvmem_cell *cell, size_t *len) in nvmem_cell_read() argument
847 struct nvmem_device *nvmem = cell->nvmem; in nvmem_cell_read()
854 buf = kzalloc(cell->bytes, GFP_KERNEL); in nvmem_cell_read()
858 rc = __nvmem_cell_read(nvmem, cell, buf, len); in nvmem_cell_read()
868 static inline void *nvmem_cell_prepare_write_buffer(struct nvmem_cell *cell, in nvmem_cell_prepare_write_buffer() argument
871 struct nvmem_device *nvmem = cell->nvmem; in nvmem_cell_prepare_write_buffer()
872 int i, rc, nbits, bit_offset = cell->bit_offset; in nvmem_cell_prepare_write_buffer()
875 nbits = cell->nbits; in nvmem_cell_prepare_write_buffer()
876 buf = kzalloc(cell->bytes, GFP_KERNEL); in nvmem_cell_prepare_write_buffer()
888 rc = regmap_raw_read(nvmem->regmap, cell->offset, &v, 1); in nvmem_cell_prepare_write_buffer()
892 for (i = 1; i < cell->bytes; i++) { in nvmem_cell_prepare_write_buffer()
906 cell->offset + cell->bytes - 1, &v, 1); in nvmem_cell_prepare_write_buffer()
923 int nvmem_cell_write(struct nvmem_cell *cell, void *buf, size_t len) in nvmem_cell_write() argument
925 struct nvmem_device *nvmem = cell->nvmem; in nvmem_cell_write()
929 (cell->bit_offset == 0 && len != cell->bytes)) in nvmem_cell_write()
932 if (cell->bit_offset || cell->nbits) { in nvmem_cell_write()
933 buf = nvmem_cell_prepare_write_buffer(cell, buf, len); in nvmem_cell_write()
938 rc = regmap_raw_write(nvmem->regmap, cell->offset, buf, cell->bytes); in nvmem_cell_write()
941 if (cell->bit_offset || cell->nbits) in nvmem_cell_write()
964 struct nvmem_cell cell; in nvmem_device_cell_read() local
971 rc = nvmem_cell_info_to_nvmem_cell(nvmem, info, &cell); in nvmem_device_cell_read()
975 rc = __nvmem_cell_read(nvmem, &cell, buf, &len); in nvmem_device_cell_read()
995 struct nvmem_cell cell; in nvmem_device_cell_write() local
1001 rc = nvmem_cell_info_to_nvmem_cell(nvmem, info, &cell); in nvmem_device_cell_write()
1005 return nvmem_cell_write(&cell, buf, cell.bytes); in nvmem_device_cell_write()