Lines Matching +full:client +full:- +full:id

1 // SPDX-License-Identifier: GPL-2.0+
3 // em28xx-camera.c - driver for Empia EM25xx/27xx/28xx USB video capture devices
23 #include <media/v4l2-common.h>
52 i2c_master_send(&dev->i2c_client[dev->def_i2c_bus], in em28xx_initialize_mt9m111()
81 i2c_master_send(&dev->i2c_client[dev->def_i2c_bus], in em28xx_initialize_mt9m001()
96 u16 id; in em28xx_probe_sensor_micron() local
98 struct i2c_client *client = &dev->i2c_client[dev->def_i2c_bus]; in em28xx_probe_sensor_micron() local
100 dev->em28xx_sensor = EM28XX_NOSENSOR; in em28xx_probe_sensor_micron()
102 client->addr = micron_sensor_addrs[i]; in em28xx_probe_sensor_micron()
103 /* Read chip ID from register 0x00 */ in em28xx_probe_sensor_micron()
104 ret = i2c_smbus_read_word_data(client, 0x00); /* assumes LE */ in em28xx_probe_sensor_micron()
106 if (ret != -ENXIO) in em28xx_probe_sensor_micron()
107 dev_err(&dev->intf->dev, in em28xx_probe_sensor_micron()
109 client->addr << 1, ret); in em28xx_probe_sensor_micron()
112 id = swab16(ret); /* LE -> BE */ in em28xx_probe_sensor_micron()
113 /* Read chip ID from register 0xff */ in em28xx_probe_sensor_micron()
114 ret = i2c_smbus_read_word_data(client, 0xff); in em28xx_probe_sensor_micron()
116 dev_err(&dev->intf->dev, in em28xx_probe_sensor_micron()
118 client->addr << 1, ret); in em28xx_probe_sensor_micron()
121 /* Validate chip ID to be sure we have a Micron device */ in em28xx_probe_sensor_micron()
122 if (id != swab16(ret)) in em28xx_probe_sensor_micron()
124 /* Check chip ID */ in em28xx_probe_sensor_micron()
125 switch (id) { in em28xx_probe_sensor_micron()
137 dev->em28xx_sensor = EM28XX_MT9M111; in em28xx_probe_sensor_micron()
148 dev->em28xx_sensor = EM28XX_MT9V011; in em28xx_probe_sensor_micron()
152 dev->em28xx_sensor = EM28XX_MT9M001; in em28xx_probe_sensor_micron()
155 dev_info(&dev->intf->dev, in em28xx_probe_sensor_micron()
157 id); in em28xx_probe_sensor_micron()
161 if (dev->em28xx_sensor == EM28XX_NOSENSOR) in em28xx_probe_sensor_micron()
162 dev_info(&dev->intf->dev, in em28xx_probe_sensor_micron()
165 dev_info(&dev->intf->dev, in em28xx_probe_sensor_micron()
171 return -ENODEV; in em28xx_probe_sensor_micron()
182 u16 id; in em28xx_probe_sensor_omnivision() local
183 struct i2c_client *client = &dev->i2c_client[dev->def_i2c_bus]; in em28xx_probe_sensor_omnivision() local
185 dev->em28xx_sensor = EM28XX_NOSENSOR; in em28xx_probe_sensor_omnivision()
191 client->addr = omnivision_sensor_addrs[i]; in em28xx_probe_sensor_omnivision()
192 /* Read manufacturer ID from registers 0x1c-0x1d (BE) */ in em28xx_probe_sensor_omnivision()
194 ret = i2c_smbus_read_byte_data(client, reg); in em28xx_probe_sensor_omnivision()
196 if (ret != -ENXIO) in em28xx_probe_sensor_omnivision()
197 dev_err(&dev->intf->dev, in em28xx_probe_sensor_omnivision()
199 client->addr << 1, ret); in em28xx_probe_sensor_omnivision()
202 id = ret << 8; in em28xx_probe_sensor_omnivision()
204 ret = i2c_smbus_read_byte_data(client, reg); in em28xx_probe_sensor_omnivision()
206 dev_err(&dev->intf->dev, in em28xx_probe_sensor_omnivision()
208 client->addr << 1, ret); in em28xx_probe_sensor_omnivision()
211 id += ret; in em28xx_probe_sensor_omnivision()
212 /* Check manufacturer ID */ in em28xx_probe_sensor_omnivision()
213 if (id != 0x7fa2) in em28xx_probe_sensor_omnivision()
215 /* Read product ID from registers 0x0a-0x0b (BE) */ in em28xx_probe_sensor_omnivision()
217 ret = i2c_smbus_read_byte_data(client, reg); in em28xx_probe_sensor_omnivision()
219 dev_err(&dev->intf->dev, in em28xx_probe_sensor_omnivision()
221 client->addr << 1, ret); in em28xx_probe_sensor_omnivision()
224 id = ret << 8; in em28xx_probe_sensor_omnivision()
226 ret = i2c_smbus_read_byte_data(client, reg); in em28xx_probe_sensor_omnivision()
228 dev_err(&dev->intf->dev, in em28xx_probe_sensor_omnivision()
230 client->addr << 1, ret); in em28xx_probe_sensor_omnivision()
233 id += ret; in em28xx_probe_sensor_omnivision()
234 /* Check product ID */ in em28xx_probe_sensor_omnivision()
235 switch (id) { in em28xx_probe_sensor_omnivision()
238 dev->em28xx_sensor = EM28XX_OV2640; in em28xx_probe_sensor_omnivision()
268 dev_info(&dev->intf->dev, in em28xx_probe_sensor_omnivision()
270 id); in em28xx_probe_sensor_omnivision()
274 if (dev->em28xx_sensor == EM28XX_NOSENSOR) in em28xx_probe_sensor_omnivision()
275 dev_info(&dev->intf->dev, in em28xx_probe_sensor_omnivision()
278 dev_info(&dev->intf->dev, in em28xx_probe_sensor_omnivision()
284 return -ENODEV; in em28xx_probe_sensor_omnivision()
293 if (dev->em28xx_sensor == EM28XX_NOSENSOR && ret < 0) in em28xx_detect_sensor()
301 if (dev->em28xx_sensor == EM28XX_NOSENSOR && ret < 0) { in em28xx_detect_sensor()
302 dev_info(&dev->intf->dev, in em28xx_detect_sensor()
304 return -ENODEV; in em28xx_detect_sensor()
312 struct i2c_client *client = &dev->i2c_client[dev->def_i2c_bus]; in em28xx_init_camera() local
313 struct i2c_adapter *adap = &dev->i2c_adap[dev->def_i2c_bus]; in em28xx_init_camera()
314 struct em28xx_v4l2 *v4l2 = dev->v4l2; in em28xx_init_camera()
316 switch (dev->em28xx_sensor) { in em28xx_init_camera()
322 .addr = client->addr, in em28xx_init_camera()
326 v4l2->sensor_xres = 640; in em28xx_init_camera()
327 v4l2->sensor_yres = 480; in em28xx_init_camera()
330 * FIXME: mt9v011 uses I2S speed as xtal clk - at least with in em28xx_init_camera()
331 * the Silvercrest cam I have here for testing - for higher in em28xx_init_camera()
338 dev->board.xclk = EM28XX_XCLK_FREQUENCY_4_3MHZ; in em28xx_init_camera()
339 em28xx_write_reg(dev, EM28XX_R0F_XCLK, dev->board.xclk); in em28xx_init_camera()
340 v4l2->sensor_xtal = 4300000; in em28xx_init_camera()
341 pdata.xtal = v4l2->sensor_xtal; in em28xx_init_camera()
343 v4l2_i2c_new_subdev_board(&v4l2->v4l2_dev, adap, in em28xx_init_camera()
345 return -ENODEV; in em28xx_init_camera()
346 v4l2->vinmode = EM28XX_VINMODE_RGB8_GRBG; in em28xx_init_camera()
347 v4l2->vinctl = 0x00; in em28xx_init_camera()
352 v4l2->sensor_xres = 1280; in em28xx_init_camera()
353 v4l2->sensor_yres = 1024; in em28xx_init_camera()
357 v4l2->vinmode = EM28XX_VINMODE_RGB8_BGGR; in em28xx_init_camera()
358 v4l2->vinctl = 0x00; in em28xx_init_camera()
362 v4l2->sensor_xres = 640; in em28xx_init_camera()
363 v4l2->sensor_yres = 512; in em28xx_init_camera()
365 dev->board.xclk = EM28XX_XCLK_FREQUENCY_48MHZ; in em28xx_init_camera()
366 em28xx_write_reg(dev, EM28XX_R0F_XCLK, dev->board.xclk); in em28xx_init_camera()
369 v4l2->vinmode = EM28XX_VINMODE_YUV422_UYVY; in em28xx_init_camera()
370 v4l2->vinctl = 0x00; in em28xx_init_camera()
379 .addr = client->addr, in em28xx_init_camera()
388 * - switch sensor output resolution (including further in em28xx_init_camera()
390 * - adjust bridge xclk in em28xx_init_camera()
391 * - disable 16 bit (12 bit) output formats on high resolutions in em28xx_init_camera()
393 v4l2->sensor_xres = 640; in em28xx_init_camera()
394 v4l2->sensor_yres = 480; in em28xx_init_camera()
397 v4l2_i2c_new_subdev_board(&v4l2->v4l2_dev, adap, in em28xx_init_camera()
400 return -ENODEV; in em28xx_init_camera()
408 dev->board.xclk = EM28XX_XCLK_FREQUENCY_24MHZ; in em28xx_init_camera()
409 em28xx_write_reg(dev, EM28XX_R0F_XCLK, dev->board.xclk); in em28xx_init_camera()
410 v4l2->vinmode = EM28XX_VINMODE_YUV422_YUYV; in em28xx_init_camera()
411 v4l2->vinctl = 0x00; in em28xx_init_camera()
417 return -EINVAL; in em28xx_init_camera()