Lines Matching +full:mipi +full:- +full:bias
1 // SPDX-License-Identifier: GPL-2.0-only
3 * drivers/media/i2c/ccs/ccs-reg-access.c
5 * Generic driver for MIPI CCS/SMIA/SMIA++ compliant camera sensors
8 * Copyright (C) 2011--2012 Nokia Corporation
18 #include "ccs-limits.h"
26 dev_err(&client->dev, "this is a negative number\n"); in float_to_u32_mul_1000000()
34 dev_err(&client->dev, "NaN or other special number\n"); in float_to_u32_mul_1000000()
49 exp = ((int32_t)phloat >> 23) - 127; in float_to_u32_mul_1000000()
55 man >>= -exp; in float_to_u32_mul_1000000()
59 man >>= 23; /* Remove mantissa bias */ in float_to_u32_mul_1000000()
66 * Read a 8/16/32-bit i2c register. The value is returned in 'val'.
67 * Returns zero if successful, or non-zero otherwise.
72 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); in ____ccs_read_addr()
79 return -EINVAL; in ____ccs_read_addr()
81 msg.addr = client->addr; in ____ccs_read_addr()
87 r = i2c_transfer(client->adapter, &msg, 1); in ____ccs_read_addr()
90 r = -EBUSY; in ____ccs_read_addr()
96 msg.buf = &data_buf[sizeof(data_buf) - len]; in ____ccs_read_addr()
98 r = i2c_transfer(client->adapter, &msg, 1); in ____ccs_read_addr()
101 r = -EBUSY; in ____ccs_read_addr()
110 dev_err(&client->dev, "read from offset 0x%x error %d\n", reg, r); in ____ccs_read_addr()
115 /* Read a register using 8-bit access only. */
130 *val |= val8 << ((len - i - 1) << 3); in ____ccs_read_addr_8only()
149 dev_warn(&client->dev, "value %u overflows!\n", val); in ireal32_to_u32_mul_1000000()
159 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); in ccs_reg_conv()
175 * Read a 8/16/32-bit i2c register. The value is returned in 'val'.
176 * Returns zero if successful, or non-zero otherwise.
209 if (regs->addr + regs->len < CCS_REG_ADDR(reg) + width) in __ccs_read_data()
212 if (regs->addr > CCS_REG_ADDR(reg)) in __ccs_read_data()
215 data = ®s->value[CCS_REG_ADDR(reg) - regs->addr]; in __ccs_read_data()
229 return -EINVAL; in __ccs_read_data()
235 return -ENOENT; in __ccs_read_data()
240 if (!__ccs_read_data(sensor->sdata.sensor_read_only_regs, in ccs_read_data()
241 sensor->sdata.num_sensor_read_only_regs, in ccs_read_data()
245 return __ccs_read_data(sensor->mdata.module_read_only_regs, in ccs_read_data()
246 sensor->mdata.num_module_read_only_regs, in ccs_read_data()
264 if (rval == -ENOIOCTLCMD) in ccs_read_addr_raw()
305 r = i2c_transfer(client->adapter, msg, 1); in ccs_write_retry()
312 dev_err(&client->dev, in ccs_write_retry()
323 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); in ccs_write_addr_no_quirk()
329 if (len > sizeof(data) - 2) in ccs_write_addr_no_quirk()
330 return -EINVAL; in ccs_write_addr_no_quirk()
332 msg.addr = client->addr; in ccs_write_addr_no_quirk()
338 put_unaligned_be32(val << (8 * (sizeof(val) - len)), data + 2); in ccs_write_addr_no_quirk()
340 dev_dbg(&client->dev, "writing reg 0x%4.4x value 0x%*.*x (%u)\n", in ccs_write_addr_no_quirk()
346 dev_err(&client->dev, in ccs_write_addr_no_quirk()
354 * Write to a 8/16-bit register.
355 * Returns zero if successful, or non-zero otherwise.
362 if (rval == -ENOIOCTLCMD) in ccs_write_addr()
375 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); in ccs_write_data_regs()
378 .addr = client->addr, in ccs_write_data_regs()
384 unsigned char *regdata = regs->value; in ccs_write_data_regs()
387 for (j = 0; j < regs->len; in ccs_write_data_regs()
388 j += msg.len - 2, regdata += msg.len - 2) { in ccs_write_data_regs()
393 msg.len = min(regs->len - j, MAX_WRITE_LEN); in ccs_write_data_regs()
396 dev_dbg(&client->dev, in ccs_write_data_regs()
398 regs->addr + j, printbuf); in ccs_write_data_regs()
400 put_unaligned_be16(regs->addr + j, buf); in ccs_write_data_regs()
407 dev_err(&client->dev, in ccs_write_data_regs()
409 msg.len, regs->addr + j); in ccs_write_data_regs()