0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include "cxd2880_io.h"
0011
0012 int cxd2880_io_common_write_one_reg(struct cxd2880_io *io,
0013 enum cxd2880_io_tgt tgt,
0014 u8 sub_address, u8 data)
0015 {
0016 if (!io)
0017 return -EINVAL;
0018
0019 return io->write_regs(io, tgt, sub_address, &data, 1);
0020 }
0021
0022 int cxd2880_io_set_reg_bits(struct cxd2880_io *io,
0023 enum cxd2880_io_tgt tgt,
0024 u8 sub_address, u8 data, u8 mask)
0025 {
0026 int ret;
0027
0028 if (!io)
0029 return -EINVAL;
0030
0031 if (mask == 0x00)
0032 return 0;
0033
0034 if (mask != 0xff) {
0035 u8 rdata = 0x00;
0036
0037 ret = io->read_regs(io, tgt, sub_address, &rdata, 1);
0038 if (ret)
0039 return ret;
0040
0041 data = (data & mask) | (rdata & (mask ^ 0xff));
0042 }
0043
0044 return io->write_reg(io, tgt, sub_address, data);
0045 }
0046
0047 int cxd2880_io_write_multi_regs(struct cxd2880_io *io,
0048 enum cxd2880_io_tgt tgt,
0049 const struct cxd2880_reg_value reg_value[],
0050 u8 size)
0051 {
0052 int ret;
0053 int i;
0054
0055 if (!io)
0056 return -EINVAL;
0057
0058 for (i = 0; i < size ; i++) {
0059 ret = io->write_reg(io, tgt, reg_value[i].addr,
0060 reg_value[i].value);
0061 if (ret)
0062 return ret;
0063 }
0064
0065 return 0;
0066 }