Searched refs:sensor (Results 1 - 200 of 561) sorted by relevance

123

/linux-4.1.27/drivers/iio/common/hid-sensors/
H A DMakefile2 # Makefile for the Hid sensor common modules.
5 obj-$(CONFIG_HID_SENSOR_IIO_COMMON) += hid-sensor-iio-common.o
6 obj-$(CONFIG_HID_SENSOR_IIO_TRIGGER) += hid-sensor-trigger.o
7 hid-sensor-iio-common-y := hid-sensor-attributes.o
H A Dhid-sensor-trigger.c26 #include <linux/hid-sensor-hub.h>
30 #include "hid-sensor-trigger.h"
/linux-4.1.27/drivers/media/usb/stkwebcam/
H A DMakefile1 stkwebcam-objs := stk-webcam.o stk-sensor.o
H A Dstk-sensor.c1 /* stk-sensor.c: Driver for ov96xx sensor (used in some Syntek webcams)
28 /* Controlling the sensor via the STK1125 vendor specific control interface:
29 * The camera uses an OmniVision sensor and the stk1125 provides an
30 * SCCB(i2c)-USB bridge which let us program the sensor.
31 * In my case the sensor id is 0x9652, it can be read from sensor's register
58 * when it is 0x00 or 0x01, we cannot talk to the sensor,
66 * sensor in multiple places, attempting a reset sequence.
364 /* Probe the I2C bus and initialise the sensor chip */ stk_sensor_init()
380 STK_ERROR("Strange error reading sensor ID\n"); stk_sensor_init()
384 STK_ERROR("Huh? you don't have a sensor from ovt\n"); stk_sensor_init()
389 STK_ERROR("Could not read sensor model\n"); stk_sensor_init()
394 STK_INFO("OmniVision sensor detected, id %02X%02X" stk_sensor_init()
504 * We setup the sensor to output dummy lines in low-res modes, stk_sensor_configure()
554 /*FIXME sometimes the sensor go to a bad state stk_sensor_configure()
577 /*FIXME These settings seem ignored by the sensor stk_sensor_configure()
/linux-4.1.27/drivers/thermal/st/
H A Dst_thermal.c28 static int st_thermal_alloc_regfields(struct st_thermal_sensor *sensor) st_thermal_alloc_regfields() argument
30 struct device *dev = sensor->dev; st_thermal_alloc_regfields()
31 struct regmap *regmap = sensor->regmap; st_thermal_alloc_regfields()
32 const struct reg_field *reg_fields = sensor->cdata->reg_fields; st_thermal_alloc_regfields()
34 sensor->dcorrect = devm_regmap_field_alloc(dev, regmap, st_thermal_alloc_regfields()
37 sensor->overflow = devm_regmap_field_alloc(dev, regmap, st_thermal_alloc_regfields()
40 sensor->temp_data = devm_regmap_field_alloc(dev, regmap, st_thermal_alloc_regfields()
43 if (IS_ERR(sensor->dcorrect) || st_thermal_alloc_regfields()
44 IS_ERR(sensor->overflow) || st_thermal_alloc_regfields()
45 IS_ERR(sensor->temp_data)) { st_thermal_alloc_regfields()
50 return sensor->ops->alloc_regfields(sensor); st_thermal_alloc_regfields()
53 static int st_thermal_sensor_on(struct st_thermal_sensor *sensor) st_thermal_sensor_on() argument
56 struct device *dev = sensor->dev; st_thermal_sensor_on()
58 ret = clk_prepare_enable(sensor->clk); st_thermal_sensor_on()
64 ret = sensor->ops->power_ctrl(sensor, POWER_ON); st_thermal_sensor_on()
66 dev_err(dev, "failed to power on sensor\n"); st_thermal_sensor_on()
67 clk_disable_unprepare(sensor->clk); st_thermal_sensor_on()
73 static int st_thermal_sensor_off(struct st_thermal_sensor *sensor) st_thermal_sensor_off() argument
77 ret = sensor->ops->power_ctrl(sensor, POWER_OFF); st_thermal_sensor_off()
81 clk_disable_unprepare(sensor->clk); st_thermal_sensor_off()
86 static int st_thermal_calibration(struct st_thermal_sensor *sensor) st_thermal_calibration() argument
90 struct device *dev = sensor->dev; st_thermal_calibration()
92 /* Check if sensor calibration data is already written */ st_thermal_calibration()
93 ret = regmap_field_read(sensor->dcorrect, &val); st_thermal_calibration()
104 ret = regmap_field_write(sensor->dcorrect, st_thermal_calibration()
105 sensor->cdata->calibration_val); st_thermal_calibration()
117 struct st_thermal_sensor *sensor = th->devdata; st_thermal_get_temp() local
118 struct device *dev = sensor->dev; st_thermal_get_temp()
123 ret = regmap_field_read(sensor->overflow, &overflow); st_thermal_get_temp()
129 ret = regmap_field_read(sensor->temp_data, &temp); st_thermal_get_temp()
133 temp += sensor->cdata->temp_adjust_val; st_thermal_get_temp()
146 struct st_thermal_sensor *sensor = th->devdata; st_thermal_get_trip_type() local
147 struct device *dev = sensor->dev; st_thermal_get_trip_type()
164 struct st_thermal_sensor *sensor = th->devdata; st_thermal_get_trip_temp() local
165 struct device *dev = sensor->dev; st_thermal_get_trip_temp()
169 *temp = mcelsius(sensor->cdata->crit_temp); st_thermal_get_trip_temp()
188 struct st_thermal_sensor *sensor; st_thermal_register() local
201 sensor = devm_kzalloc(dev, sizeof(*sensor), GFP_KERNEL); st_thermal_register()
202 if (!sensor) st_thermal_register()
205 sensor->dev = dev; st_thermal_register()
211 sensor->cdata = match->data; st_thermal_register()
212 if (!sensor->cdata->ops) st_thermal_register()
215 sensor->ops = sensor->cdata->ops; st_thermal_register()
217 ret = sensor->ops->regmap_init(sensor); st_thermal_register()
221 ret = st_thermal_alloc_regfields(sensor); st_thermal_register()
225 sensor->clk = devm_clk_get(dev, "thermal"); st_thermal_register()
226 if (IS_ERR(sensor->clk)) { st_thermal_register()
228 return PTR_ERR(sensor->clk); st_thermal_register()
231 if (sensor->ops->register_enable_irq) { st_thermal_register()
232 ret = sensor->ops->register_enable_irq(sensor); st_thermal_register()
237 ret = st_thermal_sensor_on(sensor); st_thermal_register()
241 ret = st_thermal_calibration(sensor); st_thermal_register()
245 polling_delay = sensor->ops->register_enable_irq ? 0 : 1000; st_thermal_register()
247 sensor->thermal_dev = st_thermal_register()
248 thermal_zone_device_register(dev_name(dev), 1, 0, sensor, st_thermal_register()
250 if (IS_ERR(sensor->thermal_dev)) { st_thermal_register()
252 ret = PTR_ERR(sensor->thermal_dev); st_thermal_register()
256 platform_set_drvdata(pdev, sensor); st_thermal_register()
261 st_thermal_sensor_off(sensor); st_thermal_register()
269 struct st_thermal_sensor *sensor = platform_get_drvdata(pdev); st_thermal_unregister() local
271 st_thermal_sensor_off(sensor); st_thermal_unregister()
272 thermal_zone_device_unregister(sensor->thermal_dev); st_thermal_unregister()
282 struct st_thermal_sensor *sensor = platform_get_drvdata(pdev); st_thermal_suspend() local
284 return st_thermal_sensor_off(sensor); st_thermal_suspend()
291 struct st_thermal_sensor *sensor = platform_get_drvdata(pdev); st_thermal_resume() local
293 ret = st_thermal_sensor_on(sensor); st_thermal_resume()
297 ret = st_thermal_calibration(sensor); st_thermal_resume()
301 if (sensor->ops->enable_irq) { st_thermal_resume()
302 ret = sensor->ops->enable_irq(sensor); st_thermal_resume()
H A Dst_thermal_memmap.c23 /* Power control bits for the memory mapped thermal sensor */
29 * According to the STIH416 MPE temp sensor data sheet -
32 * sensor. regmap_update_bits() will be used to update the register.
43 struct st_thermal_sensor *sensor = sdata; st_mmap_thermal_trip_handler() local
45 thermal_zone_device_update(sensor->thermal_dev); st_mmap_thermal_trip_handler()
51 static int st_mmap_power_ctrl(struct st_thermal_sensor *sensor, st_mmap_power_ctrl() argument
57 return regmap_update_bits(sensor->regmap, STIH416_MPE_CONF, mask, val); st_mmap_power_ctrl()
60 static int st_mmap_alloc_regfields(struct st_thermal_sensor *sensor) st_mmap_alloc_regfields() argument
62 struct device *dev = sensor->dev; st_mmap_alloc_regfields()
63 struct regmap *regmap = sensor->regmap; st_mmap_alloc_regfields()
64 const struct reg_field *reg_fields = sensor->cdata->reg_fields; st_mmap_alloc_regfields()
66 sensor->int_thresh_hi = devm_regmap_field_alloc(dev, regmap, st_mmap_alloc_regfields()
68 sensor->int_enable = devm_regmap_field_alloc(dev, regmap, st_mmap_alloc_regfields()
71 if (IS_ERR(sensor->int_thresh_hi) || IS_ERR(sensor->int_enable)) { st_mmap_alloc_regfields()
79 static int st_mmap_enable_irq(struct st_thermal_sensor *sensor) st_mmap_enable_irq() argument
84 ret = regmap_field_write(sensor->int_thresh_hi, st_mmap_enable_irq()
85 sensor->cdata->crit_temp - st_mmap_enable_irq()
86 sensor->cdata->temp_adjust_val); st_mmap_enable_irq()
90 return regmap_field_write(sensor->int_enable, 1); st_mmap_enable_irq()
93 static int st_mmap_register_enable_irq(struct st_thermal_sensor *sensor) st_mmap_register_enable_irq() argument
95 struct device *dev = sensor->dev; st_mmap_register_enable_irq()
99 sensor->irq = platform_get_irq(pdev, 0); st_mmap_register_enable_irq()
100 if (sensor->irq < 0) { st_mmap_register_enable_irq()
102 return sensor->irq; st_mmap_register_enable_irq()
105 ret = devm_request_threaded_irq(dev, sensor->irq, st_mmap_register_enable_irq()
108 dev->driver->name, sensor); st_mmap_register_enable_irq()
110 dev_err(dev, "failed to register IRQ %d\n", sensor->irq); st_mmap_register_enable_irq()
114 return st_mmap_enable_irq(sensor); st_mmap_register_enable_irq()
123 static int st_mmap_regmap_init(struct st_thermal_sensor *sensor) st_mmap_regmap_init() argument
125 struct device *dev = sensor->dev; st_mmap_regmap_init()
135 sensor->mmio_base = devm_ioremap_resource(dev, res); st_mmap_regmap_init()
136 if (IS_ERR(sensor->mmio_base)) { st_mmap_regmap_init()
138 return PTR_ERR(sensor->mmio_base); st_mmap_regmap_init()
141 sensor->regmap = devm_regmap_init_mmio(dev, sensor->mmio_base, st_mmap_regmap_init()
143 if (IS_ERR(sensor->regmap)) { st_mmap_regmap_init()
145 return PTR_ERR(sensor->regmap); st_mmap_regmap_init()
159 /* Compatible device data stih416 mpe thermal sensor */
168 /* Compatible device data stih407 thermal sensor */
H A Dst_thermal_syscfg.c67 static int st_syscfg_power_ctrl(struct st_thermal_sensor *sensor, st_syscfg_power_ctrl() argument
70 return regmap_field_write(sensor->pwr, power_state); st_syscfg_power_ctrl()
73 static int st_syscfg_alloc_regfields(struct st_thermal_sensor *sensor) st_syscfg_alloc_regfields() argument
75 struct device *dev = sensor->dev; st_syscfg_alloc_regfields()
77 sensor->pwr = devm_regmap_field_alloc(dev, sensor->regmap, st_syscfg_alloc_regfields()
78 sensor->cdata->reg_fields[TEMP_PWR]); st_syscfg_alloc_regfields()
80 if (IS_ERR(sensor->pwr)) { st_syscfg_alloc_regfields()
82 return PTR_ERR(sensor->pwr); st_syscfg_alloc_regfields()
88 static int st_syscfg_regmap_init(struct st_thermal_sensor *sensor) st_syscfg_regmap_init() argument
90 sensor->regmap = st_syscfg_regmap_init()
91 syscon_regmap_lookup_by_compatible(sensor->cdata->sys_compat); st_syscfg_regmap_init()
92 if (IS_ERR(sensor->regmap)) { st_syscfg_regmap_init()
93 dev_err(sensor->dev, "failed to find syscfg regmap\n"); st_syscfg_regmap_init()
94 return PTR_ERR(sensor->regmap); st_syscfg_regmap_init()
106 /* Compatible device data for stih415 sas thermal sensor */
116 /* Compatible device data for stih415 mpe thermal sensor */
126 /* Compatible device data for stih416 sas thermal sensor */
136 /* Compatible device data for stid127 thermal sensor */
H A Dst_thermal.h32 /* Thermal sensor power states */
41 * Description of private thermal sensor ops.
43 * @power_ctrl: Function for powering on/off a sensor. Clock to the
44 * sensor is also controlled from this function.
45 * @alloc_regfields: Allocate regmap register fields, specific to a sensor.
48 * @register_irq: Register an interrupt handler for a sensor.
61 * @reg_fields: Pointer to the regfields array for a sensor.
63 * @ops: Pointer to private thermal ops for a sensor.
65 * register field for a sensor.
67 * the sensor. If value needs to be added please provide a
/linux-4.1.27/drivers/media/i2c/
H A Ds5k6a3.c2 * Samsung S5K6A3 image sensor driver
48 * struct s5k6a3 - fimc-is sensor data structure
50 * @subdev: the image sensor's v4l2 subdev
52 * @supplies: image sensor's voltage regulator supplies
53 * @gpio_reset: GPIO connected to the sensor's reset pin
55 * @format: media bus format at the sensor's source pad
126 struct s5k6a3 *sensor, struct v4l2_subdev_pad_config *cfg, __s5k6a3_get_format()
130 return cfg ? v4l2_subdev_get_try_format(&sensor->subdev, cfg, pad) : NULL; __s5k6a3_get_format()
132 return &sensor->format; __s5k6a3_get_format()
139 struct s5k6a3 *sensor = sd_to_s5k6a3(sd); s5k6a3_set_fmt() local
144 mf = __s5k6a3_get_format(sensor, cfg, fmt->pad, fmt->which); s5k6a3_set_fmt()
146 mutex_lock(&sensor->lock); s5k6a3_set_fmt()
149 mutex_unlock(&sensor->lock); s5k6a3_set_fmt()
158 struct s5k6a3 *sensor = sd_to_s5k6a3(sd); s5k6a3_get_fmt() local
161 mf = __s5k6a3_get_format(sensor, cfg, fmt->pad, fmt->which); s5k6a3_get_fmt()
163 mutex_lock(&sensor->lock); s5k6a3_get_fmt()
165 mutex_unlock(&sensor->lock); s5k6a3_get_fmt()
190 static int __s5k6a3_power_on(struct s5k6a3 *sensor) __s5k6a3_power_on() argument
195 ret = clk_set_rate(sensor->clock, sensor->clock_frequency); __s5k6a3_power_on()
199 ret = pm_runtime_get(sensor->dev); __s5k6a3_power_on()
203 ret = regulator_enable(sensor->supplies[i].consumer); __s5k6a3_power_on()
207 ret = clk_prepare_enable(sensor->clock); __s5k6a3_power_on()
212 ret = regulator_enable(sensor->supplies[i].consumer); __s5k6a3_power_on()
217 gpio_set_value(sensor->gpio_reset, 1); __s5k6a3_power_on()
219 gpio_set_value(sensor->gpio_reset, 0); __s5k6a3_power_on()
221 gpio_set_value(sensor->gpio_reset, 1); __s5k6a3_power_on()
223 /* Delay needed for the sensor initialization */ __s5k6a3_power_on()
229 regulator_disable(sensor->supplies[i].consumer); __s5k6a3_power_on()
231 pm_runtime_put(sensor->dev); __s5k6a3_power_on()
235 static int __s5k6a3_power_off(struct s5k6a3 *sensor) __s5k6a3_power_off() argument
239 gpio_set_value(sensor->gpio_reset, 0); __s5k6a3_power_off()
242 regulator_disable(sensor->supplies[i].consumer); __s5k6a3_power_off()
244 clk_disable_unprepare(sensor->clock); __s5k6a3_power_off()
245 pm_runtime_put(sensor->dev); __s5k6a3_power_off()
251 struct s5k6a3 *sensor = sd_to_s5k6a3(sd); s5k6a3_s_power() local
254 mutex_lock(&sensor->lock); s5k6a3_s_power()
256 if (sensor->power_count == !on) { s5k6a3_s_power()
258 ret = __s5k6a3_power_on(sensor); s5k6a3_s_power()
260 ret = __s5k6a3_power_off(sensor); s5k6a3_s_power()
263 sensor->power_count += on ? 1 : -1; s5k6a3_s_power()
266 mutex_unlock(&sensor->lock); s5k6a3_s_power()
283 struct s5k6a3 *sensor; s5k6a3_probe() local
287 sensor = devm_kzalloc(dev, sizeof(*sensor), GFP_KERNEL); s5k6a3_probe()
288 if (!sensor) s5k6a3_probe()
291 mutex_init(&sensor->lock); s5k6a3_probe()
292 sensor->gpio_reset = -EINVAL; s5k6a3_probe()
293 sensor->clock = ERR_PTR(-EINVAL); s5k6a3_probe()
294 sensor->dev = dev; s5k6a3_probe()
296 sensor->clock = devm_clk_get(sensor->dev, S5K6A3_CLK_NAME); s5k6a3_probe()
297 if (IS_ERR(sensor->clock)) s5k6a3_probe()
298 return PTR_ERR(sensor->clock); s5k6a3_probe()
309 sensor->gpio_reset = gpio; s5k6a3_probe()
312 &sensor->clock_frequency)) { s5k6a3_probe()
313 sensor->clock_frequency = S5K6A3_DEFAULT_CLK_FREQ; s5k6a3_probe()
315 sensor->clock_frequency); s5k6a3_probe()
319 sensor->supplies[i].supply = s5k6a3_supply_names[i]; s5k6a3_probe()
322 sensor->supplies); s5k6a3_probe()
326 sd = &sensor->subdev; s5k6a3_probe()
328 sensor->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; s5k6a3_probe()
331 sensor->format.code = s5k6a3_formats[0].code; s5k6a3_probe()
332 sensor->format.width = S5K6A3_DEFAULT_WIDTH; s5k6a3_probe()
333 sensor->format.height = S5K6A3_DEFAULT_HEIGHT; s5k6a3_probe()
335 sensor->pad.flags = MEDIA_PAD_FL_SOURCE; s5k6a3_probe()
336 ret = media_entity_init(&sd->entity, 1, &sensor->pad, 0); s5k6a3_probe()
388 MODULE_DESCRIPTION("S5K6A3 image sensor subdev driver");
125 __s5k6a3_get_format( struct s5k6a3 *sensor, struct v4l2_subdev_pad_config *cfg, u32 pad, enum v4l2_subdev_format_whence which) __s5k6a3_get_format() argument
H A Dmt9m032.c138 * for this sensor.
168 #define to_dev(sensor) \
169 (&((struct i2c_client *)v4l2_get_subdevdata(&(sensor)->subdev))->dev)
181 static u32 mt9m032_row_time(struct mt9m032 *sensor, unsigned int width) mt9m032_row_time() argument
187 ns = div_u64(1000000000ULL * effective_width, sensor->pix_clock); mt9m032_row_time()
188 dev_dbg(to_dev(sensor), "MT9M032 line time: %u ns\n", ns); mt9m032_row_time()
192 static int mt9m032_update_timing(struct mt9m032 *sensor, mt9m032_update_timing() argument
195 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); mt9m032_update_timing()
196 struct v4l2_rect *crop = &sensor->crop; mt9m032_update_timing()
202 interval = &sensor->frame_interval; mt9m032_update_timing()
204 row_time = mt9m032_row_time(sensor, crop->width); mt9m032_update_timing()
228 static int mt9m032_update_geom_timing(struct mt9m032 *sensor) mt9m032_update_geom_timing() argument
230 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); mt9m032_update_geom_timing()
234 sensor->crop.width - 1); mt9m032_update_geom_timing()
237 sensor->crop.height - 1); mt9m032_update_geom_timing()
240 sensor->crop.left); mt9m032_update_geom_timing()
243 sensor->crop.top); mt9m032_update_geom_timing()
245 ret = mt9m032_update_timing(sensor, NULL); mt9m032_update_geom_timing()
249 static int update_formatter2(struct mt9m032 *sensor, bool streaming) update_formatter2() argument
251 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); update_formatter2()
262 static int mt9m032_setup_pll(struct mt9m032 *sensor) mt9m032_setup_pll() argument
280 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); mt9m032_setup_pll()
281 struct mt9m032_platform_data *pdata = sensor->pdata; mt9m032_setup_pll()
293 sensor->pix_clock = pdata->pix_clock; mt9m032_setup_pll()
347 * @sensor: pointer to the sensor struct
354 __mt9m032_get_pad_crop(struct mt9m032 *sensor, struct v4l2_subdev_pad_config *cfg, __mt9m032_get_pad_crop() argument
359 return v4l2_subdev_get_try_crop(&sensor->subdev, cfg, 0); __mt9m032_get_pad_crop()
361 return &sensor->crop; __mt9m032_get_pad_crop()
369 * @sensor: pointer to the sensor struct
376 __mt9m032_get_pad_format(struct mt9m032 *sensor, struct v4l2_subdev_pad_config *cfg, __mt9m032_get_pad_format() argument
381 return v4l2_subdev_get_try_format(&sensor->subdev, cfg, 0); __mt9m032_get_pad_format()
383 return &sensor->format; __mt9m032_get_pad_format()
393 struct mt9m032 *sensor = to_mt9m032(subdev); mt9m032_get_pad_format() local
395 mutex_lock(&sensor->lock); mt9m032_get_pad_format()
396 fmt->format = *__mt9m032_get_pad_format(sensor, cfg, fmt->which); mt9m032_get_pad_format()
397 mutex_unlock(&sensor->lock); mt9m032_get_pad_format()
406 struct mt9m032 *sensor = to_mt9m032(subdev); mt9m032_set_pad_format() local
409 mutex_lock(&sensor->lock); mt9m032_set_pad_format()
411 if (sensor->streaming && fmt->which == V4L2_SUBDEV_FORMAT_ACTIVE) { mt9m032_set_pad_format()
417 fmt->format = *__mt9m032_get_pad_format(sensor, cfg, fmt->which); mt9m032_set_pad_format()
421 mutex_unlock(&sensor->lock); mt9m032_set_pad_format()
429 struct mt9m032 *sensor = to_mt9m032(subdev); mt9m032_get_pad_selection() local
434 mutex_lock(&sensor->lock); mt9m032_get_pad_selection()
435 sel->r = *__mt9m032_get_pad_crop(sensor, cfg, sel->which); mt9m032_get_pad_selection()
436 mutex_unlock(&sensor->lock); mt9m032_get_pad_selection()
445 struct mt9m032 *sensor = to_mt9m032(subdev); mt9m032_set_pad_selection() local
454 mutex_lock(&sensor->lock); mt9m032_set_pad_selection()
456 if (sensor->streaming && sel->which == V4L2_SUBDEV_FORMAT_ACTIVE) { mt9m032_set_pad_selection()
478 __crop = __mt9m032_get_pad_crop(sensor, cfg, sel->which); mt9m032_set_pad_selection()
484 format = __mt9m032_get_pad_format(sensor, cfg, sel->which); mt9m032_set_pad_selection()
493 ret = mt9m032_update_geom_timing(sensor); mt9m032_set_pad_selection()
496 mutex_unlock(&sensor->lock); mt9m032_set_pad_selection()
503 struct mt9m032 *sensor = to_mt9m032(subdev); mt9m032_get_frame_interval() local
505 mutex_lock(&sensor->lock); mt9m032_get_frame_interval()
507 fi->interval = sensor->frame_interval; mt9m032_get_frame_interval()
508 mutex_unlock(&sensor->lock); mt9m032_get_frame_interval()
516 struct mt9m032 *sensor = to_mt9m032(subdev); mt9m032_set_frame_interval() local
519 mutex_lock(&sensor->lock); mt9m032_set_frame_interval()
521 if (sensor->streaming) { mt9m032_set_frame_interval()
530 ret = mt9m032_update_timing(sensor, &fi->interval); mt9m032_set_frame_interval()
532 sensor->frame_interval = fi->interval; mt9m032_set_frame_interval()
535 mutex_unlock(&sensor->lock); mt9m032_set_frame_interval()
541 struct mt9m032 *sensor = to_mt9m032(subdev); mt9m032_s_stream() local
544 mutex_lock(&sensor->lock); mt9m032_s_stream()
545 ret = update_formatter2(sensor, streaming); mt9m032_s_stream()
547 sensor->streaming = streaming; mt9m032_s_stream()
548 mutex_unlock(&sensor->lock); mt9m032_s_stream()
561 struct mt9m032 *sensor = to_mt9m032(sd); mt9m032_g_register() local
562 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); mt9m032_g_register()
581 struct mt9m032 *sensor = to_mt9m032(sd); mt9m032_s_register() local
582 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); mt9m032_s_register()
595 static int update_read_mode2(struct mt9m032 *sensor, bool vflip, bool hflip) update_read_mode2() argument
597 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); update_read_mode2()
606 static int mt9m032_set_gain(struct mt9m032 *sensor, s32 val) mt9m032_set_gain() argument
608 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); mt9m032_set_gain()
647 struct mt9m032 *sensor = mt9m032_set_ctrl() local
649 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); mt9m032_set_ctrl()
654 return mt9m032_set_gain(sensor, ctrl->val); mt9m032_set_ctrl()
658 return update_read_mode2(sensor, sensor->vflip->val, mt9m032_set_ctrl()
659 sensor->hflip->val); mt9m032_set_ctrl()
718 struct mt9m032 *sensor; mt9m032_probe() local
736 sensor = devm_kzalloc(&client->dev, sizeof(*sensor), GFP_KERNEL); mt9m032_probe()
737 if (sensor == NULL) mt9m032_probe()
740 mutex_init(&sensor->lock); mt9m032_probe()
742 sensor->pdata = pdata; mt9m032_probe()
744 v4l2_i2c_subdev_init(&sensor->subdev, client, &mt9m032_ops); mt9m032_probe()
745 sensor->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; mt9m032_probe()
758 sensor->frame_interval.numerator = 1; mt9m032_probe()
759 sensor->frame_interval.denominator = 30; mt9m032_probe()
761 sensor->crop.left = MT9M032_COLUMN_START_DEF; mt9m032_probe()
762 sensor->crop.top = MT9M032_ROW_START_DEF; mt9m032_probe()
763 sensor->crop.width = MT9M032_COLUMN_SIZE_DEF; mt9m032_probe()
764 sensor->crop.height = MT9M032_ROW_SIZE_DEF; mt9m032_probe()
766 sensor->format.width = sensor->crop.width; mt9m032_probe()
767 sensor->format.height = sensor->crop.height; mt9m032_probe()
768 sensor->format.code = MEDIA_BUS_FMT_Y8_1X8; mt9m032_probe()
769 sensor->format.field = V4L2_FIELD_NONE; mt9m032_probe()
770 sensor->format.colorspace = V4L2_COLORSPACE_SRGB; mt9m032_probe()
772 v4l2_ctrl_handler_init(&sensor->ctrls, 5); mt9m032_probe()
774 v4l2_ctrl_new_std(&sensor->ctrls, &mt9m032_ctrl_ops, mt9m032_probe()
777 sensor->hflip = v4l2_ctrl_new_std(&sensor->ctrls, mt9m032_probe()
780 sensor->vflip = v4l2_ctrl_new_std(&sensor->ctrls, mt9m032_probe()
784 v4l2_ctrl_new_std(&sensor->ctrls, &mt9m032_ctrl_ops, mt9m032_probe()
788 v4l2_ctrl_new_std(&sensor->ctrls, &mt9m032_ctrl_ops, mt9m032_probe()
792 if (sensor->ctrls.error) { mt9m032_probe()
793 ret = sensor->ctrls.error; mt9m032_probe()
798 v4l2_ctrl_cluster(2, &sensor->hflip); mt9m032_probe()
800 sensor->subdev.ctrl_handler = &sensor->ctrls; mt9m032_probe()
801 sensor->pad.flags = MEDIA_PAD_FL_SOURCE; mt9m032_probe()
802 ret = media_entity_init(&sensor->subdev.entity, 1, &sensor->pad, 0); mt9m032_probe()
813 ret = mt9m032_setup_pll(sensor); mt9m032_probe()
818 ret = v4l2_ctrl_handler_setup(&sensor->ctrls); mt9m032_probe()
823 ret = mt9m032_update_geom_timing(sensor); mt9m032_probe()
839 if (sensor->pdata->invert_pixclock) { mt9m032_probe()
854 ret = update_formatter2(sensor, false); mt9m032_probe()
861 media_entity_cleanup(&sensor->subdev.entity); mt9m032_probe()
863 v4l2_ctrl_handler_free(&sensor->ctrls); mt9m032_probe()
865 mutex_destroy(&sensor->lock); mt9m032_probe()
872 struct mt9m032 *sensor = to_mt9m032(subdev); mt9m032_remove() local
875 v4l2_ctrl_handler_free(&sensor->ctrls); mt9m032_remove()
877 mutex_destroy(&sensor->lock); mt9m032_remove()
900 MODULE_DESCRIPTION("MT9M032 camera sensor driver");
H A Dvs6624.c2 * vs6624.c ST VS6624 CMOS image sensor driver
584 /* sensor mode is VGA */ vs6624_try_mbus_fmt()
599 struct vs6624 *sensor = to_vs6624(sd); vs6624_s_mbus_fmt() local
646 sensor->fmt = *fmt; vs6624_s_mbus_fmt()
654 struct vs6624 *sensor = to_vs6624(sd); vs6624_g_mbus_fmt() local
656 *fmt = sensor->fmt; vs6624_g_mbus_fmt()
662 struct vs6624 *sensor = to_vs6624(sd); vs6624_g_parm() local
670 cp->timeperframe.numerator = sensor->frame_rate.denominator; vs6624_g_parm()
671 cp->timeperframe.denominator = sensor->frame_rate.numerator; vs6624_g_parm()
677 struct vs6624 *sensor = to_vs6624(sd); vs6624_s_parm() local
692 sensor->frame_rate.numerator = tpf->denominator; vs6624_s_parm()
693 sensor->frame_rate.denominator = tpf->numerator; vs6624_s_parm()
696 sensor->frame_rate.numerator >> 8); vs6624_s_parm()
698 sensor->frame_rate.numerator & 0xFF); vs6624_s_parm()
700 sensor->frame_rate.denominator & 0xFF); vs6624_s_parm()
758 struct vs6624 *sensor; vs6624_probe() local
781 sensor = devm_kzalloc(&client->dev, sizeof(*sensor), GFP_KERNEL); vs6624_probe()
782 if (sensor == NULL) vs6624_probe()
785 sd = &sensor->sd; vs6624_probe()
799 sensor->frame_rate.numerator = MAX_FRAME_RATE; vs6624_probe()
800 sensor->frame_rate.denominator = 1; vs6624_probe()
803 sensor->frame_rate.numerator >> 8); vs6624_probe()
805 sensor->frame_rate.numerator & 0xFF); vs6624_probe()
807 sensor->frame_rate.denominator & 0xFF); vs6624_probe()
809 sensor->fmt = vs6624_default_fmt; vs6624_probe()
810 sensor->ce_pin = *ce; vs6624_probe()
815 hdl = &sensor->hdl; vs6624_probe()
869 MODULE_DESCRIPTION("VS6624 sensor driver");
H A Dov7640.c25 MODULE_DESCRIPTION("OmniVision ov7640 sensor driver");
/linux-4.1.27/drivers/media/i2c/smiapp/
H A Dsmiapp-core.c11 * Based on smia-sensor.c by Tuukka Toivonen <tuukkat76@gmail.com>
66 static int smiapp_read_frame_fmt(struct smiapp_sensor *sensor) smiapp_read_frame_fmt() argument
68 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); smiapp_read_frame_fmt()
76 rval = smiapp_read(sensor, SMIAPP_REG_U8_FRAME_FORMAT_MODEL_TYPE, smiapp_read_frame_fmt()
81 rval = smiapp_read(sensor, SMIAPP_REG_U8_FRAME_FORMAT_MODEL_SUBTYPE, smiapp_read_frame_fmt()
107 sensor, smiapp_read_frame_fmt()
121 sensor, smiapp_read_frame_fmt()
178 || pixels >= sensor->limits[SMIAPP_LIMIT_MIN_FRAME_LENGTH_LINES] / 2) smiapp_read_frame_fmt()
198 static int smiapp_pll_configure(struct smiapp_sensor *sensor) smiapp_pll_configure() argument
200 struct smiapp_pll *pll = &sensor->pll; smiapp_pll_configure()
204 sensor, SMIAPP_REG_U16_VT_PIX_CLK_DIV, pll->vt.pix_clk_div); smiapp_pll_configure()
209 sensor, SMIAPP_REG_U16_VT_SYS_CLK_DIV, pll->vt.sys_clk_div); smiapp_pll_configure()
214 sensor, SMIAPP_REG_U16_PRE_PLL_CLK_DIV, pll->pre_pll_clk_div); smiapp_pll_configure()
219 sensor, SMIAPP_REG_U16_PLL_MULTIPLIER, pll->pll_multiplier); smiapp_pll_configure()
225 sensor, SMIAPP_REG_U32_REQUESTED_LINK_BIT_RATE_MBPS, smiapp_pll_configure()
227 if (rval < 0 || sensor->minfo.smiapp_profile == SMIAPP_PROFILE_0) smiapp_pll_configure()
231 sensor, SMIAPP_REG_U16_OP_PIX_CLK_DIV, pll->op.pix_clk_div); smiapp_pll_configure()
236 sensor, SMIAPP_REG_U16_OP_SYS_CLK_DIV, pll->op.sys_clk_div); smiapp_pll_configure()
239 static int smiapp_pll_try(struct smiapp_sensor *sensor, smiapp_pll_try() argument
242 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); smiapp_pll_try()
244 .min_pre_pll_clk_div = sensor->limits[SMIAPP_LIMIT_MIN_PRE_PLL_CLK_DIV], smiapp_pll_try()
245 .max_pre_pll_clk_div = sensor->limits[SMIAPP_LIMIT_MAX_PRE_PLL_CLK_DIV], smiapp_pll_try()
246 .min_pll_ip_freq_hz = sensor->limits[SMIAPP_LIMIT_MIN_PLL_IP_FREQ_HZ], smiapp_pll_try()
247 .max_pll_ip_freq_hz = sensor->limits[SMIAPP_LIMIT_MAX_PLL_IP_FREQ_HZ], smiapp_pll_try()
248 .min_pll_multiplier = sensor->limits[SMIAPP_LIMIT_MIN_PLL_MULTIPLIER], smiapp_pll_try()
249 .max_pll_multiplier = sensor->limits[SMIAPP_LIMIT_MAX_PLL_MULTIPLIER], smiapp_pll_try()
250 .min_pll_op_freq_hz = sensor->limits[SMIAPP_LIMIT_MIN_PLL_OP_FREQ_HZ], smiapp_pll_try()
251 .max_pll_op_freq_hz = sensor->limits[SMIAPP_LIMIT_MAX_PLL_OP_FREQ_HZ], smiapp_pll_try()
253 .op.min_sys_clk_div = sensor->limits[SMIAPP_LIMIT_MIN_OP_SYS_CLK_DIV], smiapp_pll_try()
254 .op.max_sys_clk_div = sensor->limits[SMIAPP_LIMIT_MAX_OP_SYS_CLK_DIV], smiapp_pll_try()
255 .op.min_pix_clk_div = sensor->limits[SMIAPP_LIMIT_MIN_OP_PIX_CLK_DIV], smiapp_pll_try()
256 .op.max_pix_clk_div = sensor->limits[SMIAPP_LIMIT_MAX_OP_PIX_CLK_DIV], smiapp_pll_try()
257 .op.min_sys_clk_freq_hz = sensor->limits[SMIAPP_LIMIT_MIN_OP_SYS_CLK_FREQ_HZ], smiapp_pll_try()
258 .op.max_sys_clk_freq_hz = sensor->limits[SMIAPP_LIMIT_MAX_OP_SYS_CLK_FREQ_HZ], smiapp_pll_try()
259 .op.min_pix_clk_freq_hz = sensor->limits[SMIAPP_LIMIT_MIN_OP_PIX_CLK_FREQ_HZ], smiapp_pll_try()
260 .op.max_pix_clk_freq_hz = sensor->limits[SMIAPP_LIMIT_MAX_OP_PIX_CLK_FREQ_HZ], smiapp_pll_try()
262 .vt.min_sys_clk_div = sensor->limits[SMIAPP_LIMIT_MIN_VT_SYS_CLK_DIV], smiapp_pll_try()
263 .vt.max_sys_clk_div = sensor->limits[SMIAPP_LIMIT_MAX_VT_SYS_CLK_DIV], smiapp_pll_try()
264 .vt.min_pix_clk_div = sensor->limits[SMIAPP_LIMIT_MIN_VT_PIX_CLK_DIV], smiapp_pll_try()
265 .vt.max_pix_clk_div = sensor->limits[SMIAPP_LIMIT_MAX_VT_PIX_CLK_DIV], smiapp_pll_try()
266 .vt.min_sys_clk_freq_hz = sensor->limits[SMIAPP_LIMIT_MIN_VT_SYS_CLK_FREQ_HZ], smiapp_pll_try()
267 .vt.max_sys_clk_freq_hz = sensor->limits[SMIAPP_LIMIT_MAX_VT_SYS_CLK_FREQ_HZ], smiapp_pll_try()
268 .vt.min_pix_clk_freq_hz = sensor->limits[SMIAPP_LIMIT_MIN_VT_PIX_CLK_FREQ_HZ], smiapp_pll_try()
269 .vt.max_pix_clk_freq_hz = sensor->limits[SMIAPP_LIMIT_MAX_VT_PIX_CLK_FREQ_HZ], smiapp_pll_try()
271 .min_line_length_pck_bin = sensor->limits[SMIAPP_LIMIT_MIN_LINE_LENGTH_PCK_BIN], smiapp_pll_try()
272 .min_line_length_pck = sensor->limits[SMIAPP_LIMIT_MIN_LINE_LENGTH_PCK], smiapp_pll_try()
278 static int smiapp_pll_update(struct smiapp_sensor *sensor) smiapp_pll_update() argument
280 struct smiapp_pll *pll = &sensor->pll; smiapp_pll_update()
283 pll->binning_horizontal = sensor->binning_horizontal; smiapp_pll_update()
284 pll->binning_vertical = sensor->binning_vertical; smiapp_pll_update()
286 sensor->link_freq->qmenu_int[sensor->link_freq->val]; smiapp_pll_update()
287 pll->scale_m = sensor->scale_m; smiapp_pll_update()
288 pll->bits_per_pixel = sensor->csi_format->compressed; smiapp_pll_update()
290 rval = smiapp_pll_try(sensor, pll); smiapp_pll_update()
294 __v4l2_ctrl_s_ctrl_int64(sensor->pixel_rate_parray, smiapp_pll_update()
296 __v4l2_ctrl_s_ctrl_int64(sensor->pixel_rate_csi, pll->pixel_rate_csi); smiapp_pll_update()
308 static void __smiapp_update_exposure_limits(struct smiapp_sensor *sensor) __smiapp_update_exposure_limits() argument
310 struct v4l2_ctrl *ctrl = sensor->exposure; __smiapp_update_exposure_limits()
313 max = sensor->pixel_array->crop[SMIAPP_PA_PAD_SRC].height __smiapp_update_exposure_limits()
314 + sensor->vblank->val __smiapp_update_exposure_limits()
315 - sensor->limits[SMIAPP_LIMIT_COARSE_INTEGRATION_TIME_MAX_MARGIN]; __smiapp_update_exposure_limits()
353 static u32 smiapp_pixel_order(struct smiapp_sensor *sensor) smiapp_pixel_order() argument
355 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); smiapp_pixel_order()
358 if (sensor->hflip) { smiapp_pixel_order()
359 if (sensor->hflip->val) smiapp_pixel_order()
362 if (sensor->vflip->val) smiapp_pixel_order()
366 flip ^= sensor->hvflip_inv_mask; smiapp_pixel_order()
369 return sensor->default_pixel_order ^ flip; smiapp_pixel_order()
372 static void smiapp_update_mbus_formats(struct smiapp_sensor *sensor) smiapp_update_mbus_formats() argument
374 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); smiapp_update_mbus_formats()
376 to_csi_format_idx(sensor->csi_format) & ~3; smiapp_update_mbus_formats()
378 to_csi_format_idx(sensor->internal_csi_format) & ~3; smiapp_update_mbus_formats()
379 unsigned int pixel_order = smiapp_pixel_order(sensor); smiapp_update_mbus_formats()
381 sensor->mbus_frame_fmts = smiapp_update_mbus_formats()
382 sensor->default_mbus_frame_fmts << pixel_order; smiapp_update_mbus_formats()
383 sensor->csi_format = smiapp_update_mbus_formats()
385 sensor->internal_csi_format = smiapp_update_mbus_formats()
406 struct smiapp_sensor *sensor = smiapp_set_ctrl() local
408 ->sensor; smiapp_set_ctrl()
416 sensor, smiapp_set_ctrl()
421 sensor, smiapp_set_ctrl()
426 if (sensor->streaming) smiapp_set_ctrl()
429 if (sensor->hflip->val) smiapp_set_ctrl()
432 if (sensor->vflip->val) smiapp_set_ctrl()
435 orient ^= sensor->hvflip_inv_mask; smiapp_set_ctrl()
436 rval = smiapp_write(sensor, smiapp_set_ctrl()
442 smiapp_update_mbus_formats(sensor); smiapp_set_ctrl()
447 exposure = sensor->exposure->val; smiapp_set_ctrl()
449 __smiapp_update_exposure_limits(sensor); smiapp_set_ctrl()
451 if (exposure > sensor->exposure->maximum) { smiapp_set_ctrl()
452 sensor->exposure->val = smiapp_set_ctrl()
453 sensor->exposure->maximum; smiapp_set_ctrl()
455 sensor->exposure); smiapp_set_ctrl()
461 sensor, SMIAPP_REG_U16_FRAME_LENGTH_LINES, smiapp_set_ctrl()
462 sensor->pixel_array->crop[SMIAPP_PA_PAD_SRC].height smiapp_set_ctrl()
467 sensor, SMIAPP_REG_U16_LINE_LENGTH_PCK, smiapp_set_ctrl()
468 sensor->pixel_array->crop[SMIAPP_PA_PAD_SRC].width smiapp_set_ctrl()
472 if (sensor->streaming) smiapp_set_ctrl()
475 return smiapp_pll_update(sensor); smiapp_set_ctrl()
480 for (i = 0; i < ARRAY_SIZE(sensor->test_data); i++) smiapp_set_ctrl()
482 sensor->test_data[i], smiapp_set_ctrl()
487 sensor, SMIAPP_REG_U16_TEST_PATTERN_MODE, ctrl->val); smiapp_set_ctrl()
492 sensor, SMIAPP_REG_U16_TEST_DATA_RED, ctrl->val); smiapp_set_ctrl()
496 sensor, SMIAPP_REG_U16_TEST_DATA_GREENR, ctrl->val); smiapp_set_ctrl()
500 sensor, SMIAPP_REG_U16_TEST_DATA_BLUE, ctrl->val); smiapp_set_ctrl()
504 sensor, SMIAPP_REG_U16_TEST_DATA_GREENB, ctrl->val); smiapp_set_ctrl()
519 static int smiapp_init_controls(struct smiapp_sensor *sensor) smiapp_init_controls() argument
521 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); smiapp_init_controls()
524 rval = v4l2_ctrl_handler_init(&sensor->pixel_array->ctrl_handler, 12); smiapp_init_controls()
528 sensor->pixel_array->ctrl_handler.lock = &sensor->mutex; smiapp_init_controls()
530 sensor->analog_gain = v4l2_ctrl_new_std( smiapp_init_controls()
531 &sensor->pixel_array->ctrl_handler, &smiapp_ctrl_ops, smiapp_init_controls()
533 sensor->limits[SMIAPP_LIMIT_ANALOGUE_GAIN_CODE_MIN], smiapp_init_controls()
534 sensor->limits[SMIAPP_LIMIT_ANALOGUE_GAIN_CODE_MAX], smiapp_init_controls()
535 max(sensor->limits[SMIAPP_LIMIT_ANALOGUE_GAIN_CODE_STEP], 1U), smiapp_init_controls()
536 sensor->limits[SMIAPP_LIMIT_ANALOGUE_GAIN_CODE_MIN]); smiapp_init_controls()
539 sensor->exposure = v4l2_ctrl_new_std( smiapp_init_controls()
540 &sensor->pixel_array->ctrl_handler, &smiapp_ctrl_ops, smiapp_init_controls()
543 sensor->hflip = v4l2_ctrl_new_std( smiapp_init_controls()
544 &sensor->pixel_array->ctrl_handler, &smiapp_ctrl_ops, smiapp_init_controls()
546 sensor->vflip = v4l2_ctrl_new_std( smiapp_init_controls()
547 &sensor->pixel_array->ctrl_handler, &smiapp_ctrl_ops, smiapp_init_controls()
550 sensor->vblank = v4l2_ctrl_new_std( smiapp_init_controls()
551 &sensor->pixel_array->ctrl_handler, &smiapp_ctrl_ops, smiapp_init_controls()
554 if (sensor->vblank) smiapp_init_controls()
555 sensor->vblank->flags |= V4L2_CTRL_FLAG_UPDATE; smiapp_init_controls()
557 sensor->hblank = v4l2_ctrl_new_std( smiapp_init_controls()
558 &sensor->pixel_array->ctrl_handler, &smiapp_ctrl_ops, smiapp_init_controls()
561 if (sensor->hblank) smiapp_init_controls()
562 sensor->hblank->flags |= V4L2_CTRL_FLAG_UPDATE; smiapp_init_controls()
564 sensor->pixel_rate_parray = v4l2_ctrl_new_std( smiapp_init_controls()
565 &sensor->pixel_array->ctrl_handler, &smiapp_ctrl_ops, smiapp_init_controls()
568 v4l2_ctrl_new_std_menu_items(&sensor->pixel_array->ctrl_handler, smiapp_init_controls()
573 if (sensor->pixel_array->ctrl_handler.error) { smiapp_init_controls()
576 sensor->pixel_array->ctrl_handler.error); smiapp_init_controls()
577 return sensor->pixel_array->ctrl_handler.error; smiapp_init_controls()
580 sensor->pixel_array->sd.ctrl_handler = smiapp_init_controls()
581 &sensor->pixel_array->ctrl_handler; smiapp_init_controls()
583 v4l2_ctrl_cluster(2, &sensor->hflip); smiapp_init_controls()
585 rval = v4l2_ctrl_handler_init(&sensor->src->ctrl_handler, 0); smiapp_init_controls()
589 sensor->src->ctrl_handler.lock = &sensor->mutex; smiapp_init_controls()
591 sensor->pixel_rate_csi = v4l2_ctrl_new_std( smiapp_init_controls()
592 &sensor->src->ctrl_handler, &smiapp_ctrl_ops, smiapp_init_controls()
595 if (sensor->src->ctrl_handler.error) { smiapp_init_controls()
598 sensor->src->ctrl_handler.error); smiapp_init_controls()
599 return sensor->src->ctrl_handler.error; smiapp_init_controls()
602 sensor->src->sd.ctrl_handler = &sensor->src->ctrl_handler; smiapp_init_controls()
611 static int smiapp_init_late_controls(struct smiapp_sensor *sensor) smiapp_init_late_controls() argument
613 unsigned long *valid_link_freqs = &sensor->valid_link_freqs[ smiapp_init_late_controls()
614 sensor->csi_format->compressed - SMIAPP_COMPRESSED_BASE]; smiapp_init_late_controls()
617 for (i = 0; i < ARRAY_SIZE(sensor->test_data); i++) { smiapp_init_late_controls()
618 int max_value = (1 << sensor->csi_format->width) - 1; smiapp_init_late_controls()
620 sensor->test_data[i] = v4l2_ctrl_new_std( smiapp_init_late_controls()
621 &sensor->pixel_array->ctrl_handler, smiapp_init_late_controls()
626 for (max = 0; sensor->platform_data->op_sys_clock[max + 1]; max++); smiapp_init_late_controls()
628 sensor->link_freq = v4l2_ctrl_new_int_menu( smiapp_init_late_controls()
629 &sensor->src->ctrl_handler, &smiapp_ctrl_ops, smiapp_init_late_controls()
631 __ffs(*valid_link_freqs), sensor->platform_data->op_sys_clock); smiapp_init_late_controls()
633 return sensor->src->ctrl_handler.error; smiapp_init_late_controls()
636 static void smiapp_free_controls(struct smiapp_sensor *sensor) smiapp_free_controls() argument
640 for (i = 0; i < sensor->ssds_used; i++) smiapp_free_controls()
641 v4l2_ctrl_handler_free(&sensor->ssds[i].ctrl_handler); smiapp_free_controls()
644 static int smiapp_get_limits(struct smiapp_sensor *sensor, int const *limit, smiapp_get_limits() argument
647 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); smiapp_get_limits()
654 sensor, smiapp_reg_limits[limit[i]].addr, &val); smiapp_get_limits()
657 sensor->limits[limit[i]] = val; smiapp_get_limits()
666 static int smiapp_get_all_limits(struct smiapp_sensor *sensor) smiapp_get_all_limits() argument
672 rval = smiapp_get_limits(sensor, &i, 1); smiapp_get_all_limits()
677 if (sensor->limits[SMIAPP_LIMIT_SCALER_N_MIN] == 0) smiapp_get_all_limits()
678 smiapp_replace_limit(sensor, SMIAPP_LIMIT_SCALER_N_MIN, 16); smiapp_get_all_limits()
683 static int smiapp_get_limits_binning(struct smiapp_sensor *sensor) smiapp_get_limits_binning() argument
685 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); smiapp_get_limits_binning()
707 if (sensor->limits[SMIAPP_LIMIT_BINNING_CAPABILITY] == smiapp_get_limits_binning()
710 sensor->limits[limits[i]] = smiapp_get_limits_binning()
711 sensor->limits[limits_replace[i]]; smiapp_get_limits_binning()
716 rval = smiapp_get_limits(sensor, limits, ARRAY_SIZE(limits)); smiapp_get_limits_binning()
724 if (sensor->limits[SMIAPP_LIMIT_MIN_FRAME_LENGTH_LINES_BIN] smiapp_get_limits_binning()
725 && sensor->limits[SMIAPP_LIMIT_MIN_LINE_LENGTH_PCK_BIN] smiapp_get_limits_binning()
726 && sensor->limits[SMIAPP_LIMIT_MIN_LINE_BLANKING_PCK_BIN]) smiapp_get_limits_binning()
734 sensor->limits[limits_replace[i]], smiapp_get_limits_binning()
735 sensor->limits[limits_replace[i]]); smiapp_get_limits_binning()
736 sensor->limits[limits[i]] = smiapp_get_limits_binning()
737 sensor->limits[limits_replace[i]]; smiapp_get_limits_binning()
743 static int smiapp_get_mbus_formats(struct smiapp_sensor *sensor) smiapp_get_mbus_formats() argument
745 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); smiapp_get_mbus_formats()
746 struct smiapp_pll *pll = &sensor->pll; smiapp_get_mbus_formats()
752 sensor, SMIAPP_REG_U8_DATA_FORMAT_MODEL_TYPE, &type); smiapp_get_mbus_formats()
758 rval = smiapp_read(sensor, SMIAPP_REG_U8_PIXEL_ORDER, smiapp_get_mbus_formats()
782 sensor->default_pixel_order = pixel_order; smiapp_get_mbus_formats()
783 sensor->mbus_frame_fmts = 0; smiapp_get_mbus_formats()
789 sensor, smiapp_get_mbus_formats()
809 sensor->default_mbus_frame_fmts |= 1 << j; smiapp_get_mbus_formats()
816 pll->scale_m = sensor->scale_m; smiapp_get_mbus_formats()
822 &sensor->valid_link_freqs[ smiapp_get_mbus_formats()
829 if (!(sensor->default_mbus_frame_fmts & 1 << i)) smiapp_get_mbus_formats()
834 for (j = 0; sensor->platform_data->op_sys_clock[j]; j++) { smiapp_get_mbus_formats()
835 pll->link_freq = sensor->platform_data->op_sys_clock[j]; smiapp_get_mbus_formats()
837 rval = smiapp_pll_try(sensor, pll); smiapp_get_mbus_formats()
851 sensor->default_mbus_frame_fmts &= ~BIT(i); smiapp_get_mbus_formats()
855 if (!sensor->csi_format smiapp_get_mbus_formats()
856 || f->width > sensor->csi_format->width smiapp_get_mbus_formats()
857 || (f->width == sensor->csi_format->width smiapp_get_mbus_formats()
858 && f->compressed > sensor->csi_format->compressed)) { smiapp_get_mbus_formats()
859 sensor->csi_format = f; smiapp_get_mbus_formats()
860 sensor->internal_csi_format = f; smiapp_get_mbus_formats()
864 if (!sensor->csi_format) { smiapp_get_mbus_formats()
869 smiapp_update_mbus_formats(sensor); smiapp_get_mbus_formats()
874 static void smiapp_update_blanking(struct smiapp_sensor *sensor) smiapp_update_blanking() argument
876 struct v4l2_ctrl *vblank = sensor->vblank; smiapp_update_blanking()
877 struct v4l2_ctrl *hblank = sensor->hblank; smiapp_update_blanking()
881 sensor->limits[SMIAPP_LIMIT_MIN_FRAME_BLANKING_LINES], smiapp_update_blanking()
882 sensor->limits[SMIAPP_LIMIT_MIN_FRAME_LENGTH_LINES_BIN] - smiapp_update_blanking()
883 sensor->pixel_array->crop[SMIAPP_PA_PAD_SRC].height); smiapp_update_blanking()
884 max = sensor->limits[SMIAPP_LIMIT_MAX_FRAME_LENGTH_LINES_BIN] - smiapp_update_blanking()
885 sensor->pixel_array->crop[SMIAPP_PA_PAD_SRC].height; smiapp_update_blanking()
890 sensor->limits[SMIAPP_LIMIT_MIN_LINE_LENGTH_PCK_BIN] - smiapp_update_blanking()
891 sensor->pixel_array->crop[SMIAPP_PA_PAD_SRC].width, smiapp_update_blanking()
892 sensor->limits[SMIAPP_LIMIT_MIN_LINE_BLANKING_PCK_BIN]); smiapp_update_blanking()
893 max = sensor->limits[SMIAPP_LIMIT_MAX_LINE_LENGTH_PCK_BIN] - smiapp_update_blanking()
894 sensor->pixel_array->crop[SMIAPP_PA_PAD_SRC].width; smiapp_update_blanking()
898 __smiapp_update_exposure_limits(sensor); smiapp_update_blanking()
901 static int smiapp_update_mode(struct smiapp_sensor *sensor) smiapp_update_mode() argument
903 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); smiapp_update_mode()
908 sensor->src->crop[SMIAPP_PAD_SRC].width, smiapp_update_mode()
909 sensor->src->crop[SMIAPP_PAD_SRC].height); smiapp_update_mode()
911 sensor->csi_format->width); smiapp_update_mode()
914 if (sensor->binning_horizontal == 1 && smiapp_update_mode()
915 sensor->binning_vertical == 1) { smiapp_update_mode()
919 (sensor->binning_horizontal << 4) smiapp_update_mode()
920 | sensor->binning_vertical; smiapp_update_mode()
923 sensor, SMIAPP_REG_U8_BINNING_TYPE, binning_type); smiapp_update_mode()
929 rval = smiapp_write(sensor, SMIAPP_REG_U8_BINNING_MODE, binning_mode); smiapp_update_mode()
934 rval = smiapp_get_limits_binning(sensor); smiapp_update_mode()
938 rval = smiapp_pll_update(sensor); smiapp_update_mode()
943 smiapp_update_blanking(sensor); smiapp_update_mode()
945 dev_dbg(&client->dev, "vblank\t\t%d\n", sensor->vblank->val); smiapp_update_mode()
946 dev_dbg(&client->dev, "hblank\t\t%d\n", sensor->hblank->val); smiapp_update_mode()
949 sensor->pll.pixel_rate_pixel_array / smiapp_update_mode()
950 ((sensor->pixel_array->crop[SMIAPP_PA_PAD_SRC].width smiapp_update_mode()
951 + sensor->hblank->val) * smiapp_update_mode()
952 (sensor->pixel_array->crop[SMIAPP_PA_PAD_SRC].height smiapp_update_mode()
953 + sensor->vblank->val) / 100)); smiapp_update_mode()
963 static int smiapp_read_nvm(struct smiapp_sensor *sensor, smiapp_read_nvm() argument
969 np = sensor->nvm_size / SMIAPP_NVM_PAGE_SIZE; smiapp_read_nvm()
972 sensor, smiapp_read_nvm()
977 rval = smiapp_write(sensor, smiapp_read_nvm()
986 sensor, smiapp_read_nvm()
1004 sensor, smiapp_read_nvm()
1015 rval2 = smiapp_write(sensor, SMIAPP_REG_U8_DATA_TRANSFER_IF_1_CTRL, 0); smiapp_read_nvm()
1027 static int smiapp_change_cci_addr(struct smiapp_sensor *sensor) smiapp_change_cci_addr() argument
1029 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); smiapp_change_cci_addr()
1033 client->addr = sensor->platform_data->i2c_addr_dfl; smiapp_change_cci_addr()
1035 rval = smiapp_write(sensor, smiapp_change_cci_addr()
1037 sensor->platform_data->i2c_addr_alt << 1); smiapp_change_cci_addr()
1041 client->addr = sensor->platform_data->i2c_addr_alt; smiapp_change_cci_addr()
1044 rval = smiapp_read(sensor, SMIAPP_REG_U8_CCI_ADDRESS_CONTROL, &val); smiapp_change_cci_addr()
1048 if (val != sensor->platform_data->i2c_addr_alt << 1) smiapp_change_cci_addr()
1059 static int smiapp_setup_flash_strobe(struct smiapp_sensor *sensor) smiapp_setup_flash_strobe() argument
1062 unsigned int ext_freq = sensor->platform_data->ext_clk; smiapp_setup_flash_strobe()
1068 strobe_setup = sensor->platform_data->strobe_setup; smiapp_setup_flash_strobe()
1150 rval = smiapp_write(sensor, SMIAPP_REG_U8_FLASH_MODE_RS, smiapp_setup_flash_strobe()
1155 rval = smiapp_write(sensor, SMIAPP_REG_U8_FLASH_STROBE_ADJUSTMENT, smiapp_setup_flash_strobe()
1161 sensor, SMIAPP_REG_U16_TFLASH_STROBE_WIDTH_HIGH_RS_CTRL, smiapp_setup_flash_strobe()
1166 rval = smiapp_write(sensor, SMIAPP_REG_U16_TFLASH_STROBE_DELAY_RS_CTRL, smiapp_setup_flash_strobe()
1171 rval = smiapp_write(sensor, SMIAPP_REG_U16_FLASH_STROBE_START_POINT, smiapp_setup_flash_strobe()
1176 rval = smiapp_write(sensor, SMIAPP_REG_U8_FLASH_TRIGGER_RS, smiapp_setup_flash_strobe()
1180 sensor->platform_data->strobe_setup->trigger = 0; smiapp_setup_flash_strobe()
1189 static int smiapp_power_on(struct smiapp_sensor *sensor) smiapp_power_on() argument
1191 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); smiapp_power_on()
1195 rval = regulator_enable(sensor->vana); smiapp_power_on()
1202 if (sensor->platform_data->set_xclk) smiapp_power_on()
1203 rval = sensor->platform_data->set_xclk( smiapp_power_on()
1204 &sensor->src->sd, sensor->platform_data->ext_clk); smiapp_power_on()
1206 rval = clk_prepare_enable(sensor->ext_clk); smiapp_power_on()
1213 if (gpio_is_valid(sensor->platform_data->xshutdown)) smiapp_power_on()
1214 gpio_set_value(sensor->platform_data->xshutdown, 1); smiapp_power_on()
1216 sleep = SMIAPP_RESET_DELAY(sensor->platform_data->ext_clk); smiapp_power_on()
1221 * Those failures seem to be caused by the sensor requiring a longer smiapp_power_on()
1230 if (sensor->platform_data->i2c_addr_alt) { smiapp_power_on()
1231 rval = smiapp_change_cci_addr(sensor); smiapp_power_on()
1238 rval = smiapp_write(sensor, SMIAPP_REG_U8_SOFTWARE_RESET, smiapp_power_on()
1245 if (sensor->platform_data->i2c_addr_alt) { smiapp_power_on()
1246 rval = smiapp_change_cci_addr(sensor); smiapp_power_on()
1253 rval = smiapp_write(sensor, SMIAPP_REG_U16_COMPRESSION_MODE, smiapp_power_on()
1261 sensor, SMIAPP_REG_U16_EXTCLK_FREQUENCY_MHZ, smiapp_power_on()
1262 sensor->platform_data->ext_clk / (1000000 / (1 << 8))); smiapp_power_on()
1268 rval = smiapp_write(sensor, SMIAPP_REG_U8_CSI_LANE_MODE, smiapp_power_on()
1269 sensor->platform_data->lanes - 1); smiapp_power_on()
1275 rval = smiapp_write(sensor, SMIAPP_REG_U8_FAST_STANDBY_CTRL, smiapp_power_on()
1282 rval = smiapp_write(sensor, SMIAPP_REG_U8_CSI_SIGNALLING_MODE, smiapp_power_on()
1283 sensor->platform_data->csi_signalling_mode); smiapp_power_on()
1289 /* DPHY control done by sensor based on requested link rate */ smiapp_power_on()
1290 rval = smiapp_write(sensor, SMIAPP_REG_U8_DPHY_CTRL, smiapp_power_on()
1295 rval = smiapp_call_quirk(sensor, post_poweron); smiapp_power_on()
1302 if (!sensor->pixel_array) smiapp_power_on()
1306 &sensor->pixel_array->ctrl_handler); smiapp_power_on()
1310 rval = v4l2_ctrl_handler_setup(&sensor->src->ctrl_handler); smiapp_power_on()
1314 mutex_lock(&sensor->mutex); smiapp_power_on()
1315 rval = smiapp_update_mode(sensor); smiapp_power_on()
1316 mutex_unlock(&sensor->mutex); smiapp_power_on()
1323 if (gpio_is_valid(sensor->platform_data->xshutdown)) smiapp_power_on()
1324 gpio_set_value(sensor->platform_data->xshutdown, 0); smiapp_power_on()
1325 if (sensor->platform_data->set_xclk) smiapp_power_on()
1326 sensor->platform_data->set_xclk(&sensor->src->sd, 0); smiapp_power_on()
1328 clk_disable_unprepare(sensor->ext_clk); smiapp_power_on()
1331 regulator_disable(sensor->vana); smiapp_power_on()
1335 static void smiapp_power_off(struct smiapp_sensor *sensor) smiapp_power_off() argument
1339 * but they are essentially the same signals. So if the sensor is smiapp_power_off()
1340 * powered off while the lens is powered on the sensor does not smiapp_power_off()
1344 if (sensor->platform_data->i2c_addr_alt) smiapp_power_off()
1345 smiapp_write(sensor, smiapp_power_off()
1349 if (gpio_is_valid(sensor->platform_data->xshutdown)) smiapp_power_off()
1350 gpio_set_value(sensor->platform_data->xshutdown, 0); smiapp_power_off()
1351 if (sensor->platform_data->set_xclk) smiapp_power_off()
1352 sensor->platform_data->set_xclk(&sensor->src->sd, 0); smiapp_power_off()
1354 clk_disable_unprepare(sensor->ext_clk); smiapp_power_off()
1356 regulator_disable(sensor->vana); smiapp_power_off()
1357 sensor->streaming = false; smiapp_power_off()
1362 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); smiapp_set_power() local
1365 mutex_lock(&sensor->power_mutex); smiapp_set_power()
1367 if (on && !sensor->power_count) { smiapp_set_power()
1369 ret = smiapp_power_on(sensor); smiapp_set_power()
1372 } else if (!on && sensor->power_count == 1) { smiapp_set_power()
1373 smiapp_power_off(sensor); smiapp_set_power()
1377 sensor->power_count += on ? 1 : -1; smiapp_set_power()
1378 WARN_ON(sensor->power_count < 0); smiapp_set_power()
1381 mutex_unlock(&sensor->power_mutex); smiapp_set_power()
1389 static int smiapp_start_streaming(struct smiapp_sensor *sensor) smiapp_start_streaming() argument
1391 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); smiapp_start_streaming()
1394 mutex_lock(&sensor->mutex); smiapp_start_streaming()
1396 rval = smiapp_write(sensor, SMIAPP_REG_U16_CSI_DATA_FORMAT, smiapp_start_streaming()
1397 (sensor->csi_format->width << 8) | smiapp_start_streaming()
1398 sensor->csi_format->compressed); smiapp_start_streaming()
1402 rval = smiapp_pll_configure(sensor); smiapp_start_streaming()
1407 rval = smiapp_write(sensor, SMIAPP_REG_U16_X_ADDR_START, smiapp_start_streaming()
1408 sensor->pixel_array->crop[SMIAPP_PA_PAD_SRC].left); smiapp_start_streaming()
1412 rval = smiapp_write(sensor, SMIAPP_REG_U16_Y_ADDR_START, smiapp_start_streaming()
1413 sensor->pixel_array->crop[SMIAPP_PA_PAD_SRC].top); smiapp_start_streaming()
1419 sensor, SMIAPP_REG_U16_X_ADDR_END, smiapp_start_streaming()
1420 sensor->pixel_array->crop[SMIAPP_PA_PAD_SRC].left smiapp_start_streaming()
1421 + sensor->pixel_array->crop[SMIAPP_PA_PAD_SRC].width - 1); smiapp_start_streaming()
1426 sensor, SMIAPP_REG_U16_Y_ADDR_END, smiapp_start_streaming()
1427 sensor->pixel_array->crop[SMIAPP_PA_PAD_SRC].top smiapp_start_streaming()
1428 + sensor->pixel_array->crop[SMIAPP_PA_PAD_SRC].height - 1); smiapp_start_streaming()
1438 if (sensor->limits[SMIAPP_LIMIT_DIGITAL_CROP_CAPABILITY] smiapp_start_streaming()
1441 sensor, SMIAPP_REG_U16_DIGITAL_CROP_X_OFFSET, smiapp_start_streaming()
1442 sensor->scaler->crop[SMIAPP_PAD_SINK].left); smiapp_start_streaming()
1447 sensor, SMIAPP_REG_U16_DIGITAL_CROP_Y_OFFSET, smiapp_start_streaming()
1448 sensor->scaler->crop[SMIAPP_PAD_SINK].top); smiapp_start_streaming()
1453 sensor, SMIAPP_REG_U16_DIGITAL_CROP_IMAGE_WIDTH, smiapp_start_streaming()
1454 sensor->scaler->crop[SMIAPP_PAD_SINK].width); smiapp_start_streaming()
1459 sensor, SMIAPP_REG_U16_DIGITAL_CROP_IMAGE_HEIGHT, smiapp_start_streaming()
1460 sensor->scaler->crop[SMIAPP_PAD_SINK].height); smiapp_start_streaming()
1466 if (sensor->limits[SMIAPP_LIMIT_SCALING_CAPABILITY] smiapp_start_streaming()
1468 rval = smiapp_write(sensor, SMIAPP_REG_U16_SCALING_MODE, smiapp_start_streaming()
1469 sensor->scaling_mode); smiapp_start_streaming()
1473 rval = smiapp_write(sensor, SMIAPP_REG_U16_SCALE_M, smiapp_start_streaming()
1474 sensor->scale_m); smiapp_start_streaming()
1479 /* Output size from sensor */ smiapp_start_streaming()
1480 rval = smiapp_write(sensor, SMIAPP_REG_U16_X_OUTPUT_SIZE, smiapp_start_streaming()
1481 sensor->src->crop[SMIAPP_PAD_SRC].width); smiapp_start_streaming()
1484 rval = smiapp_write(sensor, SMIAPP_REG_U16_Y_OUTPUT_SIZE, smiapp_start_streaming()
1485 sensor->src->crop[SMIAPP_PAD_SRC].height); smiapp_start_streaming()
1489 if ((sensor->limits[SMIAPP_LIMIT_FLASH_MODE_CAPABILITY] & smiapp_start_streaming()
1492 sensor->platform_data->strobe_setup != NULL && smiapp_start_streaming()
1493 sensor->platform_data->strobe_setup->trigger != 0) { smiapp_start_streaming()
1494 rval = smiapp_setup_flash_strobe(sensor); smiapp_start_streaming()
1499 rval = smiapp_call_quirk(sensor, pre_streamon); smiapp_start_streaming()
1505 rval = smiapp_write(sensor, SMIAPP_REG_U8_MODE_SELECT, smiapp_start_streaming()
1509 mutex_unlock(&sensor->mutex); smiapp_start_streaming()
1514 static int smiapp_stop_streaming(struct smiapp_sensor *sensor) smiapp_stop_streaming() argument
1516 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); smiapp_stop_streaming()
1519 mutex_lock(&sensor->mutex); smiapp_stop_streaming()
1520 rval = smiapp_write(sensor, SMIAPP_REG_U8_MODE_SELECT, smiapp_stop_streaming()
1525 rval = smiapp_call_quirk(sensor, post_streamoff); smiapp_stop_streaming()
1530 mutex_unlock(&sensor->mutex); smiapp_stop_streaming()
1540 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); smiapp_set_stream() local
1543 if (sensor->streaming == enable) smiapp_set_stream()
1547 sensor->streaming = true; smiapp_set_stream()
1548 rval = smiapp_start_streaming(sensor); smiapp_set_stream()
1550 sensor->streaming = false; smiapp_set_stream()
1552 rval = smiapp_stop_streaming(sensor); smiapp_set_stream()
1553 sensor->streaming = false; smiapp_set_stream()
1564 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); smiapp_enum_mbus_code() local
1569 mutex_lock(&sensor->mutex); smiapp_enum_mbus_code()
1574 if (subdev != &sensor->src->sd || code->pad != SMIAPP_PAD_SRC) { smiapp_enum_mbus_code()
1578 code->code = sensor->internal_csi_format->code; smiapp_enum_mbus_code()
1584 if (sensor->mbus_frame_fmts & (1 << i)) smiapp_enum_mbus_code()
1597 mutex_unlock(&sensor->mutex); smiapp_enum_mbus_code()
1605 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); __smiapp_get_mbus_code() local
1607 if (subdev == &sensor->src->sd && pad == SMIAPP_PAD_SRC) __smiapp_get_mbus_code()
1608 return sensor->csi_format->code; __smiapp_get_mbus_code()
1610 return sensor->internal_csi_format->code; __smiapp_get_mbus_code()
1642 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); smiapp_get_format() local
1645 mutex_lock(&sensor->mutex); smiapp_get_format()
1647 mutex_unlock(&sensor->mutex); smiapp_get_format()
1686 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); smiapp_propagate() local
1697 if (ssd == sensor->scaler) { smiapp_propagate()
1698 sensor->scale_m = smiapp_propagate()
1699 sensor->limits[ smiapp_propagate()
1701 sensor->scaling_mode = smiapp_propagate()
1703 } else if (ssd == sensor->binner) { smiapp_propagate()
1704 sensor->binning_horizontal = 1; smiapp_propagate()
1705 sensor->binning_vertical = 1; smiapp_propagate()
1718 *smiapp_validate_csi_data_format(struct smiapp_sensor *sensor, u32 code) smiapp_validate_csi_data_format() argument
1720 const struct smiapp_csi_data_format *csi_format = sensor->csi_format; smiapp_validate_csi_data_format()
1724 if (sensor->mbus_frame_fmts & (1 << i) smiapp_validate_csi_data_format()
1736 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); smiapp_set_format_source() local
1738 *old_csi_format = sensor->csi_format; smiapp_set_format_source()
1752 if (subdev != &sensor->src->sd) smiapp_set_format_source()
1755 csi_format = smiapp_validate_csi_data_format(sensor, code); smiapp_set_format_source()
1762 sensor->csi_format = csi_format; smiapp_set_format_source()
1765 for (i = 0; i < ARRAY_SIZE(sensor->test_data); i++) smiapp_set_format_source()
1767 sensor->test_data[i], 0, smiapp_set_format_source()
1774 &sensor->valid_link_freqs[sensor->csi_format->compressed smiapp_set_format_source()
1778 sensor->link_freq, 0, smiapp_set_format_source()
1782 return smiapp_pll_update(sensor); smiapp_set_format_source()
1789 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); smiapp_set_format() local
1793 mutex_lock(&sensor->mutex); smiapp_set_format()
1800 mutex_unlock(&sensor->mutex); smiapp_set_format()
1813 sensor->limits[SMIAPP_LIMIT_MIN_X_OUTPUT_SIZE], smiapp_set_format()
1814 sensor->limits[SMIAPP_LIMIT_MAX_X_OUTPUT_SIZE]); smiapp_set_format()
1817 sensor->limits[SMIAPP_LIMIT_MIN_Y_OUTPUT_SIZE], smiapp_set_format()
1818 sensor->limits[SMIAPP_LIMIT_MAX_Y_OUTPUT_SIZE]); smiapp_set_format()
1831 mutex_unlock(&sensor->mutex); smiapp_set_format()
1845 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); scaling_goodness() local
1871 if (w < sensor->limits[SMIAPP_LIMIT_MIN_X_OUTPUT_SIZE]) scaling_goodness()
1886 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); smiapp_set_compose_binner() local
1894 for (i = 0; i < sensor->nbinning_subtypes; i++) { smiapp_set_compose_binner()
1898 / sensor->binning_subtypes[i].horizontal, smiapp_set_compose_binner()
1901 / sensor->binning_subtypes[i].vertical, smiapp_set_compose_binner()
1905 binh = sensor->binning_subtypes[i].horizontal; smiapp_set_compose_binner()
1906 binv = sensor->binning_subtypes[i].vertical; smiapp_set_compose_binner()
1911 sensor->binning_vertical = binv; smiapp_set_compose_binner()
1912 sensor->binning_horizontal = binh; smiapp_set_compose_binner()
1935 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); smiapp_set_compose_scaler() local
1937 u32 scale_m = sensor->limits[SMIAPP_LIMIT_SCALER_N_MIN]; smiapp_set_compose_scaler()
1950 * sensor->limits[SMIAPP_LIMIT_SCALER_N_MIN] / sel->r.width; smiapp_set_compose_scaler()
1952 * sensor->limits[SMIAPP_LIMIT_SCALER_N_MIN] / sel->r.height; smiapp_set_compose_scaler()
1954 * sensor->limits[SMIAPP_LIMIT_SCALER_N_MIN] smiapp_set_compose_scaler()
1955 / sensor->limits[SMIAPP_LIMIT_MIN_X_OUTPUT_SIZE]; smiapp_set_compose_scaler()
1957 a = clamp(a, sensor->limits[SMIAPP_LIMIT_SCALER_M_MIN], smiapp_set_compose_scaler()
1958 sensor->limits[SMIAPP_LIMIT_SCALER_M_MAX]); smiapp_set_compose_scaler()
1959 b = clamp(b, sensor->limits[SMIAPP_LIMIT_SCALER_M_MIN], smiapp_set_compose_scaler()
1960 sensor->limits[SMIAPP_LIMIT_SCALER_M_MAX]); smiapp_set_compose_scaler()
1961 max_m = clamp(max_m, sensor->limits[SMIAPP_LIMIT_SCALER_M_MIN], smiapp_set_compose_scaler()
1962 sensor->limits[SMIAPP_LIMIT_SCALER_M_MAX]); smiapp_set_compose_scaler()
1989 * sensor->limits[SMIAPP_LIMIT_SCALER_N_MIN], smiapp_set_compose_scaler()
2003 if (sensor->limits[SMIAPP_LIMIT_SCALING_CAPABILITY] smiapp_set_compose_scaler()
2010 * sensor->limits[SMIAPP_LIMIT_SCALER_N_MIN], smiapp_set_compose_scaler()
2014 * sensor->limits[SMIAPP_LIMIT_SCALER_N_MIN], smiapp_set_compose_scaler()
2028 * sensor->limits[SMIAPP_LIMIT_SCALER_N_MIN]) & ~1; smiapp_set_compose_scaler()
2033 * sensor->limits[SMIAPP_LIMIT_SCALER_N_MIN]) smiapp_set_compose_scaler()
2039 sensor->scale_m = scale_m; smiapp_set_compose_scaler()
2040 sensor->scaling_mode = mode; smiapp_set_compose_scaler()
2048 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); smiapp_set_compose() local
2057 if (ssd == sensor->binner) smiapp_set_compose()
2067 return smiapp_update_mode(sensor); smiapp_set_compose()
2075 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); __smiapp_sel_supported() local
2082 if (ssd == sensor->pixel_array __smiapp_sel_supported()
2085 if (ssd == sensor->src __smiapp_sel_supported()
2088 if (ssd == sensor->scaler __smiapp_sel_supported()
2090 && sensor->limits[SMIAPP_LIMIT_DIGITAL_CROP_CAPABILITY] __smiapp_sel_supported()
2095 if (ssd == sensor->pixel_array __smiapp_sel_supported()
2103 if (ssd == sensor->binner) __smiapp_sel_supported()
2105 if (ssd == sensor->scaler __smiapp_sel_supported()
2106 && sensor->limits[SMIAPP_LIMIT_SCALING_CAPABILITY] __smiapp_sel_supported()
2119 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); smiapp_set_crop() local
2147 if (ssd == sensor->src && sel->pad == SMIAPP_PAD_SRC) { smiapp_set_crop()
2160 if (ssd != sensor->pixel_array && sel->pad == SMIAPP_PAD_SINK) smiapp_set_crop()
2171 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); __smiapp_get_selection() local
2198 if (ssd == sensor->pixel_array) { __smiapp_get_selection()
2201 sensor->limits[SMIAPP_LIMIT_X_ADDR_MAX] + 1; __smiapp_get_selection()
2203 sensor->limits[SMIAPP_LIMIT_Y_ADDR_MAX] + 1; __smiapp_get_selection()
2226 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); smiapp_get_selection() local
2229 mutex_lock(&sensor->mutex); smiapp_get_selection()
2231 mutex_unlock(&sensor->mutex); smiapp_get_selection()
2239 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); smiapp_set_selection() local
2246 mutex_lock(&sensor->mutex); smiapp_set_selection()
2254 sensor->limits[SMIAPP_LIMIT_MIN_X_OUTPUT_SIZE], smiapp_set_selection()
2257 sensor->limits[SMIAPP_LIMIT_MIN_Y_OUTPUT_SIZE], smiapp_set_selection()
2271 mutex_unlock(&sensor->mutex); smiapp_set_selection()
2277 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); smiapp_get_skip_frames() local
2279 *frames = sensor->frame_skip; smiapp_get_skip_frames()
2293 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); smiapp_sysfs_nvm_read() local
2296 if (!sensor->dev_init_done) smiapp_sysfs_nvm_read()
2299 if (!sensor->nvm_size) { smiapp_sysfs_nvm_read()
2301 sensor->nvm_size = sensor->platform_data->nvm_size; smiapp_sysfs_nvm_read()
2304 if (smiapp_read_nvm(sensor, sensor->nvm)) { smiapp_sysfs_nvm_read()
2314 nbytes = min_t(unsigned int, sensor->nvm_size, PAGE_SIZE); smiapp_sysfs_nvm_read()
2315 memcpy(buf, sensor->nvm, nbytes); smiapp_sysfs_nvm_read()
2326 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); smiapp_sysfs_ident_read() local
2327 struct smiapp_module_info *minfo = &sensor->minfo; smiapp_sysfs_ident_read()
2340 static int smiapp_identify_module(struct smiapp_sensor *sensor) smiapp_identify_module() argument
2342 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); smiapp_identify_module()
2343 struct smiapp_module_info *minfo = &sensor->minfo; smiapp_identify_module()
2350 rval = smiapp_read_8only(sensor, SMIAPP_REG_U8_MANUFACTURER_ID, smiapp_identify_module()
2353 rval = smiapp_read_8only(sensor, SMIAPP_REG_U16_MODEL_ID, smiapp_identify_module()
2356 rval = smiapp_read_8only(sensor, smiapp_identify_module()
2360 rval = smiapp_read_8only(sensor, smiapp_identify_module()
2364 rval = smiapp_read_8only(sensor, smiapp_identify_module()
2368 rval = smiapp_read_8only(sensor, smiapp_identify_module()
2372 rval = smiapp_read_8only(sensor, SMIAPP_REG_U8_MODULE_DATE_DAY, smiapp_identify_module()
2377 rval = smiapp_read_8only(sensor, smiapp_identify_module()
2381 rval = smiapp_read_8only(sensor, smiapp_identify_module()
2385 rval = smiapp_read_8only(sensor, smiapp_identify_module()
2389 rval = smiapp_read_8only(sensor, smiapp_identify_module()
2395 rval = smiapp_read_8only(sensor, SMIAPP_REG_U8_SMIA_VERSION, smiapp_identify_module()
2398 rval = smiapp_read_8only(sensor, SMIAPP_REG_U8_SMIAPP_VERSION, smiapp_identify_module()
2402 dev_err(&client->dev, "sensor detection failed\n"); smiapp_identify_module()
2414 dev_dbg(&client->dev, "sensor 0x%2.2x-0x%4.4x\n", smiapp_identify_module()
2418 "sensor revision 0x%2.2x firmware version 0x%2.2x\n", smiapp_identify_module()
2427 * parameters whereas the rvalues are sensor parameters. smiapp_identify_module()
2461 dev_dbg(&client->dev, "the sensor is called %s, ident %2.2x%4.4x%2.2x\n", smiapp_identify_module()
2472 static int smiapp_register_subdevs(struct smiapp_sensor *sensor) smiapp_register_subdevs() argument
2474 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); smiapp_register_subdevs()
2476 sensor->scaler, smiapp_register_subdevs()
2477 sensor->binner, smiapp_register_subdevs()
2478 sensor->pixel_array, smiapp_register_subdevs()
2510 rval = v4l2_device_register_subdev(sensor->src->sd.v4l2_dev, smiapp_register_subdevs()
2522 static void smiapp_cleanup(struct smiapp_sensor *sensor) smiapp_cleanup() argument
2524 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); smiapp_cleanup()
2529 smiapp_free_controls(sensor); smiapp_cleanup()
2532 static int smiapp_init(struct smiapp_sensor *sensor) smiapp_init() argument
2534 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); smiapp_init()
2535 struct smiapp_pll *pll = &sensor->pll; smiapp_init()
2540 sensor->vana = devm_regulator_get(&client->dev, "vana"); smiapp_init()
2541 if (IS_ERR(sensor->vana)) { smiapp_init()
2543 return PTR_ERR(sensor->vana); smiapp_init()
2546 if (!sensor->platform_data->set_xclk) { smiapp_init()
2547 sensor->ext_clk = devm_clk_get(&client->dev, NULL); smiapp_init()
2548 if (IS_ERR(sensor->ext_clk)) { smiapp_init()
2550 return PTR_ERR(sensor->ext_clk); smiapp_init()
2553 rval = clk_set_rate(sensor->ext_clk, smiapp_init()
2554 sensor->platform_data->ext_clk); smiapp_init()
2558 sensor->platform_data->ext_clk); smiapp_init()
2563 if (gpio_is_valid(sensor->platform_data->xshutdown)) { smiapp_init()
2565 &client->dev, sensor->platform_data->xshutdown, 0, smiapp_init()
2570 sensor->platform_data->xshutdown); smiapp_init()
2575 rval = smiapp_power_on(sensor); smiapp_init()
2579 rval = smiapp_identify_module(sensor); smiapp_init()
2585 rval = smiapp_get_all_limits(sensor); smiapp_init()
2594 * The application of H-FLIP and V-FLIP on the sensor is modified by smiapp_init()
2595 * the sensor orientation on the board. smiapp_init()
2604 if (sensor->platform_data->module_board_orient == smiapp_init()
2606 sensor->hvflip_inv_mask = SMIAPP_IMAGE_ORIENTATION_HFLIP | smiapp_init()
2609 rval = smiapp_call_quirk(sensor, limits); smiapp_init()
2615 if (sensor->limits[SMIAPP_LIMIT_BINNING_CAPABILITY]) { smiapp_init()
2618 rval = smiapp_read(sensor, smiapp_init()
2624 sensor->nbinning_subtypes = min_t(u8, val, smiapp_init()
2627 for (i = 0; i < sensor->nbinning_subtypes; i++) { smiapp_init()
2629 sensor, SMIAPP_REG_U8_BINNING_TYPE_n(i), &val); smiapp_init()
2634 sensor->binning_subtypes[i] = smiapp_init()
2638 sensor->binning_subtypes[i].horizontal, smiapp_init()
2639 sensor->binning_subtypes[i].vertical); smiapp_init()
2642 sensor->binning_horizontal = 1; smiapp_init()
2643 sensor->binning_vertical = 1; smiapp_init()
2650 /* SMIA++ NVM initialization - it will be read from the sensor smiapp_init()
2653 if (sensor->minfo.smiapp_version && sensor->platform_data->nvm_size) { smiapp_init()
2654 sensor->nvm = devm_kzalloc(&client->dev, smiapp_init()
2655 sensor->platform_data->nvm_size, GFP_KERNEL); smiapp_init()
2656 if (sensor->nvm == NULL) { smiapp_init()
2669 /* We consider this as profile 0 sensor if any of these are zero. */ smiapp_init()
2670 if (!sensor->limits[SMIAPP_LIMIT_MIN_OP_SYS_CLK_DIV] || smiapp_init()
2671 !sensor->limits[SMIAPP_LIMIT_MAX_OP_SYS_CLK_DIV] || smiapp_init()
2672 !sensor->limits[SMIAPP_LIMIT_MIN_OP_PIX_CLK_DIV] || smiapp_init()
2673 !sensor->limits[SMIAPP_LIMIT_MAX_OP_PIX_CLK_DIV]) { smiapp_init()
2674 sensor->minfo.smiapp_profile = SMIAPP_PROFILE_0; smiapp_init()
2675 } else if (sensor->limits[SMIAPP_LIMIT_SCALING_CAPABILITY] smiapp_init()
2677 if (sensor->limits[SMIAPP_LIMIT_SCALING_CAPABILITY] smiapp_init()
2679 sensor->minfo.smiapp_profile = SMIAPP_PROFILE_1; smiapp_init()
2681 sensor->minfo.smiapp_profile = SMIAPP_PROFILE_2; smiapp_init()
2682 sensor->scaler = &sensor->ssds[sensor->ssds_used]; smiapp_init()
2683 sensor->ssds_used++; smiapp_init()
2684 } else if (sensor->limits[SMIAPP_LIMIT_DIGITAL_CROP_CAPABILITY] smiapp_init()
2686 sensor->scaler = &sensor->ssds[sensor->ssds_used]; smiapp_init()
2687 sensor->ssds_used++; smiapp_init()
2689 sensor->binner = &sensor->ssds[sensor->ssds_used]; smiapp_init()
2690 sensor->ssds_used++; smiapp_init()
2691 sensor->pixel_array = &sensor->ssds[sensor->ssds_used]; smiapp_init()
2692 sensor->ssds_used++; smiapp_init()
2694 sensor->scale_m = sensor->limits[SMIAPP_LIMIT_SCALER_N_MIN]; smiapp_init()
2698 pll->csi2.lanes = sensor->platform_data->lanes; smiapp_init()
2699 pll->ext_clk_freq_hz = sensor->platform_data->ext_clk; smiapp_init()
2700 pll->scale_n = sensor->limits[SMIAPP_LIMIT_SCALER_N_MIN]; smiapp_init()
2702 if (sensor->minfo.smiapp_profile == SMIAPP_PROFILE_0) smiapp_init()
2710 { sensor->scaler, "scaler", }, smiapp_init()
2711 { sensor->binner, "binner", }, smiapp_init()
2712 { sensor->pixel_array, "pixel array", }, smiapp_init()
2719 if (this != sensor->src) smiapp_init()
2722 this->sensor = sensor; smiapp_init()
2724 if (this == sensor->pixel_array) { smiapp_init()
2733 sensor->minfo.name, _this->name, smiapp_init()
2737 sensor->limits[SMIAPP_LIMIT_X_ADDR_MAX] + 1; smiapp_init()
2739 sensor->limits[SMIAPP_LIMIT_Y_ADDR_MAX] + 1; smiapp_init()
2744 if (this != sensor->pixel_array) { smiapp_init()
2764 dev_dbg(&client->dev, "profile %d\n", sensor->minfo.smiapp_profile); smiapp_init()
2766 sensor->pixel_array->sd.entity.type = MEDIA_ENT_T_V4L2_SUBDEV_SENSOR; smiapp_init()
2769 smiapp_read_frame_fmt(sensor); smiapp_init()
2770 rval = smiapp_init_controls(sensor); smiapp_init()
2774 rval = smiapp_call_quirk(sensor, init); smiapp_init()
2778 rval = smiapp_get_mbus_formats(sensor); smiapp_init()
2784 rval = smiapp_init_late_controls(sensor); smiapp_init()
2790 mutex_lock(&sensor->mutex); smiapp_init()
2791 rval = smiapp_update_mode(sensor); smiapp_init()
2792 mutex_unlock(&sensor->mutex); smiapp_init()
2798 sensor->streaming = false; smiapp_init()
2799 sensor->dev_init_done = true; smiapp_init()
2801 smiapp_power_off(sensor); smiapp_init()
2806 smiapp_cleanup(sensor); smiapp_init()
2809 smiapp_power_off(sensor); smiapp_init()
2815 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); smiapp_registered() local
2820 rval = smiapp_init(sensor); smiapp_registered()
2825 rval = smiapp_register_subdevs(sensor); smiapp_registered()
2827 smiapp_cleanup(sensor); smiapp_registered()
2835 struct smiapp_sensor *sensor = ssd->sensor; smiapp_open() local
2837 smiapp_csi_data_formats[smiapp_pixel_order(sensor)].code; smiapp_open()
2840 mutex_lock(&sensor->mutex); smiapp_open()
2848 try_fmt->width = sensor->limits[SMIAPP_LIMIT_X_ADDR_MAX] + 1; smiapp_open()
2849 try_fmt->height = sensor->limits[SMIAPP_LIMIT_Y_ADDR_MAX] + 1; smiapp_open()
2858 if (ssd != sensor->pixel_array) smiapp_open()
2865 mutex_unlock(&sensor->mutex); smiapp_open()
2899 .sensor = &smiapp_sensor_ops,
2927 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); smiapp_suspend() local
2930 BUG_ON(mutex_is_locked(&sensor->mutex)); smiapp_suspend()
2932 if (sensor->power_count == 0) smiapp_suspend()
2935 if (sensor->streaming) smiapp_suspend()
2936 smiapp_stop_streaming(sensor); smiapp_suspend()
2938 streaming = sensor->streaming; smiapp_suspend()
2940 smiapp_power_off(sensor); smiapp_suspend()
2943 sensor->streaming = streaming; smiapp_suspend()
2952 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); smiapp_resume() local
2955 if (sensor->power_count == 0) smiapp_resume()
2958 rval = smiapp_power_on(sensor); smiapp_resume()
2962 if (sensor->streaming) smiapp_resume()
2963 rval = smiapp_start_streaming(sensor); smiapp_resume()
3060 struct smiapp_sensor *sensor; smiapp_probe() local
3067 sensor = devm_kzalloc(&client->dev, sizeof(*sensor), GFP_KERNEL); smiapp_probe()
3068 if (sensor == NULL) smiapp_probe()
3071 sensor->platform_data = pdata; smiapp_probe()
3072 mutex_init(&sensor->mutex); smiapp_probe()
3073 mutex_init(&sensor->power_mutex); smiapp_probe()
3074 sensor->src = &sensor->ssds[sensor->ssds_used]; smiapp_probe()
3076 v4l2_i2c_subdev_init(&sensor->src->sd, client, &smiapp_ops); smiapp_probe()
3077 sensor->src->sd.internal_ops = &smiapp_internal_src_ops; smiapp_probe()
3078 sensor->src->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; smiapp_probe()
3079 sensor->src->sensor = sensor; smiapp_probe()
3081 sensor->src->pads[0].flags = MEDIA_PAD_FL_SOURCE; smiapp_probe()
3082 rval = media_entity_init(&sensor->src->sd.entity, 2, smiapp_probe()
3083 sensor->src->pads, 0); smiapp_probe()
3088 rval = smiapp_init(sensor); smiapp_probe()
3093 rval = v4l2_async_register_subdev(&sensor->src->sd); smiapp_probe()
3100 media_entity_cleanup(&sensor->src->sd.entity); smiapp_probe()
3108 struct smiapp_sensor *sensor = to_smiapp_sensor(subdev); smiapp_remove() local
3113 if (sensor->power_count) { smiapp_remove()
3114 if (gpio_is_valid(sensor->platform_data->xshutdown)) smiapp_remove()
3115 gpio_set_value(sensor->platform_data->xshutdown, 0); smiapp_remove()
3116 if (sensor->platform_data->set_xclk) smiapp_remove()
3117 sensor->platform_data->set_xclk(&sensor->src->sd, 0); smiapp_remove()
3119 clk_disable_unprepare(sensor->ext_clk); smiapp_remove()
3120 sensor->power_count = 0; smiapp_remove()
3123 for (i = 0; i < sensor->ssds_used; i++) { smiapp_remove()
3124 v4l2_device_unregister_subdev(&sensor->ssds[i].sd); smiapp_remove()
3125 media_entity_cleanup(&sensor->ssds[i].sd.entity); smiapp_remove()
3127 smiapp_cleanup(sensor); smiapp_remove()
H A Dsmiapp-quirk.h27 * @limits: Replace sensor->limits with values which can't be read from
28 * sensor registers. Called the first time the sensor is powered up.
29 * @post_poweron: Called always after the sensor has been fully powered on.
34 * also appropriate for adding sensor specific controls, for instance.
48 int (*limits)(struct smiapp_sensor *sensor);
49 int (*post_poweron)(struct smiapp_sensor *sensor);
50 int (*pre_streamon)(struct smiapp_sensor *sensor);
51 int (*post_streamoff)(struct smiapp_sensor *sensor);
52 unsigned long (*pll_flags)(struct smiapp_sensor *sensor);
53 int (*init)(struct smiapp_sensor *sensor);
54 int (*reg_access)(struct smiapp_sensor *sensor, bool write, u32 *reg,
66 void smiapp_replace_limit(struct smiapp_sensor *sensor,
75 #define smiapp_call_quirk(sensor, _quirk, ...) \
76 ((sensor)->minfo.quirk && \
77 (sensor)->minfo.quirk->_quirk ? \
78 (sensor)->minfo.quirk->_quirk(sensor, ##__VA_ARGS__) : 0)
80 #define smiapp_needs_quirk(sensor, _quirk) \
81 ((sensor)->minfo.quirk ? \
82 (sensor)->minfo.quirk->flags & _quirk : 0)
H A Dsmiapp-quirk.c23 static int smiapp_write_8(struct smiapp_sensor *sensor, u16 reg, u8 val) smiapp_write_8() argument
25 return smiapp_write(sensor, SMIAPP_REG_MK_U8(reg), val); smiapp_write_8()
28 static int smiapp_write_8s(struct smiapp_sensor *sensor, smiapp_write_8s() argument
31 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); smiapp_write_8s()
35 rval = smiapp_write_8(sensor, regs->reg, regs->val); smiapp_write_8s()
47 void smiapp_replace_limit(struct smiapp_sensor *sensor, smiapp_replace_limit() argument
50 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); smiapp_replace_limit()
55 sensor->limits[limit] = val; smiapp_replace_limit()
58 static int jt8ew9_limits(struct smiapp_sensor *sensor) jt8ew9_limits() argument
60 if (sensor->minfo.revision_number_major < 0x03) jt8ew9_limits()
61 sensor->frame_skip = 1; jt8ew9_limits()
65 smiapp_replace_limit(sensor, SMIAPP_LIMIT_ANALOGUE_GAIN_CODE_MIN, 59); jt8ew9_limits()
67 sensor, SMIAPP_LIMIT_ANALOGUE_GAIN_CODE_MAX, 6000); jt8ew9_limits()
72 static int jt8ew9_post_poweron(struct smiapp_sensor *sensor) jt8ew9_post_poweron() argument
107 return smiapp_write_8s(sensor, regs, ARRAY_SIZE(regs)); jt8ew9_post_poweron()
115 static int imx125es_post_poweron(struct smiapp_sensor *sensor) imx125es_post_poweron() argument
128 return smiapp_write_8s(sensor, regs, ARRAY_SIZE(regs)); imx125es_post_poweron()
135 static int jt8ev1_limits(struct smiapp_sensor *sensor) jt8ev1_limits() argument
137 smiapp_replace_limit(sensor, SMIAPP_LIMIT_X_ADDR_MAX, 4271); jt8ev1_limits()
138 smiapp_replace_limit(sensor, jt8ev1_limits()
144 static int jt8ev1_post_poweron(struct smiapp_sensor *sensor) jt8ev1_post_poweron() argument
146 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); jt8ev1_post_poweron()
154 { 0x3301, 0x06 }, /* For analog bias for sensor */ jt8ev1_post_poweron()
177 rval = smiapp_write_8s(sensor, regs, ARRAY_SIZE(regs)); jt8ev1_post_poweron()
181 switch (sensor->platform_data->ext_clk) { jt8ev1_post_poweron()
183 return smiapp_write_8s(sensor, regs_96, jt8ev1_post_poweron()
187 sensor->platform_data->ext_clk); jt8ev1_post_poweron()
192 static int jt8ev1_pre_streamon(struct smiapp_sensor *sensor) jt8ev1_pre_streamon() argument
194 return smiapp_write_8(sensor, 0x3328, 0x00); jt8ev1_pre_streamon()
197 static int jt8ev1_post_streamoff(struct smiapp_sensor *sensor) jt8ev1_post_streamoff() argument
202 rval = smiapp_write_8(sensor, 0x3205, 0x04); jt8ev1_post_streamoff()
210 rval = smiapp_write_8(sensor, 0x3205, 0x00); jt8ev1_post_streamoff()
214 return smiapp_write_8(sensor, 0x3328, 0x80); jt8ev1_post_streamoff()
217 static int jt8ev1_init(struct smiapp_sensor *sensor) jt8ev1_init() argument
219 sensor->pll.flags |= SMIAPP_PLL_FLAG_OP_PIX_CLOCK_PER_LANE; jt8ev1_init()
232 static int tcm8500md_limits(struct smiapp_sensor *sensor) tcm8500md_limits() argument
234 smiapp_replace_limit(sensor, SMIAPP_LIMIT_MIN_PLL_IP_FREQ_HZ, 2700000); tcm8500md_limits()
H A Dsmiapp-regs.c75 static int ____smiapp_read(struct smiapp_sensor *sensor, u16 reg, ____smiapp_read() argument
78 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); ____smiapp_read()
134 static int ____smiapp_read_8only(struct smiapp_sensor *sensor, u16 reg, ____smiapp_read_8only() argument
145 rval = ____smiapp_read(sensor, reg + i, 1, &val8); ____smiapp_read_8only()
158 static int __smiapp_read(struct smiapp_sensor *sensor, u32 reg, u32 *val, __smiapp_read() argument
161 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); __smiapp_read()
170 rval = ____smiapp_read(sensor, SMIAPP_REG_ADDR(reg), len, val); __smiapp_read()
172 rval = ____smiapp_read_8only(sensor, SMIAPP_REG_ADDR(reg), len, __smiapp_read()
183 int smiapp_read_no_quirk(struct smiapp_sensor *sensor, u32 reg, u32 *val) smiapp_read_no_quirk() argument
186 sensor, reg, val, smiapp_read_no_quirk()
187 smiapp_needs_quirk(sensor, smiapp_read_no_quirk()
191 int smiapp_read(struct smiapp_sensor *sensor, u32 reg, u32 *val) smiapp_read() argument
196 rval = smiapp_call_quirk(sensor, reg_access, false, &reg, val); smiapp_read()
202 return smiapp_read_no_quirk(sensor, reg, val); smiapp_read()
205 int smiapp_read_8only(struct smiapp_sensor *sensor, u32 reg, u32 *val) smiapp_read_8only() argument
210 rval = smiapp_call_quirk(sensor, reg_access, false, &reg, val); smiapp_read_8only()
216 return __smiapp_read(sensor, reg, val, true); smiapp_read_8only()
219 int smiapp_write_no_quirk(struct smiapp_sensor *sensor, u32 reg, u32 val) smiapp_write_no_quirk() argument
221 struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); smiapp_write_no_quirk()
263 * Due to unknown reason sensor stops responding. This smiapp_write_no_quirk()
271 "sensor i2c stall encountered. " smiapp_write_no_quirk()
289 int smiapp_write(struct smiapp_sensor *sensor, u32 reg, u32 val) smiapp_write() argument
293 rval = smiapp_call_quirk(sensor, reg_access, true, &reg, &val); smiapp_write()
299 return smiapp_write_no_quirk(sensor, reg, val); smiapp_write()
H A Dsmiapp-regs.h38 int smiapp_read_no_quirk(struct smiapp_sensor *sensor, u32 reg, u32 *val);
39 int smiapp_read(struct smiapp_sensor *sensor, u32 reg, u32 *val);
40 int smiapp_read_8only(struct smiapp_sensor *sensor, u32 reg, u32 *val);
41 int smiapp_write_no_quirk(struct smiapp_sensor *sensor, u32 reg, u32 val);
42 int smiapp_write(struct smiapp_sensor *sensor, u32 reg, u32 val);
H A Dsmiapp.h172 struct smiapp_sensor *sensor; member in struct:smiapp_subdev
218 u8 hvflip_inv_mask; /* H/VFLIP inversion due to sensor orientation */
255 (to_smiapp_subdev(_sd)->sensor)
/linux-4.1.27/drivers/staging/iio/gyro/
H A DMakefile2 # Makefile for digital gyroscope sensor drivers
/linux-4.1.27/drivers/iio/common/ssp_sensors/
H A DMakefile2 # Makefile for SSP sensor drivers and commons.
H A Dssp_dev.c89 "Sync sensor nr: %d fail\n", i); ssp_sync_available_sensors()
208 * ssp_get_sensor_delay() - gets sensor data acquisition period
210 * @type: SSP sensor type
221 * ssp_enable_sensor() - enables data acquisition for sensor
223 * @type: SSP sensor type
247 dev_err(&data->spi->dev, "Enabling sensor failed\n"); ssp_enable_sensor()
261 "Changing sensor delay failed\n"); ssp_enable_sensor()
283 * ssp_change_delay() - changes data acquisition for sensor
285 * @type: SSP sensor type
303 dev_err(&data->spi->dev, "Changing sensor delay failed\n"); ssp_change_delay()
314 * ssp_disable_sensor() - disables sensor
317 * @type: SSP sensor type
334 dev_err(&data->spi->dev, "Remove sensor fail\n"); ssp_disable_sensor()
514 * @type: ssp sensor type
H A Dssp_iio.c74 * @len: sensor data length
/linux-4.1.27/drivers/iio/common/st_sensors/
H A DMakefile2 # Makefile for the STMicroelectronics sensor common modules.
H A Dst_sensors_i2c.c84 * @client: the I2C client device for the sensor
87 * used by this sensor.
90 * name for a certain sensor device, so that the rest of the autodetection can
/linux-4.1.27/drivers/iio/gyro/
H A DMakefile2 # Makefile for industrial I/O gyroscope sensor drivers
13 obj-$(CONFIG_HID_SENSOR_GYRO_3D) += hid-sensor-gyro-3d.o
/linux-4.1.27/drivers/iio/magnetometer/
H A DMakefile2 # Makefile for industrial I/O Magnetometer sensor drivers
8 obj-$(CONFIG_HID_SENSOR_MAGNETOMETER_3D) += hid-sensor-magn-3d.o
H A Dhid-sensor-magn-3d.c26 #include <linux/hid-sensor-hub.h>
32 #include "../common/hid-sensors/hid-sensor-trigger.h"
50 /* dynamically sized array to hold sensor values */
52 /* array of pointers to sensor value */
320 /* Check if usage attribute exists in the sensor hub device */ magn_3d_parse_report()
/linux-4.1.27/drivers/input/misc/
H A Dmpu3050.c152 * @client: i2c address of sensor
155 * Return the converted X Y and Z co-ordinates from the sensor device
172 * @client: i2c client for the sensor
198 struct mpu3050_sensor *sensor = input_get_drvdata(input); mpu3050_input_open() local
201 pm_runtime_get(sensor->dev); mpu3050_input_open()
204 error = i2c_smbus_write_byte_data(sensor->client, MPU3050_INT_CFG, mpu3050_input_open()
209 pm_runtime_put(sensor->dev); mpu3050_input_open()
225 struct mpu3050_sensor *sensor = input_get_drvdata(input); mpu3050_input_close() local
227 pm_runtime_put(sensor->dev); mpu3050_input_close()
233 * @data: the sensor
236 * the sensor data and generate an input event for it.
240 struct mpu3050_sensor *sensor = data; mpu3050_interrupt_thread() local
243 mpu3050_read_xyz(sensor->client, &axis); mpu3050_interrupt_thread()
245 input_report_abs(sensor->idev, ABS_X, axis.x); mpu3050_interrupt_thread()
246 input_report_abs(sensor->idev, ABS_Y, axis.y); mpu3050_interrupt_thread()
247 input_report_abs(sensor->idev, ABS_Z, axis.z); mpu3050_interrupt_thread()
248 input_sync(sensor->idev); mpu3050_interrupt_thread()
255 * @sensor: the sensor
259 static int mpu3050_hw_init(struct mpu3050_sensor *sensor) mpu3050_hw_init() argument
261 struct i2c_client *client = sensor->client; mpu3050_hw_init()
303 * The I2C layer calls us when it believes a sensor is present at this
311 struct mpu3050_sensor *sensor; mpu3050_probe() local
316 sensor = kzalloc(sizeof(struct mpu3050_sensor), GFP_KERNEL); mpu3050_probe()
318 if (!sensor || !idev) { mpu3050_probe()
324 sensor->client = client; mpu3050_probe()
325 sensor->dev = &client->dev; mpu3050_probe()
326 sensor->idev = idev; mpu3050_probe()
359 input_set_drvdata(idev, sensor); mpu3050_probe()
363 error = mpu3050_hw_init(sensor); mpu3050_probe()
370 "mpu3050", sensor); mpu3050_probe()
385 i2c_set_clientdata(client, sensor); mpu3050_probe()
390 free_irq(client->irq, sensor); mpu3050_probe()
395 kfree(sensor); mpu3050_probe()
400 * mpu3050_remove - remove a sensor
401 * @client: i2c client of sensor being removed
403 * Our sensor is going away, clean up the resources.
407 struct mpu3050_sensor *sensor = i2c_get_clientdata(client); mpu3050_remove() local
412 free_irq(client->irq, sensor); mpu3050_remove()
413 input_unregister_device(sensor->idev); mpu3050_remove()
414 kfree(sensor); mpu3050_remove()
H A Dad714x.c246 * The response of a sensor is defined by the absolute number of codes
280 * The formulae are very straight forward. It uses the sensor with the
282 * When Sensor 0 has the highest response, only sensor 0 and sensor 1
283 * are used in the calculations. Similarly when the last sensor has the
284 * highest response, only the last sensor and the second last sensors
383 /* When the user lifts off the sensor, configure ad714x_slider_state_machine()
403 * on the sensor values. To calculate the position, we first determine the
404 * sensor that has the greatest response among the 8 sensors that constitutes
406 * sensor with the highest response and we apply weights to these sensors.
443 * on the sensor values. To calculate the position, we first determine the
444 * sensor that has the greatest response among the sensors that constitutes
446 * sensor with the highest response and we apply weights to these sensors. The
556 /* When the user lifts off the sensor, configure ad714x_wheel_state_machine()
611 * If 2 fingers are touching the sensor then 2 peaks can be observed in the
686 * End points are detected on the 4 edges of the touchpad sensor. The
689 * percent between the sensor on the edge and the adjacent one. The
853 /* When the user lifts off the sensor, configure ad714x_touchpad_state_machine()
/linux-4.1.27/include/media/
H A Ds3c_camif.h18 * struct s3c_camif_sensor_info - an image sensor description
19 * @i2c_board_info: pointer to an I2C sensor subdevice board info
20 * @clock_frequency: frequency of the clock the host provides to a sensor
22 * @i2c_bus_num: i2c control bus id the sensor is attached to
36 struct s3c_camif_sensor_info sensor; member in struct:s3c_camif_plat_data
H A Dmt9v011.h1 /* mt9v011 sensor
H A Dmt9v022.h2 * mt9v022 sensor
H A Dm5mols.h2 * Driver header for M-5MOLS 8M Pixel camera sensor with ISP
25 * the sensor's supply regulators
H A Dsr030pc30.h2 * Driver header for SR030PC30 camera sensor
H A Ds5k6aa.h2 * S5K6AAFX camera sensor driver header
31 * the sensor off
32 * @mclk_frequency: sensor's master clock frequency in Hz
H A Dnoon010pc30.h2 * Driver header for NOON010PC30L camera sensor chip.
H A Dov9650.h15 * @mclk_frequency: the sensor's master clock frequency in Hz
H A Ds5k4ecgx.h2 * S5K4ECGX image sensor header file
H A Dsmiapp.h44 * corrected by giving a default H-FLIP and V-FLIP in the sensor readout.
69 uint32_t ext_clk; /* sensor external clk */
H A Dexynos-fimc.h69 * @sensor_bus_type: image sensor bus type, MIPI, ITU-R BT.601 etc.
70 * @flags: the parallel sensor bus flags defining signals polarity (V4L2_MBUS_*)
83 * frame capture mode when there is only one VSYNC pulse issued by the sensor
H A Ds5c73m3.h35 * @mclk_frequency: sensor's master clock frequency in Hz
H A Dsi4713.h18 /* The SI4713 I2C sensor chip has a fixed slave address of 0xc6 or 0x22. */
H A Dsoc_camera.h146 /* sensor driver private platform data */
158 /* Optional callbacks to power on or off and reset the sensor */
218 /* Optional callbacks to power on or off and reset the sensor */
289 * struct soc_camera_format_xlate - match between host and sensor formats
290 * @code: code of a sensor provided format
293 * Host and sensor translation structure. Used in table of host and sensor
/linux-4.1.27/drivers/media/usb/gspca/m5602/
H A Dm5602_core.c105 if (!len || len > sd->sensor->i2c_regW) m5602_read_sensor()
113 sd->sensor->i2c_slave_id); m5602_read_sensor()
125 if (sd->sensor->i2c_regW == 1) { m5602_read_sensor()
142 PDEBUG(D_CONF, "Reading sensor register " m5602_read_sensor()
157 /* No sensor with a data width larger than 16 bits has yet been seen */ m5602_write_sensor()
158 if (len > sd->sensor->i2c_regW || !len) m5602_write_sensor()
164 buf[11] = sd->sensor->i2c_slave_id; m5602_write_sensor()
167 /* Special case larger sensor writes */ m5602_write_sensor()
175 PDEBUG(D_CONF, "Writing sensor register 0x%x with 0x%x", m5602_write_sensor()
209 sd->sensor = &po1030; m5602_probe_sensor()
210 if (!sd->sensor->probe(sd)) m5602_probe_sensor()
213 /* Try the mt9m111 sensor */ m5602_probe_sensor()
214 sd->sensor = &mt9m111; m5602_probe_sensor()
215 if (!sd->sensor->probe(sd)) m5602_probe_sensor()
219 sd->sensor = &s5k4aa; m5602_probe_sensor()
220 if (!sd->sensor->probe(sd)) m5602_probe_sensor()
224 sd->sensor = &ov9650; m5602_probe_sensor()
225 if (!sd->sensor->probe(sd)) m5602_probe_sensor()
229 sd->sensor = &ov7660; m5602_probe_sensor()
230 if (!sd->sensor->probe(sd)) m5602_probe_sensor()
234 sd->sensor = &s5k83a; m5602_probe_sensor()
235 if (!sd->sensor->probe(sd)) m5602_probe_sensor()
238 /* More sensor probe function goes here */ m5602_probe_sensor()
239 pr_info("Failed to find a sensor\n"); m5602_probe_sensor()
240 sd->sensor = NULL; m5602_probe_sensor()
254 err = sd->sensor->init(sd); m5602_init()
263 if (!sd->sensor->init_controls) m5602_init_controls()
266 return sd->sensor->init_controls(sd); m5602_init_controls()
278 if (sd->sensor->start) m5602_start_transfer()
279 sd->sensor->start(sd); m5602_start_transfer()
348 /* Run the sensor specific end transfer sequence */ m5602_stop_transfer()
349 if (sd->sensor->stop) m5602_stop_transfer()
350 sd->sensor->stop(sd); m5602_stop_transfer()
377 /* Probe sensor */ m5602_configure()
404 if (sd->sensor->disconnect) m5602_disconnect()
405 sd->sensor->disconnect(sd); m5602_disconnect()
429 "forces detection of a sensor, "
437 MODULE_PARM_DESC(dump_sensor, "Dumps all usb sensor registers "
438 "at startup providing a sensor is found");
H A Dm5602_sensor.h45 /* Defines the name of a sensor */
48 /* What i2c address the sensor is connected to */
54 /* Probes if the sensor is connected */
H A Dm5602_mt9m111.c2 * Driver for the mt9m111 sensor
63 pr_info("Forcing a %s sensor\n", mt9m111.name); mt9m111_probe()
66 /* If we want to force another sensor, don't try to probe this mt9m111_probe()
71 PDEBUG(D_PROBE, "Probing for a mt9m111 sensor"); mt9m111_probe()
91 pr_info("Detected a mt9m111 sensor\n"); mt9m111_probe()
108 /* Init the sensor */ mt9m111_init()
246 sd->sensor = NULL; mt9m111_disconnect()
429 pr_info("Dumping the mt9m111 sensor core registers\n"); mt9m111_dump_registers()
H A Dm5602_po1030.c2 * Driver for the po1030 sensor
62 pr_info("Forcing a %s sensor\n", po1030.name); po1030_probe()
65 /* If we want to force another sensor, don't try to probe this po1030_probe()
70 PDEBUG(D_PROBE, "Probing for a po1030 sensor"); po1030_probe()
86 pr_info("Detected a po1030 sensor\n"); po1030_probe()
102 /* Init the sensor */ po1030_init()
443 sd->sensor = NULL; po1030_disconnect()
493 pr_info("Dumping the po1030 sensor core registers\n"); po1030_dump_registers()
H A Dm5602_s5k83a.c2 * Driver for the s5k83a sensor
58 pr_info("Forcing a %s sensor\n", s5k83a.name); s5k83a_probe()
61 /* If we want to force another sensor, don't try to probe this s5k83a_probe()
66 PDEBUG(D_PROBE, "Probing for a s5k83a sensor"); s5k83a_probe()
68 /* Preinit the sensor */ s5k83a_probe()
91 pr_info("Detected a s5k83a sensor\n"); s5k83a_probe()
226 /* Preinit the sensor */ s5k83a_start()
254 sd->sensor = NULL; s5k83a_disconnect()
H A Dm5602_ov7660.c2 * Driver for the ov7660 sensor
51 pr_info("Forcing an %s sensor\n", ov7660.name); ov7660_probe()
54 /* If we want to force another sensor, ov7660_probe()
85 pr_info("Detected a ov7660 sensor\n"); ov7660_probe()
101 /* Init the sensor */ ov7660_init()
171 sd->sensor = NULL; ov7660_disconnect()
H A Dm5602_s5k4aa.c2 * Driver for the s5k4aa sensor
153 pr_info("Forcing a %s sensor\n", s5k4aa.name); s5k4aa_probe()
156 /* If we want to force another sensor, don't try to probe this s5k4aa_probe()
161 PDEBUG(D_PROBE, "Probing for a s5k4aa sensor"); s5k4aa_probe()
163 /* Preinit the sensor */ s5k4aa_probe()
205 pr_info("Detected a s5k4aa sensor\n"); s5k4aa_probe()
519 sd->sensor = NULL; s5k4aa_disconnect()
H A Dm5602_bridge.h123 /* A skeleton used for sending messages to the sensor */
136 /* A pointer to the currently connected sensor */
137 const struct m5602_sensor *sensor; member in struct:sd
H A Dm5602_ov9650.c2 * Driver for the ov9650 sensor
27 where the sensor is mounted upside down */
154 pr_info("Forcing an %s sensor\n", ov9650.name); ov9650_probe()
157 /* If we want to force another sensor, ov9650_probe()
162 PDEBUG(D_PROBE, "Probing for an ov9650 sensor"); ov9650_probe()
164 /* Run the pre-init before probing the sensor */ ov9650_probe()
185 pr_info("Detected an ov9650 sensor\n"); ov9650_probe()
400 sd->sensor = NULL; ov9650_disconnect()
H A Dm5602_ov9650.h2 * Driver for the ov9650 sensor
204 /* One extra reset is needed in order to make the sensor behave
296 /* Put the sensor in soft sleep mode */
/linux-4.1.27/arch/powerpc/platforms/powernv/
H A Dopal-sensor.c2 * PowerNV sensor code
30 * This will return sensor information to driver based on the requested sensor
83 struct device_node *sensor; opal_sensor_init() local
85 sensor = of_find_node_by_path("/ibm,opal/sensors"); opal_sensor_init()
86 if (!sensor) { opal_sensor_init()
91 pdev = of_platform_device_create(sensor, "opal-sensor", NULL); opal_sensor_init()
92 of_node_put(sensor); opal_sensor_init()
/linux-4.1.27/include/linux/i2c/
H A Dds620.h7 /* platform data for the DS620 temperature sensor and thermostat */
H A Dmax6639.h6 /* platform data for the MAX6639 temperature sensor and fan control */
H A Dmpr121_touchkey.h7 * struct mpr121_platform_data - platform data for mpr121 sensor
H A Dapds990x.h2 * This file is part of the APDS990x sensor driver.
3 * Chip is combined proximity and ambient light sensor.
44 * Values depend on the material above the sensor and the sensor
45 * itself. If the GA is zero, driver will use uncovered sensor default values
H A Dbh1770glc.h2 * This file is part of the ROHM BH1770GLC / OSRAM SFH7770 sensor driver.
3 * Chip is combined proximity and ambient light sensor.
H A Dadp8860.h77 #define ADP8860_BL_AMBL_FILT_80ms 0 /* Light sensor filter time */
108 u8 en_ambl_sens; /* 1 = enable ambient light sensor */
109 u8 abml_filt; /* Light sensor filter time */
H A Dadp8870.h74 #define ADP8870_BL_AMBL_FILT_80ms 0 /* Light sensor filter time */
116 u8 en_ambl_sens; /* 1 = enable ambient light sensor */
117 u8 abml_filt; /* Light sensor filter time */
/linux-4.1.27/drivers/gpu/drm/nouveau/nvkm/subdev/therm/
H A Dg84.c61 struct nvbios_therm_sensor *sensor = &priv->bios_sensor; g84_therm_program_alarms() local
64 spin_lock_irqsave(&priv->sensor.alarm_program_lock, flags); g84_therm_program_alarms()
70 nv_wr32(therm, 0x20484, sensor->thrs_shutdown.hysteresis); g84_therm_program_alarms()
71 nv_wr32(therm, 0x20480, sensor->thrs_shutdown.temp); g84_therm_program_alarms()
74 nv_wr32(therm, 0x204c4, sensor->thrs_fan_boost.temp); g84_therm_program_alarms()
77 nv_wr32(therm, 0x204c0, sensor->thrs_critical.temp); g84_therm_program_alarms()
80 nv_wr32(therm, 0x20414, sensor->thrs_down_clock.temp); g84_therm_program_alarms()
81 spin_unlock_irqrestore(&priv->sensor.alarm_program_lock, flags); g84_therm_program_alarms()
85 sensor->thrs_fan_boost.temp, sensor->thrs_fan_boost.hysteresis, g84_therm_program_alarms()
86 sensor->thrs_down_clock.temp, g84_therm_program_alarms()
87 sensor->thrs_down_clock.hysteresis, g84_therm_program_alarms()
88 sensor->thrs_critical.temp, sensor->thrs_critical.hysteresis, g84_therm_program_alarms()
89 sensor->thrs_shutdown.temp, sensor->thrs_shutdown.hysteresis); g84_therm_program_alarms()
142 struct nvbios_therm_sensor *sensor = &priv->bios_sensor; g84_therm_intr() local
146 spin_lock_irqsave(&priv->sensor.alarm_program_lock, flags); g84_therm_intr()
153 &sensor->thrs_down_clock, g84_therm_intr()
161 &sensor->thrs_shutdown, g84_therm_intr()
169 &sensor->thrs_fan_boost, g84_therm_intr()
177 &sensor->thrs_critical, g84_therm_intr()
189 spin_unlock_irqrestore(&priv->sensor.alarm_program_lock, flags); g84_therm_intr()
224 priv->base.sensor.program_alarms = g84_therm_program_alarms; g84_therm_ctor()
H A Dtemp.c67 priv->sensor.alarm_state[thrs] = st; nvkm_therm_sensor_set_threshold_state()
76 return priv->sensor.alarm_state[thrs]; nvkm_therm_sensor_get_threshold_state()
170 container_of(alarm, struct nvkm_therm_priv, sensor.therm_poll_alarm); alarm_timer_callback()
171 struct nvbios_therm_sensor *sensor = &priv->bios_sensor; alarm_timer_callback() local
176 spin_lock_irqsave(&priv->sensor.alarm_program_lock, flags); alarm_timer_callback()
178 nvkm_therm_threshold_hyst_polling(therm, &sensor->thrs_fan_boost, alarm_timer_callback()
181 nvkm_therm_threshold_hyst_polling(therm, &sensor->thrs_down_clock, alarm_timer_callback()
184 nvkm_therm_threshold_hyst_polling(therm, &sensor->thrs_critical, alarm_timer_callback()
187 nvkm_therm_threshold_hyst_polling(therm, &sensor->thrs_shutdown, alarm_timer_callback()
190 spin_unlock_irqrestore(&priv->sensor.alarm_program_lock, flags); alarm_timer_callback()
201 struct nvbios_therm_sensor *sensor = &priv->bios_sensor; nvkm_therm_program_alarms_polling() local
205 sensor->thrs_fan_boost.temp, sensor->thrs_fan_boost.hysteresis, nvkm_therm_program_alarms_polling()
206 sensor->thrs_down_clock.temp, nvkm_therm_program_alarms_polling()
207 sensor->thrs_down_clock.hysteresis, nvkm_therm_program_alarms_polling()
208 sensor->thrs_critical.temp, sensor->thrs_critical.hysteresis, nvkm_therm_program_alarms_polling()
209 sensor->thrs_shutdown.temp, sensor->thrs_shutdown.hysteresis); nvkm_therm_program_alarms_polling()
211 alarm_timer_callback(&priv->sensor.therm_poll_alarm); nvkm_therm_program_alarms_polling()
218 priv->sensor.program_alarms(therm); nvkm_therm_sensor_init()
229 ptimer->alarm_cancel(ptimer, &priv->sensor.therm_poll_alarm); nvkm_therm_sensor_fini()
241 nv_info(therm, "internal sensor: %s\n", sensor_avail); nvkm_therm_sensor_preinit()
250 nvkm_alarm_init(&priv->sensor.therm_poll_alarm, alarm_timer_callback); nvkm_therm_sensor_ctor()
H A Dnv50.c133 struct nvbios_therm_sensor *sensor = &priv->bios_sensor; nv50_temp_get() local
138 /* if the slope or the offset is unset, do no use the sensor */ nv50_temp_get()
139 if (!sensor->slope_div || !sensor->slope_mult || nv50_temp_get()
140 !sensor->offset_num || !sensor->offset_den) nv50_temp_get()
143 core_temp = core_temp * sensor->slope_mult / sensor->slope_div; nv50_temp_get()
144 core_temp = core_temp + sensor->offset_num / sensor->offset_den; nv50_temp_get()
145 core_temp = core_temp + sensor->offset_constant - 8; nv50_temp_get()
173 priv->base.sensor.program_alarms = nvkm_therm_program_alarms_polling; nv50_therm_ctor()
H A Dnv40.c84 struct nvbios_therm_sensor *sensor = &priv->bios_sensor; nv40_temp_get() local
97 /* if the slope or the offset is unset, do no use the sensor */ nv40_temp_get()
98 if (!sensor->slope_div || !sensor->slope_mult || nv40_temp_get()
99 !sensor->offset_num || !sensor->offset_den) nv40_temp_get()
102 core_temp = core_temp * sensor->slope_mult / sensor->slope_div; nv40_temp_get()
103 core_temp = core_temp + sensor->offset_num / sensor->offset_den; nv40_temp_get()
104 core_temp = core_temp + sensor->offset_constant - 8; nv40_temp_get()
201 priv->base.sensor.program_alarms = nvkm_therm_program_alarms_polling; nv40_therm_ctor()
H A Dbase.c177 /* do not allow automatic fan management if the thermal sensor is nvkm_therm_fan_mode()
249 priv->sensor.program_alarms(therm); nvkm_therm_attr_set()
253 priv->sensor.program_alarms(therm); nvkm_therm_attr_set()
257 priv->sensor.program_alarms(therm); nvkm_therm_attr_set()
261 priv->sensor.program_alarms(therm); nvkm_therm_attr_set()
265 priv->sensor.program_alarms(therm); nvkm_therm_attr_set()
269 priv->sensor.program_alarms(therm); nvkm_therm_attr_set()
273 priv->sensor.program_alarms(therm); nvkm_therm_attr_set()
277 priv->sensor.program_alarms(therm); nvkm_therm_attr_set()
338 spin_lock_init(&priv->sensor.alarm_program_lock); nvkm_therm_create_()
H A Dic.c34 struct nvbios_therm_sensor *sensor = &priv->bios_sensor; probe_monitoring_device() local
52 info->type, info->addr, sensor->offset_constant); probe_monitoring_device()
/linux-4.1.27/drivers/gpu/drm/nouveau/nvkm/subdev/bios/
H A Dtherm.c71 struct nvbios_therm_sensor *sensor) nvbios_therm_sensor_parse()
98 sensor->offset_constant = offset; nvbios_therm_sensor_parse()
104 sensor->thrs_critical.temp = (value & 0xff0) >> 4; nvbios_therm_sensor_parse()
105 sensor->thrs_critical.hysteresis = value & 0xf; nvbios_therm_sensor_parse()
111 sensor->thrs_down_clock.temp = (value & 0xff0) >> 4; nvbios_therm_sensor_parse()
112 sensor->thrs_down_clock.hysteresis = value & 0xf; nvbios_therm_sensor_parse()
118 sensor->thrs_fan_boost.temp = (value & 0xff0) >> 4; nvbios_therm_sensor_parse()
119 sensor->thrs_fan_boost.hysteresis = value & 0xf; nvbios_therm_sensor_parse()
125 sensor->offset_num = value; nvbios_therm_sensor_parse()
130 sensor->offset_den = value; nvbios_therm_sensor_parse()
135 sensor->slope_mult = value; nvbios_therm_sensor_parse()
140 sensor->slope_div = value; nvbios_therm_sensor_parse()
144 sensor->thrs_shutdown.temp = (value & 0xff0) >> 4; nvbios_therm_sensor_parse()
145 sensor->thrs_shutdown.hysteresis = value & 0xf; nvbios_therm_sensor_parse()
69 nvbios_therm_sensor_parse(struct nvkm_bios *bios, enum nvbios_therm_domain domain, struct nvbios_therm_sensor *sensor) nvbios_therm_sensor_parse() argument
/linux-4.1.27/drivers/thermal/
H A Ddove_thermal.c2 * Dove thermal sensor driver
47 void __iomem *sensor; member in struct:dove_thermal_priv
72 /* Reset the sensor */ dove_init_sensor()
77 /* Enable the sensor */ dove_init_sensor()
78 reg = readl_relaxed(priv->sensor); dove_init_sensor()
80 writel(reg, priv->sensor); dove_init_sensor()
82 /* Poll the sensor for the first reading */ dove_init_sensor()
84 reg = readl_relaxed(priv->sensor); dove_init_sensor()
105 "Temperature sensor reading not valid\n"); dove_get_temp()
114 reg = readl_relaxed(priv->sensor); dove_get_temp()
142 priv->sensor = devm_ioremap_resource(&pdev->dev, res); dove_thermal_probe()
143 if (IS_ERR(priv->sensor)) dove_thermal_probe()
144 return PTR_ERR(priv->sensor); dove_thermal_probe()
153 dev_err(&pdev->dev, "Failed to initialize sensor\n"); dove_thermal_probe()
H A Dkirkwood_thermal.c2 * Kirkwood thermal sensor driver
32 void __iomem *sensor; member in struct:kirkwood_thermal_priv
41 reg = readl_relaxed(priv->sensor); kirkwood_get_temp()
47 "Temperature sensor reading not valid\n"); kirkwood_get_temp()
83 priv->sensor = devm_ioremap_resource(&pdev->dev, res); kirkwood_thermal_probe()
84 if (IS_ERR(priv->sensor)) kirkwood_thermal_probe()
85 return PTR_ERR(priv->sensor); kirkwood_thermal_probe()
H A Darmada_thermal.c2 * Marvell Armada 370/XP thermal sensor driver
48 void __iomem *sensor; member in struct:armada_thermal_priv
54 /* Initialize the sensor */
58 /* Test for a valid sensor value (optional) */
67 /* Register shift and mask to access the sensor temperature */
87 /* Reset the sensor */ armadaxp_init_sensor()
93 /* Enable the sensor */ armadaxp_init_sensor()
94 reg = readl_relaxed(priv->sensor); armadaxp_init_sensor()
96 writel(reg, priv->sensor); armadaxp_init_sensor()
152 unsigned long reg = readl_relaxed(priv->sensor); armada_is_valid()
167 "Temperature sensor reading not valid\n"); armada_get_temp()
171 reg = readl_relaxed(priv->sensor); armada_get_temp()
272 priv->sensor = devm_ioremap_resource(&pdev->dev, res); armada_thermal_probe()
273 if (IS_ERR(priv->sensor)) armada_thermal_probe()
274 return PTR_ERR(priv->sensor); armada_thermal_probe()
H A Drockchip_thermal.c66 /* Per-sensor methods */
78 #define NUM_SENSORS 2 /* Ignore unused sensor 0 */
219 * assume that the relationship between sensor readings and rk_tsadcv2_code_to_temp()
346 rockchip_thermal_toggle_sensor(struct rockchip_thermal_sensor *sensor, bool on) rockchip_thermal_toggle_sensor() argument
348 struct thermal_zone_device *tzd = sensor->tzd; rockchip_thermal_toggle_sensor()
371 struct rockchip_thermal_sensor *sensor = _sensor; rockchip_thermal_get_temp() local
372 struct rockchip_thermal_data *thermal = sensor->thermal; rockchip_thermal_get_temp()
373 const struct rockchip_tsadc_chip *tsadc = sensor->thermal->chip; rockchip_thermal_get_temp()
376 retval = tsadc->get_temp(sensor->id, thermal->regs, out_temp); rockchip_thermal_get_temp()
377 dev_dbg(&thermal->pdev->dev, "sensor %d - temp: %ld, retval: %d\n", rockchip_thermal_get_temp()
378 sensor->id, *out_temp, retval); rockchip_thermal_get_temp()
447 struct rockchip_thermal_sensor *sensor, rockchip_thermal_register_sensor()
456 sensor->thermal = thermal; rockchip_thermal_register_sensor()
457 sensor->id = id; rockchip_thermal_register_sensor()
458 sensor->tzd = thermal_zone_of_sensor_register(&pdev->dev, id, sensor, rockchip_thermal_register_sensor()
460 if (IS_ERR(sensor->tzd)) { rockchip_thermal_register_sensor()
461 error = PTR_ERR(sensor->tzd); rockchip_thermal_register_sensor()
462 dev_err(&pdev->dev, "failed to register sensor %d: %d\n", rockchip_thermal_register_sensor()
567 "failed to register CPU thermal sensor: %d\n", error); rockchip_thermal_probe()
576 "failed to register GPU thermal sensor: %d\n", error); rockchip_thermal_probe()
617 struct rockchip_thermal_sensor *sensor = &thermal->sensors[i]; rockchip_thermal_remove() local
619 rockchip_thermal_toggle_sensor(sensor, false); rockchip_thermal_remove()
620 thermal_zone_of_sensor_unregister(&pdev->dev, sensor->tzd); rockchip_thermal_remove()
445 rockchip_thermal_register_sensor(struct platform_device *pdev, struct rockchip_thermal_data *thermal, struct rockchip_thermal_sensor *sensor, enum sensor_id id) rockchip_thermal_register_sensor() argument
H A Dtegra_soctherm.c217 calculate_tsensor_calibration(const struct tegra_tsensor *sensor, calculate_tsensor_calibration() argument
228 err = tegra_fuse_readl(sensor->calib_fuse_offset, &val); calculate_tsensor_calibration()
240 mult = sensor->config->pdiv * sensor->config->tsample_ate; calculate_tsensor_calibration()
241 div = sensor->config->tsample * sensor->config->pdiv_ate; calculate_tsensor_calibration()
250 therma = div64_s64_precise((s64)therma * sensor->fuse_corr_alpha, calculate_tsensor_calibration()
252 thermb = div64_s64_precise((s64)thermb * sensor->fuse_corr_alpha + calculate_tsensor_calibration()
253 sensor->fuse_corr_beta, (s64)1000000LL); calculate_tsensor_calibration()
262 const struct tegra_tsensor *sensor, enable_tsensor()
265 void __iomem *base = tegra->regs + sensor->base; enable_tsensor()
270 err = calculate_tsensor_calibration(sensor, shared, &calib); enable_tsensor()
274 val = sensor->config->tall << SENSOR_CONFIG0_TALL_SHIFT; enable_tsensor()
277 val = (sensor->config->tsample - 1) << SENSOR_CONFIG1_TSAMPLE_SHIFT; enable_tsensor()
278 val |= sensor->config->tiddq_en << SENSOR_CONFIG1_TIDDQ_EN_SHIFT; enable_tsensor()
279 val |= sensor->config->ten_count << SENSOR_CONFIG1_TEN_COUNT_SHIFT; enable_tsensor()
426 dev_err(&pdev->dev, "failed to register sensor: %d\n", tegra_soctherm_probe()
261 enable_tsensor(struct tegra_soctherm *tegra, const struct tegra_tsensor *sensor, const struct tsensor_shared_calibration *shared) enable_tsensor() argument
H A Dimx_thermal.c151 * temperature sensor, enable measurements, take a reading, imx_get_temp()
152 * disable measurements, power off the temperature sensor. imx_get_temp()
161 * According to the temp sensor designers, it may require up to ~17us imx_get_temp()
361 dev_err(&pdev->dev, "failed to get sensor regmap: %d\n", ret); imx_get_sensor_data()
367 dev_err(&pdev->dev, "failed to read sensor data: %d\n", ret); imx_get_sensor_data()
372 dev_err(&pdev->dev, "invalid sensor calibration data\n"); imx_get_sensor_data()
378 * [31:20] - sensor value @ 25C imx_get_sensor_data()
379 * Use universal formula now and only need sensor value @ 25C imx_get_sensor_data()
502 dev_err(&pdev->dev, "failed to get sensor data\n"); imx_thermal_probe()
506 /* Make sure sensor is in known good state for measurements */ imx_thermal_probe()
534 * Thermal sensor needs clk on to get correct value, normally imx_thermal_probe()
603 * Need to disable thermal sensor, otherwise, when thermal core imx_thermal_suspend()
604 * try to get temperature before thermal sensor resume, a wrong imx_thermal_suspend()
605 * temperature will be read as the thermal sensor is powered imx_thermal_suspend()
622 /* Enabled thermal sensor after resume */ imx_thermal_resume()
H A Dof-thermal.c65 * @sensor_data: sensor private data used while reading temperature and trend
82 /* sensor interface */
392 /*** sensor API ***/
396 struct device_node *sensor, void *data, thermal_zone_of_add_sensor()
424 * thermal_zone_of_sensor_register - registers a sensor to a DT thermal zone
425 * @dev: a valid struct device pointer of a sensor device. Must contain
426 * a valid .of_node, for the sensor node.
427 * @sensor_id: a sensor identifier, in case the sensor IP has more
434 * tree and look for the zone that refer to the sensor device pointed by
436 * sensor node, the sensor will be added to the DT thermal zone device.
445 * 01 - This function must enqueue the new sensor instead of using
448 * 02 - There must be a way to match the sensor with all thermal zones
481 /* For now, thermal framework supports only 1 sensor per zone */ for_each_child_of_node()
483 "#thermal-sensor-cells", for_each_child_of_node()
491 "%s: too many cells in sensor specifier %d\n", for_each_child_of_node()
518 * thermal_zone_of_sensor_unregister - unregisters a sensor from a DT thermal zone
519 * @dev: a valid struct device pointer of a sensor device. Must contain
520 * a valid .of_node, for the sensor node.
521 * @tzd: a pointer to struct thermal_zone_device where the sensor is registered.
523 * This function removes the sensor callbacks and private data from the
529 * function must search the sensor list based on @dev parameter.
718 * TODO: Missing properties to parse: thermal-sensor-names and coefficients
847 * Cooling devices and sensor devices nodes are supposed to be parsed
395 thermal_zone_of_add_sensor(struct device_node *zone, struct device_node *sensor, void *data, const struct thermal_zone_of_device_ops *ops) thermal_zone_of_add_sensor() argument
H A Dspear_thermal.c32 /* pointer to base address of the thermal sensor */
119 /* Enable thermal sensor */ spear_thermal_probe()
H A Drcar_thermal.c2 * R-Car THS/TSC thermal sensor driver
178 dev_err(dev, "thermal sensor was broken\n"); rcar_thermal_update_temp()
460 dev_info(dev, "%d sensor probed\n", i); rcar_thermal_probe()
512 MODULE_DESCRIPTION("R-Car THS/TSC thermal sensor driver");
/linux-4.1.27/drivers/hwmon/
H A Dabx500.h39 * @min: sensor temperature min value
40 * @max: sensor temperature max value
41 * @max_hyst: sensor temperature hysteresis value for max limit
42 * @min_alarm: sensor temperature min alarm
43 * @max_alarm: sensor temperature max alarm
H A Dasus_atk0110.c35 /* Old interface reads the same sensor for fan0 and fan1 */
190 static int atk_read_value(struct atk_sensor_data *sensor, u64 *value);
323 * sensor id |
324 * sensor id - used for de-muxing the request _inside_ the GITn
455 static int atk_read_value_old(struct atk_sensor_data *sensor, u64 *value) atk_read_value_old() argument
457 struct atk_data *data = sensor->data; atk_read_value_old()
464 switch (sensor->type) { atk_read_value_old()
479 id.integer.value = sensor->id; atk_read_value_old()
608 static int atk_read_value_new(struct atk_sensor_data *sensor, u64 *value) atk_read_value_new() argument
610 struct atk_data *data = sensor->data; atk_read_value_new()
616 obj = atk_gitm(data, sensor->id); atk_read_value_new()
624 * - sensor failure atk_read_value_new()
627 dev_warn(dev, "Read failed, sensor = %#llx\n", sensor->id); atk_read_value_new()
638 static int atk_read_value(struct atk_sensor_data *sensor, u64 *value) atk_read_value() argument
642 if (!sensor->is_valid || atk_read_value()
643 time_after(jiffies, sensor->last_updated + CACHE_TIME)) { atk_read_value()
644 if (sensor->data->old_interface) atk_read_value()
645 err = atk_read_value_old(sensor, value); atk_read_value()
647 err = atk_read_value_new(sensor, value); atk_read_value()
649 sensor->is_valid = true; atk_read_value()
650 sensor->last_updated = jiffies; atk_read_value()
651 sensor->cached_value = *value; atk_read_value()
653 *value = sensor->cached_value; atk_read_value()
851 struct atk_sensor_data *sensor; atk_add_sensor() local
898 dev_warn(dev, "Unknown sensor type: %#llx\n", type); atk_add_sensor()
904 /* sensor is disabled */ atk_add_sensor()
912 sensor = kzalloc(sizeof(*sensor), GFP_KERNEL); atk_add_sensor()
913 if (!sensor) atk_add_sensor()
916 sensor->acpi_name = kstrdup(name->string.pointer, GFP_KERNEL); atk_add_sensor()
917 if (!sensor->acpi_name) { atk_add_sensor()
922 INIT_LIST_HEAD(&sensor->list); atk_add_sensor()
923 sensor->type = type; atk_add_sensor()
924 sensor->data = data; atk_add_sensor()
925 sensor->id = flags->integer.value; atk_add_sensor()
926 sensor->limit1 = limit1->integer.value; atk_add_sensor()
928 sensor->limit2 = limit2->integer.value; atk_add_sensor()
931 sensor->limit2 = sensor->limit1 + limit2->integer.value; atk_add_sensor()
933 snprintf(sensor->input_attr_name, ATTR_NAME_SIZE, atk_add_sensor()
935 atk_init_attribute(&sensor->input_attr, atk_add_sensor()
936 sensor->input_attr_name, atk_add_sensor()
939 snprintf(sensor->label_attr_name, ATTR_NAME_SIZE, atk_add_sensor()
941 atk_init_attribute(&sensor->label_attr, atk_add_sensor()
942 sensor->label_attr_name, atk_add_sensor()
945 snprintf(sensor->limit1_attr_name, ATTR_NAME_SIZE, atk_add_sensor()
947 atk_init_attribute(&sensor->limit1_attr, atk_add_sensor()
948 sensor->limit1_attr_name, atk_add_sensor()
951 snprintf(sensor->limit2_attr_name, ATTR_NAME_SIZE, atk_add_sensor()
953 atk_init_attribute(&sensor->limit2_attr, atk_add_sensor()
954 sensor->limit2_attr_name, atk_add_sensor()
957 list_add(&sensor->list, &data->sensor_list); atk_add_sensor()
962 kfree(sensor); atk_add_sensor()
1392 "No usable sensor detected, bailing out\n"); atk_add()
H A Dibmpowernv.c65 {"fan", "ibm,opal-sensor-cooling-fan"},
66 {"temp", "ibm,opal-sensor-amb-temp"},
67 {"in", "ibm,opal-sensor-power-supply"},
68 {"power", "ibm,opal-sensor-power"}
72 u32 id; /* An opaque id of the firmware for each sensor */
252 if (!of_device_is_compatible(np, "ibm,opal-sensor")) get_sensor_type()
255 if (of_property_read_string(np, "sensor-type", &str)) get_sensor_type()
380 * Newer device trees use a "sensor-data" property for_each_child_of_node()
383 if (of_property_read_u32(np, "sensor-id", &sensor_id) && for_each_child_of_node()
384 of_property_read_u32(np, "sensor-data", &sensor_id)) { for_each_child_of_node()
386 "'sensor-id' missing in the node '%s'\n", for_each_child_of_node()
420 * sensor. for_each_child_of_node()
456 /* Create sysfs attribute data for each sensor found in the DT */ ibmpowernv_probe()
471 .name = "opal-sensor",
H A Dibmpex.c162 "Found BMC with sensor interface v%d.%d %d-%02d-%02d on interface %d\n", ibmpex_ver_check()
187 static int ibmpex_query_sensor_name(struct ibmpex_bmc_data *data, int sensor) ibmpex_query_sensor_name() argument
190 data->tx_msg_data[1] = sensor; ibmpex_query_sensor_name()
202 static int ibmpex_query_sensor_data(struct ibmpex_bmc_data *data, int sensor) ibmpex_query_sensor_data() argument
205 data->tx_msg_data[1] = sensor; ibmpex_query_sensor_data()
212 dev_err(data->bmc_device, "Error reading sensor %d.\n", ibmpex_query_sensor_data()
213 sensor); ibmpex_query_sensor_data()
343 int counter, int sensor, int func) create_sensor()
359 sysfs_attr_init(&data->sensors[sensor].attr[func].dev_attr.attr); create_sensor()
360 data->sensors[sensor].attr[func].dev_attr.attr.name = n; create_sensor()
361 data->sensors[sensor].attr[func].dev_attr.attr.mode = S_IRUGO; create_sensor()
362 data->sensors[sensor].attr[func].dev_attr.show = ibmpex_show_sensor; create_sensor()
363 data->sensors[sensor].attr[func].index = sensor; create_sensor()
364 data->sensors[sensor].attr[func].nr = func; create_sensor()
367 &data->sensors[sensor].attr[func].dev_attr); create_sensor()
369 data->sensors[sensor].attr[func].dev_attr.attr.name = NULL; create_sensor()
605 MODULE_DESCRIPTION("IBM PowerExecutive power/temperature sensor driver");
342 create_sensor(struct ibmpex_bmc_data *data, int type, int counter, int sensor, int func) create_sensor() argument
H A Dk8temp.c48 u8 sensorsp; /* sensor presence bits - SEL_CORE, SEL_PLACE */
65 tmp &= ~(SEL_PLACE | SEL_CORE); /* Select sensor 0, core0 */ k8temp_update_device()
70 tmp |= SEL_PLACE; /* Select sensor 1, core0 */ k8temp_update_device()
77 tmp &= ~SEL_PLACE; /* Select sensor 0, core1 */ k8temp_update_device()
84 tmp |= SEL_PLACE; /* Select sensor 1, core1 */ k8temp_update_device()
216 scfg &= ~(SEL_PLACE | SEL_CORE); /* Select sensor 0, core0 */ k8temp_probe()
228 /* now we know if we can change core and/or sensor */ k8temp_probe()
232 scfg &= ~SEL_CORE; /* Select sensor 1, core0 */ k8temp_probe()
241 scfg &= ~SEL_PLACE; /* Select sensor 0, core1 */ k8temp_probe()
258 /* sensor can be changed and reports something */ k8temp_probe()
H A Dabituguru.c19 * This driver supports the sensor part of the first and second revision of
45 /* max nr of sensors in bank1, a bank1 sensor can be in, temp or nc */
55 /* uGuru sensor bank 1 flags */ /* Alarm if: */
62 /* uGuru sensor bank 2 flags */ /* Alarm if: */
64 /* uGuru sensor bank common flags */
71 /* Bank1 sensor types */
183 " 0 volt sensor\n"
184 " 1 temp sensor\n"
224 * of a sensor is a volt or a temp sensor, for bank2 and the pwms its
226 * sysfs entries per sensor, for bank2 and pwms 6.
240 * This array holds 3 entries per sensor for the bank 1 sensor settings
245 * Maximum value for each sensor used for scaling in mV/millidegrees
335 * Send the bank and then sensor address to the uGuru for the next read/write
361 * and send the sensor addr abituguru_send_address()
385 * Read count bytes from sensor sensor_addr in bank bank_addr and store the
403 "read state (bank: %d, sensor: %d)\n", abituguru_read()
417 * Write count bytes from buf to sensor sensor_addr in bank bank_addr, the send
439 "write state (bank: %d, sensor: %d)\n", abituguru_write()
453 "after write (bank: %d, sensor: %d)\n", (int)bank_addr, abituguru_write()
463 "write (bank: %d, sensor: %d)\n", abituguru_write()
477 * Detect sensor type. Temp and Volt sensors are enabled with
479 * This enables us to test what kind of sensor we're dealing with.
481 * alarm for sensor type X and then enabling the sensor as sensor type
482 * X, if we then get an alarm it is a sensor of type X.
494 ABIT_UGURU_DEBUG(2, "assuming sensor type %d for bank1 sensor " abituguru_detect_bank1_sensor_type()
500 /* First read the sensor and the current settings */ abituguru_detect_bank1_sensor_type()
505 /* Test val is sane / usable for sensor type detection. */ abituguru_detect_bank1_sensor_type()
507 pr_warn("bank1-sensor: %d reading (%d) too close to limits, " abituguru_detect_bank1_sensor_type()
508 "unable to determine sensor type, skipping sensor\n", abituguru_detect_bank1_sensor_type()
511 * assume no sensor is there for sensors for which we can't abituguru_detect_bank1_sensor_type()
512 * determine the sensor type because their reading is too close abituguru_detect_bank1_sensor_type()
513 * to their limits, this usually means no sensor is there. abituguru_detect_bank1_sensor_type()
518 ABIT_UGURU_DEBUG(2, "testing bank1 sensor %d\n", (int)sensor_addr); abituguru_detect_bank1_sensor_type()
520 * Volt sensor test, enable volt low alarm, set min value ridiculously abituguru_detect_bank1_sensor_type()
522 * sensor this should always give us an alarm. abituguru_detect_bank1_sensor_type()
555 ABIT_UGURU_DEBUG(2, " found volt sensor\n"); abituguru_detect_bank1_sensor_type()
560 "sensor test, but volt range flag not set\n"); abituguru_detect_bank1_sensor_type()
562 ABIT_UGURU_DEBUG(2, " alarm not raised during volt sensor " abituguru_detect_bank1_sensor_type()
566 * Temp sensor test, enable sensor as a temp sensor, set beep value abituguru_detect_bank1_sensor_type()
568 * If its a temp sensor this should always give us an alarm. abituguru_detect_bank1_sensor_type()
592 ABIT_UGURU_DEBUG(2, " found temp sensor\n"); abituguru_detect_bank1_sensor_type()
597 "sensor test, but temp high flag not set\n"); abituguru_detect_bank1_sensor_type()
599 ABIT_UGURU_DEBUG(2, " alarm not raised during temp sensor " abituguru_detect_bank1_sensor_type()
665 ABIT_UGURU_DEBUG(2, " bank2 sensor %d does not seem " abituguru_detect_no_bank2_sensors()
666 "to be a fan sensor: settings[0] = %02X\n", abituguru_detect_no_bank2_sensors()
674 ABIT_UGURU_DEBUG(2, " bank2 sensor %d does not seem " abituguru_detect_no_bank2_sensors()
675 "to be a fan sensor: the threshold (%d) is " abituguru_detect_no_bank2_sensors()
683 ABIT_UGURU_DEBUG(2, " bank2 sensor %d does not seem " abituguru_detect_no_bank2_sensors()
684 "to be a fan sensor: the threshold (%d) is " abituguru_detect_no_bank2_sensors()
713 * nibble is which temp sensor to use, abituguru_detect_no_pwms()
736 "sensor address\n", i, abituguru_detect_no_pwms()
795 * sensor_device_attribute_2->index: sensor address/offset in the bank
918 * See if the alarm bit for this sensor is set, and if the show_bank1_alarm()
921 * readonly bits in the settings part of the relevant sensor. show_bank1_alarm()
1099 * We need to walk to the temp sensor addresses to find what show_pwm_sensor()
1100 * the userspace id of the configured temp sensor is. show_pwm_sensor()
1341 /* Detect sensor types and fill the sysfs attr for bank1 */ abituguru_probe()
H A Dhih6130.c1 /* Honeywell HIH-6130/HIH-6131 humidity and temperature sensor driver
61 * @ticks: temperature ticks value received from sensor
76 * @ticks: humidity ticks value received from sensor
113 * While the measurement can be completed in ~40ms the sensor takes hih6130_update_measurements()
118 * We therefore choose to only read the sensor at most once per second. hih6130_update_measurements()
119 * This trades off pointless activity polling the sensor much faster hih6130_update_measurements()
129 * length packets we write one dummy byte to allow sensor hih6130_update_measurements()
266 MODULE_DESCRIPTION("Honeywell HIH-6130 humidity and temperature sensor driver");
H A Dab8500.c80 static int ab8500_read_sensor(struct abx500_temp *data, u8 sensor, int *temp) ab8500_read_sensor() argument
85 if (sensor == BAT_CTRL) { ab8500_read_sensor()
87 } else if (sensor == BTEMP_BALL) { ab8500_read_sensor()
90 voltage = ab8500_gpadc_convert(ab8500_data->gpadc, sensor); ab8500_read_sensor()
H A Dsht21.c1 /* Sensirion SHT21 humidity and temperature sensor driver
20 * http://www.sensirion.com/en/pdf/product_information/Datasheet-humidity-sensor-SHT21.pdf
59 * @ticks: temperature ticks value received from sensor
74 * @ticks: humidity ticks value received from sensor
225 MODULE_DESCRIPTION("Sensirion SHT21 humidity and temperature sensor driver");
H A Dabituguru3.c22 * This driver supports the sensor part of revision 3 of the custom Abit uGuru
50 /* uGuru3 sensor bank flags */ /* Alarm if: */
60 /* sensor types */
148 /* + 1 -> end of sensors indicated by a sensor with name == NULL */
166 * automatically. We have max 10 entries per sensor (for in sensors)
183 /* Alarms for all 48 sensors (1 bit per sensor) */
747 * Read count bytes from sensor sensor_addr in bank bank_addr and store the
844 const struct abituguru3_sensor_info *sensor; show_value() local
849 sensor = &data->sensors[attr->index]; show_value()
853 value = data->settings[sensor->port][attr->nr]; show_value()
855 value = data->value[sensor->port]; show_value()
858 value = (value * sensor->multiplier) / sensor->divisor + show_value()
859 sensor->offset; show_value()
865 if (sensor->type == ABIT_UGURU3_TEMP_SENSOR) show_value()
884 * See if the alarm bit for this sensor is set and if a bitmask is show_alarm()
887 * is stored in a few readonly bits in the settings of the sensor. show_alarm()
1106 /* Read in and temp sensors (3 byte settings / sensor) */ abituguru3_update_device()
1119 /* Read temp sensors (2 byte settings / sensor) */ abituguru3_update_device()
H A Dtmp103.c2 * Texas Instruments TMP103 SMBus temperature sensor driver
6 * Texas Instruments TMP102 SMBus temperature sensor driver
198 MODULE_DESCRIPTION("Texas Instruments TMP103 temperature sensor driver");
H A Di5500_temp.c2 * i5500_temp - Driver for Intel 5500/5520/X58 chipset thermal sensor
148 MODULE_DESCRIPTION("Intel 5500/5520/X58 chipset thermal sensor driver");
H A Dad7314.c2 * AD7314 digital temperature sensor driver for AD7314, ADT7301 and ADT7302
170 MODULE_DESCRIPTION("Analog Devices AD7314, ADT7301 and ADT7302 digital temperature sensor driver");
H A Dadt7410.c2 * ADT7410/ADT7420 digital temperature sensor driver
H A Dhtu21.c2 * Measurement Specialties HTU21D humidity and temperature sensor driver
173 MODULE_DESCRIPTION("MEAS HTU21D humidity and temperature sensor driver");
H A Dadt7310.c2 * ADT7310/ADT7310 digital temperature sensor driver
H A Dk10temp.c160 * Erratum 319: The thermal sensor of Socket F/AM2+ processors has_erratum_319()
196 "unreliable CPU thermal sensor; monitoring disabled\n"); k10temp_probe()
200 "unreliable CPU thermal sensor; check erratum 319\n"); k10temp_probe()
/linux-4.1.27/drivers/media/platform/exynos4-is/
H A Dfimc-is-sensor.h37 /* sensor open timeout in ms */
42 * struct fimc_is_sensor - fimc-is sensor data structure
43 * @drvdata: a pointer to the sensor's parameters data structure
H A Dmedia-dev.h57 * source entity (e.g. an image sensor subdevice), a data capture entity
82 * @pdata: sensor's atrributes passed as media device's platform data
84 * @subdev: image sensor v4l2 subdev
85 * @host: fimc device the sensor is currently linked to
87 * This data structure applies to image sensor and the writeback subdevs.
105 * @sensor: array of registered sensor subdevs
107 * @camclk: external sensor clock information
120 * @slock: spinlock protecting @sensor array
124 struct fimc_sensor_info sensor[FIMC_MAX_SENSORS]; member in struct:fimc_md
H A Dmedia-dev.c42 /* Set up image sensor subdev -> FIMC capture node notifications. */ __setup_sensor_notification()
44 struct v4l2_subdev *sensor, __setup_sensor_notification()
51 src_inf = v4l2_get_subdev_hostdata(sensor); __setup_sensor_notification()
72 struct v4l2_subdev *sensor = NULL; fimc_pipeline_prepare() local
98 sensor = sd; fimc_pipeline_prepare()
123 if (sensor && p->subdevs[IDX_FIMC]) fimc_pipeline_prepare()
124 __setup_sensor_notification(fmd, sensor, p->subdevs[IDX_FIMC]); fimc_pipeline_prepare()
191 * of all pipeline subdevs and the sensor clock
233 * __fimc_pipeline_close - disable the sensor clock and pipeline power
236 * Disable power of all subdevs and turn the external sensor clock off.
246 pr_warn("%s(): No sensor subdev\n", __func__); __fimc_pipeline_close()
328 /* Parse port node and register as a sub-device any sensor specified there. */ fimc_md_parse_port_node()
333 struct fimc_source_info *pd = &fmd->sensor[index].pdata; fimc_md_parse_port_node()
365 * the sensor's clock frequency is needed. fimc_md_parse_port_node()
387 if (WARN_ON(index >= ARRAY_SIZE(fmd->sensor))) fimc_md_parse_port_node()
390 fmd->sensor[index].asd.match_type = V4L2_ASYNC_MATCH_OF; fimc_md_parse_port_node()
391 fmd->sensor[index].asd.match.of.node = rem; fimc_md_parse_port_node()
392 fmd->async_subdevs[index] = &fmd->sensor[index].asd; fimc_md_parse_port_node()
698 * @sensor: sensor subdev linked to FIMC[fimc_id] entity, may be null
704 struct v4l2_subdev *sensor, __fimc_md_create_fimc_sink_links()
712 if (sensor) { __fimc_md_create_fimc_sink_links()
713 si = v4l2_get_subdev_hostdata(sensor); __fimc_md_create_fimc_sink_links()
714 /* Skip direct FIMC links in the logical FIMC-IS sensor path */ __fimc_md_create_fimc_sink_links()
724 * interface. Skip creating a link from sensor for those. __fimc_md_create_fimc_sink_links()
834 * Parallel interface sensor entities are connected directly to FIMC capture
838 * are created by default between each subsequent registered sensor and
846 struct v4l2_subdev *sensor, *csis; fimc_md_create_links() local
853 if (fmd->sensor[i].subdev == NULL) fimc_md_create_links()
856 sensor = fmd->sensor[i].subdev; fimc_md_create_links()
857 pdata = v4l2_get_subdev_hostdata(sensor); fimc_md_create_links()
875 pad = sensor->entity.num_pads - 1; fimc_md_create_links()
876 ret = media_entity_create_link(&sensor->entity, pad, fimc_md_create_links()
884 sensor->entity.name, csis->entity.name); fimc_md_create_links()
887 csi_sensors[pdata->mux_id] = sensor; fimc_md_create_links()
891 source = &sensor->entity; fimc_md_create_links()
904 ret = __fimc_md_create_fimc_sink_links(fmd, source, sensor, fimc_md_create_links()
914 sensor = csi_sensors[i]; fimc_md_create_links()
917 ret = __fimc_md_create_fimc_sink_links(fmd, source, sensor, fimc_md_create_links()
947 * The peripheral sensor and CAM_BLK (PIXELASYNCMx) clocks management.
1278 /* Find platform data for this sensor subdev */ subdev_notifier_bound()
1279 for (i = 0; i < ARRAY_SIZE(fmd->sensor); i++) subdev_notifier_bound()
1280 if (fmd->sensor[i].asd.match.of.node == subdev->dev->of_node) subdev_notifier_bound()
1281 si = &fmd->sensor[i]; subdev_notifier_bound()
1295 v4l2_info(&fmd->v4l2_dev, "Registered sensor subdevice: %s (%d)\n", subdev_notifier_bound()
43 __setup_sensor_notification(struct fimc_md *fmd, struct v4l2_subdev *sensor, struct v4l2_subdev *fimc_sd) __setup_sensor_notification() argument
702 __fimc_md_create_fimc_sink_links(struct fimc_md *fmd, struct media_entity *source, struct v4l2_subdev *sensor, int pad, int link_mask) __fimc_md_create_fimc_sink_links() argument
H A DMakefile6 exynos-fimc-is-objs := fimc-is.o fimc-isp.o fimc-is-sensor.o fimc-is-regs.o
H A Dfimc-is-sensor.c12 #include "fimc-is-sensor.h"
H A Dfimc-capture.c509 * any controls inherited from the sensor subdev. fimc_capture_open()
811 * host and sensor does not exist. fimc_pipeline_try_format()
867 * fimc_get_sensor_frame_desc - query the sensor for media bus frame parameters
868 * @sensor: pointer to the sensor subdev
874 static int fimc_get_sensor_frame_desc(struct v4l2_subdev *sensor, fimc_get_sensor_frame_desc() argument
885 pad = sensor->entity.num_pads - 1; fimc_get_sensor_frame_desc()
887 ret = v4l2_subdev_call(sensor, pad, set_frame_desc, pad, &fd); fimc_get_sensor_frame_desc()
889 ret = v4l2_subdev_call(sensor, pad, get_frame_desc, pad, &fd); fimc_get_sensor_frame_desc()
901 v4l2_err(sensor->v4l2_dev, "Unsupported buffer size: %u\n", fimc_get_sensor_frame_desc()
963 /* Try to match format at the host and the sensor */ __video_try_or_set_format()
988 struct v4l2_subdev *sensor; __video_try_or_set_format() local
992 sensor = __fimc_md_get_subdev(ve->pipe, IDX_SENSOR); __video_try_or_set_format()
993 if (sensor) __video_try_or_set_format()
994 fimc_get_sensor_frame_desc(sensor, pix->plane_fmt, __video_try_or_set_format()
1222 * sensor or other data source, e.g. FIMC-IS. fimc_cap_streamon()
1398 struct v4l2_subdev *sensor; fimc_link_setup() local
1423 /* Inherit V4L2 controls from the image sensor subdev. */ fimc_link_setup()
1424 sensor = fimc_find_remote_sensor(&vc->subdev.entity); fimc_link_setup()
1425 if (sensor == NULL) fimc_link_setup()
1429 sensor->ctrl_handler, NULL); fimc_link_setup()
1437 * fimc_sensor_notify - v4l2_device notification from a sensor subdev
1442 * The End Of Frame notification sent by sensor subdev in its still capture
1443 * mode. If there is only a single VSYNC generated by the sensor at the
1719 /* Set default format at the sensor and host interface */ fimc_capture_set_default_format()
H A Dfimc-is.c167 struct fimc_is_sensor *sensor = &is->sensor[index]; fimc_is_parse_sensor_config() local
171 sensor->drvdata = fimc_is_sensor_get_drvdata(node); fimc_is_parse_sensor_config()
172 if (!sensor->drvdata) { fimc_is_parse_sensor_config()
194 sensor->i2c_bus = tmp - FIMC_INPUT_MIPI_CSI2_0; fimc_is_parse_sensor_config()
618 struct fimc_is_sensor *sensor) fimc_is_hw_open_sensor()
636 mcuctl_write(sensor->drvdata->id, is, MCUCTL_REG_ISSR(2)); fimc_is_hw_open_sensor()
637 mcuctl_write(sensor->i2c_bus, is, MCUCTL_REG_ISSR(3)); fimc_is_hw_open_sensor()
643 sensor->drvdata->open_timeout); fimc_is_hw_open_sensor()
657 /* Sensor initialization. Only one sensor is currently supported. */ fimc_is_hw_initialize()
658 ret = fimc_is_hw_open_sensor(is, &is->sensor[0]); fimc_is_hw_initialize()
617 fimc_is_hw_open_sensor(struct fimc_is *is, struct fimc_is_sensor *sensor) fimc_is_hw_open_sensor() argument
H A Dfimc-is-param.c34 #include "fimc-is-sensor.h"
54 dst = &is->is_p_region->parameter.sensor.frame_rate; __fimc_is_hw_update_param_sensor_framerate()
55 src = &is->config[is->config_index].sensor.frame_rate; __fimc_is_hw_update_param_sensor_framerate()
258 switch (is->sensor->drvdata->id) { fimc_is_hw_get_sensor_max_framerate()
269 struct sensor_param *sensor; __is_set_sensor() local
272 sensor = &is->config[index].sensor; __is_set_sensor()
276 sensor->frame_rate.frame_rate = __is_set_sensor()
281 sensor->frame_rate.frame_rate = fps; __is_set_sensor()
699 if (is->sensor->test_pattern) fimc_is_set_initial_params()
H A Dfimc-is-regs.c18 #include "fimc-is-sensor.h"
124 pr_debug("setting sensor index to: %d\n", is->sensor_index); fimc_is_hw_set_sensor_num()
H A Dfimc-is.h30 #include "fimc-is-sensor.h"
223 struct sensor_param sensor; member in struct:chain_config
256 struct fimc_is_sensor sensor[FIMC_IS_SENSORS_NUM]; member in struct:fimc_is
H A Dfimc-lite.h120 * @sensor: sensor subdev attached to FIMC-LITE directly or through MIPI-CSIS
155 struct v4l2_subdev *sensor; member in struct:fimc_lite
/linux-4.1.27/drivers/hwmon/pmbus/
H A Dpmbus_core.c60 char name[PMBUS_NAME_SIZE]; /* sysfs sensor name */
64 enum pmbus_sensor_classes class; /* sensor class */
65 bool update; /* runtime sensor update needed */
389 struct pmbus_sensor *sensor; pmbus_update_device() local
420 for (sensor = data->sensors; sensor; sensor = sensor->next) { pmbus_update_device()
421 if (!data->valid || sensor->update) pmbus_update_device()
422 sensor->data pmbus_update_device()
424 sensor->page, pmbus_update_device()
425 sensor->reg); pmbus_update_device()
436 * Convert linear sensor values to milli- or micro-units
437 * depending on sensor type.
440 struct pmbus_sensor *sensor) pmbus_reg2data_linear()
446 if (sensor->class == PSC_VOLTAGE_OUT) { /* LINEAR16 */ pmbus_reg2data_linear()
447 exponent = data->exponent[sensor->page]; pmbus_reg2data_linear()
448 mantissa = (u16) sensor->data; pmbus_reg2data_linear()
450 exponent = ((s16)sensor->data) >> 11; pmbus_reg2data_linear()
451 mantissa = ((s16)((sensor->data & 0x7ff) << 5)) >> 5; pmbus_reg2data_linear()
457 if (sensor->class != PSC_FAN) pmbus_reg2data_linear()
461 if (sensor->class == PSC_POWER) pmbus_reg2data_linear()
473 * Convert direct sensor values to milli- or micro-units
474 * depending on sensor type.
477 struct pmbus_sensor *sensor) pmbus_reg2data_direct()
479 long val = (s16) sensor->data; pmbus_reg2data_direct()
482 m = data->info->m[sensor->class]; pmbus_reg2data_direct()
483 b = data->info->b[sensor->class]; pmbus_reg2data_direct()
484 R = data->info->R[sensor->class]; pmbus_reg2data_direct()
492 if (sensor->class != PSC_FAN) { pmbus_reg2data_direct()
498 if (sensor->class == PSC_POWER) { pmbus_reg2data_direct()
516 * Convert VID sensor values to milli- or micro-units
517 * depending on sensor type.
521 struct pmbus_sensor *sensor) pmbus_reg2data_vid()
523 long val = sensor->data; pmbus_reg2data_vid()
530 static long pmbus_reg2data(struct pmbus_data *data, struct pmbus_sensor *sensor) pmbus_reg2data() argument
534 switch (data->info->format[sensor->class]) { pmbus_reg2data()
536 val = pmbus_reg2data_direct(data, sensor); pmbus_reg2data()
539 val = pmbus_reg2data_vid(data, sensor); pmbus_reg2data()
543 val = pmbus_reg2data_linear(data, sensor); pmbus_reg2data()
553 struct pmbus_sensor *sensor, long val) pmbus_data2reg_linear()
562 if (sensor->class == PSC_VOLTAGE_OUT) { pmbus_data2reg_linear()
571 if (data->exponent[sensor->page] < 0) pmbus_data2reg_linear()
572 val <<= -data->exponent[sensor->page]; pmbus_data2reg_linear()
574 val >>= data->exponent[sensor->page]; pmbus_data2reg_linear()
585 if (sensor->class == PSC_POWER) pmbus_data2reg_linear()
592 if (sensor->class == PSC_FAN) pmbus_data2reg_linear()
622 struct pmbus_sensor *sensor, long val) pmbus_data2reg_direct()
626 m = data->info->m[sensor->class]; pmbus_data2reg_direct()
627 b = data->info->b[sensor->class]; pmbus_data2reg_direct()
628 R = data->info->R[sensor->class]; pmbus_data2reg_direct()
631 if (sensor->class == PSC_POWER) { pmbus_data2reg_direct()
637 if (sensor->class != PSC_FAN) { pmbus_data2reg_direct()
656 struct pmbus_sensor *sensor, long val) pmbus_data2reg_vid()
664 struct pmbus_sensor *sensor, long val) pmbus_data2reg()
668 switch (data->info->format[sensor->class]) { pmbus_data2reg()
670 regval = pmbus_data2reg_direct(data, sensor, val); pmbus_data2reg()
673 regval = pmbus_data2reg_vid(data, sensor, val); pmbus_data2reg()
677 regval = pmbus_data2reg_linear(data, sensor, val); pmbus_data2reg()
689 * sensor attributes. If specified, those attributes are compared against each
692 * If the sensor attribute pointers are NULL, the function returns true if
695 * If sensor attribute pointers are provided, a comparison against a specified
698 * sensor values referenced by sensor attribute pointers s1 and s2).
759 struct pmbus_sensor *sensor = to_pmbus_sensor(devattr); pmbus_show_sensor() local
761 if (sensor->data < 0) pmbus_show_sensor()
762 return sensor->data; pmbus_show_sensor()
764 return snprintf(buf, PAGE_SIZE, "%ld\n", pmbus_reg2data(data, sensor)); pmbus_show_sensor()
773 struct pmbus_sensor *sensor = to_pmbus_sensor(devattr); pmbus_set_sensor() local
783 regval = pmbus_data2reg(data, sensor, val); pmbus_set_sensor()
784 ret = _pmbus_write_word_data(client, sensor->page, sensor->reg, regval); pmbus_set_sensor()
788 sensor->data = regval; pmbus_set_sensor()
882 struct pmbus_sensor *sensor; pmbus_add_sensor() local
885 sensor = devm_kzalloc(data->dev, sizeof(*sensor), GFP_KERNEL); pmbus_add_sensor()
886 if (!sensor) pmbus_add_sensor()
888 a = &sensor->attribute; pmbus_add_sensor()
890 snprintf(sensor->name, sizeof(sensor->name), "%s%d_%s", pmbus_add_sensor()
892 sensor->page = page; pmbus_add_sensor()
893 sensor->reg = reg; pmbus_add_sensor()
894 sensor->class = class; pmbus_add_sensor()
895 sensor->update = update; pmbus_add_sensor()
896 pmbus_dev_attr_init(a, sensor->name, pmbus_add_sensor()
903 sensor->next = data->sensors; pmbus_add_sensor()
904 data->sensors = sensor; pmbus_add_sensor()
906 return sensor; pmbus_add_sensor()
952 * The pmbus_sensor_attr structure describes one sensor attribute. This
956 u16 reg; /* sensor register */
959 enum pmbus_sensor_classes class;/* sensor class */
960 const char *label; /* sensor label */
961 bool paged; /* true if paged sensor */
964 u32 func; /* sensor mask */
965 u32 sfunc; /* sensor status mask */
439 pmbus_reg2data_linear(struct pmbus_data *data, struct pmbus_sensor *sensor) pmbus_reg2data_linear() argument
476 pmbus_reg2data_direct(struct pmbus_data *data, struct pmbus_sensor *sensor) pmbus_reg2data_direct() argument
520 pmbus_reg2data_vid(struct pmbus_data *data, struct pmbus_sensor *sensor) pmbus_reg2data_vid() argument
552 pmbus_data2reg_linear(struct pmbus_data *data, struct pmbus_sensor *sensor, long val) pmbus_data2reg_linear() argument
621 pmbus_data2reg_direct(struct pmbus_data *data, struct pmbus_sensor *sensor, long val) pmbus_data2reg_direct() argument
655 pmbus_data2reg_vid(struct pmbus_data *data, struct pmbus_sensor *sensor, long val) pmbus_data2reg_vid() argument
663 pmbus_data2reg(struct pmbus_data *data, struct pmbus_sensor *sensor, long val) pmbus_data2reg() argument
H A Dpmbus.c31 * Find sensor groups and status registers on each page.
146 * the coefficients from the chip, one set per group of sensor pmbus_identify()
159 /* Try to find sensor groups */ pmbus_identify()
/linux-4.1.27/drivers/media/usb/gspca/stv06xx/
H A Dstv06xx_sensor.h35 #define IS_1020(sd) ((sd)->sensor == &stv06xx_sensor_hdcs1020)
44 /* Defines the name of a sensor */
60 /* Probes if the sensor is connected */
69 /* Reads a sensor register */
73 /* Writes to a sensor register */
77 /* Instructs the sensor to start streaming */
80 /* Instructs the sensor to stop streaming */
83 /* Instructs the sensor to dump all its contents */
H A Dstv06xx.c83 /* Wraps the normal write sensor bytes / words functions for writing a
87 if (sd->sensor->i2c_len == 2) { stv06xx_write_sensor()
130 buf[0x20] = sd->sensor->i2c_addr; stv06xx_write_sensor_bytes()
162 buf[0x20] = sd->sensor->i2c_addr; stv06xx_write_sensor_words()
182 err = stv06xx_write_bridge(sd, STV_I2C_FLUSH, sd->sensor->i2c_flush); stv06xx_read_sensor()
190 buf[0x20] = sd->sensor->i2c_addr; stv06xx_read_sensor()
205 0x04, 0xc0, 0x1410, 0, buf, sd->sensor->i2c_len, stv06xx_read_sensor()
207 if (sd->sensor->i2c_len == 2) stv06xx_read_sensor()
262 err = sd->sensor->init(sd); stv06xx_init()
264 if (dump_sensor && sd->sensor->dump) stv06xx_init()
265 sd->sensor->dump(sd); stv06xx_init()
278 return sd->sensor->init_controls(sd); stv06xx_init_controls()
301 /* Prepare the sensor for start */ stv06xx_start()
302 err = sd->sensor->start(sd); stv06xx_start()
326 cpu_to_le16(sd->sensor->max_packet_size[gspca_dev->curr_mode]); stv06xx_isoc_init()
339 min_packet_size = sd->sensor->min_packet_size[gspca_dev->curr_mode]; stv06xx_isoc_nego()
365 err = sd->sensor->stop(sd); stv06xx_stopN()
557 sd->sensor = &stv06xx_sensor_st6422; stv06xx_config()
558 if (!sd->sensor->probe(sd)) stv06xx_config()
561 sd->sensor = &stv06xx_sensor_vv6410; stv06xx_config()
562 if (!sd->sensor->probe(sd)) stv06xx_config()
565 sd->sensor = &stv06xx_sensor_hdcs1x00; stv06xx_config()
566 if (!sd->sensor->probe(sd)) stv06xx_config()
569 sd->sensor = &stv06xx_sensor_hdcs1020; stv06xx_config()
570 if (!sd->sensor->probe(sd)) stv06xx_config()
573 sd->sensor = &stv06xx_sensor_pb0100; stv06xx_config()
574 if (!sd->sensor->probe(sd)) stv06xx_config()
577 sd->sensor = NULL; stv06xx_config()
616 sd->sensor = NULL; sd_disconnect()
639 MODULE_PARM_DESC(dump_sensor, "Dumps all sensor registers at startup");
H A Dstv06xx.h89 /* A pointer to the currently connected sensor */
90 const struct stv06xx_sensor *sensor; member in struct:sd
104 #define BRIDGE_ST6422 3 /* With integrated sensor */
H A Dstv06xx_hdcs.c74 /* visible area of the sensor array */
372 u16 sensor; hdcs_probe_1x00() local
375 ret = stv06xx_read_sensor(sd, HDCS_IDENT, &sensor); hdcs_probe_1x00()
376 if (ret < 0 || sensor != 0x08) hdcs_probe_1x00()
379 pr_info("HDCS-1000/1100 sensor detected\n"); hdcs_probe_1x00()
429 u16 sensor; hdcs_probe_1020() local
432 ret = stv06xx_read_sensor(sd, HDCS_IDENT, &sensor); hdcs_probe_1020()
433 if (ret < 0 || sensor != 0x10) hdcs_probe_1020()
436 pr_info("HDCS-1020 sensor detected\n"); hdcs_probe_1020()
503 /* sensor soft reset */ hdcs_init()
506 /* Execute the sensor init */ hdcs_init()
537 pr_info("Dumping sensor registers:\n"); hdcs_dump()
H A Dstv06xx_pb0100.c32 * images after the sensor has been reset :
170 u16 sensor; pb0100_probe() local
173 err = stv06xx_read_sensor(sd, PB_IDENT, &sensor); pb0100_probe()
177 if ((sensor >> 8) != 0x64) pb0100_probe()
180 pr_info("Photobit pb0100 sensor detected\n"); pb0100_probe()
204 max_packet_size = sd->sensor->max_packet_size[sd->gspca_dev.curr_mode]; pb0100_start()
210 /* Setup sensor window */ pb0100_start()
268 /* Reset sensor */ pb0100_init()
313 /* Scan/timing for the sensor */ pb0100_init()
422 /* Number of pixels counted by the sensor when subsampling the pixels. pb0100_set_autogain_target()
H A Dstv06xx_st6422.h2 * Support for the sensor part which is integrated (I think) into the
/linux-4.1.27/include/linux/iio/common/
H A Dst_sensors.h108 * struct st_sensor_bdu - ST sensor device block data update
118 * struct st_sensor_data_ready_irq - ST sensor device data-ready interrupt
137 * struct st_sensor_transfer_buffer - ST sensor device I/O buffer
151 * struct st_sensor_transfer_function - ST sensor device I/O function
167 * struct st_sensor_settings - ST specific sensor settings
170 * @ch: IIO channels for the sensor.
172 * @pw: Power register of the sensor.
173 * @enable_axis: Enable one or more axis of the sensor.
176 * @drdy_irq: Data ready register of the sensor.
178 * @bootime: samples to discard when sensor passing from power-down to power-up.
196 * struct st_sensor_data - ST sensor device status
199 * @sensor_settings: Pointer to the specific sensor settings in use.
200 * @current_fullscale: Maximum range of measure by the sensor.
201 * @vdd: Pointer to sensor's Vdd power supply
202 * @vdd_io: Pointer to sensor's Vdd-IO power supply
203 * @enabled: Status of the sensor (false->off, true->on).
206 * @odr: Output data rate of the sensor [Hz].
H A Dssp_sensors.h28 * enum ssp_sensor_type - SSP sensor type
59 * @process_data: Callback to feed sensor data.
60 * @type: Used sensor type.
/linux-4.1.27/drivers/iio/accel/
H A DMakefile8 obj-$(CONFIG_HID_SENSOR_ACCEL_3D) += hid-sensor-accel-3d.o
/linux-4.1.27/drivers/iio/pressure/
H A DMakefile7 obj-$(CONFIG_HID_SENSOR_PRESS) += hid-sensor-press.o
H A Dms5611.h2 * MS5611 pressure and temperature sensor driver
H A Dt5403.c2 * t5403.c - Support for EPCOS T5403 pressure/temperature sensor
274 MODULE_DESCRIPTION("EPCOS T5403 pressure/temperature sensor driver");
H A Dms5611_i2c.c2 * MS5611 pressure and temperature sensor driver (I2C bus)
H A Dms5611_spi.c2 * MS5611 pressure and temperature sensor driver (SPI bus)
/linux-4.1.27/drivers/thermal/ti-soc-thermal/
H A Dti-bandgap.h2 * OMAP4 Bandgap temperature sensor driver
68 * sensors, representing every sensor instance present in this bandgap.
173 * @min_freq: sensor minimum clock rate
174 * @max_freq: sensor maximum clock rate
175 * @max_temp: sensor maximum temperature
176 * @min_temp: sensor minimum temperature
182 * for a specific temperature sensor, like shutdown temperature, alert
202 * struct temp_sensor_regval - temperature sensor register values and priv data
203 * @bg_mode_ctrl: temp sensor control register value
227 * @regval: temperature sensor register values
228 * @fclock: pointer to functional clock of temperature sensor
229 * @div_clk: pointer to divider clock of temperature sensor fclk
236 * It holds most of the dynamic stuff. Configurations and sensor specific
253 * struct ti_temp_sensor - bandgap temperature sensor configuration data
254 * @ts_data: pointer to struct with thresholds, limits of temperature sensor
256 * @domain: the name of the domain where the sensor is located
257 * @slope: sensor gradient slope info for hotspot extrapolation equation
258 * @constant: sensor gradient const info for hotspot extrapolation equation
259 * @slope_pcb: sensor gradient slope info for hotspot extrapolation equation
261 * @constant_pcb: sensor gradient const info for hotspot extrapolation equation
263 * @register_cooling: function to describe how this sensor is going to be cooled
266 * Data structure to describe a temperature sensor handled by a bandgap device.
267 * It should provide configuration details on this sensor, such as how to
268 * access the registers affecting this sensor, shadow register buffer, how to
269 * assess the gradient from hotspot, how to cooldown the domain when sensor
351 * @sensor_count: count of temperature sensor within this bandgap device
353 * @expose_sensor: callback to export sensor to thermal API
354 * @remove_sensor: callback to destroy sensor from thermal API
H A Ddra752-thermal-data.c27 * DRA752 has five instances of thermal sensor: MPU, GPU, CORE,
33 * DRA752 CORE thermal sensor register offsets and bit-fields
69 * DRA752 IVA thermal sensor register offsets and bit-fields
105 * DRA752 MPU thermal sensor register offsets and bit-fields
141 * DRA752 DSPEVE thermal sensor register offsets and bit-fields
177 * DRA752 GPU thermal sensor register offsets and bit-fields
212 /* Thresholds and limits for DRA752 MPU temperature sensor */
227 /* Thresholds and limits for DRA752 GPU temperature sensor */
242 /* Thresholds and limits for DRA752 CORE temperature sensor */
257 /* Thresholds and limits for DRA752 DSPEVE temperature sensor */
272 /* Thresholds and limits for DRA752 IVA temperature sensor */
H A Domap5-thermal-data.c24 * OMAP5430 has three instances of thermal sensor for MPU, GPU & CORE,
29 * OMAP5430 MPU thermal sensor register offset and bit-fields
75 * OMAP5430 GPU thermal sensor register offset and bit-fields
121 * OMAP5430 CORE thermal sensor register offset and bit-fields
166 /* Thresholds and limits for OMAP5430 MPU temperature sensor */
181 /* Thresholds and limits for OMAP5430 GPU temperature sensor */
196 /* Thresholds and limits for OMAP5430 CORE temperature sensor */
H A Domap4-thermal-data.c24 * OMAP4430 has one instance of thermal sensor for MPU
41 /* Thresholds and limits for OMAP4430 MPU temperature sensor */
96 * OMAP4460 has one instance of thermal sensor for MPU
134 /* Thresholds and limits for OMAP4460 MPU temperature sensor */
H A Dti-bandgap.c2 * TI Bandgap temperature sensor driver
122 * ti_errata814_bandgap_read_temp() - helper function to read dra7 sensor temperature
126 * Function to read dra7 bandgap sensor temperature. This is done separately
153 * ti_bandgap_read_temp() - helper function to read sensor temperature
155 * @id: bandgap sensor id
157 * Function to concentrate the steps to read sensor temperature register.
248 "%s: IRQ from %s sensor: hotevent %d coldevent %d\n", ti_bandgap_talert_irq_handler()
267 * HAS(TSHUT). If any sensor fires the Tshut signal, we simply shutdown
396 * @id: bandgap sensor id
430 * @id: bandgap sensor id
535 * @id: bandgap sensor id
537 * Checks if the bandgap pointer is valid and if the sensor id is also
554 dev_err(bgp->dev, "%s: sensor id out of range (%d)\n", ti_bandgap_validate()
566 * @id: bandgap sensor id
623 * @id: bandgap sensor id
675 * ti_bandgap_read_thot() - reads sensor current thot
677 * @id: sensor id
688 * ti_bandgap_write_thot() - sets sensor current thot
690 * @id: sensor id
701 * ti_bandgap_read_tcold() - reads sensor current tcold
703 * @id: sensor id
714 * ti_bandgap_write_tcold() - sets the sensor tcold
716 * @id: sensor id
727 * ti_bandgap_read_counter() - read the sensor counter
729 * @id: sensor id
747 * ti_bandgap_read_counter_delay() - read the sensor counter delay
749 * @id: sensor id
789 * ti_bandgap_read_update_interval() - read the sensor update interval
791 * @id: sensor id
824 * @id: sensor id
866 * ti_bandgap_write_counter() - set the bandgap sensor counter
868 * @id: sensor id
883 * @id: sensor id
914 * @id: sensor id
946 * @id: sensor id
966 * @id: sensor id
968 * Return: data stored by set function with sensor id on success or NULL
984 * @id: sensor id which it is desired to read 1 temperature
1040 * ti_bandgap_get_trend() - To fetch the temperature trend of a sensor
1042 * @id: id of the individual sensor
1046 * Particular sensor. The function computes the difference in temperature
1452 /* First thing is to remove sensor interfaces */ ti_bandgap_remove()
1629 MODULE_DESCRIPTION("OMAP4+ bandgap temperature sensor driver");
H A Ddra752-bandgap.h214 /* sensor limits */
228 /* sensor limits */
242 /* sensor limits */
256 /* sensor limits */
270 /* sensor limits */
H A Domap5xxx-bandgap.h162 /* sensor limits */
176 /* sensor limits */
190 /* sensor limits */
H A Dti-thermal-common.c62 * ti_thermal_hotspot_temperature - returns sensor extrapolated temperature
63 * @t: omap sensor temperature
64 * @s: omap sensor slope value
65 * @c: omap sensor const value
399 if (of_find_property(np, "#thermal-sensor-cells", NULL)) ti_thermal_register_cpu_cooling()
H A Domap4xxx-bandgap.h76 /* sensor limits */
165 /* sensor limits */
H A Dti-thermal.h44 /* PCB sensor calculation constants */
/linux-4.1.27/drivers/media/usb/gspca/gl860/
H A Dgl860.h35 #define _MI1320_ (((struct sd *) gspca_dev)->sensor == ID_MI1320)
36 #define _MI2020_ (((struct sd *) gspca_dev)->sensor == ID_MI2020)
37 #define _OV2640_ (((struct sd *) gspca_dev)->sensor == ID_OV2640)
38 #define _OV9655_ (((struct sd *) gspca_dev)->sensor == ID_OV9655)
75 u8 sensor; member in struct:sd
H A Dgl860.c54 static char sensor[7]; variable
55 module_param_string(sensor, sensor, sizeof(sensor), 0644);
56 MODULE_PARM_DESC(sensor,
57 " Driver sensor ('MI1320'/'MI2020'/'OV9655'/'OV2640')");
342 sd->sensor = 0xff; sd_config()
343 if (strcmp(sensor, "MI1320") == 0) sd_config()
344 sd->sensor = ID_MI1320; sd_config()
345 else if (strcmp(sensor, "OV2640") == 0) sd_config()
346 sd->sensor = ID_OV2640; sd_config()
347 else if (strcmp(sensor, "OV9655") == 0) sd_config()
348 sd->sensor = ID_OV9655; sd_config()
349 else if (strcmp(sensor, "MI2020") == 0) sd_config()
350 sd->sensor = ID_MI2020; sd_config()
352 /* Get sensor and set the suitable init/start/../stop functions */ sd_config()
358 switch (sd->sensor) { sd_config()
479 /* Probe sensor orientation */ sd_callback()
643 sd->sensor = ID_MI1320; gl860_guess_sensor()
645 if (sd->sensor == 0xff) { gl860_guess_sensor()
664 PDEBUG(D_PROBE, "probing for sensor MI2020 or OVXXXX"); gl860_guess_sensor()
681 PDEBUG(D_PROBE, "probing for sensor OV2640 or OV9655"); gl860_guess_sensor()
700 sd->sensor = ID_OV2640; gl860_guess_sensor()
708 sd->sensor = ID_OV9655; gl860_guess_sensor()
723 sd->sensor = ID_MI2020; gl860_guess_sensor()
728 PDEBUG(D_PROBE, "05e3:f191 sensor MI1320 (1.3M)"); gl860_guess_sensor()
730 PDEBUG(D_PROBE, "05e3:0503 sensor MI2020 (2.0M)"); gl860_guess_sensor()
732 PDEBUG(D_PROBE, "05e3:0503 sensor OV9655 (1.3M)"); gl860_guess_sensor()
734 PDEBUG(D_PROBE, "05e3:0503 sensor OV2640 (2.0M)"); gl860_guess_sensor()
736 PDEBUG(D_PROBE, "***** Unknown sensor *****"); gl860_guess_sensor()
/linux-4.1.27/drivers/media/usb/gspca/
H A Dt613.c51 u8 sensor; member in struct:sd
93 /* sensor specific data */
426 pr_err("Bad sensor reset %02x\n", byte); om6802_sensor_init()
526 all_gain_reg[7] = sensor_data[sd->sensor].reg80; setawb_n_RGB()
548 switch (sd->sensor) { setfreq()
582 const struct additional_sensor_data *sensor; sd_init() local
599 PDEBUG(D_PROBE, "sensor tas5130a"); sd_init()
600 sd->sensor = SENSOR_TAS5130A; sd_init()
603 PDEBUG(D_PROBE, "sensor lt168g"); sd_init()
604 sd->sensor = SENSOR_LT168G; sd_init()
607 PDEBUG(D_PROBE, "sensor 'other'"); sd_init()
608 sd->sensor = SENSOR_OTHER; sd_init()
611 PDEBUG(D_PROBE, "sensor om6802"); sd_init()
612 sd->sensor = SENSOR_OM6802; sd_init()
615 pr_err("unknown sensor %04x\n", sensor_id); sd_init()
619 if (sd->sensor == SENSOR_OM6802) { sd_init()
630 pr_err("Bad sensor reset %02x\n", test_byte); sd_init()
644 sensor = &sensor_data[sd->sensor]; sd_init()
645 reg_w_buf(gspca_dev, sensor->n3, sizeof sensor->n3); sd_init()
646 reg_w_buf(gspca_dev, sensor->n4, sensor->n4sz); sd_init()
648 if (sd->sensor == SENSOR_LT168G) { sd_init()
655 reg_w_ixbuf(gspca_dev, 0xd0, sensor->data1, sizeof sensor->data1); sd_init()
656 reg_w_ixbuf(gspca_dev, 0xc7, sensor->data2, sizeof sensor->data2); sd_init()
657 reg_w_ixbuf(gspca_dev, 0xe0, sensor->data3, sizeof sensor->data3); sd_init()
659 reg_w(gspca_dev, (sensor->reg80 << 8) + 0x80); sd_init()
660 reg_w(gspca_dev, (sensor->reg80 << 8) + 0x80); sd_init()
661 reg_w(gspca_dev, (sensor->reg8e << 8) + 0x8e); sd_init()
666 reg_w_buf(gspca_dev, sensor->data5, sizeof sensor->data5); sd_init()
667 reg_w_buf(gspca_dev, sensor->nset8, sizeof sensor->nset8); sd_init()
668 reg_w_buf(gspca_dev, sensor->stream, sizeof sensor->stream); sd_init()
670 if (sd->sensor == SENSOR_LT168G) { sd_init()
677 reg_w_ixbuf(gspca_dev, 0xd0, sensor->data1, sizeof sensor->data1); sd_init()
678 reg_w_ixbuf(gspca_dev, 0xc7, sensor->data2, sizeof sensor->data2); sd_init()
679 reg_w_ixbuf(gspca_dev, 0xe0, sensor->data3, sizeof sensor->data3); sd_init()
753 const struct additional_sensor_data *sensor; sd_start() local
778 switch (sd->sensor) { sd_start()
798 sensor = &sensor_data[sd->sensor]; sd_start()
805 reg_w_buf(gspca_dev, sensor->stream, sizeof sensor->stream); sd_start()
806 reg_w_buf(gspca_dev, sensor->stream, sizeof sensor->stream); sd_start()
808 if (sd->sensor == SENSOR_OM6802) sd_start()
818 reg_w_buf(gspca_dev, sensor_data[sd->sensor].stream, sd_stopN()
819 sizeof sensor_data[sd->sensor].stream); sd_stopN()
820 reg_w_buf(gspca_dev, sensor_data[sd->sensor].stream, sd_stopN()
821 sizeof sensor_data[sd->sensor].stream); sd_stopN()
822 if (sd->sensor == SENSOR_OM6802) { sd_stopN()
977 if (sd->sensor == SENSOR_TAS5130A) sd_init_controls()
H A Dsq930x.c46 u8 sensor; member in struct:sd
250 {0x01, 0x0004}, /* select sensor core registers */
292 /* start parameters indexed by [sensor][mode] */
492 const struct sensor_s *sensor; i2c_write() local
500 sensor = &sensor_tb[sd->sensor]; i2c_write()
502 val = (sensor->i2c_addr << 8) | SQ930_CTRL_I2C_IO; i2c_write()
506 *buf++ = sensor->i2c_dum; i2c_write()
513 *buf++ = sensor->i2c_dum; i2c_write()
637 const struct sensor_s *sensor; cmos_probe() local
647 sensor = &sensor_tb[probe_order[i]]; cmos_probe()
648 ucbus_write(&sd->gspca_dev, sensor->cmd, sensor->cmd_len, 8); cmos_probe()
649 gpio_init(sd, sensor->gpio); cmos_probe()
651 reg_r(gspca_dev, (sensor->i2c_addr << 8) | 0x001c, 1); cmos_probe()
657 pr_err("Unknown sensor\n"); cmos_probe()
661 sd->sensor = probe_order[i]; cmos_probe()
662 switch (sd->sensor) { cmos_probe()
666 sensor_tb[sd->sensor].name); cmos_probe()
709 switch (sd->sensor) { global_init()
715 gpio_init(sd, sensor_tb[sd->sensor].gpio); global_init()
727 gpio_init(sd, sensor_tb[sd->sensor].gpio); global_init()
735 gpio_init(sd, sensor_tb[sd->sensor].gpio); global_init()
743 gpio_init(sd, sensor_tb[sd->sensor].gpio); global_init()
762 const struct sensor_s *sensor; setexposure() local
770 switch (sd->sensor) { setexposure()
773 min_frclk = sd->sensor == SENSOR_ICX098BQ ? 0x210 : 0x26f; setexposure()
791 sensor = &sensor_tb[sd->sensor]; setexposure()
792 buf[i++] = sensor->i2c_addr; /* i2c_slave_addr */ setexposure()
796 buf[i++] = sensor->i2c_dum; setexposure()
800 buf[i++] = sensor->i2c_dum; setexposure()
819 sd->sensor = id->driver_info >> 8; sd_config()
838 if (sd->sensor != SENSOR_LZ24BP) sd_init()
851 * 03 00 12 93 0b f6 cf 00 icam tracer - sensor icx098bq sd_init()
861 * 6: c8 / c9 / ca / cf = mode webcam?, sensor? webcam? sd_init()
868 if (sd->sensor == SENSOR_MI0360) { sd_init()
870 /* no sensor probe for icam tracer */ sd_init()
872 sd->sensor = SENSOR_ICX098BQ; sd_init()
877 PDEBUG(D_PROBE, "Sensor %s", sensor_tb[sd->sensor].name); sd_init()
891 cap = &capconfig[sd->sensor][mode]; send_start()
924 switch (sd->sensor) { sd_start()
1018 if (sd->sensor == SENSOR_MT9V111) sd_start()
1030 if (sd->sensor == SENSOR_MT9V111) sd_stopN()
1128 #define ST(sensor, type) \
1129 .driver_info = (SENSOR_ ## sensor << 8) \
H A Dsn9c20x.c111 u8 sensor; member in struct:sd
639 /* mt9m001 sensor uses a different gain formula then other micron sensors */
1092 pr_err("sensor id for ov9650 doesn't match (0x%04x)\n", id); ov9650_init_sensor()
1097 i2c_w1(gspca_dev, 0x12, 0x80); /* sensor reset */ ov9650_init_sensor()
1101 pr_err("OV9650 sensor initialization failed\n"); ov9650_init_sensor()
1110 i2c_w1(gspca_dev, 0x12, 0x80); /* sensor reset */ ov9655_init_sensor()
1114 pr_err("OV9655 sensor initialization failed\n"); ov9655_init_sensor()
1124 i2c_w1(gspca_dev, 0x12, 0x80); /* sensor reset */ soi968_init_sensor()
1128 pr_err("SOI968 sensor initialization failed\n"); soi968_init_sensor()
1138 i2c_w1(gspca_dev, 0x12, 0x80); /* sensor reset */ ov7660_init_sensor()
1142 pr_err("OV7660 sensor initialization failed\n"); ov7660_init_sensor()
1151 i2c_w1(gspca_dev, 0x12, 0x80); /* sensor reset */ ov7670_init_sensor()
1155 pr_err("OV7670 sensor initialization failed\n"); ov7670_init_sensor()
1172 pr_err("MT9V011 sensor initialization failed\n"); mt9v_init_sensor()
1177 sd->sensor = SENSOR_MT9V011; mt9v_init_sensor()
1178 pr_info("MT9V011 sensor detected\n"); mt9v_init_sensor()
1190 pr_err("MT9V111 sensor initialization failed\n"); mt9v_init_sensor()
1195 sd->sensor = SENSOR_MT9V111; mt9v_init_sensor()
1196 pr_info("MT9V111 sensor detected\n"); mt9v_init_sensor()
1213 pr_err("MT9V112 sensor initialization failed\n"); mt9v_init_sensor()
1218 sd->sensor = SENSOR_MT9V112; mt9v_init_sensor()
1219 pr_info("MT9V112 sensor detected\n"); mt9v_init_sensor()
1232 pr_err("MT9M112 sensor initialization failed\n"); mt9m112_init_sensor()
1244 pr_err("MT9M111 sensor initialization failed\n"); mt9m111_init_sensor()
1259 /* must be 0x8411 or 0x8421 for colour sensor and 8431 for bw */ mt9m001_init_sensor()
1263 pr_info("MT9M001 color sensor detected\n"); mt9m001_init_sensor()
1266 pr_info("MT9M001 mono sensor detected\n"); mt9m001_init_sensor()
1276 pr_err("MT9M001 sensor initialization failed\n"); mt9m001_init_sensor()
1376 switch (sd->sensor) { set_hvflip()
1446 switch (sd->sensor) { set_exposure()
1501 switch (sd->sensor) { set_gain()
1569 if (sd->sensor >= SENSOR_MT9V011 && sd_dbg_g_register()
1570 sd->sensor <= SENSOR_MT9M112) { sd_dbg_g_register()
1593 if (sd->sensor >= SENSOR_MT9V011 && sd_dbg_s_register()
1594 sd->sensor <= SENSOR_MT9M112) { sd_dbg_s_register()
1610 strlcpy(chip->name, "sensor", sizeof(chip->name)); sd_chip_info()
1624 sd->sensor = id->driver_info >> 8; sd_config()
1629 switch (sd->sensor) { sd_config()
1697 if (sd->sensor == SENSOR_SOI968) sd_s_ctrl()
1738 if (sd->sensor != SENSOR_OV9655 && sd->sensor != SENSOR_SOI968 && sd_init_controls()
1739 sd->sensor != SENSOR_OV7670 && sd->sensor != SENSOR_MT9M001 && sd_init_controls()
1740 sd->sensor != SENSOR_MT9VPRB) { sd_init_controls()
1747 if (sd->sensor != SENSOR_SOI968 && sd->sensor != SENSOR_MT9VPRB && sd_init_controls()
1748 sd->sensor != SENSOR_MT9M112 && sd->sensor != SENSOR_MT9M111 && sd_init_controls()
1749 sd->sensor != SENSOR_MT9V111) sd_init_controls()
1753 if (sd->sensor != SENSOR_MT9VPRB && sd->sensor != SENSOR_MT9M112 && sd_init_controls()
1754 sd->sensor != SENSOR_MT9M111 && sd->sensor != SENSOR_MT9V111) { sd_init_controls()
1773 if (sd->sensor == SENSOR_SOI968) sd_init_controls()
1774 /* this sensor doesn't have the exposure control and sd_init_controls()
1814 switch (sd->sensor) { sd_init()
1819 pr_info("OV9650 sensor detected\n"); sd_init()
1825 pr_info("OV9655 sensor detected\n"); sd_init()
1831 pr_info("SOI968 sensor detected\n"); sd_init()
1837 pr_info("OV7660 sensor detected\n"); sd_init()
1843 pr_info("OV7670 sensor detected\n"); sd_init()
1849 pr_info("MT9VPRB sensor detected\n"); sd_init()
1855 pr_info("MT9M111 sensor detected\n"); sd_init()
1861 pr_info("MT9M112 sensor detected\n"); sd_init()
1872 pr_info("HV7131R sensor detected\n"); sd_init()
1875 pr_err("Unsupported sensor\n"); sd_init()
1886 switch (sd->sensor) { configure_sensor_output()
2152 if (sd->sensor == SENSOR_SOI968) sd_dqcallback()
2330 #define SN9C20X(sensor, i2c_addr, flags) \
2332 | (SENSOR_ ## sensor << 8) \
H A Dsonixb.c42 0x19 high-nibble is sensor clock divider, changes exposure on sensors which
80 __u8 sensor; /* Type of image sensor chip */ member in struct:sd
118 #define SENS(bridge, sensor, _flags, _sensor_addr) \
121 .sensor_init = sensor, \
122 .sensor_init_size = sizeof(sensor), \
225 /* Reset sensor */
309 0x13 Write 1 to commit settings to sensor
545 switch (sd->sensor) { setbrightness()
552 i2cOV[1] = sensor_data[sd->sensor].sensor_addr; setbrightness()
565 if (sd->sensor == SENSOR_PAS106) { setbrightness()
592 switch (sd->sensor) { setgain()
637 if (sd->sensor == SENSOR_OV7630 && gain >= 32) setgain()
640 i2c[1] = sensor_data[sd->sensor].sensor_addr; setgain()
655 if (sd->sensor == SENSOR_PAS106) { setgain()
690 switch (sd->sensor) { setexposure()
738 if (sd->sensor == SENSOR_OV6650) { setexposure()
772 i2c[1] = sensor_data[sd->sensor].sensor_addr; setexposure()
861 if (sd->sensor == SENSOR_OV6650 || sd->sensor == SENSOR_OV7630) { setfreq()
874 i2c[3] = (sd->sensor == SENSOR_OV6650) setfreq()
878 i2c[1] = sensor_data[sd->sensor].sensor_addr; setfreq()
899 if (sensor_data[sd->sensor].flags & F_SIF) { do_autogain()
935 sd->sensor = id->driver_info >> 8; sd_config()
939 if (!(sensor_data[sd->sensor].flags & F_SIF)) { sd_config()
1014 if (sd->sensor == SENSOR_OV6650 || sd->sensor == SENSOR_OV7630 || sd_init_controls()
1015 sd->sensor == SENSOR_PAS106 || sd->sensor == SENSOR_PAS202) sd_init_controls()
1019 /* Gain range is sensor dependent */ sd_init_controls()
1020 switch (sd->sensor) { sd_init_controls()
1051 /* Exposure range is sensor dependent, and not all have exposure */ sd_init_controls()
1052 switch (sd->sensor) { sd_init_controls()
1078 if (sd->sensor == SENSOR_OV6650 || sd->sensor == SENSOR_OV7630) sd_init_controls()
1105 memcpy(&regs[0x01], sensor_data[sd->sensor].bridge_init, 0x19); sd_start()
1120 if (sensor_data[sd->sensor].flags & F_SIF) { sd_start()
1142 switch (sd->sensor) { sd_start()
1171 /* Vga mode emulation on SIF sensor? */ sd_start()
1187 /* Init the sensor */ sd_start()
1188 i2c_w_vector(gspca_dev, sensor_data[sd->sensor].sensor_init, sd_start()
1189 sensor_data[sd->sensor].sensor_init_size); sd_start()
1191 /* Mode / bridge specific sensor setup */ sd_start()
1192 switch (sd->sensor) { sd_start()
1421 #define SB(sensor, bridge) \
1422 .driver_info = (SENSOR_ ## sensor << 8) | BRIDGE_ ## bridge
H A Dov534.c42 #define OV534_REG_ADDRESS 0xf1 /* sensor address */
86 u8 sensor; member in struct:sd
739 /* output a sensor sequence (reg - val) */ sccb_w_array()
787 if (sd->sensor != SENSOR_OV772x) set_frame_rate()
813 if (sd->sensor == SENSOR_OV767x) { sethue()
848 if (sd->sensor == SENSOR_OV767x) { setsaturation()
872 if (sd->sensor == SENSOR_OV767x) { setbrightness()
885 if (sd->sensor == SENSOR_OV767x) setcontrast()
923 if (sd->sensor == SENSOR_OV767x) { setexposure()
944 if (sd->sensor == SENSOR_OV767x) { getexposure()
976 if (sd->sensor == SENSOR_OV772x) setawb()
982 if (sd->sensor == SENSOR_OV772x) setawb()
993 data = sd->sensor == SENSOR_OV767x ? setaec()
1019 if (sd->sensor == SENSOR_OV767x) { sethvflip()
1043 if (sd->sensor == SENSOR_OV767x) { setlightfreq()
1168 if (sd->sensor == SENSOR_OV767x) { sd_init_controls()
1200 if (sd->sensor == SENSOR_OV772x) sd_init_controls()
1213 if (sd->sensor == SENSOR_OV772x) { sd_init_controls()
1231 if (sd->sensor == SENSOR_OV772x) sd_init_controls()
1249 if (sd->sensor == SENSOR_OV772x) sd_init_controls()
1277 /* initialize the sensor address */ sd_init()
1280 /* reset sensor */ sd_init()
1284 /* probe the sensor */ sd_init()
1292 sd->sensor = SENSOR_OV767x; sd_init()
1296 sd->sensor = SENSOR_OV772x; sd_init()
1304 reg_w_array(gspca_dev, bridge_init[sd->sensor].val, sd_init()
1305 bridge_init[sd->sensor].len); sd_init()
1307 sccb_w_array(gspca_dev, sensor_init[sd->sensor].val, sd_init()
1308 sensor_init[sd->sensor].len); sd_init()
1342 if (sd->sensor == SENSOR_OV767x) sd_start()
1347 reg_w_array(gspca_dev, bridge_start[sd->sensor][mode].val, sd_start()
1348 bridge_start[sd->sensor][mode].len); sd_start()
1349 sccb_w_array(gspca_dev, sensor_start[sd->sensor][mode].val, sd_start()
1350 sensor_start[sd->sensor][mode].len); sd_start()
H A Dov519.c60 * are getting "Failed to read sensor ID..." */
98 /* Determined by sensor type */
111 s8 sensor; /* Type of image sensor chip (SEN_*) */ member in struct:sd
141 really should move the sensor drivers to v4l2 sub drivers. */
664 * (0x12) to change the sensor mode, registers related to the
665 * sensor’s cropping window will be reset back to their default
668 * "wait 4096 external clock ... to make sure the sensor is
1187 * = 0 (0x00) .0...... "Master mode, sensor
2305 * always succeeds regardless of whether the sensor is present and working.
2334 * always succeeds regardless of whether the sensor is present and working.
2428 /* Up on sensor reset empty the register cache */ i2c_w()
2559 /* This does an initial reset of an OmniVision sensor and ensures that I2C
2569 /* Reset the sensor */ init_ov_sensor()
2582 /* Reset the sensor */ init_ov_sensor()
2638 * OV511 and sensor configuration
2655 /* Detect sensor (sub)type */ ov_hires_configure()
2664 sd->sensor = SEN_OV2610; ov_hires_configure()
2668 sd->sensor = SEN_OV2610AE; ov_hires_configure()
2672 sd->sensor = SEN_OV9600; ov_hires_configure()
2679 sd->sensor = SEN_OV3610; ov_hires_configure()
2684 PERR("Error unknown sensor type: %02x%02x\n", high, low); ov_hires_configure()
2687 /* This initializes the OV8110, OV8610 sensor. The OV8110 uses
2697 /* Detect sensor (sub)type */ ov8xx0_configure()
2700 PERR("Error detecting sensor type"); ov8xx0_configure()
2704 sd->sensor = SEN_OV8610; ov8xx0_configure()
2706 PERR("Unknown image sensor version: %d\n", rc & 3); ov8xx0_configure()
2709 /* This initializes the OV7610, OV7620, or OV76BE sensor. The OV76BE uses
2719 /* Detect sensor (sub)type */ ov7xx0_configure()
2725 PERR("Error detecting sensor type\n"); ov7xx0_configure()
2735 sd->sensor = SEN_OV7670; ov7xx0_configure()
2738 sd->sensor = SEN_OV7610; ov7xx0_configure()
2744 sd->sensor = SEN_OV7620AE; ov7xx0_configure()
2747 sd->sensor = SEN_OV76BE; ov7xx0_configure()
2769 sd->sensor = SEN_OV7640; /* FIXME */ ov7xx0_configure()
2773 sd->sensor = SEN_OV7640; /* FIXME */ ov7xx0_configure()
2777 sd->sensor = SEN_OV7648; ov7xx0_configure()
2781 sd->sensor = SEN_OV7660; ov7xx0_configure()
2784 PERR("Unknown sensor: 0x76%02x\n", low); ov7xx0_configure()
2789 sd->sensor = SEN_OV7620; ov7xx0_configure()
2792 PERR("Unknown image sensor version: %d\n", rc & 3); ov7xx0_configure()
2796 /* This initializes the OV6620, OV6630, OV6630AE, or OV6630AF sensor. */ ov6xx0_configure()
2804 /* Detect sensor (sub)type */ ov6xx0_configure()
2807 PERR("Error detecting sensor type\n"); ov6xx0_configure()
2816 sd->sensor = SEN_OV6630; ov6xx0_configure()
2820 sd->sensor = SEN_OV6620; ov6xx0_configure()
2824 sd->sensor = SEN_OV6630; ov6xx0_configure()
2828 sd->sensor = SEN_OV66308AF; ov6xx0_configure()
2832 sd->sensor = SEN_OV6630; ov6xx0_configure()
2836 PERR("FATAL: Unknown sensor version: 0x%02x\n", rc); ov6xx0_configure()
2840 /* Set sensor-specific vars */ ov6xx0_configure()
2969 /* This initializes the OV511/OV511+ and the sensor */ ov511_configure()
3035 /* This initializes the OV518/OV518+ and the sensor */ ov518_configure()
3116 /* Set LED pin to output mode. Bit 4 must be cleared or sensor ov519_configure()
3191 * - reg = 0: bridge a4, 1: bridge 23, 2: sensor 11 (clock) ov519_set_fr()
3225 if (sd->sensor == SEN_OV7660) ov519_set_fr()
3306 /* The OV519 must be more aggressive about sensor detection since sd_init()
3307 * I2C write will never fail if the sensor is not present. We have sd_init()
3308 * to try to initialize the sensor to detect its presence */ sd_init()
3309 sd->sensor = -1; sd_init()
3327 PERR("Can't determine sensor slave IDs\n"); sd_init()
3331 if (sd->sensor < 0) sd_init()
3358 switch (sd->sensor) { sd_init()
3384 /* w9968cf needs initialisation once the sensor is known */ sd_init()
3389 /* initialize the sensor */ sd_init()
3390 switch (sd->sensor) { sd_init()
3482 * Do not put any sensor-specific code in here (including I2C I/O functions)
3531 switch (sd->sensor) { ov511_mode_init_regs()
3608 * Do not put any sensor-specific code in here (including I2C I/O functions)
3664 sd->sensor == SEN_OV7620AE) ov518_mode_init_regs()
3676 switch (sd->sensor) { ov518_mode_init_regs()
3749 * Do not put any sensor-specific code in here (including I2C I/O functions)
3800 switch (sd->sensor) { ov519_mode_init_regs()
3803 if (sd->sensor == SEN_OV7640 || ov519_mode_init_regs()
3804 sd->sensor == SEN_OV7648) { ov519_mode_init_regs()
3819 if (sd->sensor == SEN_OV7670 && ov519_mode_init_regs()
3822 else if (sd->sensor == SEN_OV7648 && ov519_mode_init_regs()
3840 switch (sd->sensor) { ov519_mode_init_regs()
3920 /******** Mode (VGA/QVGA) and sensor specific regs ********/ mode_init_ov_sensor_regs()
3921 switch (sd->sensor) { mode_init_ov_sensor_regs()
4002 if (sd->sensor == SEN_OV76BE) mode_init_ov_sensor_regs()
4124 switch (sd->sensor) { set_ov_sensor_window()
4142 /* The different sensor ICs handle setting up of window differently. set_ov_sensor_window()
4144 switch (sd->sensor) { set_ov_sensor_window()
4164 if (sd->sensor == SEN_OV66308AF && qvga) set_ov_sensor_window()
4190 switch (sd->sensor) { set_ov_sensor_window()
4474 the sensor and bridge are still syncing, so drop it. */ ovfx2_pkt_scan()
4536 switch (sd->sensor) { setbrightness()
4625 switch (sd->sensor) { setcontrast()
4688 switch (sd->sensor) { setcolors()
4730 if (sd->sensor == SEN_OV7660 setfreq_i()
4731 || sd->sensor == SEN_OV7670) { setfreq_i()
4763 if (sd->sensor == SEN_OV6620 || setfreq_i()
4764 sd->sensor == SEN_OV6630 || setfreq_i()
4765 sd->sensor == SEN_OV66308AF) setfreq_i()
4772 if (sd->sensor == SEN_OV6620 || setfreq_i()
4773 sd->sensor == SEN_OV6630 || setfreq_i()
4774 sd->sensor == SEN_OV66308AF) { setfreq_i()
4898 if (valid_controls[sd->sensor].has_brightness) sd_init_controls()
4901 sd->sensor == SEN_OV7660 ? 6 : 255, 1, sd_init_controls()
4902 sd->sensor == SEN_OV7660 ? 3 : 127); sd_init_controls()
4903 if (valid_controls[sd->sensor].has_contrast) { sd_init_controls()
4904 if (sd->sensor == SEN_OV7660) sd_init_controls()
4910 (sd->sensor == SEN_OV6630 || sd_init_controls()
4911 sd->sensor == SEN_OV66308AF) ? 200 : 127); sd_init_controls()
4913 if (valid_controls[sd->sensor].has_sat) sd_init_controls()
4916 sd->sensor == SEN_OV7660 ? 4 : 255, 1, sd_init_controls()
4917 sd->sensor == SEN_OV7660 ? 2 : 127); sd_init_controls()
4918 if (valid_controls[sd->sensor].has_exposure) sd_init_controls()
4921 if (valid_controls[sd->sensor].has_hvflip) { sd_init_controls()
4927 if (valid_controls[sd->sensor].has_autobright) sd_init_controls()
4930 if (valid_controls[sd->sensor].has_autogain) sd_init_controls()
4933 if (valid_controls[sd->sensor].has_freq) { sd_init_controls()
4934 if (sd->sensor == SEN_OV7670) sd_init_controls()
H A Dstk1135.c213 /* configure MT9M112 sensor */ stk1135_configure_mt9m112()
349 /* enable CLKOUT for sensor */ stk1135_configure_clock()
365 /* wait a while for sensor to catch up */ stk1135_configure_clock()
377 /* enable sensor standby and diasble chip enable */ stk1135_camera_disable()
386 /* disable CLKOUT for sensor */ stk1135_camera_disable()
389 /* disable sensor (GPIO5) and enable GPIO0,3,6 (?) - sensor standby? */ stk1135_camera_disable()
402 /* enable sensor (GPIO5) */ sd_init()
406 /* enable interrupts from GPIO8 (flip sensor) and GPIO9 (???) */ sd_init()
416 /* set sensor address */ sd_init()
423 /* read sensor ID */ sd_init()
434 pr_info("Detected sensor type %s (0x%x)\n", sensor_name, sensor_id); sd_init()
447 /* enable sensor (GPIO5) */ sd_start()
510 /* GPIO 8 is flip sensor (1 = normal position, 0 = flipped to back) */ sd_pkt_scan()
663 {USB_DEVICE(0x174f, 0x6a31)}, /* ASUS laptop, MT9M112 sensor */
H A Dsonixj.c82 u8 sensor; /* Type of image sensor chip */ member in struct:sd
113 #define S_PWR_DN 0x01 /* sensor power down */
120 #define MCK_SIZE_MASK 0x1f /* sensor master clock */
121 #define SEN_CLK_EN 0x20 /* enable sensor clock */
339 /* gamma for sensor ADCM1700 */
349 /* gamma for sensor GC0307 */
354 /* gamma for sensor SP80708 */
488 /* set sensor clock */
532 {0xb1, 0x5d, 0x0a, 0x00, 0x02, 0x00, 0x00, 0x10}, /* sensor clck ?2 */
542 {0xb1, 0x5d, 0x07, 0x00, 0x02, 0x00, 0x00, 0x10}, /* sensor on */
598 {0xb1, 0x5d, 0x07, 0x00, 0x02, 0x00, 0x00, 0x10}, /* sensor on */
631 {0xb1, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0x10}, /* sensor select */
899 /* the sensor registers are described in m5602/m5602_po1030.h */
900 {0xa1, 0x6e, 0x3f, 0x20, 0x00, 0x00, 0x00, 0x10}, /* sensor reset */
1244 switch (sd->sensor) { i2c_w1()
1301 /* sensor read 'len' (1..5) bytes in gspca_dev->usb_buf */ i2c_r()
1307 switch (sd->sensor) { i2c_r()
1345 /* check the ID of the hv7131 sensor */
1346 /* this sequence is needed because it activates the sensor */ hv7131r_probe()
1349 i2c_w1(gspca_dev, 0x02, 0); /* sensor wakeup */ hv7131r_probe()
1353 i2c_r(gspca_dev, 0, 5); /* read sensor id */ hv7131r_probe()
1405 sd->sensor = SENSOR_MI0360B; mi0360_probe()
1409 sd->sensor = SENSOR_MT9V111; mi0360_probe()
1415 PDEBUG(D_PROBE, "Unknown sensor %04x - forced to mi0360", val); mi0360_probe()
1436 sd->sensor = SENSOR_SOI768; ov7630_probe()
1476 sd->sensor = SENSOR_PO1030; ov7648_probe()
1479 pr_err("Unknown sensor %04x\n", val); ov7648_probe()
1482 /* 0c45:6142 sensor may be po2030n, gc0305 or gc0307 */ po2030n_probe()
1499 sd->sensor = SENSOR_GC0307; po2030n_probe()
1515 /* sd->sensor = SENSOR_PO2030N; */ po2030n_probe()
1517 pr_err("Unknown sensor ID %04x\n", val); po2030n_probe()
1529 sd->sensor = id->driver_info >> 8; sd_config()
1533 if (sd->sensor == SENSOR_ADCM1700) { sd_config()
1582 switch (sd->sensor) { sd_init()
1606 /* Note we do not disable the sensor clock here (power saving mode), sd_init()
1611 sn9c1xx = sn_tb[sd->sensor]; sd_init()
1648 if (sd->sensor == SENSOR_OM6802) sd_init_controls()
1659 if (sd->sensor == SENSOR_PO2030N) { sd_init_controls()
1668 if (sd->sensor != SENSOR_ADCM1700 && sd->sensor != SENSOR_OV7660 && sd_init_controls()
1669 sd->sensor != SENSOR_PO1030 && sd->sensor != SENSOR_SOI768 && sd_init_controls()
1670 sd->sensor != SENSOR_SP80708) sd_init_controls()
1674 if (sd->sensor == SENSOR_HV7131R || sd->sensor == SENSOR_OV7630 || sd_init_controls()
1675 sd->sensor == SENSOR_OV7648 || sd->sensor == SENSOR_PO2030N) sd_init_controls()
1679 if (sd->sensor == SENSOR_OV7630 || sd->sensor == SENSOR_OV7648 || sd_init_controls()
1680 sd->sensor == SENSOR_OV7660) sd_init_controls()
1692 if (sd->sensor == SENSOR_PO2030N) { sd_init_controls()
1705 switch (sd->sensor) { expo_adjust()
1732 static const u8 doit[] = /* update sensor */ expo_adjust()
1734 static const u8 sensorgo[] = /* sensor on */ expo_adjust()
1812 switch (sd->sensor) { setbrightness()
1884 if (sd->sensor == SENSOR_MI0360B) setcolors()
1900 if (sd->sensor == SENSOR_PO2030N) { setredblue()
1926 switch (sd->sensor) { setgamma()
1957 if (sd->sensor == SENSOR_PO2030N) { setexposure()
1974 switch (sd->sensor) { setautogain()
1979 if (sd->sensor == SENSOR_OV7630) setautogain()
1999 if (sd->sensor == SENSOR_PO2030N) { setgain()
2013 switch (sd->sensor) { sethvflip()
2062 switch (sd->sensor) { setillum()
2081 if (sd->sensor == SENSOR_OV7660) { setfreq()
2102 switch (sd->sensor) { setfreq()
2212 sn9c1xx = sn_tb[sd->sensor]; sd_start()
2214 /* sensor clock already enabled in sd_init */ sd_start()
2229 switch (sd->sensor) { sd_start()
2249 switch (sd->sensor) { sd_start()
2269 reg01 &= ~S_PWR_DN; /* sensor power on */ sd_start()
2274 switch (sd->sensor) { sd_start()
2293 /* initialize the sensor */ sd_start()
2294 i2c_w_seq(gspca_dev, sensor_init[sd->sensor]); sd_start()
2301 if (sd->sensor == SENSOR_ADCM1700) { sd_start()
2310 if (sd->sensor == SENSOR_ADCM1700) { sd_start()
2318 switch (sd->sensor) { sd_start()
2338 switch (sd->sensor) { sd_start()
2373 switch (sd->sensor) { sd_start()
2436 /* more sensor initialization - param1 */ sd_start()
2443 switch (sd->sensor) { sd_start()
2456 switch (sd->sensor) { sd_start()
2509 switch (sd->sensor) { sd_stopN()
2555 reg01 |= S_PWR_DN; /* sensor power down */ sd_stopN()
2562 /* Don't disable sensor clock as that disables the button on the cam */ sd_stopN()
2598 if (sd->sensor == SENSOR_PO2030N) { do_autogain()
2606 switch (sd->sensor) { do_autogain()
2901 #define BS(bridge, sensor) \
2903 | (SENSOR_ ## sensor << 8)
2904 #define BSF(bridge, sensor, flags) \
2906 | (SENSOR_ ## sensor << 8) \
H A Detoms.c37 char sensor; member in struct:sd
227 /* sensor base for the pas106 */ i2c_w()
243 /* sensor base for the pas106 */ i2c_r()
367 /* set the sensor */ Et_init2()
419 if (sd->sensor == SENSOR_PAS106) { setcolors()
431 if (sd->sensor == SENSOR_PAS106) { getcolors()
511 /* set the sensor */ Et_init1()
557 sd->sensor = id->driver_info; sd_config()
558 if (sd->sensor == SENSOR_PAS106) { sd_config()
574 if (sd->sensor == SENSOR_PAS106) sd_init()
588 if (sd->sensor == SENSOR_PAS106) sd_start()
609 if (sd->sensor == SENSOR_PAS106) { Et_getgainG()
621 if (sd->sensor == SENSOR_PAS106) { Et_setgainG()
742 if (sd->sensor == SENSOR_PAS106) sd_init_controls()
H A Dov534_9.c33 #define OV534_REG_ADDRESS 0xf1 /* sensor address */
56 u8 sensor; member in struct:sd
1224 /* output a sensor sequence (reg - val) */ sccb_w_array()
1272 if (sd->sensor == SENSOR_OV562x) { setbrightness()
1418 /* initialize the sensor address */ sd_init()
1421 /* reset sensor */ sd_init()
1425 /* probe the sensor */ sd_init()
1434 sd->sensor = SENSOR_OV965x; sd_init()
1455 sd->sensor = SENSOR_OV971x; sd_init()
1484 sd->sensor = SENSOR_OV562x; sd_init()
1494 sd->sensor = SENSOR_OV361x; sd_init()
1501 pr_err("Unknown sensor %04x", sensor_id); sd_init()
1559 if (sd->sensor == SENSOR_OV971x) sd_start()
1561 if (sd->sensor == SENSOR_OV562x) sd_start()
1563 if (sd->sensor == SENSOR_OV361x) sd_start()
1618 if (((struct sd *)gspca_dev)->sensor == SENSOR_OV361x) { sd_stopN()
1756 if (sd->sensor == SENSOR_OV971x) sd_init_controls()
1758 if (sd->sensor == SENSOR_OV361x) sd_init_controls()
1762 if (sd->sensor == SENSOR_OV562x) { sd_init_controls()
H A Dzc3xx.c61 u8 sensor; /* Type of image sensor chip */ member in struct:sd
1454 {0xaa, 0x0f, 0x0018}, /* set sensor gain */
3597 /* Window inside sensor array */
3603 /* Init the sensor */
3675 /* sensor on */
3713 /* Window inside sensor array */
3719 /* Init the sensor */
3795 /* sensor on */
4402 {0xaa, 0x01, 0x0004}, /* select sensor core registers */
5705 matrix = matrix_tb[sd->sensor]; setmatrix()
5806 /* Matches the sensor's internal frame rate to the lighting frequency.
5900 zc3_freq = freq_tb[sd->sensor][i]; setlightfreq()
5904 switch (sd->sensor) { setlightfreq()
5999 static void send_unknown(struct gspca_dev *gspca_dev, int sensor) send_unknown() argument
6002 switch (sensor) { send_unknown()
6024 if (sensor == SENSOR_PAS202B) send_unknown()
6031 static void start_2wr_probe(struct gspca_dev *gspca_dev, int sensor) start_2wr_probe() argument
6034 reg_w(gspca_dev, sensor, 0x0010); start_2wr_probe()
6135 i2c_write(gspca_dev, 0x12, 0x80, 0x00); /* sensor reset */ vga_2wr_probe()
6265 PDEBUG(D_PROBE, "sensor PO2030 rev 0x%02x", retbyte); vga_3wr_probe()
6290 int sensor; zcxx_probeSensor() local
6292 switch (sd->sensor) { zcxx_probeSensor()
6299 sensor = sif_probe(gspca_dev); zcxx_probeSensor()
6300 if (sensor >= 0) zcxx_probeSensor()
6301 return sensor; zcxx_probeSensor()
6304 sensor = vga_2wr_probe(gspca_dev); zcxx_probeSensor()
6305 if (sensor >= 0) zcxx_probeSensor()
6306 return sensor; zcxx_probeSensor()
6322 sd->sensor = id->driver_info; sd_config()
6441 V4L2_CID_GAMMA, 1, 6, 1, gamma[sd->sensor]); sd_init_controls()
6442 if (sd->sensor == SENSOR_HV7131R) sd_init_controls()
6447 if (sd->sensor != SENSOR_OV7630C) sd_init_controls()
6454 sd->sensor == SENSOR_PO2030 ? 0 : 2); sd_init_controls()
6464 if (sd->sensor == SENSOR_HV7131R) sd_init_controls()
6474 int sensor; sd_init() local
6497 sensor = zcxx_probeSensor(gspca_dev); sd_init()
6498 if (sensor >= 0) sd_init()
6499 PDEBUG(D_PROBE, "probe sensor -> %04x", sensor); sd_init()
6501 sd->sensor = force_sensor; sd_init()
6502 PDEBUG(D_PROBE, "sensor forced to %d", force_sensor); sd_init()
6504 switch (sensor) { sd_init()
6506 switch (sd->sensor) { sd_init()
6514 pr_warn("Unknown sensor - set to TAS5130C\n"); sd_init()
6515 sd->sensor = SENSOR_TAS5130C; sd_init()
6519 /* check the sensor type */ sd_init()
6520 sensor = i2c_read(gspca_dev, 0x00); sd_init()
6521 PDEBUG(D_PROBE, "Sensor hv7131 type %d", sensor); sd_init()
6522 switch (sensor) { sd_init()
6526 sd->sensor = SENSOR_HV7131B; sd_init()
6531 sd->sensor = SENSOR_HV7131R; sd_init()
6537 sd->sensor = SENSOR_TAS5130C; sd_init()
6541 sd->sensor = SENSOR_CS2102; sd_init()
6545 sd->sensor = SENSOR_HDCS2020; sd_init()
6551 sd->sensor = SENSOR_PB0330; sd_init()
6555 sd->sensor = SENSOR_ICM105A; sd_init()
6559 sd->sensor = SENSOR_PAS202B; sd_init()
6563 sd->sensor = SENSOR_PAS106; sd_init()
6568 sd->sensor = SENSOR_TAS5130C; sd_init()
6572 sd->sensor = SENSOR_HV7131R; sd_init()
6579 sd->sensor = sd->bridge == BRIDGE_ZC301 sd_init()
6587 sd->sensor = SENSOR_CS2102K; sd_init()
6591 sd->sensor = SENSOR_ADCM2700; sd_init()
6595 sd->sensor = SENSOR_GC0305; sd_init()
6599 sd->sensor = SENSOR_GC0303; sd_init()
6603 sd->sensor = SENSOR_PO2030; sd_init()
6607 sd->sensor = SENSOR_OV7620; sd_init()
6611 sd->sensor = SENSOR_OV7630C; sd_init()
6615 sd->sensor = SENSOR_OV7620; /* same sensor (?) */ sd_init()
6618 pr_err("Unknown sensor %04x\n", sensor); sd_init()
6622 if (sensor < 0x20) { sd_init()
6623 if (sensor == -1 || sensor == 0x10 || sensor == 0x12) sd_init()
6629 switch (mode_tb[sd->sensor]) { sd_init()
6708 switch (sd->sensor) { sd_start()
6716 usb_exchange(gspca_dev, init_tb[sd->sensor][mode]); sd_start()
6718 switch (sd->sensor) { sd_start()
6729 if (sd->sensor == SENSOR_TAS5130C) sd_start()
6740 if (sd->sensor == SENSOR_HV7131R) sd_start()
6746 switch (sd->sensor) { sd_start()
6765 switch (sd->sensor) { sd_start()
6777 switch (sd->sensor) { sd_start()
6790 switch (sd->sensor) { sd_start()
6849 send_unknown(gspca_dev, sd->sensor); sd_stop0()
7021 "Force sensor. Only for experts!!!");
H A Dzc3xx-reg.h39 /* Stream and sensor specific */
86 /* Window inside the sensor array */
100 /* Max sensor array size */
/linux-4.1.27/drivers/staging/comedi/drivers/
H A Djr3_pci.h35 * Raw_data is the raw data received directly from the sensor. The
36 * sensor data stream is capable of representing 16 different
37 * channels. Channel 0 shows the excitation voltage at the sensor. It
40 * 7 contains the sensor's calibration data. The use of channels 8-15
131 * initialization. The sensor_change bit indicates that a sensor other
141 * coordinate transformation, or new sensor full scale is set by the
145 * sensor is plugged in and the system needs to recalculate the
154 * communication. The calibration data stored inside the sensor is
155 * transmitted to the JR3 DSP along with the sensor data. The
158 * received from the sensor. There are two reasons the CRC may not
161 * has been corrupted. A typical sensor transmits the entire contents
163 * this bit is not zero within a couple of seconds after the sensor
164 * has been plugged in, there is a problem with the sensor's
171 /* The watch_dog and watch_dog2 bits are sensor, not processor, watch
172 * dog bits. Watch_dog indicates that the sensor data line seems to be
173 * acting correctly, while watch_dog2 indicates that sensor data and
177 * the sensor data is not being received correctly.
264 /* JR3 force/torque sensor data definition. For more information see sensor
270 /* the sensor. */
280 /* Shunts contains the sensor shunt readings. Some JR3 sensors have
284 * this ability, the gain of each sensor channel is measured at
290 * sensor, and made new shunt measurements, those shunt
294 * the sensor cannot have its gain changed. For details on
295 * changing the sensor gain, and making shunts readings, please
296 * see the sensor manual. To make these values take effect the
321 * software allows the user to set the sensor full scale to an
368 /* Full_scale is the sensor full scales which are currently in use.
382 /* Offsets contains the sensor offsets. These values are subtracted from
383 * the sensor data to obtain the decoupled data. The offsets are set a
411 /* Filter0 is the decoupled, unfiltered data from the JR3 sensor.
417 * frequency of filter1 is 1/16 of the sample rate from the sensor.
418 * For a typical sensor with a sample rate of 8 kHz, the cutoff
441 * for minimums and maximums at full sensor bandwidth. This area is
448 * also lost when plugging in a new sensor.
455 * the raw sensor is saturated. Because of decoupling and offset
457 * sensor is saturated. These values, in conjunction with the error
477 * is 1, the rates are calculated at full sensor bandwidth. If
511 * calculated at the sensor data bandwidth. So this counter would
512 * increment at 8 kHz for a typical sensor. The rest of the counters
529 * counter is changing rapidly, it probably indicates a bad sensor
533 * without a hardware problem. If the sensor is well grounded, this
571 /* EEProm_ver_no contains the version number of the sensor EEProm.
590 * sensor. This model number does not directly correspond to the JR3
592 * different sensor configurations.
598 /* Cal_day & cal_year are the sensor calibration date. Day is the
607 * units used in the sensor full scale. The meanings of particular
610 * specifications during sensor manufacture and cannot be changed by
616 * Channels is a bit field showing which channels the current sensor
617 * is capable of sending. If bit 0 is active, this sensor can send
618 * channel 0, if bit 13 is active, this sensor can send channel 13,
619 * etc. This bit can be active, even if the sensor is not currently
633 /* Thickness specifies the overall thickness of the sensor from
635 * contained in units (pg. 16). The sensor calibration is relative
636 * to the center of the sensor. This value allows easy coordinate
637 * transformation from the center of the sensor to either flange.
/linux-4.1.27/drivers/macintosh/
H A Dwindfarm_pm121.c104 * sensor : hard-drive-temp
114 * sensor : hard-drive-temp
126 * sensor : optical-drive-temp
136 * sensor : optical-drive-temp
148 * sensor : gpu-temp
158 * sensor : gpu-temp
170 * sensor : north-bridge-temp
180 * sensor : north-bridge-temp
198 * sensor : cpu-temp
363 struct wf_sensor **sensor; /* use sensor_id instead ? */ member in struct:pm121_sys_param
373 .sensor = &sensor_gpu_temp,
379 .sensor = &sensor_gpu_temp,
388 .sensor = &sensor_hard_drive_temp,
394 .sensor = &sensor_hard_drive_temp,
403 .sensor = &sensor_north_bridge_temp,
409 .sensor = &sensor_north_bridge_temp,
418 .sensor = &sensor_optical_drive_temp,
424 .sensor = &sensor_optical_drive_temp,
594 struct wf_sensor *sensor; pm121_sys_fans_tick() local
601 sensor = *(param->sensor); pm121_sys_fans_tick()
611 rc = sensor->ops->get_value(sensor, &temp); pm121_sys_fans_tick()
613 printk(KERN_WARNING "windfarm: %s sensor error %d\n", pm121_sys_fans_tick()
614 sensor->name, rc); pm121_sys_fans_tick()
620 loop_names[loop_id], sensor->name, pm121_sys_fans_tick()
745 printk(KERN_WARNING "pm121: CPU temp sensor error %d\n", pm121_cpu_fans_tick()
753 printk(KERN_WARNING "pm121: CPU power sensor error %d\n", pm121_cpu_fans_tick()
865 * _and_ no other failure is present. Since a sensor error will pm121_tick()
907 static struct wf_sensor* pm121_register_sensor(struct wf_sensor *sensor, pm121_register_sensor() argument
911 if (*var == NULL && !strcmp(sensor->name, match)) { pm121_register_sensor()
912 if (wf_get_sensor(sensor) == 0) pm121_register_sensor()
913 *var = sensor; pm121_register_sensor()
960 pr_debug("pm121: new sensor %s detected\n", pm121_notify()
H A Dwindfarm_max6690_sensor.c2 * Windfarm PowerMac thermal control. MAX6690 sensor.
21 /* This currently only exports the external temperature sensor,
92 printk(KERN_ERR "windfarm: Couldn't create MAX6690 sensor: " wf_max6690_probe()
136 MODULE_DESCRIPTION("MAX6690 sensor objects for PowerMac thermal control");
H A Dwindfarm_lm87_sensor.c2 * Windfarm PowerMac thermal control. LM87 sensor
111 * care about the internal temperature sensor wf_lm87_probe()
129 pr_warning("wf_lm87: Unsupported sensor %s\n", wf_lm87_probe()
159 /* release sensor */ wf_lm87_remove()
199 MODULE_DESCRIPTION("LM87 sensor objects for PowerMacs thermal control");
H A Dwindfarm_smu_sensors.c212 * properties, while Darwin uses the sensor-id's. smu_ads_create()
218 if (!strcmp(c, "temp-sensor") && smu_ads_create()
227 } else if (!strcmp(c, "current-sensor") && smu_ads_create()
236 } else if (!strcmp(c, "voltage-sensor") && smu_ads_create()
245 } else if (!strcmp(c, "power-sensor") && smu_ads_create()
271 * SMU Power combo sensor object
355 printk(KERN_INFO "windfarm: CPU Power sensor using faked" smu_cpu_power_create()
451 /* Create CPU power sensor if possible */ smu_sensors_init()
463 /* dispose of power sensor */ smu_sensors_exit()
480 MODULE_DESCRIPTION("SMU sensor objects for PowerMacs thermal control");
H A Dwindfarm_lm75_sensor.c2 * Windfarm PowerMac thermal control. LM75 sensor
107 /* Usual rant about sensor names not beeing very consistent in wf_lm75_probe()
155 /* release sensor */ wf_lm75_remove()
180 MODULE_DESCRIPTION("LM75 sensor objects for PowerMacs thermal control");
H A Dwindfarm_smu_sat.c263 if (strcmp(type, "voltage-sensor") == 0) { wf_sat_probe()
267 } else if (strcmp(type, "current-sensor") == 0) { wf_sat_probe()
271 } else if (strcmp(type, "temp-sensor") == 0) { wf_sat_probe()
281 "%s sensor %d (no memory)\n", name, cpu); wf_sat_probe()
308 "sensor %d (no memory)\n", cpu); wf_sat_probe()
H A Dwindfarm_core.c14 * Add some information about sensor/control type and data format to
21 * I may have to create full features kobjects for every sensor/control
303 DBG("wf: Deleting sensor %s\n", sr->name); wf_sensor_release()
332 " duplicate sensor %s\n", sr->name); wf_register_sensor()
350 DBG("wf: Registered sensor %s\n", new_sr->name); wf_register_sensor()
365 DBG("wf: Unregistered sensor %s\n", sr->name); wf_unregister_sensor()
H A Dwindfarm_pm91.c21 * with one sensor and one fan. Slots area is a bit different as the Darwin
23 * involves the presence of an AGP sensor and an AGP fan (possibly on the
25 * access to those additional sensor/fans for now (though ultimately, it would
26 * be possible to add sensor objects for them) so I'm only implementing the
232 printk(KERN_WARNING "windfarm: CPU temp sensor error %d\n", wf_smu_cpu_fans_tick()
240 printk(KERN_WARNING "windfarm: CPU power sensor error %d\n", wf_smu_cpu_fans_tick()
341 printk(KERN_WARNING "windfarm: HD temp sensor error %d\n", wf_smu_drive_fans_tick()
422 printk(KERN_WARNING "windfarm: Slots power sensor error %d\n", wf_smu_slots_fans_tick()
525 * _and_ no other failure is present. Since a sensor error will wf_smu_tick()
619 DBG("wf: new sensor %s detected\n", wf_smu_notify()
661 * that the attribute callback won't race with the sensor beeing wf_smu_remove()
H A Dwindfarm_pm112.c185 /* We max all CPU fans in case of a sensor error. We also do the cpu_max_all_fans()
280 "sensor error %d\n", cpu, err); cpu_fans_tick()
295 "sensor error %d\n", cpu, err); cpu_fans_tick()
373 printk(KERN_WARNING "windfarm: U4 temp sensor error %d\n", backside_fan_tick()
423 printk(KERN_WARNING "windfarm: drive bay temp sensor " drive_bay_fan_tick()
470 printk(KERN_WARNING "windfarm: slots power sensor error %d\n", slots_fan_tick()
/linux-4.1.27/drivers/iio/temperature/
H A Dmlx90614.c2 * mlx90614.c - Support for Melexis MLX90614 contactless IR temperature sensor
11 * Driver for the Melexis MLX90614 I2C 16-bit IR thermopile sensor
42 #define MLX90614_CONFIG_DUAL_SHIFT 6 /* single (0) or dual (1) IR sensor */
139 /* Return 0 for single sensor, 1 for dual sensor, <0 on error. */ mlx90614_probe_num_ir_sensors()
178 dev_dbg(&client->dev, "Found single sensor"); mlx90614_probe()
183 dev_dbg(&client->dev, "Found dual sensor"); mlx90614_probe()
220 MODULE_DESCRIPTION("Melexis MLX90614 contactless IR temperature sensor driver");
H A Dtmp006.c2 * tmp006.c - Support for TI TMP006 IR thermopile sensor
10 * Driver for the Texas Instruments I2C 16-bit IR thermopile sensor
211 dev_err(&client->dev, "no TMP006 sensor\n"); tmp006_probe()
292 MODULE_DESCRIPTION("TI TMP006 IR thermopile sensor driver");
/linux-4.1.27/arch/x86/kernel/cpu/
H A Dpowerflags.c10 "ts", /* temperature sensor */
/linux-4.1.27/include/linux/
H A Df75375s.h2 * f75375s.h - platform data structure for f75375s sensor
H A Dhid-sensor-hub.h23 #include <linux/hid-sensor-ids.h>
115 * Used to open hid device for sensor hub.
123 * Used to clode hid device for sensor hub.
155 /* Hid sensor hub core interfaces */
225 /* hid-sensor-attributes */
227 /* Common hid sensor iio structure */
H A Datmel-mci.h13 * @wp_pin: GPIO pin wired to the write protect sensor
/linux-4.1.27/drivers/media/platform/s3c-camif/
H A Dcamif-core.c43 /* CAMIF / external camera sensor master clock */
198 struct s3c_camif_sensor_info *sensor = &camif->pdata.sensor; camif_register_sensor() local
205 camif->sensor.sd = NULL; camif_register_sensor()
207 if (sensor->i2c_board_info.addr == 0) camif_register_sensor()
210 adapter = i2c_get_adapter(sensor->i2c_bus_num); camif_register_sensor()
213 sensor->i2c_bus_num); camif_register_sensor()
218 &sensor->i2c_board_info, NULL); camif_register_sensor()
222 sensor->i2c_board_info.type); camif_register_sensor()
225 camif->sensor.sd = sd; camif_register_sensor()
227 v4l2_info(v4l2_dev, "registered sensor subdevice %s\n", sd->name); camif_register_sensor()
240 v4l2_info(sd, "Initial format from sensor: %dx%d, %#x\n", camif_register_sensor()
248 struct v4l2_subdev *sd = camif->sensor.sd; camif_unregister_sensor()
257 camif->sensor.sd = NULL; camif_unregister_sensor()
266 ret = media_entity_create_link(&camif->sensor.sd->entity, 0, camif_create_media_links()
462 camif->pdata.sensor.clock_frequency); s3c_camif_probe()
464 dev_info(dev, "sensor clock frequency: %lu\n", s3c_camif_probe()
468 * Must be done before a sensor subdev is registered as some s3c_camif_probe()
469 * settings are overrode with values from sensor subdev. s3c_camif_probe()
H A Dcamif-capture.c72 if (camif->sensor.sd == NULL || vp->out_fmt == NULL) s3c_camif_hw_init()
115 struct cam_sensor *sensor = &camif->sensor; sensor_set_power() local
118 if (!on == camif->sensor.power_count) sensor_set_power()
119 err = v4l2_subdev_call(sensor->sd, core, s_power, on); sensor_set_power()
121 sensor->power_count += on ? 1 : -1; sensor_set_power()
124 on, sensor->power_count, err); sensor_set_power()
131 struct cam_sensor *sensor = &camif->sensor; sensor_set_streaming() local
134 if (!on == camif->sensor.stream_count) sensor_set_streaming()
135 err = v4l2_subdev_call(sensor->sd, video, s_stream, on); sensor_set_streaming()
137 sensor->stream_count += on ? 1 : -1; sensor_set_streaming()
140 on, sensor->stream_count, err); sensor_set_streaming()
148 * turn off streaming at the data pipeline (sensor) if required.
670 struct v4l2_subdev *sensor = vp->camif->sensor.sd; s3c_camif_vidioc_enum_input() local
672 if (input->index || sensor == NULL) s3c_camif_vidioc_enum_input()
676 strlcpy(input->name, sensor->name, sizeof(input->name)); s3c_camif_vidioc_enum_input()
828 /* Only check pixel formats at the sensor and the camif subdev pads */ camif_pipeline_validate()
835 /* Retrieve format at the sensor subdev source pad */ camif_pipeline_validate()
842 ret = v4l2_subdev_call(camif->sensor.sd, pad, get_fmt, NULL, &src_fmt); camif_pipeline_validate()
859 struct media_entity *sensor = &camif->sensor.sd->entity; s3c_camif_streamon() local
873 ret = media_entity_pipeline_start(sensor, camif->m_pipeline); s3c_camif_streamon()
879 media_entity_pipeline_stop(sensor); s3c_camif_streamon()
903 media_entity_pipeline_stop(&camif->sensor.sd->entity); s3c_camif_streamoff()
/linux-4.1.27/drivers/net/ethernet/intel/igb/
H A Digb_hwmon.c50 igb_attr->sensor->location); igb_hwmon_show_location()
64 value = igb_attr->sensor->temp; igb_hwmon_show_temp()
78 unsigned int value = igb_attr->sensor->caution_thresh; igb_hwmon_show_cautionthresh()
92 unsigned int value = igb_attr->sensor->max_op_thresh; igb_hwmon_show_maxopthresh()
102 * @ offset: offset in the eeprom sensor data table
103 * @ type: type of sensor data to display
146 igb_attr->sensor = igb_add_hwmon_attr()
147 &adapter->hw.mac.thermal_sensor_data.sensor[offset]; igb_add_hwmon_attr()
202 if (adapter->hw.mac.thermal_sensor_data.sensor[i].location == 0) igb_sysfs_init()
/linux-4.1.27/drivers/net/ethernet/intel/ixgbe/
H A Dixgbe_sysfs.c49 ixgbe_attr->sensor->location); ixgbe_hwmon_show_location()
63 value = ixgbe_attr->sensor->temp; ixgbe_hwmon_show_temp()
77 unsigned int value = ixgbe_attr->sensor->caution_thresh; ixgbe_hwmon_show_cautionthresh()
91 unsigned int value = ixgbe_attr->sensor->max_op_thresh; ixgbe_hwmon_show_maxopthresh()
102 * @offset: offset in the eeprom sensor data table
103 * @type: type of sensor data to display
145 ixgbe_attr->sensor = ixgbe_add_hwmon_attr()
146 &adapter->hw.mac.thermal_sensor_data.sensor[offset]; ixgbe_add_hwmon_attr()
200 if (adapter->hw.mac.thermal_sensor_data.sensor[i].location == 0) ixgbe_sysfs_init()
/linux-4.1.27/drivers/staging/iio/addac/
H A Dadt7316.h2 * ADT7316 digital temperature sensor driver supporting ADT7316/7/8 ADT7516/7/9
H A Dadt7316-i2c.c3 * sensor, ADC and DAC
135 MODULE_DESCRIPTION("I2C bus driver for Analog Devices ADT7316/7/9 and ADT7516/7/8 digital temperature sensor, ADC and DAC");
H A Dadt7316-spi.c3 * sensor, ADC and DAC
143 MODULE_DESCRIPTION("SPI bus driver for Analog Devices ADT7316/7/8 and ADT7516/7/9 digital temperature sensor, ADC and DAC");
/linux-4.1.27/drivers/staging/iio/cdc/
H A Dad7746.h2 * AD7746 capacitive sensor driver supporting AD7745, AD7746 and AD7747
/linux-4.1.27/include/linux/input/
H A Dkxtj9.h31 * changed to account for sensor orientation within the host device.
38 * Each axis can be negated to account for sensor orientation within
/linux-4.1.27/drivers/media/usb/em28xx/
H A Dem28xx-camera.c179 em28xx_info("unknown Micron sensor detected: 0x%04x\n", em28xx_probe_sensor_micron()
185 em28xx_info("unsupported sensor detected: %s\n", name); em28xx_probe_sensor_micron()
187 em28xx_info("sensor %s detected\n", name); em28xx_probe_sensor_micron()
284 em28xx_info("unknown OmniVision sensor detected: 0x%04x\n", em28xx_probe_sensor_omnivision()
290 em28xx_info("unsupported sensor detected: %s\n", name); em28xx_probe_sensor_omnivision()
292 em28xx_info("sensor %s detected\n", name); em28xx_probe_sensor_omnivision()
316 em28xx_info("No sensor detected\n"); em28xx_detect_sensor()
410 * FIXME: sensor supports resolutions up to 1600x1200, but em28xx_init_camera()
412 * - switch sensor output resolution (including further em28xx_init_camera()
/linux-4.1.27/drivers/media/usb/pwc/
H A Dpwc-if.c195 /* The ToUCam Fun CMOS sensor causes the firmware to send 2 or 3 bogus pwc_frame_complete()
203 PWC_TRACE("Hyundai CMOS sensor bug. Dropping frame.\n"); pwc_frame_complete()
534 return "Hyundai CMOS sensor"; pwc_sensor_type_to_string()
536 return "Sony CCD sensor + TDA8787"; pwc_sensor_type_to_string()
538 return "Sony CCD sensor + Exas 98L59"; pwc_sensor_type_to_string()
540 return "Sony CCD sensor + ADI 9804"; pwc_sensor_type_to_string()
542 return "Sharp CCD sensor + TDA8787"; pwc_sensor_type_to_string()
544 return "Sharp CCD sensor + Exas 98L59"; pwc_sensor_type_to_string()
546 return "Sharp CCD sensor + ADI 9804"; pwc_sensor_type_to_string()
548 return "UPA 1021 sensor"; pwc_sensor_type_to_string()
550 return "VGA sensor"; pwc_sensor_type_to_string()
552 return "PAL MR sensor"; pwc_sensor_type_to_string()
554 return "unknown type of sensor"; pwc_sensor_type_to_string()
833 type_id = 740; /* CCD sensor */ usb_pwc_probe()
838 type_id = 740; /* CCD sensor */ usb_pwc_probe()
843 type_id = 740; /* CCD sensor */ usb_pwc_probe()
850 type_id = 740; /* CCD sensor */ usb_pwc_probe()
855 type_id = 740; /* CCD sensor */ usb_pwc_probe()
862 type_id = 740; /* CCD sensor */ usb_pwc_probe()
870 type_id = 740; /* CCD sensor */ usb_pwc_probe()
875 type_id = 740; /* CCD sensor */ usb_pwc_probe()
889 I suppose the difference is the sensor, but both cameras usb_pwc_probe()
963 type_id = 740; /* CCD sensor */ usb_pwc_probe()
968 type_id = 730; /* CMOS sensor */ usb_pwc_probe()
1039 /* Query sensor type */ usb_pwc_probe()
/linux-4.1.27/drivers/iio/light/
H A Dcm32181.c69 * Initialize CM32181 ambient light sensor register to default values.
104 * cm32181_read_als_it() - Get sensor integration time (ms)
131 * cm32181_write_als_it() - Write sensor integration time
135 * Convert integration time (ms) to sensor value.
171 * Convert sensor raw data to lux. It depends on integration
370 MODULE_DESCRIPTION("CM32181 ambient light sensor driver");
H A Dcm3232.c83 * Check and initialize CM3232 ambient light sensor.
126 * cm3232_read_als_it() - Get sensor integration time
155 * cm3232_write_als_it() - Write sensor integration time
160 * Convert integration time to sensor value.
196 * Convert sensor data to lux. It depends on integration
438 MODULE_DESCRIPTION("CM3232 ambient light sensor driver");
H A Dvcnl4000.c3 * proximity sensor
172 dev_info(&client->dev, "VCNL4000 Ambient light/proximity sensor, Prod %02x, Rev: %02x\n", vcnl4000_probe()
197 MODULE_DESCRIPTION("Vishay VCNL4000 proximity/ambient light sensor driver");
H A Dadjd_s311.c2 * adjd_s311.c - Support for ADJD-S311-CR999 digital color sensor
10 * driver for ADJD-S311-CR999 digital color sensor (10-bit channels for
282 dev_info(&client->dev, "ADJD-S311 color sensor registered\n"); adjd_s311_probe()
320 MODULE_DESCRIPTION("ADJD-S311 color sensor");
H A Dcm3323.c30 #define CM3323_CONF_SD_BIT BIT(0) /* sensor disable */
93 /* enable sensor and set auto force mode */ cm3323_init()
H A Dtsl4531.c2 * tsl4531.c - Support for TAOS TSL4531 ambient light sensor
184 dev_err(&client->dev, "no TSL4531 sensor\n"); tsl4531_probe()
H A Disl29125.c2 * isl29125.c - Support for Intersil ISL29125 RGB light sensor
10 * RGB light sensor with 16-bit channels for red, green, blue);
346 MODULE_DESCRIPTION("ISL29125 RGB light sensor driver");
/linux-4.1.27/drivers/macintosh/ams/
H A Dams-core.c31 /* There is only one motion sensor per machine */
203 /* Found I2C motion sensor */ ams_init()
210 /* Found PMU motion sensor */ ams_init()
/linux-4.1.27/drivers/pci/hotplug/
H A Drpaphp_pci.c44 dbg("%s: slot must be power up to get sensor-state\n", rpaphp_get_sensor_state()
48 * before get-sensor will succeed. rpaphp_get_sensor_state()
62 err("%s failed to get sensor state\n", __func__); rpaphp_get_sensor_state()
/linux-4.1.27/drivers/hid/
H A Dhid-sensor-custom.c2 * hid-sensor-custom.c
25 #include <linux/hid-sensor-hub.h>
85 {0x200201, "event-sensor-state"},
86 {0x200202, "event-sensor-event"},
89 {0x200303, "property-sensor-status"},
91 {0x200305, "property-sensor-manufacturer"},
92 {0x200306, "property-sensor-model"},
93 {0x200307, "property-sensor-serial-number"},
94 {0x200308, "property-sensor-description"},
95 {0x200309, "property-sensor-connection-type"},
96 {0x20030A, "property-sensor-device-path"},
847 MODULE_DESCRIPTION("HID Sensor Custom and Generic sensor Driver");
H A DMakefile102 obj-$(CONFIG_HID_SENSOR_HUB) += hid-sensor-hub.o
103 obj-$(CONFIG_HID_SENSOR_CUSTOM_SENSOR) += hid-sensor-custom.o
/linux-4.1.27/drivers/media/i2c/m5mols/
H A Dm5mols_reg.h2 * Register map for M-5MOLS 8M Pixel camera sensor with ISP
49 * & all-round system of sensor. It deals with version/interrupt/setting mode &
50 * even sensor's status. Especially, the M-5MOLS sensor with ISP varies by
98 * between the sensor and the Application Processor/even the image effect.
108 /* Video bus between the sensor and a host processor */
H A Dm5mols.h2 * Header for M-5MOLS 8M Pixel camera sensor with ISP
148 * about manufacturer and the vendor of the sensor's packaging. The least
192 * @power: current sensor's power status
301 * | SYSTEM | SYSTEM(only after sensor arm-booting) |
/linux-4.1.27/drivers/iio/humidity/
H A Dsi7005.c2 * si7005.c - Support for Silabs Si7005 humidity and temperature sensor
188 MODULE_DESCRIPTION("Silabs Si7005 humidity and temperature sensor driver");
/linux-4.1.27/drivers/platform/x86/
H A Dintel_mid_thermal.c112 * @min: minimum value for the sensor
113 * @max: maximum value for the sensor
131 * The adc code vs sensor temp curve is split into five parts
170 * @temp: holds the current temperature for the sensor after reading
261 /* Enable all the sensor channels */ set_up_therm_channel()
399 * @index: index of the sensor
411 /* Set the base addr of the channel for this sensor */ initialize_sensor()
496 /* Register each sensor with the generic thermal framework*/ mid_thermal_probe()
/linux-4.1.27/include/linux/platform_data/
H A Dkeypad-pxa27x.h16 * _plus_ the number of rotary-encoder sensor inputs, this can be
/linux-4.1.27/arch/sh/boards/mach-highlander/
H A Dirq-r7785rp.c25 TH_ALERT, /* Temperature sensor */
/linux-4.1.27/arch/powerpc/kernel/
H A Drtas-proc.c113 #define SENSOR_PREFIX "ibm,sensor-"
122 struct individual_sensor sensor[MAX_SENSORS]; member in struct:rtas_sensors
416 int get_sensor_state = rtas_token("get-sensor-state"); ppc_rtas_sensors_show()
428 struct individual_sensor *p = &sensors.sensor[i]; ppc_rtas_sensors_show()
436 /* A sensor may have multiple instances */ ppc_rtas_sensors_show()
470 sensors.sensor[i].token = *utmp++; ppc_rtas_find_all_sensors()
471 sensors.sensor[i].quant = *utmp++; ppc_rtas_find_all_sensors()
510 * Builds a string out of what the sensor said
540 /* What kind of sensor do we have here? */ ppc_rtas_process_sensor()
646 seq_printf(m, "Unknown sensor (type %d), ignoring it\n", ppc_rtas_process_sensor()
/linux-4.1.27/include/linux/mfd/
H A Dcros_ec_commands.h144 * The default value a temperature sensor will return when it is present but
1188 * Dump command returns all motion sensor data including motion sense
1189 * module flags and individual sensor flags.
1194 * Info command returns data describing the details of a given sensor,
1208 * rate of a specific motion sensor in millihertz.
1214 * a specified motion sensor in +/-G's or +/- deg/s.
1243 /* List of motion sensor types. */
1249 /* List of motion sensor locations. */
1255 /* List of motion sensor chips. */
1319 /* Flags representing the motion sensor module. */
1322 /* Flags for each sensor in enum motionsensor_id. */
1325 /* Array of all sensor data. Each sensor is 3-axis. */
1472 /* Thermal configuration for one temperature sensor. Temps are in degrees K.
1481 /* Version 1 - get config for one sensor. */
1487 /* Version 1 - set config for one sensor.
1674 /* Temperature sensor commands */
1676 /* Read temperature sensor info */
2247 * register determines which sensor is affected by the THRESHOLD and COMMIT
2253 * which sensor(s) are responsible. Each reading of the ID register clears and
2254 * returns one sensor ID that has crossed one of its threshold (in either
2256 * have tripped". Setting or enabling the thresholds for a sensor will clear
2257 * the unread event count for that sensor.
2264 * bit 0 selects the threshold index for the chosen sensor (0/1)
2273 * Set the thresholds for sensor 2 to 50 C and 60 C:
2274 * write 2 to [0x05] -- select temp sensor 2
2281 * write 2 to [0x05] -- select temp sensor 2
/linux-4.1.27/drivers/media/platform/marvell-ccic/
H A Dmmp-driver.c150 * Provide power to the sensor. mmpcam_power_up()
177 * Shut down the sensor. mmpcam_power_down()
228 * or in the sensor driver dynamically. mmpcam_calc_dphy()
236 * that the sensor has driven the data mmpcam_calc_dphy()
406 dev_err(&pdev->dev, "Can't get sensor power gpio %d", mmpcam_probe()
414 dev_err(&pdev->dev, "Can't get sensor reset gpio %d", mmpcam_probe()
H A Dcafe-driver.c4 * sensor.
65 * "General purpose register" has a couple of GPIOs used for sensor
80 * with the sensor.
95 #define TWSIC0_MASKACK 0x00400000 /* Mask ack from sensor */
405 * Part one of the sensor dance: turn the global cafe_ctlr_power_up()
411 * Put the sensor into operational mode (assumes OLPC-style cafe_ctlr_power_up()
512 * stay that way until the sensor driver shows up. cafe_pci_probe()
518 * because the sensor could attach in this call chain, leading to cafe_pci_probe()
/linux-4.1.27/drivers/iio/imu/inv_mpu6050/
H A Dinv_mpu_ring.c49 /* disable the sensor output to FIFO */ inv_reset_fifo()
80 /* enable sensor output to FIFO */ inv_reset_fifo()
/linux-4.1.27/drivers/char/
H A Di8k.c317 static int i8k_get_temp_type(int sensor) i8k_get_temp_type() argument
321 regs.ebx = sensor & 0xff; i8k_get_temp_type()
328 static int _i8k_get_temp(int sensor) _i8k_get_temp() argument
332 .ebx = sensor & 0xff, _i8k_get_temp()
338 static int i8k_get_temp(int sensor) i8k_get_temp() argument
340 int temp = _i8k_get_temp(sensor); i8k_get_temp()
343 * Sometimes the temperature sensor returns 0x99, which is out of range. i8k_get_temp()
351 temp = _i8k_get_temp(sensor); i8k_get_temp()
/linux-4.1.27/arch/arm/mach-pxa/
H A Dstargate2.c123 /* Basic sensor board */
131 /* Basic sensor board */
164 /* The two voltages available to sensor boards */
551 { /* UCAM sensor board */
557 /* Through a nand gate - Also beware, on V2 sensor board the
564 /* Through a nand gate - Also beware, on V2 sensor board the
942 /* Through a nand gate - Also beware, on V2 sensor board the
949 /* Through a nand gate - Also beware, on V2 sensor board the
/linux-4.1.27/drivers/media/pci/solo6x10/
H A Dsolo6x10-gpio.c47 /* To set extended gpio - sensor */ solo_gpio_mode()
/linux-4.1.27/drivers/media/platform/
H A Dvia-camera.c42 "If set, the sensor will be instructed to flip the image "
61 struct v4l2_subdev *sensor; member in struct:via_camera
97 * that we can use to pass to the sensor. We always run the
98 * sensor in VGA resolution, though, and let the controller
124 v4l2_subdev_call(cam->sensor, optype, func, ##args)
205 * Power up the sensor and perform the reset dance.
247 * Configure the sensor. It's up to the caller to ensure
663 * need to power up the sensor. viacam_open()
867 * sensor to VGA.
963 * Let the sensor code look over and tweak the viacam_s_fmt_vid_cap()
1227 * Make sure the sensor's power state is correct viacam_resume()
1391 * Get the sensor powered up. viacam_probe()
1403 cam->sensor = v4l2_i2c_new_subdev_board(&cam->v4l2_dev, sensor_adapter, viacam_probe()
1405 if (cam->sensor == NULL) { viacam_probe()
1406 dev_err(&pdev->dev, "Unable to find the sensor!\n"); viacam_probe()
1436 /* Power the sensor down until somebody opens the device */ viacam_probe()
/linux-4.1.27/drivers/scsi/lpfc/
H A Dlpfc_logmsg.h29 #define LOG_TEMP 0x00000100 /* Temperature sensor events */
/linux-4.1.27/drivers/input/mouse/
H A Drpcmouse.c15 * hardware registers that track the sensor count for the X-Y movement and

Completed in 3622 milliseconds

123