Lines Matching +full:mipi +full:- +full:ccs +full:- +full:1

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
17 #include "ccs.h"
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()
51 /* Extract mantissa, add missing '1' bit and it's in MHz */ in float_to_u32_mul_1000000()
55 man >>= -exp; in float_to_u32_mul_1000000()
68 dev_warn(&client->dev, "value %u overflows!\n", val); in ireal32_to_u32_mul_1000000()
78 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); in ccs_reg_conv()
94 * Read a 8/16/32-bit i2c register. The value is returned in 'val'.
95 * Returns zero if successful, or non-zero otherwise.
103 rval = cci_read(sensor->regmap, reg, &__val, NULL); in __ccs_read_addr()
121 if (regs->addr + regs->len < CCS_REG_ADDR(reg) + width) in __ccs_static_data_read_ro_reg()
124 if (regs->addr > CCS_REG_ADDR(reg)) in __ccs_static_data_read_ro_reg()
127 data = &regs->value[CCS_REG_ADDR(reg) - regs->addr]; in __ccs_static_data_read_ro_reg()
140 WARN_ON(1); in __ccs_static_data_read_ro_reg()
141 return -EINVAL; in __ccs_static_data_read_ro_reg()
147 return -ENOENT; in __ccs_static_data_read_ro_reg()
153 if (!__ccs_static_data_read_ro_reg(sensor->sdata.sensor_read_only_regs, in ccs_static_data_read_ro_reg()
154 sensor->sdata.num_sensor_read_only_regs, in ccs_static_data_read_ro_reg()
158 return __ccs_static_data_read_ro_reg(sensor->mdata.module_read_only_regs, in ccs_static_data_read_ro_reg()
159 sensor->mdata.num_module_read_only_regs, in ccs_static_data_read_ro_reg()
177 if (rval == -ENOIOCTLCMD) in ccs_read_addr_raw()
208 * Write to a 8/16-bit register.
209 * Returns zero if successful, or non-zero otherwise.
217 if (rval == -ENOIOCTLCMD) in ccs_write_addr()
224 if (cci_write(sensor->regmap, reg, val, &rval)) in ccs_write_addr()
226 } while (rval && --retries); in ccs_write_addr()
236 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); in ccs_write_data_regs()
240 unsigned char *regdata = regs->value; in ccs_write_data_regs()
244 for (j = 0; j < regs->len; j += len, regdata += len) { in ccs_write_data_regs()
245 char printbuf[(MAX_WRITE_LEN << 1) + in ccs_write_data_regs()
246 1 /* \0 */] = { 0 }; in ccs_write_data_regs()
250 len = min(regs->len - j, MAX_WRITE_LEN); in ccs_write_data_regs()
253 dev_dbg(&client->dev, in ccs_write_data_regs()
255 regs->addr + j, printbuf); in ccs_write_data_regs()
258 rval = regmap_bulk_write(sensor->regmap, in ccs_write_data_regs()
259 regs->addr + j, in ccs_write_data_regs()
263 } while (rval && --retries); in ccs_write_data_regs()
266 dev_err(&client->dev, in ccs_write_data_regs()
268 len, regs->addr + j); in ccs_write_data_regs()